A beautiful, modern web application to create LinkedIn-ready year-in-review images showcasing your GitHub contributions and achievements.
- Comprehensive Statistics - Track commits, PRs, stars, languages, and more
- Beautiful Design - Modern, responsive UI with dark mode support
- Fully Responsive - Works perfectly on desktop, tablet, and mobile
- Fast & Optimized - Smart caching and rate limit management
- Customizable Metrics - Choose which statistics to display
- High-Quality Export - LinkedIn-optimized images (1200×480px)
- Privacy-First - All processing happens client-side, tokens stored locally
- Node.js 18+ and npm (or yarn/pnpm)
- Clone the repository:
git clone <repository-url>
cd github_year_in_review- Install dependencies:
npm install- (Optional) Set up environment variables:
cp .env.local.example .env.local
# Edit .env.local and add your GITHUB_TOKEN- Run the development server:
npm run dev- Open http://localhost:3000 in your browser
- Enter your GitHub username in the form
- (Optional) Add your GitHub Personal Access Token for higher rate limits
- Click "Generate Year in Review"
- Customize which metrics to display using the selector
- Preview your year-in-review card
- Click "Download LinkedIn-Ready Image" to save
- Dimensions: 1200×480px (Social media optimized)
- Format: PNG
- Resolution: High resolution (2x scale for crisp images)
- Ready to Share: Perfect for LinkedIn, Twitter, and other social platforms
- Framework: Next.js 14 (App Router)
- UI: React 18 with TypeScript
- Styling: Tailwind CSS
- Image Generation: html2canvas
- API: GitHub REST API & GraphQL API
- State Management: React Hooks
- Total Contributions
- Total Commits
- Pull Requests
- Stars Received
- Current Streak
- Top Languages
- Average Commits per Day
- Contribution Heatmap
- Total Repositories
- Repos Created This Year
- Total Forks
- Files Changed
- Most Active Repository
- Lines Added/Deleted
- Net Lines of Code
- Average Files per Commit
GitHub's API has rate limits:
- Without token: 60 requests/hour (very limited)
- With token: 5,000 requests/hour (much better!)
- Go to GitHub Settings → Developer settings → Personal access tokens → Tokens (classic)
- Click "Generate new token (classic)"
- Give it a name (e.g., "Year in Review App")
- No scopes/permissions needed - just create the token
- Copy the token
- Add it to the form or set it in
.env.local:GITHUB_TOKEN=your_token_here
- Restart the development server if using
.env.local
Note: Tokens entered in the form are saved locally in your browser and never sent to any server except GitHub's API.
github_year_in_review/
├── app/ # Next.js app directory
│ ├── api/ # API routes
│ ├── page.tsx # Main page
│ └── layout.tsx # Root layout
├── components/ # React components
│ ├── ui/ # Reusable UI components
│ └── ... # Feature components
├── lib/ # Utility libraries
│ ├── github/ # GitHub API client & utilities
│ ├── hooks/ # Custom React hooks
│ └── utils/ # Helper functions
├── types/ # TypeScript type definitions
└── public/ # Static assets
- Modular API client with proper error handling
- Smart caching system to reduce API calls
- Separated concerns (client, calculator, cache)
- Custom hooks for state management
- Modern, responsive design
- Smooth animations and transitions
- Better loading states
- Improved error messages
- Dark mode support
- Enhanced TypeScript types
- Input validation
- Better error handling
- Reusable UI components
- Clean code structure
- Request caching
- Optimized API calls
- Rate limit management
- Efficient rendering
npm run dev- Start development servernpm run build- Build for productionnpm run start- Start production servernpm run lint- Run ESLint
GITHUB_TOKEN(optional) - GitHub Personal Access Token for higher rate limits
Contributions are welcome! Please feel free to submit a Pull Request.
This project is open source and available under the MIT License.
- Built with Next.js
- Styled with Tailwind CSS
- Powered by the GitHub API
Note: Some statistics are estimated based on available API data. The app processes a limited number of repositories to respect rate limits and ensure fast performance.
