2025 · Next.js · Supabase · Stripe Connect

CageList

A marketplace where players book batting cages and facility owners get paid. I built it, launched it, and still run it every day.

The problem

Facility owners had empty cages on weekday afternoons and no way to sell that time. Players had nowhere to look. Both sides were coordinating over text messages and cash.

What I built

A two-sided marketplace: facilities list their cages and hours, players book and pay in the app, and the money moves to the facility through Stripe Connect. Directory-only listings exist for facilities that are not ready to take bookings, and are modelled as a separate state so nobody can book them by accident.

Where it stands

Live and operating. Bookings, payouts, refunds and disputes all run through the system, and I am the one who handles them.

Under the hood

Next.js on Vercel, Postgres and auth on Supabase with row-level security on every table, Stripe Connect for payouts, Twilio for booking reminders, Resend for transactional email, Sentry and PostHog for errors and behaviour.