Coaching platform with course subscriptions & admin CMS
The problem. A coaching business needed to sell a course and recurring subscription online, with no way to gate video content or process payments automatically.
What I built. Backend, data, and admin engineer on a two-person build: a collaborator owned the front-end design phase, and this covered the entire backend and admin layer end to end afterward: Supabase schema, auth, and Row-Level Security; an admin CMS for managing courses, lessons, and video uploads; Stripe Checkout for one-time module purchases and a recurring all-access subscription, driven by a signature-verified webhook that creates enrollments automatically; a student dashboard for gated video lessons and progress tracking; and production operations, including recovering the live database through an infrastructure migration.
A decision worth noting. The middleware admin check calls a service-role REST endpoint directly instead of going through the Supabase SDK client: a deliberate workaround after hitting SDK reliability issues there, prioritizing a correct admin gate over using the SDK the 'intended' way. Paid video is served through short-lived signed URLs rather than a public bucket, reserving that extra protection for the one content type that actually needed gating. When schema drift caused production permission failures that all looked identical from the UI, debugged by layering service-role and anon-key requests against the API to separate infra outages from missing table grants from missing RLS policies (three different failure modes needing three different fixes), then documented the exact provisioning runbook so it wouldn't need reverse-engineering again.
The outcome. Replaced a fully manual enrollment and delivery process with self-serve checkout, automatic enrollment, and gated content access: zero manual intervention required per sale. Gave a non-technical business owner an admin CMS to run courses, blog content, and leads without engineering involvement. ~2 months on the backend/admin phase, following an initial design phase.