Education · Mobile product/2026
SparkXP
Gamified English learning for Mongolian students and schools — mobile app, API, and admin dashboard, built end to end.
Role
Team lead · Full-stack · Mobile
- React Native
- Expo
- NestJS
- PostgreSQL
- Redis



- Mobile app
- Landing page
- Admin dashboard
Overview
SparkXP is a gamified English-learning app for Mongolian students and schools, built to make daily practice feel like play. It is one product across three surfaces — the app students and teachers use, the public landing page, and the admin dashboard the content team works in — all on one NestJS API. I led the build as team lead of three developers.
Problem
English learning in Mongolia is fragmented — static content, thin practice, and little to keep students motivated day to day.
Solution
A React Native app with structured lessons, spaced-repetition vocabulary, XP, streaks and leaderboards, plus an AI buddy for text and voice practice — backed by a NestJS API on PostgreSQL and Redis. Teachers get classes, join codes and assignments; the admin dashboard drives content, the AI generation pipelines, buddy configuration and plan limits.
Outcome
The API is deployed on Railway and the admin dashboard on Vercel; the student and teacher app is in active development ahead of its store release. Measured results go here once the app is in users' hands — not before.
Gallery
Explore the product screens. Select an image for a closer look.
Engineering highlights
Three surfaces, one product: the Expo app for students and teachers, the public landing page, and the admin dashboard — all on a single NestJS API.
Led it as team lead of three developers: I owned the backend, the admin dashboard and production deploys, with two developers on the mobile app.
AI runs through a gateway rather than scattered SDK calls — Gemini for vocabulary generation, reading comprehension questions, the in-app dictionary and speech-to-text; OpenAI's Batch API for word and idiom imagery; ElevenLabs for pronunciation audio and lesson-video transcription; Azure for text-to-speech.
The AI buddy is a real-time loop — speech in, model, speech out — with monthly voice and STT minutes enforced from the learner's plan, and generated speech cached so a repeated line costs nothing the second time.
The buddy's 3D avatar is a rigged GLB uploaded through the admin dashboard to Cloudflare R2 and referenced by URL, so a new character ships without an app release. That same model is the fox watching your cursor on this site.
The buddy avatar
The same GLB the app pulls from Cloudflare R2, re-exported at roughly 0.6 MB. The gaze is spread down the rig — head, neck, chest — clamped and damped, so it reads as looking rather than swivelling.