tl;dr
My son's drum teacher runs a real business over group text. No calendar, no booking page, no way for a new student to grab an open slot without a back-and-forth thread. The studio tools that solve this cost $49–199/month and are built for multi-location gyms. So I built Carvd: one link a provider shares, where clients pick a time and pay. Idea to App Store submission in about 12 hours.
~12 hrs
idea to submission
5%
per booking, no monthly fee
$49–199/mo
what the incumbents charge
The problem — a real business run over group text
My son takes drum lessons every Tuesday. His teacher is great — shows up, teaches, collects cash or Venmo. But scheduling is a group text. Cancellations are a reply-all. There's no calendar, no booking page, no way for a new student to find an open slot without a back-and-forth thread. He coordinates 15+ students this way.
The tools that fix this — Mindbody, Momence, Acuity — cost $49–199 a month and are built for multi-location studios with staff and front desks.
“Solo instructors are paying enterprise prices for features they'll never use.”
The insight — one link, for the relationship that already exists
This person doesn't need Mindbody. He needs a link he can text to parents that lets them pick a time and pay — or just book, if he prefers cash. He gets a notification. Done. No marketplace. No discovery feed. No social features.
“Carvd is for the relationship that already exists — the appointment you actually have to drive to.”
How it's built — one app, one web page, three AI tools
Providers manage their business in a native SwiftUI iOS app. Clients book through a public Next.js web page — carvd.studio/your-name — and pay through Stripe. Supabase is the backend; EventKit syncs the provider's device calendar.
Three AI tools, three roles
The build itself ran across three AI tools, each with a distinct role:
Claude (chat) as architect
generated 34 Swift files, the Supabase schema with RLS policies, four Edge Functions, and a complete Next.js web app in one session.
Claude in Xcode
inline UI edits and deprecated-API fixes.
Cursor
local debugging and Vercel deployment troubleshooting.
The booking flow
Calendar sync pulls the next 60 days of the provider's device events as busy blocks, so the public page never offers a time they're not free.
The bugs — in order
Stripe to iOS deep links. Stripe requires HTTPS return URLs for Connect onboarding; iOS custom schemes (carvd://) don't work. Fix: a redirect page on the Next.js web app catches Stripe's HTTPS callback and bridges it to a carvd:// deep link the iOS app picks up.
Stripe SDK crashing in Deno. Edge Functions threw runMicrotasks and setTimeout errors — the imports came from esm.sh. Fix: switched to native npm:stripe@17 imports.
App Store rejection. First submission rejected — the reviewers couldn't sign in because I hadn't provided test credentials. Fix: a dedicated test account with a pre-built provider profile. Resubmitted, approved.
Bundle ID typo. The archive wouldn't upload — Xcode had generated app-.carvd-.ios with extra hyphens. Fix: edited project.pbxproj directly to app.carvd.ios.
Silent 404s in production. The app deployed fine but every dynamic page returned not-found. Root cause: missing environment variables in Vercel — the server couldn't reach Supabase. Compounded by DNS propagation lag and Next.js route-naming conflicts that broke the production build even though the dev server worked.
Configure your deployment target first
Confirm a hello-world page loads in production before building any features.
The comparison — Carvd vs. the studio tools
| Studio tools (Mindbody, Momence, Acuity) | Carvd | |
|---|---|---|
| Built for | Multi-location studios with staff | One person who works face-to-face |
| Price | $49–199 / month | Free app, 5% per booking |
| Setup | Onboarding and configuration | One link — share it, done |
| Features | Everything, most of it unused | Booking and payment, nothing else |
| The job | Run a studio | Keep the relationship you already have |
This is the whole reason Carvd exists. The category is owned by tools built for a different customer.
“Scope is everything. Carvd works because it does one thing — every feature request that didn't serve the drum-teacher scenario got cut.”
Results — by the numbers
| Metric | Value |
|---|---|
| Idea → App Store submission | ~12 hours |
| First commit → approval | ~1 week (incl. Apple review) |
| Generated in one session | 34 Swift files, Supabase schema + RLS, 4 Edge Functions, full Next.js app |
| Database | 6 tables (providers, services, bookings, availability, date blocks, busy blocks) |
| Platform fee | 5% per booking, configurable |
| Payments | Apple Pay, Google Pay, card via Stripe Connect |
| Live | carvd.studio · App Store · TestFlight |
Key Takeaways
- 1Design around a real person, not a persona — one provider with one workflow beats a market segment.
- 2Scope is everything — every feature that didn't serve the one scenario got cut.
- 3No single AI tool does everything — the skill is knowing when to switch between them.
- 4Configure the deployment target first — confirm a hello-world loads in production before building features.
- 5The hardest deployment bugs are environment config, not code.
- 6Shipping is its own skill — the gauntlet is compliance, screenshots, privacy labels, and bundle-ID edge cases.
Google Calendar two-way sync (building now). Request-to-confirm booking flow (building now). Meeting-location field, profile photo upload, and booking confirmation emails via Resend. Group bookings and recurring sessions. And the feature that started everything — making my son's drum teacher's life a little less chaotic.
Google Calendar two-way sync (building now). Request-to-confirm booking flow (building now). Meeting-location field, profile photo upload, and booking confirmation emails via Resend. Group bookings and recurring sessions. And the feature that started everything — making my son's drum teacher's life a little less chaotic.
