Your GitHub profile, reimagined as a developer boarding pass.
A personalized card for your GitHub profile README — developer class, stats, streak, and activity, automatically generated from your GitHub data.
Drop this into your GitHub profile README:
Replace YOUR_USERNAME. Done.
The hosted instance uses a shared GitHub token (5k req/hour). If you hit limits or want guaranteed uptime, self-host.
- Auto-detected class — your top languages decide whether you're a Frontend Mage, Backend Knight, DevOps Ranger, and so on
- RPG-style stats — CODE, COLLAB, SHIP, STACK, IMPACT scaled to 1–99
- Level & rarity — XP-based level (1–99) and rarity tier (COMMON → LEGENDARY)
- Commit streak — pulled from your contribution calendar
- Randomized airline brand — deterministic per user (GITHUB AIRWAYS, OCTO AIR, HOTFIX AIRWAYS, …)
- Dark / light themes — and a responsive
<picture>snippet that follows GitHub's mode - SVG or PNG — embed however you like
| Parameter | Values | Default | Description |
|---|---|---|---|
username |
GitHub username | — | Required |
theme |
dark, light |
dark |
Card color theme |
format |
svg, png |
svg |
Output format |
scale |
0.5–3 |
1.35 |
Output size multiplier (viewBox preserved) |
class |
any developer class | auto | Force a class (see below) |
<!-- Dark (default) -->

<!-- Light -->
<picture>
<source media="(prefers-color-scheme: dark)"
srcset="https://boardingpass.jstnlt.my.id/api/card?username=JastinXyz&theme=dark">
<img src="https://boardingpass.jstnlt.my.id/api/card?username=JastinXyz&theme=light"
alt="github-boardingpass">
</picture>Your class is detected from your top languages and contribution patterns.
| Class | Code | Detected when |
|---|---|---|
| Frontend Mage | FM |
JS / TS / CSS / HTML dominant |
| Backend Knight | BK |
Go / Java / Rust / C# dominant |
| DevOps Ranger | DR |
Shell / HCL / Dockerfile / Nix heavy |
| Fullstack Paladin | FP |
Frontend + backend both significant |
| Data Sorcerer | DS |
Python / R / Jupyter dominant |
| Mobile Assassin | MA |
Kotlin / Swift / Dart dominant |
| Open Source Bard | OB |
Contributed to 10+ repos |
The title under your name evolves as you level up.
| Class | Lv 1–32 | Lv 33–65 | Lv 66–99 |
|---|---|---|---|
| Frontend Mage | Pixel Apprentice | UI Conjurer | Interface Archmage |
| Backend Knight | Code Squire | API Guardian | System Overlord |
| DevOps Ranger | Script Novice | Pipeline Hunter | Cloud Warden |
| Fullstack Paladin | Code Initiate | Stack Warrior | Omni Developer |
| Data Sorcerer | Data Acolyte | Model Weaver | Algorithm Oracle |
| Mobile Assassin | App Trainee | Touch Ninja | Platform Shadow |
| Open Source Bard | Contributor Novice | Community Singer | Repo Legend |
Stats scale to 1–99 using a sqrt curve, so mid-tier devs get meaningful numbers while 99 stays aspirational.
| Stat | Measures | Caps at 99 around |
|---|---|---|
CODE |
Total commits | 3,000 |
COLLAB |
Code reviews | 300 |
SHIP |
Pull requests | 1,000 |
STACK |
Repos contributed to | 20 |
IMPACT |
Stars received | 2,000 |
Level = min(99, floor(sqrt(XP / 10))), where
XP = commits·2 + PRs·5 + issues·3 + stars·4 + reviews·4 + contributedTo·10 + followers.
| Rarity | Level range |
|---|---|
| COMMON | 1–19 |
| UNCOMMON | 20–39 |
| RARE | 40–59 |
| EPIC | 60–79 |
| LEGENDARY | 80–99 |
| Endpoint | Params | Returns |
|---|---|---|
GET /api/card |
username, format, theme, class |
SVG or PNG image |
GET /api/persona |
username |
Persona JSON |
GET /health |
— | { status: "ok" } |
Responses are cached in-memory (TTL 10 min by default). Same user + params = cache hit.
Self-hosting gives you a dedicated GitHub token — no shared rate limits.
git clone https://github.com/JastinXyz/github-boardingpass
cd github-boardingpass
pnpm install
cp .env.example .env
# fill in GITHUB_TOKEN
pnpm build
pnpm startGenerate a token (repo + read:user scopes):
https://github.com/settings/tokens/new?scopes=repo,read:user&description=github-boardingpass
| Variable | Default | Description |
|---|---|---|
GITHUB_TOKEN |
— | Required PAT |
PORT |
3000 |
Server port |
CACHE_TTL_MS |
600000 |
Cache TTL in ms (10 min) |
CACHE_MAX_ENTRIES |
500 |
Max cached entries per layer |
Once running, swap boardingpass.jstnlt.my.id for your own URL.
pnpm dev # hot reload (tsx watch)
pnpm build # tsup build
pnpm start # run built server
pnpm typecheck # tsc --noEmitQuick visual test:
curl 'http://localhost:3000/api/card?username=JastinXyz' > out.svg
open out.svgSee CLAUDE.md for architecture details.
Contributions welcome. Open an issue or PR.
MIT