Full-Stack & Mobile
ZenCub — Native iOS App
ZenCub turns Brazilian Jiu-Jitsu instructional videos into clean, structured 'recipe cards' — step-by-step technique breakdowns generated by AI. Paste a YouTube, TikTok, or Instagram link and get an organized walkthrough you can actually study from. We designed and built the product end to end, from the native iOS app to the backend that does the heavy lifting.
Stack
Concepts
How it works
The whole flow, traced from your first tap.
- 01
iOS · SwiftUI
Sign in
Auth runs through the official supabase-swift SDK. We subscribe to the SDK's auth-state stream and mirror the session into an @Observable store, so every screen reacts the instant you sign in or out — no manual refresh, no stale UI.
supabase-swiftMagic linkGoogle OAuth - 02
iOS · Share Extension
Add a video — paste it, or share it straight from YouTube, TikTok, or Instagram
A share-sheet extension lets you import without ever opening the app — it fires the request as the signed-in user through an App Group bridge. Our URL parser tames the messy real world: shorts, reels, youtu.be, vm.tiktok short links and tracking junk all resolve to the right video.
Share ExtensionApp GroupsVideoURLParser - 03
Railway · Next.js API
Kick off the import
Before spending anything, a preflight call pulls the title, thumbnail, and platform and warns you if it's already saved. One POST then starts analysis and returns a job id — credits are checked server-side, and an in-flight import can be cancelled with an automatic refund.
RESTSupabase JWTServer-side credits - 04
Supabase Realtime
Watch it work, live
The app subscribes to your job's row over Supabase Realtime and streams a four-step checklist — Fetching → Transcribing → Reading the technique → Saving. If realtime ever drops, it silently falls back to polling so you're never stuck staring at a frozen screen.
Postgres realtimePolling fallback - 05
AI pipeline
AI breaks down the technique
The pipeline transcribes the video's audio and uses AI to extract a clean, structured, step-by-step technique card — turning a long instructional clip into something you can actually study from.
Speech-to-textLLM extractionStructured output - 06
iOS · SwiftUI + Supabase
It's in your library
The finished technique lands in your Library and Stacks. A stale-while-revalidate query cache makes everything open instantly while fresh data loads in the background — backed by image caching, network-aware retries, and Sentry crash reporting from day one.
Stale-while-revalidate cacheImage cacheRetrySentry
The problem
BJJ technique is scattered across thousands of hours of video. Finding the one detail you need means scrubbing through long clips, and there's no consistent way to capture, organize, or revisit a technique once you've watched it. Practitioners wanted the substance of a video without re-watching it every time.
What we built
A native iOS app backed by a full web service layer. A user pastes a video link; the backend pulls the video and transcript, and AI converts it into a structured, step-by-step technique breakdown — grips, positions, and key details laid out as a readable card. Users build a personal library of techniques they can search and revisit.
How it works
The pipeline downloads and processes source video, extracts the transcript, and runs it through Anthropic and OpenAI models to produce structured, consistently-formatted output. Everything is stored in Supabase, subscriptions are handled through the App Store with server-side receipt validation, and push notifications keep users engaged with new content.
Outcome
What started as a proof of concept became a working iOS product with paid subscriptions and a real content pipeline — demonstrating the full path from raw video to a polished, monetized native app.
Interested in something similar?
Tell us what you need and we'll figure out how to ship it.