a8ddb0f63dff00cc2ac8d83073cc63914e7c61fc
Three coupled chrome adjustments — all in `portal-shell`'s shell layout, all motivated by the same realisation that the user-menu introduced in #149 made the header's standalone Settings icon redundant and surfaced an inconsistency in the theme switcher's placement. * **Drop the standalone Settings button** from the header. The UserMenu already carries a "Settings (Soon)" row for authenticated users, and Settings has no meaning for anonymous traffic. The icon pointed nowhere; carrying it doubled the surface and forced readers to guess which control to use. The `header.action.settings` i18n unit is removed from `messages.fr.xlf` in the same step so the prod build's `i18nMissingTranslation=error` policy stays consistent. * **Move `<app-theme-switcher>` from the header to the footer.** It now sits beside `<app-locale-switcher>` in a single "device-prefs" cluster on the right side of the footer. The alternative considered — keeping it in the header for anonymous traffic and moving it into the user menu once authenticated — was rejected: the trigger location for an identical control (changing read conditions) must not depend on auth state, especially for an a11y-first platform per ADR-0016. A reader who relies on dark mode shouldn't have to expand a menu they don't recognise on first visit to escape a flashing white background. The footer matches what ADR-0019 already established for the locale switcher (ambient device preferences live there). * **Reshape the footer into two semantic clusters.** The Accessibility statement link moves from the right (preferences) cluster to the left, joining the copyright with a typographic separator (`·`). Left = static info / legal anchor ("who owns this, where to find legal info"); right = interactive prefs ("what I control about this page"). Keyboard order naturally follows: a Tab-traversal from main content hits info before interactive controls. Specs updated: - Header spec swaps "renders Settings button" / "embeds theme switcher" assertions for the absence guards that lock the new layout. - Footer spec adds a theme-switcher assertion and a cluster-grouping assertion that pins copyright + accessibility to the first direct-child div, locale + theme to the second. Verification: `pnpm nx run-many -t lint test build --projects=portal-shell` green, 43 portal-shell specs (was 40); the i18n-strict production build (`portal-shell:build:production`) passes too — confirms the xlf cleanup didn't strand any source-locale reference.
Documentation index
This is the entry point to all project documentation. It is maintained automatically: any addition, rename, or removal of a .md file under docs/ must be reflected here in the same change.
Conventions
- Documentation is written in English.
- One topic per file. Group related files into a folder when there are three or more.
- Cross-reference with relative links so they keep working in GitHub, IDEs, and exported sites.
- For architectural decisions, do not add them here — they belong in decisions/ as MADR 4.0.0 ADRs.
Sections
Daily development
- development.md — repo layout, prerequisites, initial setup, daily commands, observability dev-loop (Jaeger UI, log ↔ trace correlation), dependency updates (Renovate), conventional commit cycle. Day-to-day reference for working on the project.
Architecture
- architecture.md — cross-cutting Mermaid diagrams: C4 system context, C4 containers, Nx module boundaries, CI/CD pipeline. Single-decision diagrams (auth sequence, ERD, etc.) live inline in their ADR.
Onboarding & environment
Setup guides for new contributors:
- setup/01-wsl-terminal-setup.md — modern WSL terminal (Zsh + Powerlevel10k + CLI tools)
- setup/02-dev-web-stack.md — Node via nvm, pnpm via corepack, Docker
- setup/03-angular-nx-monorepo.md — Angular + Nx monorepo bootstrap
Operations & runbooks
Empty — to be populated when we deploy.
Security, performance, accessibility
Empty — placeholders to be filled with rationale docs alongside their corresponding ADRs.
Description
Languages
TypeScript
85.3%
JavaScript
5.4%
SCSS
4.3%
HTML
3.9%
Shell
0.8%
Other
0.3%