Thai Alphabet
A mobile Thai-learning app focused on letters, tones, pronunciation, writing, review, and beginner-friendly progression.
Mobile Product Engineer

- 200+
- audio files
- FSRS
- review scheduling
- RevenueCat
- subscriptions
Work overview
A quick read on where the work sat, what made it hard, what I owned, and what changed.
Context
Thai Alphabet is built for English-speaking learners who are new to Thai script. The app has to teach letters, tones, sounds, and recall without turning the first weeks into a wall of charts and exceptions.
What was hard
The difficult part is that Thai learning problems overlap. A learner is not just memorizing symbols; they are dealing with consonant classes, tones, vowel length, pronunciation, review timing, and confidence at the same time.
My part
I designed and built the Expo app, lesson flows, practice modes, local storage, audio-backed content, pronunciation feedback, Java/Spring API support, and RevenueCat subscription setup.
What changed
The product brings those pieces into one path: structured lessons, FSRS review, 200+ audio files, speech-to-text feedback, tone and writing practice, local storage, and subscriptions.
Constraints that mattered
- Too many practice choices make beginners feel like they are managing the app instead of learning Thai.
- Review and practice have to feel instant; waiting on network state breaks concentration.
- Pronunciation feedback must be useful without making learners afraid to speak.
- Subscriptions must stay out of the way of the core learning rhythm.
Approach
Lead with sequence, not options
The app introduces material in a guided order and keeps advanced practice behind clearer entry points instead of exposing every drill immediately.
Make review feel quiet
FSRS, local progress, audio, tone practice, writing, and pronunciation checks work in the background so the learner sees the next useful step.
Keep learning state on the device
SQLite and MMKV keep progress, review queues, drafts, and practice state fast, while the backend and subscriptions stay in their own layers.
Key decisions
A few engineering choices that shaped the implementation and delivery path.
Use a guided learning path before broad custom practice
Beginners need the app to prevent avoidable confusion around Thai letters, tones, and transliteration.
The learner gets a path to follow instead of having to assemble a curriculum from practice modes.
Use local-first storage for learning state
Practice should feel instant and reliable; waiting on network state breaks the learning rhythm.
SQLite/MMKV support resilient review, progress, and draft state inside the mobile app.
Combine FSRS, audio, and pronunciation feedback
Thai learning is not only recognition. Learners need sound, recall, tone awareness, and enough confidence to keep speaking.
The product supports repeated recall while still grounding learners in real audio and speech practice.
What I did
Built
- React Native / Expo lesson, practice, review, tone, writing, and pronunciation flows.
- Local SQLite/MMKV persistence with backend support through a Java Spring REST API.
- Audio-backed learning content, FSRS flashcards, and RevenueCat subscription wiring.
Improved
- Learner progression by reducing redundant choices and preserving return context.
- Pronunciation practice through guided feedback instead of generic correctness screens.
- Mobile UX density, motion, and hierarchy through simulator-first iteration.
Owned
- Pedagogical decisions around how English-speaking learners approach Thai script.
- End-to-end app quality from curriculum content to native mobile presentation.
- The product path from lesson completion to review, practice, and monetization.
Local-first mobile learning system
The architecture keeps core learning fast on-device while syncing and monetizing through dedicated service layers.
Expo App
Lessons, practice drills, pronunciation, review, progress, and subscription UI.
Local Learning State
SQLite/MMKV storage for progress, review queues, drafts, and offline continuity.
Learning Engine
FSRS scheduling, audio assets, speech feedback, tone and writing practice.
Services
Java Spring REST API, RevenueCat subscriptions, and media/content workflows.
Learnings
- Learning UX needs fewer visible choices than a generic practice app, especially for beginners.
- Local-first storage changes the feel of a mobile app: practice must be instant and resilient.
- Language products need pedagogy, not just content coverage and feature quantity.