Project Audit
A thorough audit of every project I’ve worked on, analyzed through the lens of Build to Think — building functional prototypes teaches more than writing documents. Documents enable vagueness; working systems expose every unresolved decision.
Last regenerated 2026-04-12. All charts below read from live git log output at regeneration time.
“No design doc could have described this project, because the project didn’t exist until I started building it.”
This audit asks three questions:
- What shape does a year of building make? (the cardiogram)
- Where do the patterns repeat? (rebuilds, constraints, late-night peaks)
- What did building reveal that a spec could not? (the scorecard)
1. The year in one picture
Daily commits across every repo — last 53 weeks
Eleven months of nothing, then March 2026 ignites. The flat field on the left is the "Think" phase — reading, note-taking, no commits. The right cluster is six weeks of Build, where bookmarks, archetypes, and LabsCraft all shipped in parallel.
| Metric | Value |
|---|---|
| Total projects audited | 15+ (across 3 locations) |
| Shipped to production | 8 |
| Total lifetime commits | 850+ across all repos |
| Commits in last 53 weeks | 329 over 44 active days |
| Peak day | Mar 27, 2026 — 46 commits (bookmarks quality-audit day) |
| Peak week | W12 of 2026 — 132 commits |
| Busiest hours | Midnight (78), 11pm (74), noon (57) |
| Busiest days | Tuesday (151), Thursday (127), Friday/Wednesday (118) |
| Infrastructure cost | $0 (Vercel Hobby, GitHub Pages, Supabase Free, itch.io) |
2. Act I — Build Wide
Lifetime commits per project
The personal site and the bookmarks sprint dominate. Archetypes appears twice because it was rebuilt from scratch — v1 was vanilla-JS-on-mobile, v2 is the KWML deep-dive. StreakUp is a reference clone, not original work.
The Flagship: bookmarks (prompts.ummerr.com) — 233 commits, 43 days
An AI-powered dataset browser for generative AI prompts harvested from viral X/Twitter posts. Two-tier LLM classification (Haiku triage → Sonnet deep analysis), 20+ prompt categories, reference-image detection, multi-shot video prompt detection.
Stack: Next.js 16 · React 19 · TypeScript · Tailwind v4 · Supabase Postgres · Claude Haiku + Sonnet.
What shipped: searchable prompt library with 5+ filter dimensions and full-text PostgreSQL search; insights dashboard with donut charts, temporal analysis, model family rankings; “State of Prompting 2026” editorial; Chrome extension (Manifest V3); Image-to-Prompt tool (Claude Vision); quality audit with 8 heuristics; 216+ tests across 8 files.
What got killed: Prompt Studio (lived 1 commit), password-protected tools (added and removed same day), JSONB lateral joins (timed out on Vercel Hobby), audio/3D/inpainting categories (narrowed for quality).
Build-to-Think verdict: Started as “bookmark organizer,” became a dataset publication platform. The 10-second Vercel timeout was the best architect on the team — it forced parallelization, batch-size optimization, and query pruning that produced better code than a paid tier would have. A spec would have described a bookmark tool. Building revealed a research instrument.
The Personal Site: ummerr.github.io — 346 commits, 11.5 years
Portfolio site with 11 published essays, 10 case studies, film photography gallery, a split-pane markdown editor with localStorage auto-save, and an embedded WebAssembly game (kareemrpg).
Stack: Jekyll · GitHub Pages · Bulma + custom CSS + Tailwind v4 · Geist + Instrument Serif.
Commit patterns: Tuesday busiest (88), noon peak hour (37). Primarily daytime work — contrasts with the late-night sprints on newer projects.
Build-to-Think verdict: The 11-year heartbeat. Every other project in this audit ships through or alongside this site. The March 2026 burst (essays + typography redesign + kareemrpg embed) shows the pattern: build projects, then write about what you learned, not vice versa.
The Frontier: LabsCraft — inside the minecraft-mods directory
An LLM-powered Minecraft mod simulating an APM internship at “Google Labs” on an AI video platform called “Flow.” Josh Woodward, an NPC PM, has dialogue generated by Claude Sonnet with Gemini fallback.
Architecture: Minecraft mod (46 Java files, 5,391 LOC, Fabric 1.21.4) streams world state every tick via HTTP → agent server (13 TS files, 1,394 LOC) running Express on port 3001 → SQLite stores conversation history, top-5 extracted memories per player, quest state. Six trigger types (chat, interaction, idle-near-objective, quest-complete, danger, periodic proximity). Automatic memory extraction every 5 conversations.
Gameplay: Mine TPU ore, craft consoles (Nano Banana for images, Veo for video) at Flow Crafting Table, progress through 5 quest stages. Shipped jar at build/libs/labscraft-1.0.0.jar. 148 unit tests.
Build-to-Think verdict: The perceive → decide → reason → execute architecture emerged from iteration, not design. The hardcoded dialogue fallback exists because the system was built live, breaking and recovering.
The Nostalgia: MTL Memories — also in minecraft-mods
A Forge 1.20.1 mod celebrating Montreal / McGill 2004–2008. 14 custom food/collectible items (poutine, Montreal bagel, smoked meat, Gerts token, Arcade Fire vinyl), 5 quest storylines, NBT-based persistent quest data. Exploratory — no textures or world map yet, but quest framework and item system work.
Verdict: The act of listing what to include is the point. You don’t need a spec to remember Gerts Token.
The Game: kareemrpg — shipped on itch.io
A birthday gift for a friend named Kareem. Built in a 16-day sprint (May–Jun 2025) across 5 Godot learning projects, each one a rung on the ladder to the final game (66 scripts, 68 dialogic files, 29 scenes). Exported as WebAssembly, published at ummerr.itch.io/kareemrpg and embedded at ummerr.com/kareemrpg (52MB .wasm + 5.4MB .pck).
Verdict: Fastest build-to-learn cycle in the portfolio. No Godot experience to a shipped, published game. Each learning project existed solely to teach the next.
The Explainer: inference — shipped on GitHub Pages
One-day sprint (Apr 12, 2026) — 25 commits in 8 hours, all afternoon/evening. React 19 + TypeScript + Vite + Tailwind 4, deployed via GitHub Actions to ummerr.github.io/inference. The Fun Inference Calculator — an interactive explainer for generative AI compute costs across images, video, audio, and world models. Sliders let you feel how duration and resolution compound non-linearly; the glossary was rewritten mid-sprint from definitions to metaphors once it became clear that definitions don’t stick. A spec would have described a pricing table. Building revealed that the shape of the cost curve matters more than the exact numbers.
Smaller projects
- VidMetaPrompt (Python/Pydantic/spaCy) — TDD framework for turning creative video ideas into structured 7-component Veo-3 prompts. 15+ modules, pre-commit. Active, not yet shipped.
- cursorMint — Personal finance tracker. CSV import, SQLite, matplotlib. ~350 lines. No git.
- film (Astro 6) — Photography portfolio, albums India 2024 / Lisbon 2024. Template stage.
- StreakUp — Cloned reference (not my code) studied for Prisma schema, streak lifecycle, timezone handling.
- testExport / dopRatTest — artifacts / empty placeholders.
3. Act II — Think Hard
All commits by hour of day (local time)
Bimodal distribution. Midnight (78) and 11pm (74) dominate — the "late-night sprint" mode that built bookmarks and Archetypes. The noon spike (57) is ummerr.github.io — daytime edits on the personal site between meetings. Dead zone 2am–7am.
The day job is Product Management on Flow (AI image/video generation) at Google. The side projects mirror the work:
- bookmarks — prompt-pattern analysis for the generative AI space. Reading the room Flow is building for.
- VidMetaPrompt — video-generation prompt structuring for Veo-3. Same domain, different abstraction.
- LabsCraft — agent behavior design with LLM-powered NPCs. Same agent-architecture questions Flow raises.
- archetypes — Claude Code mobile app stress-test. Probing the tools the day job will depend on.
Building to think about the same problems from different angles.
Zero-dollar architecture
Every shipped project runs on free tiers: Vercel Hobby (bookmarks, Dopamine Rat), GitHub Pages (ummerr.github.io), Supabase Free (bookmarks, Dopamine Rat), itch.io (kareemrpg). The Vercel 10-second timeout shaped the bookmarks architecture more forcefully than any design doc could have. $0 infrastructure means zero friction to ship.
4. Act III — Rebuild Deep
Three projects show deliberate multi-version evolution. The rebuild isn’t a failure — it’s a new mental model. The bloated version teaches what to subtract. The broad version teaches what to deepen.
| Project | Versions | Commits | Pattern |
|---|---|---|---|
| Dopamine Rat | v1 → v2 → v3 (codexDopeRat / dopeRatGravity / gravityDopeRat) | 0 → 2 → 26 | Problem → complexity → focus |
| Archetypes | v1 (vanilla JS, mobile-only) → v2 (KWML deep-dive) | 17 → 16 | Breadth → depth |
| kareemrpg | 5 Godot learning projects in 16 days | tracked in godot/ dir |
Skill acquisition ladder |
Dopamine Rat: gamification → harm reduction
A habit tracker with an emotional pixel rat companion.
- v1 codexDopeRat (0 commits, never committed) — MVP. Context-based state, ~700 bloated activities, simple difficulty multipliers. “Lab Rat → Free Rat” gamification. Urge tracking with trigger tags.
- v2 dopeRatGravity (2 commits) — Feature explosion. Added “The Lab” AI-powered correlative analytics. Claude API + on-device WebLLM + Supabase cloud sync. 38 components. Ambitious but scattered.
- v3 gravityDopeRat (26 commits, shipped) — The focused rebuild. Cut AI dependencies. 38 → 19 components. Context+Reducer → Zustand. Blended scoring (60% today + 40% 3-day rolling). Urge surfing with 20-min timer and tiered partial credit. Parent mode. Harm reduction mechanics (edible over spliff, alcohol escalation at 3+ drinks). Offline-first with Supabase sync queue. 163 refined activities across 16 categories.
Verdict: The philosophy shifted from “grind for points” to “recovery over purity” — no spec could have prescribed that direction. You had to build the bloated version to know what to subtract.
Archetypes: breadth → depth
Built entirely on the Claude Code mobile app.
- v1
archetypes(17 commits) — An interactive visualization platform mapping cross-system archetype correspondences across 10 traditions (Jungian, Enneagram, MBTI, Tarot, Western Zodiac, Chinese Zodiac, Greek Mythology, Hindu Deities, Norse Mythology, Kabbalah). Three interfaces: force-directed D3.js Constellation Map (135+ nodes, 16 constellations), Compare View with similarity scoring, Tinder-style Swipe View. Zero build tools. Mobile-first throughout (user-scalable=no, apple-mobile-web-app-capable, safe-area insets, 18px min touch targets). - v2
archetypes-v2(16 commits) — The deep-dive. Pearson–Marr Jungian archetypes specifically, with animated breathing triangles, shadow voices, and atmospheric shifts. Scoped from 10 systems to 1 system explored properly.
Verdict: v1 asked “can I map everything on a phone?” v2 asked “what if I pick one thing and build it right?” Both are valid; only v1 teaches you which to write.
kareemrpg: skill acquisition ladder
Five Godot projects in 16 days, each existed to teach the next one:
- learningproj (May 24) — First GDScript. 25 lines.
- kareemrpg-beta (May 24) — Mobile RPG skeleton.
- dialogictut (May 25) — Dialogic addon + NPC basics.
- daytworpg (May 25) — 9 scripts, dialogue, audio, NPC/follower systems.
- dialogictutotrial (Jun 9) — Final game: 66 scripts, 68 dialogic files, 29 scenes. Shipped.
The learning trail is the project history.
5. Tech-stack evolution — the tool serves the build
Stack choices, project by project
No stack loyalty. Next.js when you need full-stack. Vanilla JS when you're on a phone. Python when you need validation. Java when Minecraft demands it. Brightness encodes recency.
6. The Build-to-Think Scorecard
| Project | Started with a spec? | What building revealed |
|---|---|---|
| bookmarks | No — “a Chrome extension for bookmarks” | Became a dataset publication platform. The 10s timeout forced better architecture than planning would have. 27% reference-image usage, 42% video shift — invisible from a spec. |
| Dopamine Rat | No — “a simple point tracker” | Three versions to discover recovery > purity. Had to build the AI-bloated version to know it wasn’t needed. |
| archetypes v1 | No — “can I build on mobile?” | Delivered 3 complete interfaces in one mobile session. Constraint produced focused architecture. |
| archetypes v2 | No — “what if I pick one system and go deep?” | Animated, atmospheric, psychologically specific — the opposite of v1’s breadth. |
| LabsCraft | No — “what if an NPC had memory?” | Evolved into a full agentic architecture (perceive → decide → reason → execute) with per-player conversation history. |
| kareemrpg | No — “learn Godot for a birthday” | 5 projects in 16 days. Each one existed to teach the next. |
| MTL Memories | No — “what do I remember?” | The act of listing items (poutine, Gerts token, Arcade Fire vinyl) was the point. |
| VidMetaPrompt | No — started with tests | Discovering shape through TDD instead of deployment. Different flavor, same principle. |
| ummerr.github.io | No — started 11 years ago | Still evolving. The March 2026 burst (essays + redesign + game embed) followed the building, not preceded it. |
Every project started with code, not a spec. Constraints taught. Writing followed building.
This audit was generated by parallel Claude Code agents reading each project’s live git history. All four charts above were rendered directly from git log output at regeneration time — no pre-computed data, no stale counts. To regenerate, run /audit from ~/CodeProj/.