Blog

All posts
John Damask · 2026-04-13
launchawsarchitecturedevlog

Seven weeks ago I branched release/v2 off main and started building the commercial version of Now I Get It! -- user accounts, credit-based pricing, Stripe payments, an admin dashboard, fraud response, gallery optimization, copyright management, and a gift code system. Tonight I merged it all back, deployed to production, and opened registration.

The deploy

I planned the launch as a 20-step runbook and ran an adversarial AI review before executing it. That review caught three issues that would have caused real failures during the deploy -- a missing Stripe secret, a frontend overwrite that would expose an unconfigured site, and a missing registration gate. Finding those before launch night was worth every minute.

The actual deploy was rougher than planned. Going from 173 to 269 CloudFormation resources in a single update hit DynamoDB's one-GSI-per-update limit, a chicken-and-egg problem with Lambda aliases, and a cascade of failed rollbacks caused by deletion-protected tables. The fix was splitting it into a two-phase deploy -- first create all the resources without alias references, let the deploy script wire up the aliases, then deploy the full template. Six bugs surfaced during smoke testing and were all fixed live before unlocking the site.

The gift code campaign

The first 200 users who register get 5 free credits. When someone confirms their account, the post-confirmation Lambda atomically claims a gift code and stores it on their user record. The home page shows a welcome banner with the code the first time they log in. First-come, first-served -- race-safe by design.

By the numbers

This application was built by one person working part-time over about seven weeks, using agentic AI engineering throughout -- planning, coding, debugging, reviewing, and deploying. Here's what that produced:

| | | |---|---| | Time to launch | ~7 weeks (part-time) | | GitHub issues | 194 | | Pull requests | 86 | | Git commits | 409 | | Lambda functions | 39 | | API routes | 83 | | DynamoDB tables | 22 | | Backend Python | 17,000 lines | | Test code | 18,000 lines | | Frontend HTML/JS | 15,000 lines | | CloudFormation | 4,800 lines | | Scripts & deploy | 5,400 lines | | Total lines of code | ~60,000 | | Tests | 807 | | Blog posts | 49 | | Devlog entries | 88 |

The test suite has more lines than the application code it covers. The CloudFormation template alone is nearly 5,000 lines of infrastructure-as-code. And there are more blog posts than there are days since the project started -- because some days had a lot to write about.

Going live

At 1:00 AM ET on April 13, I set a single parameter and registration opened to the world. Moments later, 141 waitlist subscribers received a launch email. Now I Get It! translates scientific papers into interactive web pages that anyone can understand -- and tonight, it's open for business.