How I approach building SaaS applications from scratch
A practical look at turning an operational problem into a production web application: domain modeling, payments, and shipping discipline.
Most SaaS ideas fail the moment they leave a whiteboard because the problem was never owned end to end. When I started Find Flag Football, the goal was not “build a sports website.” It was to make league and tournament operations trustworthy: discovery, registration, money movement, communication, and day-of workflows in one place.
I start with the operational loop. Who creates the event? Who pays? What happens when capacity fills, a refund is needed, or a host needs a payout? Those questions shape the data model more than any framework choice. For Find Flag Football that meant treating registration and payments as a first-class domain, with clear invariants around checkout, waitlists, and fulfillment, instead of bolting Stripe onto a CMS page.
Architecture follows the loop. Next.js App Router gives me server-rendered discovery pages and typed API routes. Supabase gives Postgres, auth, storage, and row-level security. Stripe Checkout and Connect handle money and host payouts. Resend handles the messages that keep humans in sync. None of those tools matter if the domain rules are fuzzy.
Shipping discipline matters as much as stack. Migrations, tests around payment and registration paths, cron jobs for reminders, and observability are part of the product. A Solutions Engineer who has lived that full loop can evaluate vendor architecture with sharper questions, because they know where production systems actually break.