Style the Keycloak hosted auth pages (login, register, reset-password, OTP) to match the app's design system so users never land on the default Keycloak UI.
Context
Currently, main.tsx initialises Keycloak with login-required, which redirects unauthenticated users to Keycloak's built-in hosted pages. These pages are completely unstyled relative to the app and break the visual experience. Keycloak supports custom themes via Freemarker templates + CSS deployed into the Keycloak container.
Tasks
Acceptance criteria
- All Keycloak-hosted auth pages (login, register, reset-password, OTP) render with the app's fonts, colors, and layout — not the default Keycloak theme
- Theme is active after a clean
docker compose up with no manual steps in the Keycloak admin console
- Existing auth flow wired in
main.tsx is unaffected — login, token refresh, and logout all work correctly
- No Keycloak admin credentials or secrets are hardcoded in theme files
Style the Keycloak hosted auth pages (login, register, reset-password, OTP) to match the app's design system so users never land on the default Keycloak UI.
Context
Currently,
main.tsxinitialises Keycloak withlogin-required, which redirects unauthenticated users to Keycloak's built-in hosted pages. These pages are completely unstyled relative to the app and break the visual experience. Keycloak supports custom themes via Freemarker templates + CSS deployed into the Keycloak container.Tasks
infra/keycloak/themes/<theme-name>/login/following the Keycloak theme structure (Freemarker templates +theme.properties+resources/css/)login.ftlto match the app's typography, color palette, and card-based layoutregister.ftl,login-reset-password.ftl, andlogin-otp.ftlconsistently with the login pagedocker-compose.ymldocker compose upwith no manual Keycloak admin stepsAcceptance criteria
docker compose upwith no manual steps in the Keycloak admin consolemain.tsxis unaffected — login, token refresh, and logout all work correctly