Learners
Learners use a tenant’s learner site, for example http://coffee.app.localhost. This section describes it page by page, as it is implemented.
Two learner frontends
Section titled “Two learner frontends”| Reference frontend | Legacy React app | |
|---|---|---|
| Folder | front/web (@ulams/web) |
front/src (workspace front) |
| Built with | Astro, server-rendered, almost no client JavaScript | React 18 single-page app, Vite |
| Local URL | http://<slug>.app.localhost (Caddy) or port 4321 |
port 3000 |
| Status | Default learner site; used by the demo academies | Kept for features the reference frontend does not have yet |
The reference frontend was introduced by ADR 0008. It renders every page on the server, themes each tenant from its API settings, and keeps the learner’s API token in an httpOnly cookie. It covers the landing page, the course page, the lesson player, quizzes, the finish page, events, the account page and sign-in. Cart and checkout, registration, password reset, certificates as files, notes and bookmarks, and booking are still only in the legacy React app.
Developers: the technical side (BFF, H5P proxy, caching, SDK) is in reference frontend.
Pages in this section
Section titled “Pages in this section”Accessibility
Section titled “Accessibility”Learner-facing UI targets WCAG 2.2 AA. The reference frontend has a skip link, landmarks, visible focus, reduced motion support and a layout that works at 360 px. Its Playwright suite runs an axe scan of every page type on desktop and phone sizes; the scan is not yet part of CI.