An AI-powered learning platform made with motivation and consistency in mind — and gamified by design.
  • TypeScript 95.2%
  • Python 3.2%
  • CSS 1.5%
Find a file
Sandro Alves 690398b7e4 docs(web): document the script checks and refresh install hints
Add a Script checks section to testing.md covering test_scripts.py,
unit_test.py and diagnostics.py, drop the docs-voice note from the index,
align the setup install steps with install.py and fix its stale Node and
Yarn prerequisite hints.
2026-10-03 09:17:43 +01:00
.husky chore(web): install husky pre-commit gates 2026-08-22 15:10:42 +01:00
.yarn/releases feat(openlearn): rebrand platform and redesign UI with the Vortexia theme 2026-08-12 16:58:39 +01:00
docs docs(web): document the script checks and refresh install hints 2026-10-03 09:17:43 +01:00
public feat(openlearn): rebrand platform and redesign UI with the Vortexia theme 2026-08-12 16:58:39 +01:00
scripts docs(web): document the script checks and refresh install hints 2026-10-03 09:17:43 +01:00
src feat(web): fail fast on insecure environment configuration 2026-10-02 07:08:55 +01:00
.dockerignore feat(openlearn): rebrand platform and redesign UI with the Vortexia theme 2026-08-12 16:58:39 +01:00
.env.local.example feat(web): fail fast on insecure environment configuration 2026-10-02 07:08:55 +01:00
.gitignore refactor(web): tokenize colors, dedupe user menu, silence prod logs 2026-09-09 02:37:06 +01:00
.node-version chore(web): add license, node version and engines 2026-08-22 03:03:23 +01:00
.prettierignore style: format frontend to prettier defaults 2026-08-18 00:18:51 +01:00
.yarnrc.yml feat(openlearn): rebrand platform and redesign UI with the Vortexia theme 2026-08-12 16:58:39 +01:00
AGENTS.md chore(web): prepare .env.local on install and fix admin discovery 2026-10-03 04:14:35 +01:00
docker-compose.yml style: format remaining config files 2026-08-18 00:19:35 +01:00
Dockerfile chore(web): finish dead-token cleanup and align logging 2026-09-09 23:37:25 +01:00
eslint.config.mjs chore: ignore coverage in eslint config 2026-08-18 00:18:51 +01:00
kubb.config.ts feat(app): refresh tokens, hardened proxy, kubb clients without react-query, security headers and a11y 2026-08-13 23:50:18 +01:00
LICENSE chore(web): add license, node version and engines 2026-08-22 03:03:23 +01:00
next-env.d.ts feat(app): refresh tokens, hardened proxy, kubb clients without react-query, security headers and a11y 2026-08-13 23:50:18 +01:00
next.config.ts feat(web): upload avatars through the proxy as raw bytes 2026-09-27 23:08:31 +01:00
openapi.json feat(web): badge, XP points and activity on the public profile 2026-09-30 09:46:02 +01:00
package.json fix(web): patch next-auth getToken CVE and harden call sites 2026-09-27 23:43:36 +01:00
postcss.config.mjs feat(openlearn): rebrand platform and redesign UI with the Vortexia theme 2026-08-12 16:58:39 +01:00
README.md docs(web): restructure the documentation set 2026-10-02 06:13:46 +01:00
tailwind.config.ts feat(web): turn the dashboard into a game hub 2026-09-23 04:37:23 +01:00
tsconfig.json feat(openlearn): rebrand platform and redesign UI with the Vortexia theme 2026-08-12 16:58:39 +01:00
vitest.config.ts feat(web): add dynamic theme infrastructure and paper light theme 2026-09-09 03:54:55 +01:00
yarn.lock fix(web): patch next-auth getToken CVE and harden call sites 2026-09-27 23:43:36 +01:00

OpenLearn Web App

The frontend for OpenLearn, an online learning platform. It is a Next.js App Router application that talks to the Platform API through a session-based proxy, so backend tokens never reach the browser. Lesson content is XML, API clients are generated from the backend OpenAPI contract, and the lesson player runs Python in the browser.

Stack

  • Next.js 15 (App Router), React 19, TypeScript in strict mode
  • Tailwind CSS
  • next-auth v5: credentials provider, JWT sessions
  • kubb-generated API client (axios + zod + types) from openapi.json
  • fast-xml-parser for lesson content
  • Pyodide for the in-browser Python runtime
  • Vitest, ESLint and Prettier

Prerequisites

  • Node.js 24 (.node-version pins 24.14.0)
  • Yarn 4 (pinned in .yarn/, packageManager: yarn@4.18.0)
  • The Platform API reachable at API_URL. The two repositories are siblings: openlearn/ and openlearn-api/; setup is in ../openlearn-api/docs/setup.md.

Quick start (local)

yarn install
cp .env.local.example .env.local
yarn dev

The app listens on http://localhost:3000 and proxies API calls to http://localhost:4000 by default. See docs/setup.md for the environment reference and the full command list.

Quick start (Docker)

docker compose up -d --build

The frontend service reads .env.local, uses host networking, exposes the app on :3000 and expects the API on :4000. Start the API stack first.

Commands

yarn dev        # dev server with hot reload
yarn build      # production build
yarn check      # typecheck + lint + unit tests
yarn api:check  # regenerate the kubb client and fail on drift

All commands: docs/setup.md#commands.

Documentation

Doc Covers
docs/setup.md prerequisites, env vars, local dev, Docker, commands
docs/architecture.md layout, auth, proxy, routes, features, player, AI, admin
docs/authoring.md lesson XML reference and validation
docs/design.md themes, tokens, semantic colour, motion
docs/testing.md test suites, static checks, API drift, manual checks
scripts/README.md Python helper scripts
AGENTS.md machine-facing invariants

Start at docs/README.md for a task-oriented index.