Appearance
[UX] members — Home
Draft from /ux-audit on 2026-07-30 (unattended batch run). Not filed. Repo: bcc-nancy/members · Branch:
develop@2c22f5a· Files reviewed: 3 Patterns: none consulted (feature plainly covered by baseline; assigned data-display/dashboard + data-display/statistics do not apply — see Summary)
Summary
The home route renders Home.vue: a static French welcome hero (<h1> + one-line description) beside a "Quoi de neuf" panel that injects the latest bundled release note via v-html. It is not a statistics dashboard — the data-display/dashboard/statistics patterns the queue assigned to it match a different route (bactive-dashboard, #18), whose TileStat/TileProgress components and useDashboardTotals composable Home never imports. As it actually ships, Home is clean: no forms, no async fetch, no tables, correct heading order (h1 → section h2 → release-note h3s). The only genuine defect is a sub-minimum standalone link target; everything else is a project-level reference or cleared.
Findings
1. "Historique complet →" link is below the 24 px minimum target — Low · A11Y-02
Where: admin/src/client/views/Home.vue:25-30What: The only interactive control on the page is a standalone RouterLink styled text-sm (≈20 px line box) sitting alone in the panel header. WCAG 2.5.8's inline-text exception does not cover it — it is not embedded in a sentence or block of running text, it is a discrete header action — so it should meet 24×24 CSS px and does not. Why it matters: Touch and low-dexterity users get a cramped tap target for the sole navigation affordance on the screen. Fix: Give the link padding to reach a ≥24 px hit area (e.g. py-1 -my-1), or render it as a small BccButton link variant.
2. "Quoi de neuf" panel vanishes silently when no release note resolves — Low · CONTENT-04
Where: admin/src/client/views/Home.vue:14 (v-if="latest") What: useReleaseNotes builds latest from a build-time import.meta.glob("../release-notes/*.md"). If that glob ever yields nothing (none bundled, or a future refactor of the folder), the entire right-hand panel is removed with no placeholder, leaving a lone welcome card and no explanation. Why it matters: Low likelihood today (notes are always bundled), but the degradation is a blank rather than a "no release notes yet" message, which reads as breakage rather than an empty state. Fix: Render a short empty-state line ("Aucune note de version pour le moment.") in the v-else branch.
Considered, not filed
v-htmlonmarked.parse(raw)(Home.vue:33-36,useReleaseNotes.ts): no runtime sanitisation, but the source is developer-authored markdown bundled at build time viaimport.meta.glob, never user input — no user-facing XSS vector, so not a SEC finding. Flagged only so the next audit does not re-derive it. If release notes ever become server- or user-sourced, revisit.- MSG-06 (loading/error gate): not applicable here —
useReleaseNotesis fully synchronous (eager glob, no TanStack Query), so there is no fetch state to mishandle. (Contrast the shared-TableData.vueisErrorgap andDonsProgressskeleton gate noted in PROJECT-LEVEL.md — neither touches Home.) - A11Y-04 headings/landmarks: exactly one
<h1>, order h1→h2→h3 with no skips; the injected release-noteh2isdisplay:nonebut duplicates the section's ownv{version}h2, so no information is lost.
Project-level references (not re-filed)
- NAV-03 — fails project-wide;
admin/index.html:13is a static « BCC Nancy Admin » for all 24 routes, Home included. See PROJECT-LEVEL.md. - CONTENT-01 — not-applicable; members has no i18n layer (French literals by design). See project-level i18n finding.
Unverified
- A11Y-01 (contrast):
text-neutral-500description and thetracking-[0.2em] text-neutral-500"Quoi de neuf" eyebrow on white, plustext-brand-700links, need a contrast tool against the OKLch tokens — not determinable from class names. - A11Y-06 (short viewport / responsive): the
lg:flex-rowsplit and thev-htmlrelease body need a rendered ~700 px-height viewport to confirm the panel does not overflow or clip.
Baseline additions
none
Cross-project note
Both findings are local to this thin welcome view and do not obviously generalise. The A11Y-02 standalone-small-link shape recurs wherever text-sm header links act as primary actions — worth a glance on the other three projects' dashboard/landing headers, but not a confirmed cross-project defect. The dashboard/statistics patterns and their real defects live in members #18 (BActive Dashboard), not here.