The problem
A 6-bay paint-protection-film and ceramic-coating shop running on Google Sheets, Square, and a paper appointment book. Lost VINs, missed callbacks, no view of repeat-customer revenue, no way to send before/after photos to owners without texting them one at a time.
What we built
- VIN-keyed customer record. Every car has its own service history, photo gallery, notes, and warranty status — pulled the moment the tech scans the windshield.
- Bay scheduler. Drag-and-drop calendar across 6 bays, tech-skill-aware (PPF vs. ceramic), with overbook warnings and per-tech utilization.
- Before/after photo capture. Tech snaps from phone, uploads to the active job. When the job closes, the owner gets the gallery auto-emailed.
- SMS-link Stripe checkout. Service done → owner taps the SMS link → pays from their phone. No card swipe at the counter.
- Twilio reminders. “Your car is ready,” “Your 6-month ceramic refresh is due,” “Saturday opening — want it?”
- Owner dashboard. Daily revenue, monthly job-mix, repeat-customer rate, tech leaderboard — one screen, no spreadsheet exports.
Stack
Architecture
App Router
+ webhooks
RLS-scoped
SMS-link