The project is a satirical merch store called UltraMAGAmart. The login page says "PATRIOT LOGIN." It exists because my friends have a specific sense of humor and I had access to a print-on-demand API.
The point is that this was the most complex thing I'd built with Claude Code: Next.js, dual Cognito auth, DynamoDB, Stripe, print-on-demand, SES emails, SST deployment, and it's where one file changed how I set up every project after.
The File
My CLAUDE.md files for Posts 1-6 were 8-line stubs. "To be added." Never added.
For UltraMAGAmart, the file grew to 127 lines:
- Build commands, architecture overview, directory structure
- DynamoDB table names for each environment
- Dual Cognito auth pool configuration
- API route conventions and webhook patterns
- TypeScript and Tailwind coding standards
- SST deployment stages, production vs. staging
Every hour invested in the CLAUDE.md saved ten hours of explanation across future sessions.
The Level 4 Shift
This is what separates Level 3 from Level 4 on the agentic ladder:
Level 3: You direct each session. "Here's the project, here's what we're building, here are the conventions. Build the auth system." You review the output. You course-correct. Next session, you explain it all again.
Level 4: You write the CLAUDE.md once. Every session inherits that context automatically. "Add a refund notification," and Claude already knows the email template system, the SES configuration, and where the trigger belongs. No re-orientation. No "let me look at the codebase first."
The 127-line CLAUDE.md was the inflection point. The setup became the work. Not "setup before the work." The act of documenting architecture, conventions, and constraints for Claude IS the engineering contribution. Everything after that is execution.
The Bug AI Can't Catch
Here's the edge case that almost broke the store:
Gmail treats dots in email addresses as non-significant. frank.rydzewski@gmail.com and frankrydzewski@gmail.com and f.r.a.n.k@gmail.com are the same inbox. Gmail also supports plus-addressing: frank+test@gmail.com delivers to frank@gmail.com.
Your application sees different strings. Cognito creates separate accounts. DynamoDB stores distinct customer records. Someone signs up as frank+test@gmail.com, orders as f.rank@gmail.com, resets their password from frankrydzewski@gmail.com, and your system thinks they're three different people while Gmail delivers everything to one inbox.
Claude built the entire e-commerce platform without catching this. Not because it's bad at engineering, but because this is a production edge case that only surfaces when real humans with real Gmail addresses interact with your real system.
AI builds the system. Production testing finds the things AI can't predict. The integration boundaries, where your code meets someone else's conventions, are still your responsibility. Every e-commerce platform that accepts Gmail has this bug. Most don't know it.
The Takeaway
Level 4 isn't about better prompts. It's about better project configuration. I stopped explaining things per-conversation and started writing project-level documentation that persisted across sessions. The 127-line CLAUDE.md was the inflection point, not because the file was special, but because writing it forced me to actually articulate what I was building and why.