PROJECT 03
play_lesson

IEA Learning Management System

business Intervention Education Australia location_on Australia category Justice / Healthcare check_circle Pre-launch (~85% complete)

A full-stack LMS for a justice system rehabilitation programme — multi-role, self-hosted video with signed URLs, counselling booking system, corporate employer portal, and PDF certificate generation.

01. The Challenge

Intervention Education Australia delivers a structured rehabilitation programme for violent offenders — accessed by individuals referred through the justice system, self-referred participants, and corporate clients. The platform needed to handle sensitive participant data, a structured video-based curriculum, counselling session booking, corporate employer dashboards, and certification.

02. The Solution

I built the complete IEA platform from the ground up: a full-stack React/Node.js SPA with a structured RESTful API, PostgreSQL database, and integrations across Stripe, Microsoft Graph, Google/Microsoft OAuth, and Azure Storage.

  • Multi-role system: Participant, Counsellor, Employer (Corporate), and Admin — each with distinct permissions and dashboards
  • Comprehensive authentication: email/password, JWT, email verification, password reset, magic links, Google/Microsoft OAuth, account lockout
  • Self-hosted video with HMAC-SHA256 signed URLs (time-limited — cannot be hotlinked or downloaded)
  • Stripe Checkout for individual and bulk corporate purchases with tiered discounts (10%/20%/30%)
  • Counselling booking system: counsellor availability management, 30-minute interval slots, 24-hour cancellation window
  • PDF certificate generation via Puppeteer on programme completion
  • GitHub Actions CI/CD: automatic staging deploy on push, manual production trigger

03. The Outcome

A production-ready sensitive-data platform handling the full participant journey from enrolment through video-based learning, counselling sessions, and certification — approaching launch.

arrow_back All projects Start a project arrow_forward