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:

  1. What shape does a year of building make? (the cardiogram)
  2. Where do the patterns repeat? (rebuilds, constraints, late-night peaks)
  3. 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

AprMayJunJulAugSepOctNovDecJanFebMarAprMWF2025-04-06: 0 commits2025-04-07: 0 commits2025-04-08: 0 commits2025-04-09: 0 commits2025-04-10: 0 commits2025-04-11: 0 commits2025-04-12: 0 commits2025-04-13: 0 commits2025-04-14: 0 commits2025-04-15: 0 commits2025-04-16: 0 commits2025-04-17: 0 commits2025-04-18: 0 commits2025-04-19: 0 commits2025-04-20: 0 commits2025-04-21: 0 commits2025-04-22: 0 commits2025-04-23: 0 commits2025-04-24: 0 commits2025-04-25: 0 commits2025-04-26: 0 commits2025-04-27: 0 commits2025-04-28: 0 commits2025-04-29: 0 commits2025-04-30: 0 commits2025-05-01: 0 commits2025-05-02: 0 commits2025-05-03: 0 commits2025-05-04: 0 commits2025-05-05: 0 commits2025-05-06: 0 commits2025-05-07: 0 commits2025-05-08: 0 commits2025-05-09: 0 commits2025-05-10: 0 commits2025-05-11: 0 commits2025-05-12: 0 commits2025-05-13: 0 commits2025-05-14: 0 commits2025-05-15: 0 commits2025-05-16: 0 commits2025-05-17: 0 commits2025-05-18: 0 commits2025-05-19: 0 commits2025-05-20: 0 commits2025-05-21: 0 commits2025-05-22: 0 commits2025-05-23: 0 commits2025-05-24: 0 commits2025-05-25: 0 commits2025-05-26: 0 commits2025-05-27: 0 commits2025-05-28: 0 commits2025-05-29: 0 commits2025-05-30: 1 commits2025-05-31: 1 commits2025-06-01: 0 commits2025-06-02: 0 commits2025-06-03: 0 commits2025-06-04: 0 commits2025-06-05: 0 commits2025-06-06: 0 commits2025-06-07: 0 commits2025-06-08: 0 commits2025-06-09: 0 commits2025-06-10: 0 commits2025-06-11: 0 commits2025-06-12: 0 commits2025-06-13: 0 commits2025-06-14: 0 commits2025-06-15: 0 commits2025-06-16: 0 commits2025-06-17: 0 commits2025-06-18: 0 commits2025-06-19: 0 commits2025-06-20: 0 commits2025-06-21: 0 commits2025-06-22: 0 commits2025-06-23: 0 commits2025-06-24: 0 commits2025-06-25: 1 commits2025-06-26: 0 commits2025-06-27: 0 commits2025-06-28: 0 commits2025-06-29: 0 commits2025-06-30: 0 commits2025-07-01: 0 commits2025-07-02: 0 commits2025-07-03: 0 commits2025-07-04: 0 commits2025-07-05: 0 commits2025-07-06: 0 commits2025-07-07: 0 commits2025-07-08: 0 commits2025-07-09: 0 commits2025-07-10: 0 commits2025-07-11: 0 commits2025-07-12: 0 commits2025-07-13: 0 commits2025-07-14: 0 commits2025-07-15: 0 commits2025-07-16: 0 commits2025-07-17: 0 commits2025-07-18: 0 commits2025-07-19: 0 commits2025-07-20: 0 commits2025-07-21: 0 commits2025-07-22: 0 commits2025-07-23: 0 commits2025-07-24: 0 commits2025-07-25: 0 commits2025-07-26: 0 commits2025-07-27: 0 commits2025-07-28: 0 commits2025-07-29: 0 commits2025-07-30: 0 commits2025-07-31: 0 commits2025-08-01: 0 commits2025-08-02: 0 commits2025-08-03: 0 commits2025-08-04: 0 commits2025-08-05: 0 commits2025-08-06: 0 commits2025-08-07: 0 commits2025-08-08: 0 commits2025-08-09: 1 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 3 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 2 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 1 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 4 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 1 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 1 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 3 commits2026-02-16: 1 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 2 commits2026-03-01: 2 commits2026-03-02: 1 commits2026-03-03: 2 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 6 commits2026-03-08: 11 commits2026-03-09: 27 commits2026-03-10: 11 commits2026-03-11: 0 commits2026-03-12: 15 commits2026-03-13: 19 commits2026-03-14: 18 commits2026-03-15: 2 commits2026-03-16: 0 commits2026-03-17: 3 commits2026-03-18: 2 commits2026-03-19: 0 commits2026-03-20: 3 commits2026-03-21: 6 commits2026-03-22: 0 commits2026-03-23: 5 commits2026-03-24: 2 commits2026-03-25: 14 commits2026-03-26: 55 commits2026-03-27: 32 commits2026-03-28: 22 commits2026-03-29: 12 commits2026-03-30: 9 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 3 commits2026-04-04: 5 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 2 commits2026-04-10: 0 commits2026-04-11: 13 commitslessmore
0 46 329 commits across 44 active days · max day: 46 (Mar 27, 2026)

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

commitstotalummerr.github.io351bookmarks234archetypes38gravityDopeRat26inference26minecraft-mods9archetypes-audit8dopeRatGravity2film1testExport1

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


3. Act II — Think Hard

All commits by hour of day (local time)

commitshour (00–23, local)02040608000:00 — 19 commits0001:00 — 8 commits02:00 — 0 commits03:00 — 0 commits0304:00 — 6 commits05:00 — 38 commits06:00 — 23 commits0607:00 — 30 commits08:00 — 40 commits09:00 — 69 commits0910:00 — 34 commits11:00 — 21 commits12:00 — 28 commits1213:00 — 34 commits14:00 — 37 commits15:00 — 36 commits1516:00 — 16 commits17:00 — 43 commits18:00 — 48 commits1819:00 — 26 commits20:00 — 40 commits21:00 — 57 commits2122:00 — 24 commits23:00 — 19 commits

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:

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.

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.

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:

  1. learningproj (May 24) — First GDScript. 25 lines.
  2. kareemrpg-beta (May 24) — Mobile RPG skeleton.
  3. dialogictut (May 25) — Dialogic addon + NPC basics.
  4. daytworpg (May 25) — 9 scripts, dialogue, audio, NPC/follower systems.
  5. 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

2014–nowJekyll · HTML · CSSummerr.github.ioMay 2023Next.js · Prisma · PostgresStreakUp (reference study)May–Jun 2025Godot 4 · GDScript · WebAssemblykareemrpg (5-project ladder)Feb 2026 (a)React 18 · Vite 5 · vanilla CSScodexDopeRat v1Feb 2026 (b)React 19 · Claude API · WebLLM · SupabasedopeRatGravity v2 (feature sprawl)Mar 2026React 19 · Tailwind v4 · ZustandgravityDopeRat v3 (focused rebuild)Jan–Feb 2026Java 17/21 · Forge/Fabric · Express · SQLiteminecraft-mods (MTL Memories + LabsCraft)Feb 2026Next.js 16 · TS · Supabase · Claude Haiku+Sonnetbookmarks (the sprint)Mar 2026Python · Pydantic · spaCy · pytestVidMetaPromptMar 2026Vanilla JS · D3.js · zero build toolsarchetypes v1 (mobile-only)Apr 2026Multi-system KWML deep-divearchetypes v2 (Pearson–Marr)

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/.