A comprehensive audience analytics platform for Bluesky creators and professionals. Built on the AT Protocol, Blurcle analyzes your engagement metrics, interaction patterns, and social network to help you understand and grow your Bluesky presence.
- Sign in with Bluesky: Use your Bluesky credentials to unlock enhanced features
- Secure Sessions: Encrypted session tokens stored in HTTP-only cookies
- Quick Access: "My Analytics" button for instant access to your own stats
- Privacy Protected: Credentials sent directly to Bluesky, never stored by Blurcle
- Total Metrics: Track your total likes, reposts, replies, and quotes
- Averages: See your average engagement per post
- Engagement Rate: Understand your overall interaction rate
- Top Interactions: Discover your most mentioned connections
- Interactive Circle: Beautiful D3.js visualization of your network
- Force-Directed Graph: Drag and explore your connection network
- Network Size: Track followers, following, and mutual relationships
- Reach Estimation: Get an estimate of your potential audience size
- Hourly Activity: Visualize which hours of the day you're most active
- Daily Patterns: See your posting frequency across the week
- Top Posts: Identify your best-performing content
- Editorial-inspired design with a distinctive aesthetic
- Smooth animations and micro-interactions
- Fully responsive mobile experience
- Dark theme optimized for readability
- Node.js 18+
- npm or pnpm
# Clone the repository
git clone <your-repo-url>
cd blurcle
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
# Generate a secure session secret (required for auth)
# On Unix/Mac:
openssl rand -base64 32
# Add this to your .env file:
# NUXT_SESSION_PASSWORD=<your-generated-secret>
# Start development server
npm run devThe app will be available at http://localhost:3000
# Build the application
npm run build
# Preview production build
npm run previewBluesky Circle uses the official @atproto/api package to interact with Bluesky's decentralized AT Protocol:
- Profile Fetching: Retrieves public profile information
- Feed Analysis: Analyzes up to 100 recent posts
- Engagement Calculation: Computes engagement metrics from post data
- Network Analysis: Examines mentions and interactions
- Pattern Recognition: Identifies posting patterns by time and day
- Public Data Only: Only accesses publicly available information
- No Authentication Required: Doesn't need your Bluesky credentials
- Local Caching: Results cached for 30 minutes to minimize API calls
- No Data Storage: Analytics are temporary and not permanently stored
The app uses Nuxt's built-in storage system to cache analytics:
- Cache duration: 30 minutes
- Storage location:
./.data/cache - Automatic expiration
- Reduces API load
blurcle/
βββ app.vue # Main application component
βββ nuxt.config.ts # Nuxt configuration
βββ package.json # Dependencies
βββ tsconfig.json # TypeScript configuration
β
βββ assets/
β βββ css/
β βββ main.css # Global styles with editorial design
β
βββ components/
β βββ ProfileHeader.vue # Profile information display
β βββ EngagementMetrics.vue # Engagement statistics
β βββ TopInteractions.vue # Top connections list
β βββ PostingPatterns.vue # Activity patterns visualization
β βββ AudienceInsights.vue # Reach and network insights
β
βββ composables/
β βββ useBlueskyAnalytics.ts # Analytics state management
β
βββ server/
β βββ api/
β βββ analytics.get.ts # AT Protocol integration endpoint
β
βββ types/
βββ analytics.ts # TypeScript type definitions
Blurcle features a distinctive editorial aesthetic inspired by premium publications:
- Typography: Newsreader serif for elegance, JetBrains Mono for code
- Color Palette: Deep navy blues with gold accents
- Layout: Asymmetric, magazine-style composition
- Effects: Atmospheric backgrounds, smooth animations, interactive D3 visualizations
- Motion: Smooth animations with staggered reveals
This design deliberately avoids generic "AI slop" aesthetics in favor of a memorable, refined visual identity.
- Public profile information (avatar, bio, follower counts)
- Public posts and their engagement metrics
- Public interaction patterns (mentions in posts)
- Private/protected accounts
- Direct messages
- Private lists or blocks
- Login credentials
- Any non-public data
- All data is fetched in real-time from Bluesky's public API
- Results are cached temporarily (30 minutes) for performance
- No permanent database storage
- No user tracking or analytics collection
- Framework: Nuxt 4 - The Intuitive Vue Framework
- Authentication: H3 Sessions - Secure encrypted session management
- AT Protocol: @atproto/api - Official Bluesky API
- TypeScript: Full type safety throughout the application
- Storage: Nitro's built-in filesystem caching
- Styling: Vanilla CSS with CSS custom properties
Total interactions (likes + reposts + replies + quotes) divided by the number of posts analyzed. Higher rates indicate more engaging content.
A heuristic calculation based on:
- Follower count
- Engagement rate
- A multiplier to account for reposts and algorithmic discovery
Formula: followers Γ (engagement_rate / 100) Γ 2.5
Users who are most frequently mentioned in your posts, ranked by frequency. Helps identify your key collaborators and conversation partners.
- Analysis Depth: Currently analyzes up to 100 most recent posts
- Mutual Followers: Not yet implemented (requires fetching all follows/followers)
- Historical Trends: No time-series tracking across sessions
- Rate Limiting: Subject to Bluesky's API rate limits
Future enhancements being considered:
- Export analytics as PDF/image reports
- Compare multiple profiles side-by-side
- Historical trend tracking with data persistence
- Advanced network graph visualization with D3.js
- Content analysis (hashtag trends, media types)
- Scheduled reporting and email notifications
- API for programmatic access
Contributions are welcome! This is a personal project, but I'm open to:
- Bug reports and fixes
- Feature suggestions
- Performance improvements
- Documentation updates
Please ensure any PRs maintain:
- TypeScript type safety
- Accessibility standards (WCAG compliance)
- The existing design aesthetic
- Privacy-first principles
MIT License - feel free to use this project for personal or commercial purposes.
- Built with Nuxt
- Powered by AT Protocol
- Inspired by analytics tools like Skircle
- Typography: Newsreader by Production Type
For questions, suggestions, or issues:
- Open an issue on GitHub
- Find me on Bluesky: [your-handle]
Note: This is an independent project and is not officially affiliated with Bluesky or the AT Protocol team.