Route WPT 03 FLYTL · My product · founder and sole developer
Flytline, scheduling recovery for flight schools
When a lesson cancels, Flytline finds a waitlisted student for the slot and texts them, following the SMS rules while it does it.
row-level security, 20 tables
held to a written eval standard
TypeScript, built solo
01Context
In flight training, a cancelled lesson usually means an empty airplane and lost revenue. Nobody has time to fill the slot.
I am a private pilot and saw this as a student. I founded Flytline and built all of it.
02Key decisions
Schools share one system but must never see each other's data.
- Choice
- Multi-tenant isolation in the database: 53 row-level security policies across 20 tables.
- Tradeoff
- Every new table needs its policies before it ships.
Texting students is regulated. Consent, quiet hours, and STOP handling are not optional.
- Choice
- Every message runs a checklist first. If any check fails, it does not send, and the reason is logged.
- Tradeoff
- Some messages wait for morning instead of going out at once.
Models can invent details, and the product has to keep working when the AI provider is down.
- Choice
- The matcher is deterministic and AI-free. AI only drafts friendlier wording, and a message is thrown out if the model writes a number it was not given.
- Tradeoff
- The AI is a convenience layer, never the decision-maker.

03Evidence
- TCPA-compliant SMS: consent capture, quiet-hours windows, STOP handling, delivery webhooks, and an audit trail.
- A deterministic matcher: the same inputs always give the same match, and every match can be audited.
- A live eval that checks the model leaves a missing email blank instead of inventing one.
04Results
- The public walkthrough shows a cancelled lesson refilled from start to finish.
05Stack
Next.js · TypeScript · Supabase · PostgreSQL RLS · Twilio · Anthropic Claude · Vercel
Want this kind of work on your product?
Email me