Get the robots to work. Shrink the backlog while you sleep.
I'm Lindsay. AI writes most of our code now. My job is pointing it at the right work and making sure what ships is ship-shape. I write about what actually works, architecture, reliability, running lean. I hate costs. I build products.
Recent writing
All articles →AI Development Is Fun. I Didn't Expect That.
After 20 years of building software, AI-assisted development is the most fun I've had at work. Here is why, and where the fun stops.
Your Website Needs to Work Harder
Meta decides what people see. Google’s AI summary is its version of you. Your website is the easiest voice to control, so give it a job.
Building a CMS From Scratch in 2026
What we took from WordPress, Squarespace, Wix, Webflow, Shopify and HubSpot, and what we left behind.
- WWW vs Apex: Why We Prefer WWW for Website MovesStandard CNAMEs, simpler DNS automation and reliable HTTPS redirects, with no Google ranking advantage.
- Notion Has No File System Mount, So We Engineered OneHow we built one for Sasha, and the AI engineering process that caught the failures that don't throw errors.
- Reliability With a Team of TwoFour production apps, live users, two people. Dogfooding, 25,000 tests and robots fixing the small stuff.
- Bubble.io Security: What You’re Responsible ForBubble handles the infrastructure. The data model, privacy rules and credentials are yours.
- Bubble Integrations: Plugins, API Connector, and When You Need CodeThe three integration routes, when to use each, and real timings.
- Git in Plain English: A Non-Developer’s GuideThe handful of Git words you need when building with Claude Code, and a CLAUDE.md that makes it flag risk before you deploy.
- Your LLM’s JSON Schema Is Already a TypeScript TypeA renamed enum crashed a live interview. Generating the types from the schema turned the whole bug class into a compile error.
- Prisma Is the Right Default Until Your Authz Lives in PostgresMost teams should take the LLM’s Prisma default. When you shouldn’t, and the SQL-first setup.
- I Don’t Have an Ops Team. I Have Claude Code at the Terminal.Ops work needed a team because the cost was the context switch. An agent in the terminal collapses it.
- Stop Finding Bugs From ScreenshotsA Next.js error-trapping setup that catches every browser error, with no new vendors.
- Rate Limiting Without Redis or Cloudflare ProThe Postgres pattern that actually holds under load.
- Your Stripe Key Lives in Six PlacesThe one-prompt secrets inventory: six stores, zero inventory, turned into a four-hour audit.
- From $284 to $88: Asking Claude Code to Cut Our AWS BillThe saving wasn’t the interesting part. What we found along the way was.
Series
Coffee-Budget Software
Six parts on running two SaaS products for under $125 a month. The business questions behind the stack.
Prompts That Ship
Production setups, from GA4 funnels to OWASP review, each reproducible from one copy-paste prompt.
Lessons from a Bubble Migration
Rebuilding an AI hiring platform from Bubble to Next.js and AWS in eight working days.
Work with me
I also take on a small number of fractional CTO engagements.
Build, buy or stay decisions, Bubble migrations and platform ownership, mostly in insurance, healthcare, regulatory ops and lending.