
Context
Aedah is named after my daughter. It is a free, offline-first, mother-tongue-first adaptive learning platform for children from pre-literacy through Grade 8, designed to grow with the learner into higher grades. The design constraint that shaped everything: it has to work for a child with no device of their own, no school, and no literate adult at home. The mascot is a falcon, Iqbal's shaheen, that learns to fly higher as the child does.
The core ideas
- Mother tongue first. A child starts in their own language (Urdu, Punjabi, Sindhi, Pashto, Saraiki, Arabic or English), learns to read by listening and tapping, and only then moves into other languages.
- Adaptive, and deliberately not AI. The engine uses established, deterministic learning science: a skill graph, Bayesian Knowledge Tracing to estimate mastery, Item Response Theory to calibrate difficulty, and SM-2 spaced repetition to schedule review. It runs on the device at zero per-student cost. No inference bill, no network required, no black box.
- Offline first, the WhatsApp model. Content is cached locally, progress lives on the device with a user-owned backup, and a thin server exists only for records.
- Reaches the unreachable. A volunteer or classroom mode lets anyone with one large screen run a community learning circle for children without devices.
- Language Learning Studio. An optional track teaching four world languages (Arabic, Chinese, Turkish and English) communicatively, built around a volunteer community of native speakers with live cafés, story hours and conferences.
How it was built
Engine first. The adaptive core is pure Dart with no dependency on a device, which means it defines the data contracts every platform builds against and can be tested exhaustively on its own. It is complete: thirty-two tests pass, and a demo runs a simulated learner through the system so you can watch mastery estimates and review schedules evolve. Only then did the Flutter app start, and its first slice (the learner shell, the Learning Map and the audio-first activity loop) already runs against the real engine.
The full product and architecture specification is a self-contained HTML site inside the repository, so the design is versioned with the code.
Why the engine is not an LLM
Because the children this is for have no connectivity and no budget, and because reading progress should be explainable to a parent or volunteer. Bayesian Knowledge Tracing and Item Response Theory are auditable; a probability of mastery is a number you can show. That is a design decision, not a limitation.
Evidence
The engine package with its test suite and simulated-learner demo, the specification site, and the running first slice of the Flutter app are all in the repository. This is a different register of work from the commercial projects in this portfolio, and I keep it that way on purpose.