Project ยท 2026
Grind
Offline-first interview-prep drill (system design, coding, behavioral, company-specific) built on Leitner spaced repetition. Universal Expo app for iOS, Android, and web, with optional Supabase cloud sync, a global leaderboard, and a RevenueCat premium tier layered behind an on-device state seam.
- TypeScript
- React Native
- Expo
- Supabase
- RevenueCat
- PWA
Private project



Problem
Interview prep is scattered: system design here, LeetCode there, behavioral stories in a doc, and company-specific quirks in your head. I wanted one app that drilled all of it on a schedule, worked offline, and kept my data on-device.
Approach
A universal Expo app (iOS, Android, and web from one codebase) built on Leitner spaced repetition:
- Framework-agnostic domain logic lives in a
@grind/corepackage (types, SRS, gamification, sessions) with zero React or DOM imports, guarded by a jest check. - The app supplies its own on-device
StatePortbackend, so a signed-out, free user gets the full offline experience with no network required. - An optional Supabase account adds cloud sync and a global leaderboard; a RevenueCat premium tier gates behavioral and company-specific decks. Both are additive behind the same state seam.
- The web target ships as an installable offline PWA.
Highlights
- One codebase targets iOS, Android, and web.
- Offline-first: studying never requires the network.
- Leitner spaced repetition schedules reviews so weak answers resurface sooner.
- Cloud sync, leaderboard, and premium decks layer in without touching the offline core.