CoachSlot - Mobile Booking and Payments for Solo Fitness Coaches
Solo yoga teachers and PTs are running $5k/month businesses on WhatsApp and bank transfers like it's 2009. CoachSlot gives every solo fitness coach a personal booking link, Stripe card payments, and automatic cancellation fee enforcement — no more ghost clients.
Difficulty
beginner
Category
Gig Economy
Market Demand
Very High
Revenue Score
8/10
Platform
Web App
Vibe Code Friendly
⚡ YesHackathon Score
🏆 7/10
Validated by Real Pain
— seeded from real-world friction
Solo fitness coaches managing £5k/month businesses on WhatsApp group chats, bank transfers, and handwritten appointment books — a real, widespread friction in the personal training and yoga industry.
What is it?
Fitness coaches lose 20-30% of potential revenue to no-shows, late cancellations, and clients who vanish because there's no frictionless way to pay by card. CoachSlot is a mobile-first micro-SaaS where a coach signs up, sets their session types and prices, shares one link, and their clients self-book and pay via Stripe. Automated SMS reminders fire 24h and 1h before sessions. Cancellation policies are enforced automatically — no awkward WhatsApp negotiations. Session history, earnings dashboard, and a simple client list round out the MVP. Buildable because Stripe, Supabase, and Resend are all stable, and the booking + payments pattern is a solved architecture problem.
Why now?
Stripe Connect's platform account model makes it straightforward to collect payments on behalf of solo coaches and enforce cancellation charges programmatically — combined with Supabase RLS making multi-tenant data isolation beginner-accessible, the full stack for a solo-coach booking tool is now achievable without a backend engineering team. The micro-SaaS wave is also priming fitness coaches to expect sub-$50/month vertical tools rather than enterprise software.
- ▸Personal booking link with session types and real-time availability (Implementation: Supabase availability table + Next.js calendar)
- ▸Stripe card payments at booking with automatic no-show fee charge
- ▸SMS and email reminders at 24h and 1h before session via Twilio and Resend
- ▸Earnings dashboard with session history and upcoming bookings
Target Audience
Solo fitness coaches, yoga teachers, and personal trainers — ~2M in the US/UK alone, most running zero professional tooling.
Example Use Case
Maria, a solo yoga teacher with 30 weekly clients, shares her CoachSlot link in her Instagram bio. Clients self-book, pay by card, and get SMS reminders. Maria stops losing $300/month to no-shows because cancellations under 24h are auto-charged 50%.
User Stories
- ▸As a solo yoga teacher, I want clients to book and pay online without WhatsApp back-and-forth, so that I save 5 hours per week on scheduling admin.
- ▸As a personal trainer, I want automatic cancellation fees charged to no-shows, so that I stop losing $400/month to last-minute cancellations.
- ▸As a fitness coach, I want SMS reminders sent automatically, so that my session attendance rate improves without me chasing clients.
Acceptance Criteria
Booking flow: done when a client can select a session, pay via Stripe, and receive a confirmation SMS without coach involvement. Cancellation policy: done when a booking cancelled under 24h triggers an automatic Stripe charge for the configured fee. Dashboard: done when coach sees all upcoming sessions and total monthly earnings in under 2 seconds. Onboarding: done when a new coach can set up their profile and first session type in under 5 minutes.
Is it worth building?
$29/month x 50 coaches = $1,450 MRR at month 2. $29/month x 200 coaches = $5,800 MRR at month 6. Math: 200 coaches acquired via fitness influencer communities at ~5% conversion from 4,000 trial signups.
Unit Economics
CAC: $15 via Instagram DMs and fitness Facebook groups. LTV: $348 (12 months at $29/month). Payback: 1 month. Gross margin: 85%.
Business Model
SaaS subscription
Monetization Path
14-day free trial, then $29/month flat. No per-booking fee so coaches don't feel punished for growth.
Revenue Timeline
First dollar: week 3 via first beta upgrade. $1k MRR: month 3. $5k MRR: month 8.
Estimated Monthly Cost
Supabase: $25, Vercel: $20, Twilio SMS: $15, Resend: $10, Stripe fees: ~$40 at 50 coaches. Total: ~$110/month.
Profit Potential
Full-time viable at $5k–$10k MRR with a lean stack.
Scalability
Can expand to group class booking, waitlists, and team plans for small studios.
Success Metrics
Week 2: 50 beta signups. Month 1: 15 paying coaches. Month 3: 60 paying coaches at 80% retention.
Launch & Validation Plan
DM 30 fitness coaches on Instagram offering 3 months free for feedback before writing a single line of code.
Customer Acquisition Strategy
First customer: DM 20 solo personal trainers on Instagram in April offering lifetime 50% discount in exchange for weekly feedback calls. Ongoing: Facebook groups for fitness coaches, Reddit r/personaltraining, TikTok demos showing the WhatsApp-to-CoachSlot transformation.
What's the competition?
Competition Level
Medium
Similar Products
Mindbody (too enterprise, $140/month+), Calendly (no payments or cancellation policy), HoneyBook (too broad, not fitness-focused).
Competitive Advantage
Mindbody is overkill and $140/month. Calendly has no cancellation fee enforcement. CoachSlot is purpose-built for solos at a price they'll actually pay.
Regulatory Risks
Low regulatory risk. GDPR data deletion endpoint required for EU coaches.
What's the roadmap?
Feature Roadmap
V1 (launch): booking link, Stripe payments, SMS reminders, cancellation fee enforcement. V2 (month 2-3): group class booking, package deals, client notes. V3 (month 4+): studio team plans, waitlists, revenue analytics.
Milestone Plan
Phase 1 (Week 1-2): auth, session types, booking calendar ships. Phase 2 (Week 3-4): Stripe payments, reminders, cancellation logic live. Phase 3 (Month 2): 15 paying coaches, dashboard polished, ProductHunt launch.
How do you build it?
Tech Stack
Next.js, Stripe for payments, Supabase for database and auth, Resend for email reminders, Twilio for SMS — build with Lovable for UI, Cursor for backend logic, v0 for booking calendar component.
Suggested Frameworks
Next.js App Router, Supabase Auth, Stripe Checkout
Time to Ship
2 weeks
Required Skills
Stripe billing, Supabase RLS, Next.js routing, Twilio SMS.
Resources
Stripe docs for subscriptions and checkout, Supabase quickstart, Twilio SMS API docs.
MVP Scope
pages/index, pages/[coachSlug]/book, pages/dashboard, pages/api/stripe-webhook, pages/api/send-reminder, components/BookingCalendar, components/SessionCard, lib/supabase, lib/stripe, lib/twilio, supabase/schema.sql, .env.local.
Core User Journey
Sign up -> set session types and price -> share booking link -> client books and pays -> coach sees confirmed session in dashboard.
Architecture Pattern
Coach signs up -> creates session types in Supabase -> client visits booking link -> selects slot -> Stripe Checkout -> webhook confirms booking in DB -> Twilio/Resend fires reminders -> cancellation triggers Stripe charge.
Data Model
Coach has many SessionTypes. SessionType has many Bookings. Booking belongs to one Client. Booking has one StripePaymentIntent.
Integration Points
Stripe for payments and cancellation charges, Twilio for SMS reminders, Resend for email confirmations, Supabase for database and auth, Vercel for hosting.
V1 Scope Boundaries
V1 excludes: group classes, waitlists, mobile native app, white-label, coach marketplace.
Success Definition
A solo fitness coach finds CoachSlot via Instagram, signs up without any help, shares their link with clients, and processes their first card payment within 48 hours.
Challenges
Convincing coaches already comfortable with WhatsApp to change behavior is the hardest problem — not tech. Distribution is everything here.
Avoid These Pitfalls
Do not build group class features before 10 solo coaches are happily paying. Do not add a mobile app before validating web. Cancellation fee enforcement is emotionally loaded — coaches will ask you to make it 'optional per client' which creates infinite edge cases; ship one policy model only. Do not use Stripe Standard Connect if you want platform-level cancellation charge control — use Express or Custom Connect so you can programmatically charge on the coach's behalf. EU coaches trigger GDPR right-to-erasure obligations for client data — build the deletion endpoint before onboarding any EU users or you are liable. Expect coach churn to be driven by slow client adoption, not coach dissatisfaction — if a coach's clients don't use the link, the coach churns even if they love the product; build a client invite flow into onboarding. Finding first 10 paying coaches takes longer than building — budget 3x time for DMs and communities.
Security Requirements
Supabase Auth with Google OAuth and magic link. RLS on all coach and client tables. Rate limiting 100 req/min per IP. Input validation on all booking fields. GDPR data deletion endpoint required.
Infrastructure Plan
Vercel for Next.js hosting, Supabase for Postgres and auth, no separate file storage needed, GitHub Actions for CI, Sentry for error tracking.
Performance Targets
100 DAU at launch, 1,000 req/day. API response under 500ms. Page load under 2s. CDN for static assets via Vercel edge.
Go-Live Checklist
- ☐Security audit complete
- ☐Stripe payment flow tested end-to-end
- ☐Sentry error tracking live
- ☐Vercel monitoring configured
- ☐Custom domain with SSL active
- ☐Privacy policy and terms published
- ☐5 beta coaches signed off
- ☐Rollback plan documented
- ☐ProductHunt and Instagram launch posts drafted.
How to build it, step by step
1. Run npx create-next-app@latest coachslot --typescript --app to scaffold with App Router. 2. Create Supabase project and define schema: coaches (id, slug, name, stripe_account_id), session_types (id, coach_id, name, duration_mins, price_cents, cancellation_policy_hours, cancellation_fee_pct), bookings (id, session_type_id, client_id, start_at, status, stripe_payment_intent_id), clients (id, coach_id, name, email, phone). Enable RLS on all tables with coach_id-scoped policies. 3. Add Supabase Auth with magic link and Google OAuth; store coach profile row on first sign-in via auth trigger. 4. Build /[coachSlug]/book public page: query Supabase for coach session types, render available slots using react-day-picker for date selection and a custom time slot grid component (scaffold with v0 prompt: 'time slot picker grid, 30 and 60 min slots, mark unavailable slots grey'); fetch booked slots from bookings table to exclude conflicts. 5. On slot selection, POST to /api/create-checkout with session_type_id and client details; create a Stripe PaymentIntent with capture_method=manual (to hold funds without capturing, enabling cancellation fee partial capture later) via Stripe Connect on the coach's connected account; return client_secret to frontend and confirm with Stripe.js. 6. Build /api/webhooks/stripe to handle payment_intent.succeeded (set booking status=confirmed), payment_intent.payment_failed (status=failed), and custom cancellation event to capture partial amount for cancellation fee. 7. On booking confirmation webhook, enqueue Twilio SMS reminders: use Supabase Edge Functions with pg_cron or a Vercel cron job at /api/send-reminders that queries bookings where start_at is between now+23h and now+25h (24h reminder) and now+55min and now+65min (1h reminder), then calls Twilio Messages API with coach-branded text. Send confirmation email via Resend using resend.emails.send() with a React Email template. 8. Build /dashboard page (auth-gated) showing: upcoming bookings from Supabase query ordered by start_at, monthly earnings summed from confirmed bookings, client list with last booking date. 9. Build cancellation logic: when client cancels via booking management link, check hours until start_at against session_type.cancellation_policy_hours; if within window, call Stripe paymentIntents.capture() with amount_to_capture set to the cancellation fee percentage of original amount; update booking status=cancelled_charged. 10. Set up Stripe Connect onboarding: on coach signup, call stripe.accounts.create({type:'express'}) and stripe.accountLinks.create() to redirect coach through Stripe Express onboarding; store stripe_account_id on coaches table. 11. Deploy to Vercel, set all env vars (SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY, STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, RESEND_API_KEY), configure Stripe webhook endpoint in dashboard pointing to your Vercel deployment URL.
Generated
April 9, 2026
Model
claude-sonnet-4-6 · reviewed by Claude Sonnet