Swipe. Watch. Learn. — Learn Languages with Short Videos on SenseiLoop

Inspiration

Short videos make it easy to start watching, but learning needs a way to return to useful material and practise it. SenseiLoop brings those pieces together: discover a teacher, watch a compact lesson, save it, and come back for a quick review.

What it does

SenseiLoop is a native iOS language-learning app with teacher-led vertical videos, pronunciation, natural example sentences, and synchronized captions. Learners can choose multiple learning languages, follow teachers, like and save lessons, revisit viewing history, and practise vocabulary through review quizzes. The lesson catalogue is internally curated; users cannot upload videos or publish public posts.

The 1.1 release candidate adds an optional SenseiLoop Basic monthly subscription powered by RevenueCat. The free plan is designed around 10 distinct videos per day, with same-day replays free and a clearly disclosed midnight Japan-time reset. Basic removes the daily limit. The quota remains disabled during purchase validation so learners are not blocked before subscriptions are ready.

How we built it

The iOS app uses Swift and SwiftUI. RevenueCat handles product offerings, purchases, and restoration through StoreKit 2. The backend runs on Cloudflare Workers, with D1 for account and learning state and private R2 media storage. Shared TypeScript/OpenAPI contracts generate a Swift API client. Our production lesson pipeline uses Qwen and Seedance.

Billing is intentionally removable: the app depends on a small provider interface, and the backend verifies Apple-signed transactions independently. RevenueCat can later be replaced by a direct StoreKit provider without discarding subscription history.

Challenges and what we learned

The main challenge was making purchase status, account identity, and daily viewing limits agree across cached playback, restoration, and temporary network failures. We use atomic daily-slot admission, preserve signed purchase proofs until the API confirms them, and keep subscription ownership separate from recommendation and learning state.

Another challenge was a dependency that initialized randomness at module load, which Cloudflare Workers rejected. Moving the official Apple verifier initialization into request handling preserved signature verification while resolving startup validation.

Accomplishments

The release candidate passed 57 API, contract, and publisher tests, local iOS tests, signed archive validation, and GitHub CI. Staging and production deployments completed through GitHub Actions, and live smoke checks covered lesson activation, playback grants, subscription state, and rejection of forged Apple notifications. Build 9 has been uploaded to TestFlight. Final on-device purchase validation and App Store review are still pending.

What is next

Complete purchase and restoration validation, publish the RevenueCat-enabled update in Japan and the United States, and tune the free allowance and learning loop using feedback after submission.

Built With

Share this project:

Updates

Submission history