This is a submission for Weekend Challenge: Passion Edition
What I Built
I ran it on my own repo before anyone else's, and it did not go easy on me. StreamSync — 116 commits — got filed as a "Rage Coder," 35% of my commit messages apparently reading like the transcript of a bad night. The AI wasn't being generous about it, either.
Commit Confessions takes a public GitHub repo and reads its commit history back to you like a confession — not a dashboard, not a wrapped-style stat card, an actual short piece of writing that cites your real commit messages, your real busiest hour, your real longest streak, and tells you what it thinks that says about you.
Paste in a repo, and it:
- Pulls up to 300 commits and works out when you actually code — hour by hour, weekends vs. weekdays, your longest streak, your longest disappearing act, and how often your commit messages sound like you were mid-crisis
- Assigns you a developer persona and a D&D-style alignment based on that behavior, not a random quiz
- Has Gemini write a genuinely specific narrative about it — one that has to cite real detail from your data or it doesn't count
- Narrates that out loud with a documentary-grade ElevenLabs voice over a low atmospheric loop
- Generates a shareable card with AI cover art that's actually read your README, plus a constellation pattern built from your real commit punchcard
- If you want proof, mints the whole thing as a permanent, free memo transaction on Solana Devnet — a receipt that this repo, this obsession, existed
It's built to be run on your own repos first. It's more fun, and slightly more brutal, than you'd expect.
Demo
Live: commit-confession.vercel.app
Commit Confessions
Your git history, read back to you like a confession.
Feed it a public GitHub repo. It pulls the commit history — timestamps, streaks, late-night patterns, message samples — and sends the data through Gemini to produce a short, honest narrative about the coding passion hiding in those commits. Optionally, ElevenLabs narrates it back like a movie trailer.
Built for DEV Weekend Challenge: Passion Edition (July 2026)
Live Demo
→ commit-confessions.vercel.app
How it works
GitHub REST API → pattern analysis → Gemini 2.0 Flash → narrative
↘ ElevenLabs (optional voiceover)
- GitHub API: fetches up to 300 commits (no auth needed for public repos, but adding a token raises the rate limit from 60 to 5,000 requests/hr)
-
api/analyze.js(Vercel serverless): computes stats — hourly distribution, late-night %, weekend %, streak/gap lengths, sample messages — then calls Gemini -
Gemini 2.0 Flash: one well-crafted prompt →
{ title, narrative,…
Good repos to try it on: your own (obviously), torvalds/linux if you want to see what 50,000+ commits of late-night density looks like, or antirez/redis for a solo project with genuinely vivid commit messages.
Code
Commit Confessions
Your git history, read back to you like a confession.
Feed it a public GitHub repo. It pulls the commit history — timestamps, streaks, late-night patterns, message samples — and sends the data through Gemini to produce a short, honest narrative about the coding passion hiding in those commits. Optionally, ElevenLabs narrates it back like a movie trailer.
Built for DEV Weekend Challenge: Passion Edition (July 2026)
Live Demo
→ commit-confessions.vercel.app
How it works
GitHub REST API → pattern analysis → Gemini 2.0 Flash → narrative
↘ ElevenLabs (optional voiceover)
- GitHub API: fetches up to 300 commits (no auth needed for public repos, but adding a token raises the rate limit from 60 to 5,000 requests/hr)
-
api/analyze.js(Vercel serverless): computes stats — hourly distribution, late-night %, weekend %, streak/gap lengths, sample messages — then calls Gemini -
Gemini 2.0 Flash: one well-crafted prompt →
{ title, narrative,…
How I Built It
The shape of it
React + Vite on the frontend, three serverless functions doing the actual work, GitHub's REST API as the only real data dependency. No database — there's nothing to persist, every confession is generated fresh.
Reading a repo like a diary
The stats engine pulls up to 300 commits and turns raw timestamps and messages into something with a shape: an hourly distribution, a full week × hour punchcard, late-night and weekend percentages, longest streak, longest gap, and a "rage score" — a regex pass over every commit message hunting for fix, revert, wtf, stupid, please, and their friends. Whichever persona (Night Owl, Rage Coder, Weekend Warrior, and four others) scores highest on the resulting weighted formula wins, and the same numbers feed a D&D-style alignment — Chaotic Evil, for the record, requires late nights over 25%, weekends over 20%, and a rage score over 15%. You know who you are.
The part I actually care about is what happens next: that data, plus the first 1,500 characters of the repo's README and a sample of real commit messages, gets handed to Gemini with a prompt that's less "write something nice" and more "write something true." It has to cite at least three specific details — an exact commit message, the exact busiest hour, the exact streak length — and it's explicitly told to avoid every hackathon-blurb cliché ("shows dedication," "journey of growth"). The output comes back as structured JSON — title, narrative, verdict, and an image prompt — with a three-model fallback chain (gemini-2.5-flash → gemini-2.0-flash → gemini-2.0-flash-lite) so a quota limit on one model doesn't take the whole thing down.
The README-awareness is what I'm most pleased with: because Gemini actually reads what the project is for, the generated cover-art prompt describes something specific to it — glowing cursors on a shared document for a collaborative editor, not generic circuit-board stock art.
Giving it a voice
The narrative gets narrated back through ElevenLabs' eleven_flash_v2_5 model with a deep documentary-narrator voice, an atmospheric urban loop fading in underneath at low volume and pausing itself when the narration ends. On mobile, the audio and the share card get bundled together as actual File objects through the Web Share API, so a confession can go straight to WhatsApp or LinkedIn with both attached — not just a link.
The part where I deleted a dependency
The most interesting engineering decision here wasn't a feature — it was a removal. I wanted an on-chain "proof of passion": mint a small, free, permanent record of your stats on Solana Devnet. The standard way to do that is @solana/web3.js, and @solana/web3.js does not want to run inside a Vercel serverless function — its WebSocket bindings and circular dependencies crashed the bundler with a 500 error four different ways before I stopped trying to fix the import and just took the SDK out entirely.
What's left is 279 lines that only use what Node already has. Ed25519 signing through the native crypto module, with a hand-wrapped PKCS#8 DER header around the raw key. A 50-line Base58 encoder I wrote because I didn't want to pull in a package for it. The Solana transaction format — header, account keys, blockhash, instructions, compact-u16 length prefixes — serialized byte by byte, by hand. Everything talks to Devnet through plain fetch calls to the JSON-RPC endpoint. Zero dependencies, instant cold starts, a transaction confirmed in under three seconds.
The user never sees any of this. They click one button and get back a Solscan link to a memo transaction that just says, permanently: this repo, these stats, this moment, happened.
Making it look like it means it
Dark, editorial, a little moody — Fraunces serif for anything the app is "saying" to you, JetBrains Mono for anything that's raw data, amber for the late-night hours everywhere they show up: the commit clock's ticks, the verdict text, the glow behind the persona. The commit clock itself is a D3 radial chart, one tick per hour, length proportional to commit count, animating in over about a second the first time you see your result. The share card layers persona, stats, verdict, AI cover art, and a constellation pattern generated from your actual punchcard data — real commit hours turned into stars, connected if they're close enough together. Four theme variants, if the default doesn't match your vibe.
Prize Categories
Best Use of Google AI — Gemini 2.5 Flash is the narrative engine, the persona/alignment writer, and the image-prompt generator, all off one README-aware, structured-JSON call with a three-model fallback for quota safety.
Best Use of ElevenLabs — eleven_flash_v2_5 turns the narrative into a genuinely cinematic narration, layered with ambient audio and bundled straight into native share sheets alongside the visual card.
Best Use of Solana — A real Devnet memo transaction, built and signed without @solana/web3.js after it broke the serverless bundler — native crypto, hand-written Base58, manual transaction serialization, confirmed in under three seconds, with zero wallet friction for the end user.
Built solo, over a weekend that — appropriately enough — involved several of the exact behaviors this tool now measures.
If you run it on your own repo, I want to know what it calls you. Drop your persona and your worst commit message in the comments — I'll go first: Rage Coder, 35%, no regrets.


Top comments (0)