A modern web application that generates a Spotify Wrapped-style year-in-review for your GitHub activity.
- 📊 Detailed Statistics: In-depth analysis of your 2025 commits, merges, repos, and activity.
- 🎭 Developer Persona: Discover if you are a "Night Owl 🦉", "Weekend Warrior ⚔️", or "Dawn Patrol 🚁" based on your coding habits.
- 🔒 Privacy First: Images are generated entirely client-side. No data is stored on the server.
- ⚡ Private Repo Support: Include your private contributions securely using a GitHub Personal Access Token.
- 🔄 Merge Analysis: Focus on merge stats instead of just stars received.
- 🎨 Modern Sharing: Vertical image format optimized for LinkedIn Stories and Posts.
- 📋 Easy Sharing: One-click copy-to-clipboard functionality with a preview modal.
- 🏆 Top Stats: Most active projects, favorite languages, and commit message analysis.
- Python 3.11: Core programming language.
- Flask 3.0: Lightweight WSGI web application framework.
- Redis: High-performance in-memory data store for caching analysis results.
- GitHub GraphQL API: For fetching precise contribution data (including private repos) efficiently.
- GitHub REST API: For fetching public repository metadata.
- Gunicorn: Production-grade WSGI HTTP server.
- HTML5 & CSS3: Modern, responsive design with CSS Grid and Flexbox.
- Vanilla JavaScript: Lightweight client-side logic for interactivity and API communication.
- Canvas API: For generating the shareable image directly in the browser.
- Docker & Docker Compose: Containerization for easy deployment (App + Redis).
- GitHub Actions: CI/CD pipeline for automated testing and building.
We have engineered Git-Wrap to handle massive GitHub profiles (like Linus Torvalds) and high traffic efficiently:
- 🚀 Smart Redis Caching: Analysis results are cached for 3 days (sliding window). If a user is queried again, the timer resets, keeping popular profiles instantly available.
- 🧠 Intelligent Freshness Check: The system automatically checks the user's latest activity event. If a new commit/event is detected since the last cache, the cache is invalidated and fresh data is fetched immediately.
- 🛡️ Robust API Handling: Built-in retry mechanisms and DNS failover (Google DNS) ensure stability even during temporary network glitches.
- 📦 Full Scale Analysis: Optimized to process 100% of repositories without timeouts, regardless of the profile size.
-
Clone the repository:
git clone https://github.com/4ni1ak/Git-Wrap.git cd Git-Wrap ```
-
Configure Environment Variables: Create a
.envfile from the example:cp .env.example .env
Optional: Add your
GITHUB_TOKENin.envto include private repository stats. -
Run with Docker Compose: This will start both the Flask application and the Redis service.
docker-compose up -d
-
Access the App: Open your browser and navigate to
http://localhost:3020.
-
Create a Virtual Environment:
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install Dependencies:
pip install -r requirements.txt
-
Run the Application:
python app.py
To include private repository contributions and avoid API rate limits, you need a GitHub Personal Access Token.
- Go to GitHub Settings > Tokens.
- Generate a new token (classic).
- Select scopes:
repo(for private repos) andread:user. - Add it to your
.envfile:GITHUB_TOKEN=ghp_...
We welcome contributions! Please see our CONTRIBUTING.md for details on how to submit a Pull Request.
This project is licensed under the MIT License.
Made with ❤️ using GitHub GraphQL API