Skip to main content

Frontend

The frontend is a Next.js 14 application (frontend/, Next 14.2.15, React 18) built with Atlaskit components. It runs as the startupos-frontend Deployment, two replicas when last observed.

Per-role theme​

Each role has its own colour palette and layout accents, defined in frontend/src/lib/role-theme.ts. The documentation site you are reading does not use the role themes.

Same-origin calls​

The browser calls its own host. The NEXT_PUBLIC_*_URL build settings are empty, so every request is a relative URL such as /api/v1/lms/courses. The ingress sends each /api/v1 prefix to the right service. The frontend therefore needs no cross-origin configuration for its own calls.

An axios client in frontend/src/lib/api.ts adds Authorization: Bearer <token> to each request. It also still sends X-User-Id, X-User-Role and X-Tenant-Id. Services in production ignore those three headers when a verified token is present, and ignore them entirely otherwise. See Authentication model.

Routes the frontend serves itself​

Five route handlers under frontend/src/app/api run in the Node server, not in a Quarkus service:

RoutePurpose
POST /api/auth/tokenSigns a demo persona in against Keycloak and returns an access token.
POST /api/auth/refreshRenews the access token from the session cookie.
POST /api/auth/logoutClears the cookie and ends the Keycloak session.
GET /api/statusPublic JSON status summary.
POST /api/ai/enhanceText enhancement helper.

They are documented in the Frontend routes reference. These routes exist on the host root only. On the API host the root path goes to the LMS service, so /api/auth/* there is not the frontend.

Pages​

The frontend also serves the public status page at /status. See Status page.

Sources: frontend/package.json, frontend/src/app/api/**, frontend/src/lib/api.ts, frontend/src/lib/auth.ts, infra/oci-devops/deploy/ingress.yaml, .agents/tasks/fqdn-migration-deploy/findings.md (empty NEXT_PUBLIC_* values), live Deployment read on 2026-11-07.