OpenLearn Web App
  • TypeScript 94.5%
  • Python 4.4%
  • CSS 0.9%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Sandro Alves acb09bbf7e chore(web): install husky pre-commit gates
Wire the previously dead husky config: the pre-commit hook now runs
yarn check (typecheck + lint + unit tests), yarn api:check (kubb drift
gate on openapi.json and the generated client) and lint-staged
(prettier). The core .husky/_ directory stays gitignored.
2026-08-22 15:10:42 +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 proxy hardening and refresh test counts 2026-08-22 03:03:27 +01:00
public feat(openlearn): rebrand platform and redesign UI with the Vortexia theme 2026-08-12 16:58:39 +01:00
scripts refactor(scripts): consolidate python tooling 2026-08-19 17:46:46 +01:00
src chore(web): sync openapi spec and regenerate api client 2026-08-22 15:09: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(app): configurable branding via env 2026-08-14 06:11:01 +01:00
.gitignore chore(web): install husky pre-commit gates 2026-08-22 15:10:42 +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
docker-compose.yml style: format remaining config files 2026-08-18 00:19:35 +01:00
Dockerfile chore(web): tighten CSP and run container as non-root 2026-08-22 03:03:23 +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 chore(web): tighten CSP and run container as non-root 2026-08-22 03:03:23 +01:00
openapi.json chore(web): sync openapi spec and regenerate api client 2026-08-22 15:09:55 +01:00
package.json chore(web): add license, node version and engines 2026-08-22 03:03:23 +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 Update README.md 2026-08-18 23:32:50 +00:00
tailwind.config.ts style(app): unify visual tokens and level badges 2026-08-16 03:57:01 +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 chore: set react act environment in vitest setup 2026-08-18 00:18:51 +01:00
yarn.lock chore: add test:unit, coverage and check scripts 2026-08-16 04:15:52 +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.

Stack

  • Next.js 15 (App Router) with React 19, TypeScript in strict mode
  • Tailwind CSS
  • next-auth v5 — credentials provider, JWT sessions
  • kubb-generated API client (axios + zod + types) from the backend openapi.json
  • fast-xml-parser for lesson content
  • Vitest for unit tests; ESLint and Prettier for code quality

Prerequisites

  • Node.js (see .node-version)
  • The Platform API running locally — see ../backend/docs/setup.md

Getting started

# Install dependencies
yarn install

# Copy the env file and fill in values
cp .env.local.example .env.local

# Start the dev server
yarn dev

The app runs at http://localhost:3000 and proxies API calls to the backend at API_URL (default http://localhost:4000).

Environment variables

Variable Description
API_URL Backend base URL (default http://localhost:4000)
AUTH_SECRET Secret used to sign session JWTs

Branding variables (NEXT_PUBLIC_APP_*) and their defaults live in .env.local.example; see docs/setup.md for the full list.

Scripts

yarn dev            # Dev server with hot reload
yarn build          # Production build
yarn start          # Serve production build
yarn lint           # ESLint
yarn typecheck      # tsc --noEmit
yarn test           # Vitest unit tests
yarn api:generate   # Regenerate clients from openapi.json (kubb)
yarn api:validate   # Validate openapi.json operationIds
yarn api:check      # Regenerate + validate + confirm nothing drifted
yarn format         # Prettier write

Project structure

See docs/architecture.md for the feature-first layout, the server/client boundary, and how the auth session and proxy work.