2026 to Date: Build to Think
The year-to-date audit. Generated 2026-07-21 on Opus 4.8, read through the lens of Build to Think — and redrawn, this round, in the spirit of Edward Tufte: one ink, one accent, no chartjunk.
“No design doc could have described this project, because the project didn’t exist until I started building it.”
Seven months, one person, no team, no budget — 798 commits in the cracks around a day job at Google. This isn’t a portfolio review; it’s a seismograph reading of a mind that thinks by building. Here’s the whole year in one line, then the three lessons it teaches, then every project at a glance.
The shape of the year · commits per week, in three acts
Two quiet months, then a detonation — 595 of the commits, 75% of the year, fall in a single March–April window — then a long tail that turns from finishing to cutting. That silhouette is the argument. Three lessons hide inside it: ① the projects that survive the quiet stretches are the ones that leave themselves a note; ② the mature move in the tail isn’t adding but removing; ③ the newest work is built, from commit one, to survive the next gap. Here they are.
Lesson 1 — Continuity is the real constraint
The thing that kills a build-to-think project isn’t lack of energy or ideas. It’s the cold start — walking back into a session and not knowing where you left off. Every project that matured this year left itself a note for the next session. Every project that died, died in the gap between two of them.
Left the campfire lit → matured
- golf — a
DECISIONS.mdof forks-taken-with-reasons - dopamine rat v4 — a
NEXT.mdwritten before any feature - bookmarks — a
check-facts.tsgate that blocks its own deploys - the site — this audit lineage, a note-to-self about everything
- flowtcg — a Zod content schema that became a CSV importer
Went cold in the gap → stalled
- dopamine rat v2 — last commit: "resolve 27+ build errors"
- bass — a perfect practice tool; one logged practice
Who restarts a session that ended in a mess? The next session simply never began.
Lesson 2 — Maturity looks like subtraction and extraction
In the spring the practice accreted — projects swelled with features, one repo absorbed a whole game. This month it did the opposite. The clearest example: the sf atlas had grown an arcade driving game inside itself. In July that game was lifted out into its own repo, and the atlas went back to being an atlas. Splitting the monorepo was the thought: these are two different ideas, and they should stop sharing a home.
One repo, three homes · the July extraction
Maturity as separation of concerns you can survive: give each exploration its own address, and keep — don't destroy — what it grew out of.
Lesson 3 — Build the memory first
The Dopamine Rat has been rebuilt four times — and v4 wins by deleting the other three. v1 was a compassion-first sketch; v2 added scoring and died on build errors; v3 grew a Garmin/Hevy “biometric nervous system.” v4 is a subtraction: three dependencies, one screen, a checklist and a rat. It’s the first version engineered from commit #1 to survive its own maker’s discontinuity.
Four rebuilds · commits per version of the Dopamine Rat
Each rebuild changed the app's epistemology, not its features. v4 is the smallest — and the only one built on a campfire log.
“This file exists because v2 died on ‘27+ build errors’ and v3 died on unpushed branches — both cold-start deaths.” — the opening of v4’s
NEXT.md
The winners don’t just leave the campfire lit anymore. They build the campfire first, then subtract everything that isn’t the fire.
The portfolio, at a glance
Every project this year, sorted by commits — with its whole activity history as a sparkline, its span, and its status. Bold rows changed since the last audit.
This round’s deltas — Dopamine Rat v4 · rush · stems · prompts-mcp · Flow Slays IO · sf · golf · archetypes · bookmarks Shipped & steady — inference · minecraft-mods · kareemrpg · the site Bench & footnotes — bass · VidMetaPrompt · footnotes
The portfolio, at a glance · every project, one commit history
The deep dives
Flow Slays IO → flowtcg
A shipped Slay-the-Spire deckbuilder that keeps generating its own next work — this round it hardened instead of expanding.
Themed on Google Flow: HP is Morale, energy is Focus, the boss is The Launch Review Committee. The engine never branches on a specific card — lib/engine/effects.ts is “the ONLY place card/enemy behavior is resolved.” July’s four commits are pure polish and durability: full-art holographic frames (six roles = six factions, “no schema change”), a fuzzy-matching bulk art importer, a table importer that swallows spreadsheet or markdown paste, and a fix pass so a page refresh no longer loses your run.


The atlas that became a game, then un-became one → sf
The year's biggest arc, and its cleanest reversal — the games moved out, the journal came back.
It began as a Tufte-style atlas of an SF move (“11 Infatuation burritos,” microclimates) and mutated into an SF-Rush-2049 driving game on real LiDAR terrain. Then July’s “Extract Rush and Muni games into their own repos” lifted the whole game stack out, and sf reverted to an Astro content journal whose new active feature is a weather “nice out” console. The map was the thinking tool; the game was the conclusion; the split was the next thought.


A decision log with a physics engine → golf
It argued itself into a new primary app, then kept the old one instead of deleting it.
A LiDAR-terrain golf project that, in July, promoted muni — a 2D-canvas arcade sim — to the main app and pushed the old Three.js journal into _archive/. A “game-feel juice pass” added windup, screen shake, and a chiptune bed, scope-guarded so the engine tests stayed green at par 72. Its DECISIONS.md records the pivot itself; Phase 1 (real round data) is honestly logged as still blocked — which is exactly why the next session knows where to start.
The flagship → bookmarks
The most-committed project of the year quietly turned from public research into a private exec instrument.
A Chrome extension intercepts X bookmarks; a two-tier Claude pipeline (Haiku triage → Sonnet extraction) classifies them into a curated gen-media prompt dataset — deliberately $0, with check-facts.ts gating every deploy. Its arc: personal tool → public “prompt observatory” (89 commits in one weekend) → a private “Omni + Flow brief” (now at a 199-post corpus) that a Google gen-media PM actually uses.
The learning build that closed a loop → prompts-mcp
He taught himself the Model Context Protocol by serving his own dataset through it.
An MCP server exposing the ~1,381 prompts from the flagship to any MCP host — TypeScript, Zod, both stdio and remote Streamable-HTTP transports. The README walks M0→M5 and demonstrates every MCP primitive. The fastest way to understand a protocol is to build a complete example on top of data you already care about.
The workshop’s logbook → ummerr.github.io
The workshop that publishes essays about itself.
A dormant Jekyll site rebooted into the publishing surface for the whole practice — an essays system, migrated Medium archive, and this living audit with its hand-drawn SVGs. The recursion is the point: the audit workflow regenerates an essay about the workshop, published by the workshop. You’re reading it run again.
Rebuilt four times → the Dopamine Rat
A compassion-first habit tracker whose fourth version wins by deleting the first three.
v1 invented the vocabulary; v2 added scoring and died on build errors; v3 pulled Garmin + Hevy biometrics. v4 is a subtraction — Vite + React + three dependencies, one screen, a checklist and a reactive rat, PWA-installable. Its load-bearing feature, “Today’s Brick,” records only the order one task got done relative to “the harder hour,” on the principle “measure the order of actions, not the purity of the person.”
The phone prototype that argued for an atlas → archetypes
A cross-system atlas of archetypes, whose real insight was correspondence — and whose v1 was built entirely on a phone.
v1 was built entirely on the Claude Code mobile app (8 commits, 272 archetypes). Swiping flat records revealed the product was really correspondence (Emperor ↔ Aries ↔ Enneagram 8 ↔ ENTJ), and v2 (Next.js, 164 commits) industrialized that into a feature-vector data layer and resonance networks. July added a seventh system, Astrology — an interactive zodiac wheel with a bespoke SVG glyph vocabulary.
A two-commit repo holding thousands of lines → rush
The moment an exploration earned its own address.
The standalone home of the driving game that grew inside sf: React-Three-Fiber + Rapier physics, drivable SF / Googleplex / office worlds on baked LiDAR terrain. Its two commits are the extraction and a rename — but they represent thousands of lines of prior thinking, relocated. The point wasn’t new code; it was deciding the game was its own thing.
The year’s opening move → minecraft-mods
An LLM villager as a working model of how he thinks about agents.
Two hand-built mods. LabsCraft (Fabric 1.21.4, 46 Java files + a ~1,400-LOC TypeScript agent server) makes you an APM intern whose quest-giver is driven by a live LLM agent server — a perceive→decide→reason→act loop with a Claude→Gemini→Ollama→hardcoded fallback chain, where the model returns structured JSON actions a typed executor replays. The LLM never touches game state directly: sandboxed behind a typed action schema, exactly how its builder reasons about agent products at work.
The shipped gift → kareemrpg
A friend's life as a walkable RPG, shipped as a birthday gift.
A Godot 4 top-down RPG walking through a friend’s life, real friends as NPCs. The godot/ workspace is a visible learning ladder — throwaway folders that each isolated one unknown (movement, then NPCs, then dialogue). Built in 2025; the proof that the ladder-of-throwaways method predates the year.
The public self-audit → inference
A calculator that was really a public audit of his own pricing intuitions.
“The Fun Inference Calculator” — how gen-AI compute costs scale across text/image/audio/video, “with analogies instead of ML jargon.” 63 commits in 5 days — the year’s most intense burst (and the spike that makes April 12 the busiest single day). A third of the log is epistemic: “Recalibrate against real-world pricing,” “Correct Vertex pricing after research audit.” Building it forced every fuzzy belief into a checkable number.
The tool that outran the habit → bass
The cleanest counter-example in the portfolio: a perfect practice tool, one logged practice.
A static site scaffolding a daily 15-minute bass loop, with a 33-tab library and a 90-day heatmap — and exactly one logged session (“Right thumb kept wanting to clamp — noted for next time.”). There was no next time. Researching about a practice is more fun than the practice; it died in the gap with nothing to carry it across. The most instructive artifact here.
The test bench → VidMetaPrompt
A parked bench for the day-job problem — iterating on prompt structures for generated video. No committed history; a live index of what's being chewed on.
Footnotes
- stems (Jul 19, 4 commits) — a brand-new local-first stem splitter (Python/FastAPI + Demucs/FFmpeg backend, React/Vite frontend) to pull vocals/drums/bass/other out of a song. “Phase 1 complete” — import + app shell only; the newest campfire, just lit.
- film (1 commit) — an Astro photo-portfolio template, scaffolded and parked.
- cursorMint — a finance utility (no git).
- testExport / dopRatTest — a Godot export artifact and an empty scaffold dir.
- StreakUp — a cloned reference (2023–24), not the author’s code; excluded from every count here.
The cadence — when the building actually happens
The work is bimodal by the clock: a hard spike at 5am (the single busiest hour) and a second rise across the 8–10pm evening, with the workday a trough and the small hours dead. By calendar it’s two months of detonation and a long, quieter tail.
The bimodal builder · commits by hour of day (Pacific)
Every day of 2026 · Daily commits, week by week
Hover any day for its count and which repos moved. The dense block is the March–April detonation; the warm cell is the single busiest day (Apr 12, the inference launch).
The verdict
Eleven shipped things, $0 of infrastructure, one person who is not an engineer by training — in a year where two months did 75% of the work. The portfolio isn’t a list of products; it’s a thinking log with a URL for each thought.
The last audit named the constraint — continuity. This one shows the builder designing against it on purpose: writing the campfire log first, giving each idea its own home, and shrinking the ritual until it’s small enough to keep. When a build-to-think practice matures, the thinking shows up as removal. You don’t really understand a thing until you can say what to cut.
This report is the campfire, for the portfolio as a whole.
Regenerated with /audit from ~/CodeProj/, on Opus 4.8. Charts redrawn in the spirit of Edward Tufte. The master audit lives at ~/CodeProj/PROJECT_AUDIT.md.