
9-Part Series
The engineering decisions behind a 125,000-line platform built entirely with AI.
This series documents the real engineering challenges I encountered while building Capo, a multi-tenant SaaS platform, without writing any code by hand. Each article covers a specific problem, what made it harder than expected, and the architecture decisions that solved it.
These aren't tutorials. They're production war stories: what broke, why it broke, and what I learned about building serious software with AI as an accelerator rather than a replacement for engineering judgment.
Why 45,000 lines of specifications matter more than prompts when building with AI.
How connection pooling broke the RLS policies and what I built instead.
Adding tenant_id to 33 tables and 70+ API routes without breaking production.
How fail-fast patterns prevent silent cross-tenant data leaks.
What happens when five players click Book for the last spot at the same time.
From 45-second blocking requests to instant responses with background processing.
Why 300+ duplicate requests became 30, and what that did to load times.
The hardest feature to build with AI, and the 15 iterations it took to get right.
Why static JSON exports beat live tenant switching for demo modes.
Capo started as a way to organise a weekly football game and grew into a full platform: stats, RSVPs, payments, AI-balanced teams, native mobile apps. 125,000 lines of code, 149 API routes, 60+ database tables. Built in spare time over 14 months by someone who'd never written production code before. See how Capo works.