An interactive real-time visualization of social media conversations as floating 3D bubbles
Social Bubble transforms live social media data from Bluesky into a mesmerizing visualization where conversations become colorful, interactive 3D bubbles. Watch as trending topics float and pulse with activity, with each bubble containing individual posts sized by their popularity and engagement.
β¨ View Live Demo - Experience the visualization in action!
- Frontend: Deployed on Vercel
- Backend: Deployed on Railway
- Database: PostgreSQL on Railway
- Status: π’ Live and updating every 15 minutes
- π΄ Real-Time Data: Live updates from Bluesky every 15 minutes
- π«§ 3D Bubble Physics: Realistic bubble effects with radial gradients and glossy highlights
- π¨ Dynamic Sizing: Bubbles scale based on engagement and post count
- π·οΈ Topic Clustering: Posts automatically grouped by hashtags into parent bubbles
- π€ Profile Pictures: User avatars displayed in individual post bubbles
- π Advanced Filtering: Filter by hashtags, search by author, and more
- π Live Statistics: Real-time metrics for posts, authors, and engagement
βοΈ Resizable Sidebar: Drag to adjust the filter panel width- π±οΈ Interactive: Drag bubbles, hover for details, click to open posts
- π± Responsive Design: Beautiful on all screen sizes
- React - UI framework
- D3.js - Data visualization and force simulation
- Vite - Fast build tool and dev server
- Socket.io Client - Real-time WebSocket connection
- CSS3 - Custom animations and styling
- Node.js & Express - REST API server
- Socket.io - WebSocket server for real-time updates
- PostgreSQL - Persistent data storage
- Bluesky AT Protocol - Social media data source
- Node-cron - Scheduled data fetching
- Vercel - Frontend hosting
- Railway - Backend hosting + PostgreSQL database
- GitHub Actions - CI/CD pipeline
- Posts appear as bubbles within topic circles
- Size reflects engagement (likes + reposts + replies)
- Color-coded by hashtag category
- Smooth animations and transitions
- No overlapping bubbles with automatic scaling
- Trending Topics: Click hashtags to filter posts
- Author Search: Find posts by specific users
- Dynamic Updates: Filters apply in real-time
- Active Filters Badge: See how many filters are active
- Resizable Panel: Drag the edge to customize width
- Radial gradients for depth perception
- Glossy highlight overlays for realism
- Drop shadows for separation
- Enhanced glow on hover
- Smooth transitions and animations
- Node.js 18+ and npm
- PostgreSQL database (or Railway account)
- Bluesky account with app password
-
Clone the repository
git clone https://github.com/King0508/social-bubble.git cd social-bubble -
Install dependencies
npm run install:all
-
Set up environment variables
Create
backend/.env:PORT=3001 NODE_ENV=development # Database (Railway or local PostgreSQL) DATABASE_URL=postgresql://user:password@host:port/database # Bluesky API BLUESKY_IDENTIFIER=your-handle.bsky.social BLUESKY_PASSWORD=your-app-password # CORS FRONTEND_URL=http://localhost:5173
-
Initialize the database
cd backend node jobs/fetchPosts.js -
Start development servers
Terminal 1 (Backend):
cd backend npm run devTerminal 2 (Frontend):
cd frontend npm run dev -
Open your browser
http://localhost:5173
- Create a new project on Railway
- Add PostgreSQL database
- Deploy from GitHub repository
- Set root directory to
backend - Add environment variables:
DATABASE_URL=${{Postgres.DATABASE_URL}} BLUESKY_IDENTIFIER=your-handle.bsky.social BLUESKY_PASSWORD=your-app-password PORT=3001 NODE_ENV=production - Generate domain and copy the URL
- Import project on Vercel
- Set root directory to
frontend - Add environment variable:
VITE_BACKEND_URL=https://your-railway-backend.up.railway.app - Deploy
βββββββββββββββββββ
β Bluesky API β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ ββββββββββββββββ
β Node.js API βββββββΊβ PostgreSQL β
β (Railway) β β (Railway) β
ββββββββββ¬βββββββββ ββββββββββββββββ
β
β WebSocket
βΌ
βββββββββββββββββββ
β React + D3.js β
β (Vercel) β
βββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
β Users β
βββββββββββββββββββ
The visualization uses a carefully selected color palette for maximum visual appeal:
- Purple (#667eea) - Technology & Innovation
- Pink (#f093fb, #fa709a) - Entertainment & Culture
- Blue (#4facfe, #30cfd0) - News & Information
- Green (#43e97b) - Environment & Nature
- Yellow (#fee140, #feca57) - Lifestyle & Fun
- Red (#ff6b6b) - Breaking News & Urgent
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Bluesky - For providing free API access to social data
- D3.js Community - For amazing visualization tools
- Interstellar - For visual inspiration
Built with β€οΈ using React, D3.js, and real-time data
β Star this repo if you found it interesting!
