Production-ready, open-source adaptive maths platform for UK primary schools (Years 1–6). Self-host on your own infrastructure — schools keep full control of pupil data.
Repository: github.com/CreativeLabs-LMS/platform · Live demo: lms.creativelabs.app · Project site: creativelabs.app
Illustrations from the project website — interactive modules include fraction walls, place-value blocks, MTC drills, and more.
| Layer | Technology |
|---|---|
| Frontend | React 18 + TypeScript + Vite |
| Canvas | Konva.js (clock module) |
| Drag & Drop | @dnd-kit/core |
| Backend | Go 1.26 + Gin |
| Database | PostgreSQL 16 |
| Cache | Redis 7 |
| Deployment | Docker Compose + Helm 3 |
git clone https://github.com/CreativeLabs-LMS/platform.git
cd platform
docker compose up --build- Frontend: http://localhost:5173
- API: http://localhost:8080
- Health: http://localhost:8080/healthz
Select Maple Grove Demo School on the login screen. Full credential tables in docs/development.md.
| Role | Username | Credential |
|---|---|---|
| Pupil | alex.j |
PIN 123456 |
| Teacher | jsmith |
teacher123 |
| IT Admin | admin |
teacher123 |
- Developers: website/contribute-tech.html — Go, React, Helm, tests
- Teachers: website/contribute-teachers.html — curriculum review, pilots, question writing
- Issues & PRs: github.com/CreativeLabs-LMS/platform
cd backend
export DATABASE_URL=postgres://maths:maths_dev_password@localhost:5432/maths_lms?sslmode=disable
export REDIS_URL=redis://localhost:6379/0
export JWT_SECRET=dev-jwt-secret-change-in-production-min-32-chars
go run ./cmd/servercd frontend
npm install
npm run devStart PostgreSQL and Redis via docker compose up postgres redis.
- Base 10 / Place Value Blocks
- Fraction Wall
- Number Line Estimator
- Column Method (addition & subtraction)
- Long Multiplication
- BODMAS Sequencer
- Times Tables Rapid Recall
- Analog Clock (Konva canvas)
- Shape Classification Matrix (Carroll diagram)
- Perimeter & Area Grid
- Live Graph Builder
- Pictogram Builder
- Fraction Visualiser
- JWT auth (8h pupil / 2h staff + refresh tokens)
- Account lockout after 5 failed attempts
- Adaptive engine with EMS scoring (SM-2 hybrid)
- Spaced repetition queue composition (40/30/20/10 split)
- Persistent struggle detection + teacher alerts
- All REST API endpoints (
/api/v1/...) - Prometheus metrics at
/metrics - Health checks at
/healthzand/readyz
- Pupil practice session with progress bar
- Constellation badge map + skill progress
- Teacher class overview with EMS table
- Individual pupil drill-down
- Teacher intervention alerts
Private registry on the cluster (localhost:32000 from nodes). Set REGISTRY_PUSH in the Makefile to your build host (see make push).
# Build images and push to registry
make push
# Deploy to Kubernetes (ingress: https://lms.creativelabs.app)
make helm-installOr in one step:
make allProduction settings: copy helm/values-prod.yaml.example to helm/values-prod.yaml and set your domain, registry, and secrets. Override at deploy time:
make helm-install VERSION=5.0.1 NAMESPACE=lmshelm upgrade --install lms ./helm \
-f helm/values.yaml \
-f helm/values-prod.yamlAccess at https://lms.creativelabs.app (point DNS to your ingress controller).
make test # backend (go test) + frontend (vitest)
cd backend && go test ./...
cd frontend && npm testBackend tests cover adaptive EMS, validation (all 17 UI types), auth/JWT, middleware, MTC assessment, generators, and admin role checks.
- Privacy / GDPR — schools self-host and control their own data
- API error codes — stable
LMS-*codes for support triage
platform/
├── backend/ Go API + adaptive engine
├── frontend/ React SPA + module registry
├── website/ Marketing site + privacy + contribute pages
├── migrations/ PostgreSQL schema + demo seed data
├── helm/ Kubernetes Helm chart
├── docker-compose.yml Local development stack
See the docs/ folder:
- Architecture
- API reference
- Development guide
- Deployment
- Curriculum modules
- Gaps & limitations
- Error codes
Licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
You may use, modify, and self-host this software freely. If you run a modified version as a network service, you must release your source code under the same license. Commercial relicensing is not permitted without written permission from the copyright holders.