EduTech mobile learning app
99.9% uptime
Crash-free sessions above 99.5% with offline playback across low-bandwidth regions.
Fifty thousand learners on patchy networks needed lessons that worked offline, push nudges that felt helpful, and dashboards leadership could trust — on one codebase for iOS and Android.
- Client
- EduTech scale-up · B2C learning
- Duration
- 20 weeks
- Stack
- Flutter · Firebase · Node.js · PostgreSQL
The client had outgrown their first React Native build. Crashes spiked after OS updates, lesson downloads failed silently on 3G, and the content team had no visibility into which modules learners abandoned. They needed a reliable app and honest analytics — not another feature list.
Outcomes at a glance
Proactive alerts and autoscaling on lesson API during campaign spikes.
Offline mode removed the #1 support complaint from the prior release.
Single Flutter repo shipping iOS and Android on the same weekly train.
Content teams see yesterday's cohort data by mid-morning, not next week.
The challenge
Learners in commuter corridors and rural districts lost progress when connections dropped mid-lesson. The old app treated offline as an error state instead of a normal condition.
Marketing wanted push campaigns; pedagogy wanted respectful nudges tied to actual progress. The existing notification setup blasted everyone at the same time.
Leadership dashboards pulled from a brittle nightly ETL job. By the time content teams saw drop-off data, campaigns had already moved on.
Our approach
We rebuilt in Flutter with a local-first lesson cache: videos and quizzes download in the background, progress syncs when connectivity returns, and the UI always shows what is available offline versus streaming.
Firebase Cloud Messaging drives segmented pushes — completion reminders, streak nudges, and re-engagement — with frequency caps so learners are not spammed.
A Node.js analytics service streams events into PostgreSQL and powers near-real-time dashboards: module completion, median session length, and cohort retention by acquisition channel.
How we delivered it
Weeks 1–3 · Foundation
Architecture, offline storage design, and analytics event schema agreed with content + growth teams.
Weeks 4–12 · App rebuild
Core learning loop, downloads, notifications, and accessibility pass for screen readers.
Weeks 13–16 · Dashboards
Ops console for content performance and export APIs for leadership reviews.
Weeks 17–20 · Store launch
Staged Play Store / App Store rollout with crash budgets and hotfix lane.
Offline-first by design
Lessons are packaged as versioned bundles. The app checks hashes before playing, so partial downloads never corrupt the learner experience. When a new version publishes, only changed assets re-download.
We tested on real devices across Jio and Airtel throttled profiles — not just office Wi-Fi — before calling offline done.
Release discipline
Staged rollouts (5% → 25% → 100%) with Firebase Crashlytics gates prevented bad builds from reaching the full base. Weekly releases continued through the holiday enrollment surge without a severity-1 incident.
"Our content team finally sees where learners struggle the same week it happens. That changed how we author modules."
Planning something similar?
Tell us about your constraints, timeline, and what success looks like. We will share an honest assessment — including whether we are the right fit.