Blonk 🎯#
A place to find blips on the radar of your web, with a focus on vibes.
Blonk is a community-driven content discovery platform built on ATProto that enables organic topic communities to form around "vibes" - interest-based feeds where users submit "blips" (content) to get "grooves" (community engagement).
🌟 Core Concepts#
The Blonk Ecosystem#
🎯 Radar - The frontpage that surfaces trending content across all vibes
🌊 Vibes - Topic-based communities created by community action (#vibe-your_topic)
📡 Blips - Content submissions to vibes that appear on the radar
🎵 Grooves - Community engagement: looks_good or shit_rips
🏷️ Tags - Universal labels that connect content across vibes
How It Works#
- Vibe Creation: Communities emerge when
#vibe-topic_namereaches critical mass - Content Submission: Users submit blips to vibes with tags for categorization
- Community Engagement: Others groove on blips, driving popularity
- Radar Discovery: Trending tagged content surfaces on the frontpage
- Organic Growth: Popular content attracts more users to related vibes
Community Seeding#
- 🔥 Hot Posts: AI monitors the Bluesky firehose for trending content (>5 replies)
- Auto-Population: Trending external content auto-populates the
bsky_hotvibe - Community Bootstrap: Seeds engagement to kickstart organic community growth
🏗️ Architecture#
ATProto-Native#
Blonk is built as a first-class ATProto application with custom record types:
com.blonk.vibe- Community topic feedscom.blonk.blip- Content submissionscom.blonk.groove- Community engagement on specific blipscom.blonk.tag- Universal content labelscom.blonk.blipTag- Content categorization associations
Technology Stack#
- Backend: Elixir/Phoenix LiveView
- Database: PostgreSQL with ATProto record sync
- Real-time: WebSocket firehose integration with Bluesky
- Authentication: ATProto app passwords
- Deployment: Docker-ready
🚀 Getting Started#
Prerequisites#
- Elixir 1.18+
- PostgreSQL 14+
- Bluesky account with app password
Installation#
# Clone the repository
git clone https://github.com/your-org/elixir_blonk.git
cd elixir_blonk
# Install dependencies
mix deps.get
# Set up environment
cp .env.example .env
# Edit .env with your Bluesky credentials
# Set up database
mix ecto.setup
# Start the server
source .env && mix phx.server
Environment Configuration#
# .env
export ATP_SERVICE=https://bsky.social
export ATP_IDENTIFIER=your-handle.bsky.social
export ATP_PASSWORD=your-app-password
🎮 Usage#
Creating Vibes#
Post #vibe-topic_name to create new community vibes:
Check out this cool #vibe-art project! #design #creative
Once enough community members use #vibe-art, it becomes an official vibe.
Submitting Blips#
Submit content to vibes with relevant tags:
Title: "Amazing New Design Framework"
Body: "This changes everything for designers..."
Vibe: design_vibe
Tags: #design #tools #creative
Community Engagement#
Groove on blips to provide community feedback:
- 👍 looks_good - Positive endorsement of the blip
- shit_rips - Critical feedback on the blip
Each groove is linked to a specific blip and drives content visibility on the radar.
Discovery#
- Radar: Trending content across all vibes
- Vibe Pages: Topic-specific content feeds
- Tag Pages: Cross-vibe content by topic
- Hot Posts: AI-curated trending external content
🏷️ Tag System#
Universal Tags#
Tags are community-owned labels that enable cross-vibe discovery:
- One Tag Per Name: Only one
#blockchaintag exists globally - Community Driven: Anyone can use any tag
- Usage Tracking: Popular tags surface trending content
- Rich Metadata: Tags support descriptions and attribution
Tag Lifecycle#
- First Use: Creates universal tag record in ATProto
- Association: Links to blips via BlipTag junction records
- Community Growth: Usage count drives popularity
- Discovery: Popular tags surface on radar
🤖 AI Integration#
Hot Post Detection#
The HotPostSweeper monitors Bluesky's firehose for trending content:
- Sampling: 1 in 10 posts with links
- Engagement Check: Looks for >5 replies after time delay
- Auto-Population: Creates blips in
bsky_hotvibe - Community Seeding: Bootstraps engagement for organic growth
🎯 Community Philosophy#
Vibe-Driven Discovery#
Blonk prioritizes community vibes over algorithmic feeds:
- Communities form organically around shared interests
- Content quality emerges through peer grooves
- Cross-vibe discovery happens through universal tags
- Trending content reflects genuine community engagement
Decentralized Social#
Built on ATProto for true decentralization:
- Data Portability: Your content, your control
- Cross-Platform: Records work across ATProto apps
- Community Ownership: Vibes and tags are community resources
- Open Protocol: Extensible and interoperable
🛠️ Development#
Project Structure#
lib/
├── elixir_blonk/ # Core business logic
│ ├── vibes/ # Community topic management
│ ├── blips/ # Content submission system
│ ├── grooves/ # Community engagement
│ ├── tags/ # Universal tag system
│ ├── blip_tags/ # Tag associations
│ ├── hot_posts/ # AI content curation
│ ├── atproto/ # ATProto client & sync
│ └── firehose/ # Real-time data ingestion
├── elixir_blonk_web/ # Phoenix web interface
└── priv/repo/migrations/ # Database schema
Key Services#
- SessionManager: ATProto authentication & session management
- Firehose.Consumer: Real-time Bluesky data ingestion
- HotPostSweeper: AI-driven content curation
- ATProto.Client: Custom record type operations
Testing#
# Run tests
mix test
# Run with coverage
mix test --cover
📈 Roadmap#
Phase 1: Community Bootstrap ✅#
- Basic vibe/blip/groove system
- ATProto integration
- Hot post AI curation
- Universal tag system
Phase 2: Enhanced Discovery#
- Advanced radar algorithms
- User following/recommendations
- Cross-vibe trending
- Mobile app
Phase 3: Community Tools#
- Vibe moderation tools
- Community governance
- Creator monetization
- External integrations
🤝 Contributing#
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
Development Setup#
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open Pull Request
📄 License#
This project is licensed under the MIT License - see LICENSE for details.
🙏 Acknowledgments#
- ATProto Team - For the decentralized social protocol
- Bluesky - For the firehose API and ecosystem
- Phoenix/Elixir - For the robust web framework
- Community - For making vibes happen
Ready to find your vibe? 🌊
Start exploring at blonk.app or run your own instance!