Recent Work · No. 2
The Car Line That Built a Company
Every school day around 3:05 I sat in a line of cars outside my kids' school, engine idling, watching a dismissal system made of a clipboard, a walkie-talkie, and a person shouting names into the wind. Somewhere in yet another afternoon I'd never get back, the itch became a question: a restaurant can text me when my table is ready — why can't a school text me when my kid is?
That question turned out to have a much longer answer than I expected.
What got built
thewaitlist.com is a waitlist you join with your phone. A business — or a school — posts a QR code, or shares a permanent link in whatever channel it already uses. You scan or tap, type a name, and watch a live page: you're #4 in line. When it's your turn, staff taps one button and you get one text. That's the whole product, on purpose. No app to download, no account for the person waiting, no passwords for anyone — owners sign in with an emailed magic link.
It's free for the first 300 texts a month; past that it's $29 with 1,000 texts included and two cents apiece after. Seven business types each get their own dialect: a restaurant's "your table is ready" is a school's "your student is ready for pickup," and the school dashboard counts cars waiting, not customers served. Under the hood that's one configuration file that reshapes the entire app — join form, dashboard, text messages, even the signup pitch — per industry.
The month the carriers said no
Building the queue took a weekend in May. Getting permission to send the text took from June 3rd to June 24th, and it's the part I'd tell you about at dinner.
In the United States you can't just send automated texts. There's a registry — literally named The Campaign Registry — where your company, an actual LLC with an EIN vetted against IRS records, registers a "campaign": the exact sample messages you'll send, the exact consent language a customer sees, the URLs of your terms. Human reviewers working for the carriers check all of it. Mine came back rejected five times.
Each rejection arrived as an error code and not much else. One reviewer visited thewaitlist.com, saw the "coming soon" page, and bounced the campaign for not looking like a real business — so the carriers, not any launch plan, decided the day my homepage went public. Error 30919 said the website lacked business information; the fix was a contact page, a street address in the footer, and a Google Voice number. Then came the paradox pair: error 30925 demanded a visible, unchecked consent checkbox, while error 30923 forbade making consent a condition of using the service. Satisfying both meant rebuilding the join flow — the phone number itself became optional (join with just a name and watch the page), the checkbox is always shown and never required, and the server quietly discards any number submitted without the box checked, because a public endpoint can't trust a browser.
The hardest engineering problem wasn't code. It was persuading America's phone carriers, one rejection at a time, that a dad in a car line wasn't a spammer.
The lasting discipline is stricter than any style guide: your registered samples must match your real traffic. So every message template is hard-locked in one file — the brand prefix, the STOP notice, the 160-character single-segment budget — and businesses can see their exact texts on their dashboard but never edit them. Compliance isn't a checkbox in this product; it's load-bearing architecture.
Plumbing I now know too well
The product is a relay race of other people's platforms, and every handoff taught me something. Twilio sends the texts, but only accepts inbound webhooks after a cryptographic signature checks out — and the signature covers the exact public URL, so a single header rewritten by a proxy breaks it silently. Every STOP reply gets mirrored into my own opt-out ledger even though the carrier already enforces it, because "prove nobody texted her after she said stop" is a question you want answered from your own database. Delivery receipts flow back per message into a log that keeps only the last four digits of any phone number and deletes itself after 45 days. Consent records keep the exact disclosure each person saw — for five years, because the statute of limitations on texting lawsuits is four.
Neon's serverless Postgres offers no transactions over HTTP, so the join-plus-consent write is one CTE — a single atomic statement, no way to end up with a textable entry that lacks its consent record. Stripe runs billing as usage metering: every sent text reports one event, keyed to Twilio's message ID so a retry can't double-bill, and Stripe's graduated tiers hand out the first thousand free and charge two cents after. I verified the loop by charging my own Visa $29 — after breaking it twice, once by pasting a product ID where a price ID belonged, once because a leftover test-mode customer can't buy anything in the live world.
Six imaginary people fixed my product
Before launching the school version I convened a review panel that doesn't exist: a parent with a toddler mid-meltdown, the front-office staffer who runs dismissal, a principal, a district privacy officer, a teacher, and a nine-year-old waiting in the gym. They found real bugs. The worst one: when staff tapped the button, the parent's screen said "you're up — head on in," cheerfully inviting eighty parents to walk into a school building at dismissal. It now says "your student is on the way — stay with your car." The privacy officer's finding was quieter and worse: my privacy policy promised a deletion schedule that no code actually performed. It does now.
What I learned
The words are the product. Wrong copy got my campaign rejected five times, wrong copy nearly marched a parking lot of parents into a school, and my own terms page briefly promised both "300 lifetime texts" and "unlimited." Every user-facing number now lives in one file that the billing code and the marketing pages both read, so what we charge and what we advertise can no longer drift apart.
And the original itch was right. thewaitlist.com is live and taking real payments, and the school flavor — car line, one text, calm curb — is at thewaitlist.com/for-schools. The first pilot I'm chasing is the very car line that started it. After that, the other line I know too well: winery tasting rooms.