Pick a subject to begin {{ selectedSubjectName }} — grades and courses {{ selectedSubjectName }} / {{ selectedCourse }} — outcomes
How the personalised learning platform works
1. Where the curriculum comes from
Every outcome in this explorer is sourced from LearnAlberta.ca, the Government of Alberta's official curriculum site. We mirror the K-12 Programs of Study into a read-only Postgres database so the staff portal and the AI agents can cite real outcome codes instead of paraphrasing or inventing learning objectives.
The mirror holds 51,410 curriculum nodes across all subjects, courses and grades. We do not modify the source content. When LearnAlberta.ca publishes an update, we re-mirror.
2. The technology stack
The platform is intentionally simple so a small team can maintain it.
| Layer | Choice | Why |
|---|---|---|
| Frontend | Vue 3 via CDN | No bundler. View source in a browser. |
| Backend | Node.js + Express (ES modules) | One process serves both UIs and the API. |
| Database | Postgres 15 on Render | Students, plans and generated media live in BYTEA columns. |
| Curriculum mirror | Read-only Postgres replica | Powers the explorer and the planner. Never written to. |
| Hosting | Render.com web service | Auto-deploy from GitHub. Health check on /api/health. |
3. The AI partners
Three providers, each chosen for the thing it does well:
- Vertex AI (Anthropic Claude Sonnet 4.6) writes the plan and runs the conversational helper. It is given the candidate curriculum outcomes and forced through a tool-use schema, so it cannot invent codes.
- OpenAI gpt-image-1 generates the cover image and per-section illustrations in a consistent classroom style.
- ElevenLabs eleven_multilingual_v2 narrates the plan summary with a custom voice so a parent can listen on a phone in the car.
4. How a personalised plan is built
For each subject the student has term marks in, we compute the last-two-term average and pick a direction: remediate (avg under 60), on-grade, or accelerate (avg 88 or above).
We pull the top curriculum outcomes for the target grade from the read-only mirror. These become the only outcomes the LLM may cite.
Claude Sonnet picks 3-5 outcomes per subject, writes a rationale, and proposes 2-3 activities. Audience tunes the language (teacher, parent or student).
The plan summary is sent to ElevenLabs with the custom voice. The resulting mp3 is stored in Postgres as BYTEA so playback works directly from the database.
OpenAI generates a cover image, prompted with the subject, grade and audience plus a fixed house style for visual consistency.
5. Student data and privacy
The students in this demo are synthetic. ASINs, names and marks are generated. No real-student identifying data is ever sent to any AI provider. The conversational helper only sees fields that the staff portal exposes (current grade, complexity flags, recent marks). The curriculum mirror is read-only and never receives prompts about specific students.
Where to next
Try the explorer to see the actual curriculum, or open the staff portal to see how plans are generated for a student.
What does one course pack cost?
A course pack is the bundle of artefacts the platform produces for one student: a plan, an audio narration, and one or more illustrations. Costs come from three providers; rates are public list prices as of January 2026 and may have changed by the time you read this.
Tune your assumptions
Per-asset prices (list)
| Asset | Unit | USD |
|---|---|---|
| Plan (Claude Sonnet, ~4k input + 1.5k output tokens) | 1 plan | $0.026 |
| Plan narration (ElevenLabs, ~900 chars at $0.0003/char) | 1 mp3 | $0.27 |
| Cover image (OpenAI gpt-image-1, 1024x1024, medium) | 1 image | $0.04 |
| Follow-up question (Claude Sonnet, ~2k input + 600 output) | 1 chat | $0.015 |
Estimates assume Vertex pricing of $3 per million input tokens and $15 per million output tokens for Claude Sonnet, OpenAI gpt-image-1 medium-quality 1024x1024 at $0.04 each, and ElevenLabs at roughly $0.30 per 1000 characters on the Creator tier.
Your projected cost
| Cadence | Plans | Audio | Images | Chats | USD |
|---|---|---|---|---|---|
| Per day | {{ daily.plans }} | {{ daily.audio }} | {{ daily.images }} | {{ daily.chats }} | ${{ fmt(daily.total) }} |
| Per week | {{ weekly.plans }} | {{ weekly.audio }} | {{ weekly.images }} | {{ weekly.chats }} | ${{ fmt(weekly.total) }} |
| Per month | {{ monthly.plans }} | {{ monthly.audio }} | {{ monthly.images }} | {{ monthly.chats }} | ${{ fmt(monthly.total) }} |
Sticker shock check
At the typical demo cadence of 1-2 course packs per day with one narration and one cover image, expected per-student spend is roughly $0.35-$0.70 per day before discounts. Caching the same audio across siblings or sharing illustrations within a class cuts the cost noticeably.