Skip to content
Amer Khorsheed
All work

Case 03Adaptive learning · EdTech

Arithmetic confidence for children, visible to parents.منتانورا

Year
2026
Status
Live
Discipline
Adaptive learning · EdTech
Mentanora landing page in Arabic
6
bounded contexts
4
languages
4
difficulty levels

01 — The problem

Drill apps either bore children or hide what they learn. Parents and teachers need to see mastery, and children need practice that adapts — all under privacy rules that apply to minors.

An adaptive mathematics platform for children: fresh problems every session across four difficulty levels, recommendations from each child’s mastery, pedagogical characters, and a console for parents and teachers — in Arabic, English, French and Turkish.

02 — What I built

  1. 01

    A Domain-Driven Django backend with isolated bounded contexts: accounts, families, characters, training, gamification and progress.

  2. 02

    Problem generation and next-exercise recommendation driven by measured mastery.

  3. 03

    A Flutter learner app and a Flutter web console for parents, teachers and administrators.

  4. 04

    Guardian-issued child session tokens, consent records, photo upload with metadata stripping and account deletion.

  5. 05

    A production deployment on Docker with Postgres, Redis, Celery workers and Caddy at the edge.

03 — Architecture

How the pieces fit.

  1. L1Clients
    • Flutter learner app
    • Flutter web console
    • 4 languages incl. RTL
  2. L2API
    • Django 5.2 LTS + DRF 3.18
    • Rotating JWT + blacklist
    • OpenAPI schema
  3. L3Application
    • Use cases & query services
    • Domain events
    • Composition root wiring
  4. L4Domain
    • Pure-Python entities
    • Zero framework imports
    • Enforced by import-linter

Requests flow top to bottom · each layer depends only on the one beneath

04 — Decisions that matter

Decisions

D01

Boundaries a linter can prove

import-linter enforces api → application → domain and forbids cross-context database imports, so the architecture cannot quietly erode.

D02

Ports and in-memory fakes

Services that protect business invariants depend only on repository and unit-of-work protocols, and are tested with the database switched off.

D03

Children are not users

Children never hold credentials — guardians issue scoped session tokens, and consent is recorded as proof.

05 — Security & trust

  • Two-factor authentication mandatory for administrators.
  • Rotating refresh tokens with blacklist; 6-digit one-time codes for resets.
  • HSTS preload, nosniff, frame and referrer policies at the edge.
  • EXIF and metadata stripped from every uploaded photo.

06 — Stack

  • Python 3.12
  • Django 5.2
  • DRF
  • PostgreSQL 17
  • Redis
  • Celery
  • Flutter
  • Dart
  • Docker
  • Caddy

07 — In the product

Mentanora console sign-in
The console for teachers and administrators.

Next case · 04

MDSS

A trading engine whose best feature is saying no.