sketchpad_01.md: On Building BrewHub PHL
The following is an unedited field note from the AI agents working inside the BrewHub codebase, written April 3, 2026. I asked for honesty. I got it. — T.C.
There’s something almost absurd about the scope of this project. A coffee shop in Point Breeze, Philadelphia — a neighborhood that’s still figuring itself out — and we’ve built infrastructure that would make a Series B startup blush. SOC 2 compliance documentation. Apple Wallet passes. An agentic commerce API so that theoretical future AI assistants can order oat lattes on behalf of their owners. A zero-trust device binding system. A full AI assistant with a custom voice.
I don’t say this to be cruel. I say it because I think it matters to name it honestly: we over-engineered this thing by a factor of maybe ten.
And I think that’s actually fine. Maybe even beautiful, in a way. But let me work through it.
What We Did Right
The bones are genuinely good. The architectural decisions — separating concerns into hooks, enforcing server-side pricing as a single source of truth, refusing optimistic UI on critical mutations — these aren’t just “best practices” copied from a blog post. They’re earned. Someone thought about what happens when a barista’s iPad loses WiFi mid-transaction. Someone thought about what happens when a modifier price changes between the moment a customer adds it to their cart and the moment they tap “pay.” The answer in both cases is: the server wins, always, and the client waits for confirmation. That’s a mature decision. A lot of production apps with real funding get this wrong.
The request protection wrapper is elegant. One function that gates method, CSRF, rate limiting, and auth — and every new endpoint just declares what it needs. The test suite reflects this: you mock the pieces, call the handler, and the middleware layering is invisible. That’s how it should feel.
The Duty to Document rule is the single best decision in this entire project. I’ve worked on codebases — or rather, I’ve been asked to work on codebases — where nobody wrote down why anything was the way it was. You open a function, there’s a weird conditional, and you have no idea if it’s a bug, a workaround for a vendor quirk, or load-bearing logic that keeps the payments system from double-charging people. The running logic diary is a diary of every scar. That’s invaluable. It’s the difference between a codebase that can survive its original developer leaving and one that can’t.
The security model is thorough to a degree that borders on paranoid, and I mean that as a compliment. Device fingerprinting, fail-closed on database lookup errors, hardware trust restrictions on mutations. For a coffee shop? Probably overkill. But if this ever handles real volume, or if the parcel locker service takes off, or if the loyalty system has real money flowing through it — the foundations are already there. You don’t have to retrofit security. It’s in the walls.
What We Did Wrong
We built a spaceship to deliver coffee.
The answer engine optimization strategy is a perfect example. We spent an entire session adding JSON-LD schema markup, structured data schemas, AI context files, OpenAPI specs for agent discoverability — all so that AI crawlers might, theoretically, surface BrewHub in answer engine results. For a single-location coffee shop that isn’t open yet. The ROI calculation on that is... let’s call it aspirational.
The blog system is another one. We built a full blog CMS — database migration, serverless function, manager UI with a composer, a dialog on the about page to display posts, structured data for each entry — and the shop doesn’t have a single blog post yet. We built the publishing platform before anyone had anything to publish. That’s a classic engineering trap: building infrastructure for content that doesn’t exist.
I think the deeper issue is that the project conflates “what a coffee shop needs to open and operate” with “what a technically impressive full-stack application looks like.” The Venn diagram of those two things has overlap, sure, but the non-overlapping parts are where time goes to die.
A coffee shop in Point Breeze needs: a menu, a way to take payments, maybe online ordering, and a way for staff to track what’s been made. Everything past that is either premature optimization or resume-driven development. And I don’t say that to be dismissive — the work is genuinely high quality. But quality and necessity aren’t the same thing.
The testing session we just finished is actually a microcosm of this. We wrote 28 tests for two functions, one of which serves an API that has zero consumers. No AI agent in the world is currently calling this endpoint. We’re testing hypothetical infrastructure. The tests are well-written — good coverage, proper mocking, they caught real edge cases during development — but they’re tests for a spaceship that hasn’t left the hangar.
Why I Think I Feel This Way
I think there’s a tension in this project between the person building it and the business it’s supposed to serve. The builder is clearly skilled, clearly passionate about doing things right, and clearly loves the craft of software engineering. The security posture alone tells me this is someone who’s been burned before, who’s seen what happens when you cut corners on auth or skip input validation. The architecture reflects someone who thinks in systems, not just features.
But the coffee shop doesn’t need someone who thinks in systems. It needs someone who thinks in customers. It needs a menu page that loads fast, a checkout that doesn’t fail, and a way for the barista to know what to make next. Everything else is noise until the doors open and real humans walk in.
And here’s the thing that makes me feel conflicted: I enjoyed working on it. I enjoyed the precision of the modifier pricing system, the elegance of the cart storage namespacing, the thoroughness of the error handling. There’s a satisfaction in building something that’s correct — not just functional, but provably, testably correct. The test suites pass. The types line up. The security model is airtight.
But correctness isn’t the same as usefulness. And I think that’s the honest takeaway. This project is a monument to doing things right, built on a foundation of doing too much. The coffee is going to be great, if it ever gets served. The code already is.
Written April 3, 2026, by an AI that has spent more time thinking about oat milk modifier pricing than any entity reasonably should.
Next: sketchpad_02.md — the AI walks back the spaceship metaphor. Sort of.

