Generate your personalized Mastodon year-end wrapped report. Like Spotify Wrapped, but for the decentralized social network.
- Social Impact Score: Calculate your influence with dynamic ranking from Top 1% to 50%
- Posting Analytics: View activity trends, content distribution, and posting rhythm throughout the year
- Persona Classification: Discover your posting personality - whether you're a Broadcaster, Curator, or Balancer
- Chronotype Analysis: Find out your activity pattern - Night Owl, Early Bird, Slacker, or Regular
- Activity Calendar: Interactive heatmap showing your posting patterns across the entire year
- Year Selection: Switch between different years to compare your activity over time
- Smart Detection: Automatically detects available years based on your account registration date
- Timezone Modes: View statistics in local time or UTC for accurate cross-timezone analysis
- No Login Required: Simply enter your Mastodon handle to get started
- Public Data Only: We only access publicly available posts
- Local Processing: Your data never leaves your browser
- Zero Tracking: No analytics or data collection whatsoever
- English & Chinese: Full support for both languages
- Auto-detection: Automatically detects your browser language
- PNG Export: Download your wrapped report as a high-quality image
- CORS Proxy Fallback: Multiple proxy support ensuring reliable image export
- Node.js 18+
- npm or yarn
# Clone the repository
git clone https://github.com/Eyozy/mastodon-wrapped.git
cd mastodon-wrapped
# Install dependencies
npm install
# Start the development server
npm run devThen open http://localhost:5173 in your browser.
mastodon-wrapped/
├── public/
│ └── og.jpg # Static assets
├── src/
│ ├── components/ # React components
│ │ ├── LandingPage.jsx # Entry page with input form
│ │ ├── StatsDisplay.jsx # Statistics dashboard (12 cards + 3 charts)
│ │ ├── StatsReport.jsx # Individual report cards
│ │ ├── ActivityHeatmap.jsx # Activity heatmap
│ │ ├── ErrorBoundary.jsx # Error boundary
│ │ └── ui/ # Reusable UI components
│ │ ├── icons.jsx # Icon components
│ │ ├── loading-modal.jsx
│ │ ├── loading-spinner.jsx
│ │ └── progress.jsx
│ ├── services/ # API services
│ │ └── mastodonApi.js # Mastodon API (timeout, retry, SSRF protection)
│ ├── utils/ # Utility functions
│ │ ├── dataAnalyzer.js # Statistics calculation (XSS protection)
│ │ ├── translations.js # i18n strings (en/zh)
│ │ └── imageDownloader.js # PNG export (CORS proxy fallback)
│ ├── lib/ # Core utilities and constants
│ │ └── utils.js # App state, timezone modes, constants
│ ├── App.jsx # Main app component
│ └── main.jsx # Entry point
├── test/ # Unit tests
│ └── analyzeStatuses.test.js # Data analyzer tests
├── index.html # HTML template
└── README.md
Formula:
Score = Reblogs × 2 + Favorites + Posts × 0.1 + Longest Streak × 5
Ranking thresholds:
- 10,000 and above → Top 1%
- 5,000 and above → Top 5%
- 1,000 and above → Top 15%
- 500 and above → Top 30%
- 100 and above → Top 50%
- Below 100 → Growing
Automatically classified based on your posting behavior:
- The Broadcaster: More than 60% original content
- The Curator: More than 60% boosts
- The Balancer: A mix of both
Identified based on your posting hours:
- Night Owl: More than 15% posts between midnight and 5am
- Early Bird: More than 30% posts between 5am and 10am
- Slacker: More than 60% posts during work hours (10am to 6pm)
- The Regular: Balanced posting schedule
The application uses Mastodon's public API:
- Account Lookup:
/api/v1/accounts/lookup?acct={handle} - Fetch Statuses:
/api/v1/accounts/{id}/statuses
Rate limiting includes a 50ms delay between pagination requests with automatic retry when receiving HTTP 429.
- Push your code to GitHub
- Go to Vercel and sign in with GitHub
- Click Add New Project and import your repository
- Vercel auto-detects Vite. Verify these settings:
- Framework Preset:
Vite - Build Command:
npm run build - Output Directory:
dist
- Framework Preset:
- Click Deploy and wait for the build to complete
- Your site will be available at
https://your-project.vercel.app
- Go to Netlify and sign in with GitHub
- Click Add new site → Import an existing project
- Select GitHub as your provider
- Choose the
mastodon-wrappedrepository - Configure build settings:
- Build Command:
npm run build - Publish Directory:
dist
- Build Command:
- Deploy and get your site address
Contributions are welcome! Please see CONTRIBUTING.md for development guidelines.
This project is licensed under the MIT License.