CodingIdeas.ai
← Back to Ideas

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

⚡ Yes

Hackathon Score

🏆 7/10

Validated by Real Pain

— seeded from real-world friction

real-world friction🔥 real demand

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

← Back to All Ideas