Waitlist sniper for gym classes

ConsumerWeb1 weekNode.jsPlaywrightPush notifications

The idea

In big cities, popular studio classes (reformer pilates, spin, climbing slots) book out in minutes and the built-in waitlists are either missing or first-come-only-if-you-happen-to-look. Cancellations are constant — spots open at 11pm the night before and go to whoever’s refreshing. People already set alarms to check manually; that’s the signal an alert bot is worth paying for.

Who pays

Urban fitness regulars — the same people paying $30–40 per class. $6/month to stop losing spots is a trivial spend. Start hyper-local: one city, one or two booking platforms, seed it in local fitness subreddits and gym WhatsApp groups.

MVP scope

  • One booking-platform adapter, pluggable design for more
  • Watch by URL, push + email alerts
  • Shared polling with caching and polite rate limits
  • Free/pro tiers with Stripe
  • Skip for v1: auto-booking (has ToS risk — evaluate per platform later), mobile app
// Build prompt — paste into Cursor / Claude Code / Lovable / Bolt
Build SpotOpen: a service that watches fully-booked fitness classes and
alerts users the instant a spot opens.

Core flow: a user pastes the public booking-page URL of a class (start
with one widely-used booking platform, e.g. Mindbody-powered pages, and
design the scraper layer as pluggable adapters). The app polls the class's
availability every 60 seconds. When a spot opens, the user gets an instant
web push notification and an email with a direct booking link.

Stack: a Node.js + TypeScript backend with a job queue (BullMQ + Redis)
running Playwright checks, Postgres for users/watches, a Next.js frontend
for the dashboard, web-push for notifications, Resend for email.

Dashboard: list of watched classes with status (full / OPEN / class
started), notification history, and a quota indicator. Free tier: 2 active
watches, 5-minute polling. Pro ($6/month via Stripe): 10 watches,
60-second polling.

Important implementation details: rate-limit and cache per booking page so
ten users watching the same class trigger one poll, not ten; back off
politely and identify the bot honestly in the user agent; stop watches
automatically once the class start time passes.

// More Consumer ideas