Skip to main content

School Platform

info

A Year 7 homeschool tracking platform for Western Australia, designed for home educators to track curriculum coverage, activities, and evidence for moderator meetings. Built with Next.js 16, PostgreSQL, and OpenAI.

School Platform series

  1. School Platform - You are here
  2. Architecture
  3. AI features
  4. Calendar integration
  5. Deployment

Why this exists

In Western Australia, home educators must demonstrate that their children are covering the 8 mandatory curriculum learning areas. Moderator meetings require evidence of activities, progress tracking, and curriculum alignment. Most families use a mix of spreadsheets, folders, and memory. I needed something better.

This platform replaces scattered tracking with a single self-hosted application. Activities are logged with multi-area tagging. Evidence is uploaded and linked. Progress is visible at a glance. AI generates cross-curricular learning adventures from simple seed ideas, and a built-in Q&A assistant helps answer subject questions in an age-appropriate way.

The entire platform runs on my Kubernetes cluster, keeps all data on-premises, and works on both desktop and mobile.

Dashboard overview showing stats, learning areas, and upcoming dates.

What it provides

FeatureDescription
DashboardOverview with stats cards, learning area grid, and upcoming dates
ActivitiesCRUD for learning activities with multi-area tagging
Curriculum8 WA learning areas with progress tracking and outcome checklists
EvidencePhoto and document gallery for moderator meetings
Moderator prepChecklist and summary for evaluation meetings
AI study unitsGenerate cross-curricular learning from seed ideas using OpenAI
Ask Bob Q&AInteractive AI assistant for subject questions with conversation history
Google CalendarOAuth connection, sync, event creation, activity linking
Admin pageDatabase backup/restore, Obsidian import, calendar management
Mobile responsiveAuto-collapsing sidebar, touch-friendly on iPhone and Android
AuthenticationZitadel OIDC for admin functions, open viewing on local network

Tech stack

ComponentTechnology
Frontend and backendNext.js 16 (App Router), React 19
DatabasePostgreSQL 16.4
ORMPrisma 7
AIOpenAI GPT-4o and GPT-4o-mini
AuthenticationAuth.js v5 with Zitadel OIDC
CalendarFullCalendar with Google Calendar API
NotificationsSlack (@slack/web-api)
UI componentsshadcn/ui (Radix UI and Tailwind 4)
DeploymentKubernetes with Flux GitOps
CI/CDGitLab CI with Kaniko
File storageNFS (QNAP NAS)
SecretsSOPS with age encryption
MonitoringUptime Kuma and Prometheus

Architecture overview

Learning areas

The platform tracks the 8 mandatory WA Curriculum learning areas:

AreaCodeColour
EnglishenglishBlue
MathematicsmathsPurple
SciencescienceGreen
Humanities and Social ScienceshassOrange
TechnologiestechnologiesCyan
Health and Physical Educationhealth-peRed
The ArtsartsPink
LanguageslanguagesYellow

Each area has curriculum outcomes that can be tracked as Not Started, Working On, or Accomplished. Activities can span multiple areas for cross-curricular coverage.

How it came together

The platform was built in 16 phases, each adding a focused capability:

  1. Scaffold and core UI - Next.js 16 with App Router, Prisma 7, shadcn/ui, dashboard, activities, curriculum, and evidence pages.
  2. Kubernetes deployment - Manifests, Flux GitOps, NFS storage, SOPS-encrypted secrets, and GitLab CI/CD.
  3. Database and seeding - 22-model schema with the 8 learning areas, key dates, and initial student record.
  4. Evidence gallery - Photo upload with drag-drop, lightbox viewer, and NFS storage integration.
  5. Theme and mobile - Dual-storage theme persistence, auto-collapsing sidebar, touch-friendly responsive layout.
  6. Authentication - Zitadel OIDC for admin functions with a "local network trust" model for family use.
  7. AI study units - OpenAI-powered generation that turns seed ideas into cross-curricular learning adventures with a personalised AI assistant.
  8. Ask Bob Q&A - Interactive AI assistant accessible from anywhere in the app with full conversation history.
  9. Database management - SQL backups with daily CronJob, 30-day retention, Slack notifications, and verification.
  10. Google Calendar - OAuth connection, event sync, privacy masking, activity linking, and public event creation.

Mobile responsive view showing the platform on a smaller screen.

Authentication model

The platform follows a "local network trust" model. Most actions are open because the app runs on a private network used only by the family. Admin functions that could cause data loss require Zitadel OIDC authentication.

ActionAuth required
View dashboard, activities, curriculumNo
Add activities, upload evidenceNo
View calendar, create eventsNo
Change themeNo
Delete recordsYes (admin)
Database backup and restoreYes (admin)
Import from ObsidianYes (admin)
Connect and sync Google CalendarYes (admin)

The numbers

  • 16 phases, all complete
  • 22 database models
  • 8 learning areas with curriculum outcome tracking
  • 3 AI features (study units, Ask Bob, preference memory)
  • Daily automated backups with 30-day retention and Slack alerts