← All projects
Marketplace Next.js Stripe Connect Zoom API

Upward Facing Cat

A B2C marketplace connecting dance students with instructors for live online classes — handling real-time scheduling, automatic Zoom meeting creation, multi-party Stripe Connect payments, and end-to-end test coverage with Playwright.

Context

Online dance instruction was growing fast, but the existing tools — Eventbrite for ticketing, Zoom for video, Stripe for payments — were disjointed. Upward Facing Cat needed a single product that handled discovery, booking, payment, and the video meeting link, seamlessly, for both teachers and students.

What I built

I was the full-stack lead, building the product from the ground up on Next.js with TypeScript and a PostgreSQL database (Supabase) managed through Prisma.

Authentication — Multi-provider auth via NextAuth: credentials with email verification and password reset, OAuth, and Google reCAPTCHA on sign-up forms.

Zoom OAuth2 integration — Implemented the full OAuth2 token exchange and refresh cycle. When a student books a class, the system automatically creates a Zoom meeting via the API and includes the meeting link in the confirmation email. Teachers connect their Zoom account once; the rest is automatic.

Stripe Connect — Teachers onboard as Stripe Connected accounts. Students pay via Checkout Sessions. Webhook-driven booking and refund flows with configurable revenue splits between teacher and platform.

Class creation and scheduling — A multi-step class creation form with a timezone-normalised schedule picker. Classes display in each user's local timezone throughout.

Dashboards — Teacher dashboard (earnings, upcoming classes, class management) and student dashboard (bookings, Zoom links, billing history). Redux-managed cart with session persistence.

Testing — Playwright E2E test suite covering the critical booking and payment flows.

Outcome

A production-ready marketplace with a fully relational data model, automated video scheduling, multi-party payments, and E2E coverage — fully deployable on Vercel.