Skip to content
JB
AboutProjectsResumeGitHubLinkedIn
Back to projects

Project ยท 2026

Grind

Offline-first interview prep app built on spaced repetition, for iOS, Android, and web, with optional cloud sync and a leaderboard.

  • TypeScript
  • React Native
  • Expo
  • Supabase
  • RevenueCat
  • PWA
Private project
Grind home screen showing a day-streak counter, level and XP, a due-today count, a Start today's session button, session size options, and per-track cards for System Design, Coding / LeetCode, and Behavioral.
Home: your streak, level, and what's due today, with one tap to start a spaced-repetition session.
A study session question on message queues with four multiple-choice answers, a System Design tag, difficulty label, and a 1 / 10 progress indicator.
A session question: rate yourself honestly and weak answers resurface sooner.
Browse screen letting you mix topics, canonical problems, and company-specific decks (Airbnb, Amazon, Google, and more) into one custom study session.
Browse: build a custom session from topics, canonical problems, and company decks.

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/core package (types, SRS, gamification, sessions) with zero React or DOM imports, guarded by a jest check.
  • The app supplies its own on-device StatePort backend, 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.

Jordan Bui

GitHubLinkedInEmail