-
-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Ferran Buireu edited this page Jun 19, 2026
·
4 revisions
Visualize, customize, and export your GitHub contribution calendar with custom palettes, shapes, and backgrounds. No token required.
ContribKit turns any public GitHub profile into a fully customizable contribution calendar you can pin, embed, or carry on your home screen. It runs as a web app and public API on Cloudflare Workers, and as a native iOS & Android app with home-screen widgets, both sharing a single set of design tokens.
- Reads GitHub's public contributions page for any username, with no API token, OAuth, or private data
- Parses it into a
date/level/countmodel and builds a 53×7 calendar grid - Renders a customizable calendar as SVG (web/API), PNG, or Markdown (app)
- Offers 11 color palettes, 5 cell shapes, and configurable backgrounds
- Exposes a live SVG endpoint you can drop straight into a README
- Ships a mobile app with daily-refreshed home-screen widgets
| Page | Description |
|---|---|
| Getting Started | Render your first calendar, embed it, install the app |
| How It Works | Request lifecycle, data pipeline, rendering |
| API Reference | Endpoints, query params, response formats |
| Architecture | DDD-ish layers, value objects, typed failures |
| Project Structure | Monorepo layout: web, app, shared tokens |
| Web Application | Astro on Cloudflare Workers: dev, deploy, env |
| Mobile App | Flutter app, widgets, in-app purchases |
| Fetching Contributions | The GitHub HTML scraping repository |
| HTML Parsing | Regex extraction of cells and tooltips |
| Calendar Grid | Building the deterministic 53×7 grid |
| SVG Rendering | Geometry, shapes, and the string renderer |
| Deterministic Randomness | The Mulberry32 PRNG used for placeholder grids |
| Git Hooks | lefthook, commitlint, auto-scope, asset sync |
| CI/CD | Path-filtered workflows, environments, releases |
| Troubleshooting | Common issues and fixes |
- 11 palettes: GitHub, Catppuccin, Nord, Dracula, Gruvbox, Sunset, Tokyo Night, One Dark, Rosé Pine, Solarized, Monokai
- 5 cell shapes: rounded, square, circle, dot, hex
- Backgrounds: transparent, any hex color, or a CSS color name
- Year selector: any year back to 2005 (GitHub's launch)
- Web app + API: Astro + TypeScript on Cloudflare Workers
- iOS & Android: one Flutter codebase, with platform-respecting home-screen widgets
- README embed: a one-line Markdown snippet that always shows your latest calendar
- Token-free by design: reads GitHub's public contributions page; no API key, OAuth, or PAT anywhere in the stack
-
One architecture, two platforms: the same DDD-ish layering (
domain→application→infrastructure/ui) in TypeScript and Dart, with pure domains, validated value objects at every boundary, and typedFailureunions (nothing throws across layers) - Edge rendering: SVG generated as a pure string inside a Cloudflare Worker (no DOM, no canvas), so output is deterministic and cacheable
-
Single source of truth: palettes/shapes/usernames defined once in
shared/, consumed by both apps and auto-synced into the Flutter bundle - Fully automated delivery: per-component CI with path filters, per-PR preview Workers, semantic-release versioning, and automatic Google Play shipping (signed AAB + Play release notes generated from the changelog)
- Hardened pipelines: SHA-pinned actions, least-privilege permissions, zizmor workflow scanning, dependency auto-merge
See Architecture, CI/CD, and Git Hooks for the details.
With options:
See Getting Started for the full walkthrough.
- Website: contribkit.app
- Google Play: com.fbuireu.contribkit (App Store soon)
- Source: github.com/fbuireu/ContribKit
MIT. Made by Ferran Buireu. ContribKit is not affiliated with GitHub, Inc.