diff --git a/docs/FRONTEND-ROADMAP.md b/docs/FRONTEND-ROADMAP.md index 7678cdb..c3c9edc 100644 --- a/docs/FRONTEND-ROADMAP.md +++ b/docs/FRONTEND-ROADMAP.md @@ -1,30 +1,30 @@ # Frontend Roadmap -Status snapshot, refreshed from recent commits only. Full sprint history: `docs/archive/SPRINT-PLAN.md`. Open bugs: `docs/KNOWN-ISSUES.md`. +Status snapshot, refreshed from recent commits only. Full sprint history: `SPRINT-PLAN.md` (removed, see git history). Open bugs: `docs/KNOWN-ISSUES.md`. ## Recently shipped **RC-Visual-02 — Composition audit** (storefront, builder, backoffice) -Fixed undefined CSS theme vars, hand-rolled skeletons/empty-states migrated to shared `app-skeleton`/`app-empty-state`/`app-button`, missing ``, dead CSS (~530-line unused cart `.alt` theme). Detail: `docs/archive/UI-COMPOSITION-REVIEW.md`. +Fixed undefined CSS theme vars, hand-rolled skeletons/empty-states migrated to shared `app-skeleton`/`app-empty-state`/`app-button`, missing ``, dead CSS (~530-line unused cart `.alt` theme). Detail: `UI-COMPOSITION-REVIEW.md` (removed, see git history). **RC-Premium-01 — Storefront premium UX polish** -Visual/interaction polish on top of the RC-Visual-02 baseline — no redesign, no logic/route changes. Fixed color-only state signaling app-wide (added `aria-pressed`/`aria-current`/`aria-live` + icon/checkmark pairing to selected swatches, active filters/tabs/sort, toggle buttons), normalized remaining hardcoded hex to design tokens, added hover/focus-visible/active/disabled states across interactive controls, capped legal/CMS prose at 70ch, converted FAQ to native `
` disclosures. Four commits (Home/Catalog/Search, Product/Compare/Wishlist, Cart/Checkout, Static Pages). Detail: `docs/archive/STORE_FRONT_UX_REVIEW.md`. +Visual/interaction polish on top of the RC-Visual-02 baseline — no redesign, no logic/route changes. Fixed color-only state signaling app-wide (added `aria-pressed`/`aria-current`/`aria-live` + icon/checkmark pairing to selected swatches, active filters/tabs/sort, toggle buttons), normalized remaining hardcoded hex to design tokens, added hover/focus-visible/active/disabled states across interactive controls, capped legal/CMS prose at 70ch, converted FAQ to native `
` disclosures. Four commits (Home/Catalog/Search, Product/Compare/Wishlist, Cart/Checkout, Static Pages). Detail: `STORE_FRONT_UX_REVIEW.md` (removed, see git history). **RC STORE-01 — Storefront cleanup** -Closed 2 of the 5 gaps RC-Premium-01 deliberately deferred: category/search skeleton markup migrated to shared `app-skeleton`, dead cart `.email-form` markup/CSS removed. The other 3 (payment modal, cart confirm() dialog, untokenized colors) need an architecture/design-system decision, correctly left alone again. Detail: `docs/archive/STORE_REVIEW.md`. +Closed 2 of the 5 gaps RC-Premium-01 deliberately deferred: category/search skeleton markup migrated to shared `app-skeleton`, dead cart `.email-form` markup/CSS removed. The other 3 (payment modal, cart confirm() dialog, untokenized colors) need an architecture/design-system decision, correctly left alone again. Detail: `STORE_REVIEW.md` (removed, see git history). **RC PERF-01 — Performance audit** (production-readiness, app-wide) -Initial bundle **1.47 MB → 1.12 MB raw (−24%)**: biggest win was lazy-loading en/hy i18n packs (346 KB were eagerly loaded regardless of visitor language), plus a dead `items-carousel`/primeng-only component deleted, dead global CSS removed. RxJS/change-detection audit found the codebase already clean (0 leaks, 190/191 components already OnPush). Detail: `docs/archive/PERFORMANCE_REPORT.md`. +Initial bundle **1.47 MB → 1.12 MB raw (−24%)**: biggest win was lazy-loading en/hy i18n packs (346 KB were eagerly loaded regardless of visitor language), plus a dead `items-carousel`/primeng-only component deleted, dead global CSS removed. RxJS/change-detection audit found the codebase already clean (0 leaks, 190/191 components already OnPush). Detail: `PERFORMANCE_REPORT.md` (removed, see git history). **RC A11Y-01 — WCAG 2.1 AA audit** (storefront, builder, backoffice) -Added the app's first skip link (didn't exist anywhere before), fixed cart's custom payment modals having zero focus-trap, fixed `app-icon`'s "decorative by default" claim never actually being implemented, fixed 2 keyboard-inaccessible drag-and-drop reorder UIs (Builder homepage/footer, Backoffice categories), fixed an undefined `--color-primary` token in Builder, fixed admin sidebar nav announcing itself as "Dashboard" everywhere. Contrast fixes applied where safe; genuine brand-color contrast failures flagged for theme-owner sign-off, not changed unilaterally. Detail: `docs/archive/ACCESSIBILITY_REPORT.md`. +Added the app's first skip link (didn't exist anywhere before), fixed cart's custom payment modals having zero focus-trap, fixed `app-icon`'s "decorative by default" claim never actually being implemented, fixed 2 keyboard-inaccessible drag-and-drop reorder UIs (Builder homepage/footer, Backoffice categories), fixed an undefined `--color-primary` token in Builder, fixed admin sidebar nav announcing itself as "Dashboard" everywhere. Contrast fixes applied where safe; genuine brand-color contrast failures flagged for theme-owner sign-off, not changed unilaterally. Detail: `ACCESSIBILITY_REPORT.md` (removed, see git history). **Release Candidate — live browser walkthrough** (storefront, builder, backoffice) -Found and fixed **2 P0s**: (1) `language.guard.ts`'s legacy-URL redirect broke query params on every route app-wide (silently dead-ended any bookmarked/shared deep link with query params); (2) Backoffice Categories CRUD was completely broken end-to-end — wrong gateway-resolution fallback always picked the real HTTP gateway instead of the local mock in this environment, so every create/publish silently failed with zero user feedback. Plus 6 P1s (cart description, compare table raw enum values, search empty-state messaging, footer link 404, missing placeholder image, builder save-bar reset-state bug, backoffice mislabeled button). Detail: `docs/archive/RELEASE_REPORT.md`. +Found and fixed **2 P0s**: (1) `language.guard.ts`'s legacy-URL redirect broke query params on every route app-wide (silently dead-ended any bookmarked/shared deep link with query params); (2) Backoffice Categories CRUD was completely broken end-to-end — wrong gateway-resolution fallback always picked the real HTTP gateway instead of the local mock in this environment, so every create/publish silently failed with zero user feedback. Plus 6 P1s (cart description, compare table raw enum values, search empty-state messaging, footer link 404, missing placeholder image, builder save-bar reset-state bug, backoffice mislabeled button). Detail: `RELEASE_REPORT.md` (removed, see git history). ## Sprint status -**Sprint 30 — Final Release**: verify pass re-run 2026-07-23 (tsc --noEmit, `npm run build`, `arch:check:boundaries`, `arch:check:cycles`) — all green, only pre-existing bundle-budget warning. Working tree otherwise clean. Only remaining item: `git push` of 10 local `B2B` commits to `origin/B2B` — awaiting explicit user go-ahead (declined once already this sprint, per safety rules re-ask each time). Full checklist: `docs/archive/SPRINT-PLAN.md`. +**Sprint 30 — Final Release**: verify pass re-run 2026-07-23 (tsc --noEmit, `npm run build`, `arch:check:boundaries`, `arch:check:cycles`) — all green, only pre-existing bundle-budget warning. Working tree otherwise clean. Only remaining item: `git push` of 10 local `B2B` commits to `origin/B2B` — awaiting explicit user go-ahead (declined once already this sprint, per safety rules re-ask each time). Full checklist: `SPRINT-PLAN.md` (removed, see git history). ## Known open items (not yet scheduled) @@ -41,7 +41,7 @@ Full detail in `docs/KNOWN-ISSUES.md`. Summary: - `dynamic-renderer/` pipeline exists but is unwired — needs a finish-or-delete decision. - `primeng`/`primeicons` still in `package.json` despite the only consumer being deleted (RC PERF-01) — `npm uninstall` blocked by an unrelated broken `barry-cache` devDependency (`ETARGET`); fix that first. - 2 large lazy chunks (`project-editor` 320 kB, `catalog-container` 126 kB) — no mechanical split found, needs a dedicated task. -- **CRITICAL**: `pages/category`, `pages/search`, `pages/item-detail`, `pages/info/**`, `pages/legal/**` (40+ files) are entirely unrouted dead code — `cmsContentRoutes` in `app.routes.ts` is a literal empty array. Several fixes in `docs/archive/` were applied to this dead code with zero production effect. See `docs/KNOWN-ISSUES.md` item 13 — needs a wire-it-up-or-delete-it decision. +- **CRITICAL**: `pages/category`, `pages/search`, `pages/item-detail`, `pages/info/**`, `pages/legal/**` (40+ files) are entirely unrouted dead code — `cmsContentRoutes` in `app.routes.ts` is a literal empty array. Several earlier fixes (see git history) were applied to this dead code with zero production effect. See `docs/KNOWN-ISSUES.md` item 13 — needs a wire-it-up-or-delete-it decision. Tracked in `docs/TODO.md`. - Backend integration: still mostly PLANNED/mock — a "backend ready" sprint was attempted and explicitly deferred (2026-07-24) pending a real API contract (`docs/BACKEND_API.md` is the canonical spec — no live endpoint confirmation beyond what's already CURRENT). ## Not audited / out of scope diff --git a/docs/KNOWN-ISSUES.md b/docs/KNOWN-ISSUES.md index 57f809a..6e2af7a 100644 --- a/docs/KNOWN-ISSUES.md +++ b/docs/KNOWN-ISSUES.md @@ -38,7 +38,7 @@ don't fix inline unless asked. - Found: 2026-07-15, during Sprint 28 manual audit (reading templates + grepping i18n files, not live browser). - **Deferred to Sprint 29** ("translation validation" is explicit Sprint 29 - scope per `docs/archive/SPRINT-PLAN.md`) rather than fixed inline during Sprint + scope per `SPRINT-PLAN.md` (removed, see git history)) rather than fixed inline during Sprint 28 polish - authoring ~534 correct strings across 3 languages is a large, separate, mechanical pass of its own and shouldn't be rushed inside a polish sprint. Sprint 28 only adds the handful of new keys it introduces @@ -80,11 +80,11 @@ don't fix inline unless asked. Correction (2026-07-24, RC A11Y-01): the "already has focus-trap" assumption below was wrong — it had none. RC A11Y-01 ported `app-dialog`'s confirmed- correct focus-trap/Escape/return-focus pattern directly onto it - (`docs/archive/ACCESSIBILITY_REPORT.md`), so the accessibility gap is closed. It's + (`ACCESSIBILITY_REPORT.md` (removed, see git history)), so the accessibility gap is closed. It's still a separate custom component, not the shared `app-dialog` itself — migrating it to the actual primitive remains a composition change, deliberately left out of every polish pass so far. - - Found: 2026-07-23, RC-Premium-01 (`docs/archive/STORE_FRONT_UX_REVIEW.md`). + - Found: 2026-07-23, RC-Premium-01 (`STORE_FRONT_UX_REVIEW.md` (removed, see git history)). 7. **Cart's `clearCart()` uses native `confirm()`, no styled confirm dialog.** No existing storefront pattern for a confirm-remove dialog to follow yet — @@ -102,13 +102,13 @@ don't fix inline unless asked. `--success/--warning/--error/--info-color` fail 4.5:1 when used as plain text-on-white in a handful of places. Real palette colors, not a token bug — fixing means visibly changing the brand, needs theme-owner sign-off. - - Found: 2026-07-24, RC A11Y-01 (`docs/archive/ACCESSIBILITY_REPORT.md`). + - Found: 2026-07-24, RC A11Y-01 (`ACCESSIBILITY_REPORT.md` (removed, see git history)). 10. **Footer "Contacts" link has no static-page content in mock data.** Unlike the "About" link (which was a route-name mismatch, fixed), no content exists for Contacts at all — needs a content decision, not a code fix. - - Found: 2026-07-24, Release Candidate walkthrough (`docs/archive/RELEASE_REPORT.md`). + - Found: 2026-07-24, Release Candidate walkthrough (`RELEASE_REPORT.md` (removed, see git history)). 11. **Builder's static-page body editor is hidden and mislabeled.** The actual WYSIWYG content editor isn't on the "Content" tab (title/image @@ -123,7 +123,7 @@ don't fix inline unless asked. pre-existing, unrelated broken `barry-cache` devDependency resolution — fix that first, then drop the now-fully-unused dependency (likely closes most of the remaining bundle-budget overage in one move). - - Found: 2026-07-24, RC PERF-01 (`docs/archive/PERFORMANCE_REPORT.md`). + - Found: 2026-07-24, RC PERF-01 (`PERFORMANCE_REPORT.md` (removed, see git history)). 13. **CRITICAL — `pages/category/*`, `pages/search/*`, `pages/item-detail/*`, `pages/info/**`, `pages/legal/**` (40+ files) are entirely unrouted dead @@ -142,7 +142,8 @@ don't fix inline unless asked. confirmed independently by `docs/FRONTEND.md`'s own routing section ("Static/CMS pages resolve dynamically... no hardcoded page list"). **This means several "fixes" earlier in this document and in - `docs/archive/` were applied to dead code with zero production effect** + since-deleted audit reports (see git history) were applied to dead code + with zero production effect** — see the correction note on Fixed item 7 below. This was missed by three separate passes this cycle (RC-Premium-01, RC STORE-01, and the dead-code cleanup sprint, which manually re-verified against @@ -161,7 +162,7 @@ don't fix inline unless asked. despite `AdminProductsFacade` having its own dirty-tracking draft logic. Inconsistent, low-effort fix (mirror the categories guard) but not applied here — this pass is documentation-only. - - Found: 2026-07-19 (`docs/archive/PROJECT-STATE.md`), re-verified + - Found: 2026-07-19 (`PROJECT-STATE.md` (removed, see git history)), re-verified 2026-07-25 against current `app.routes.ts` — still true. ## Fixed @@ -319,7 +320,7 @@ don't fix inline unless asked. `.skeleton-card`/`.skeleton-image`/`.skeleton-line` shimmer CSS with hardcoded hex colors, duplicating what `app-skeleton` already provides and what `catalog-container`/`product-details-container` already use. - - Fixed: 2026-07-23, RC STORE-01 (`docs/archive/STORE_REVIEW.md`). + - Fixed: 2026-07-23, RC STORE-01 (`STORE_REVIEW.md` (removed, see git history)). - **Correction (2026-07-25):** these files are unrouted dead code (Open item 13) — the fix is real and harmless but currently has zero production effect. Live category/search rendering goes through @@ -338,7 +339,7 @@ don't fix inline unless asked. a dead route). This guard runs on every top-level route app-wide, so any bookmarked/shared deep link with query params was silently broken — found during the Builder RC walkthrough but affects all 3 surfaces. - - Fixed: 2026-07-24, Release Candidate walkthrough (`docs/archive/RELEASE_REPORT.md`), + - Fixed: 2026-07-24, Release Candidate walkthrough (`RELEASE_REPORT.md` (removed, see git history)), `router.parseUrl()` instead of a hand-built path segment. 10. **Backoffice Categories CRUD completely broken end-to-end (P0).** diff --git a/docs/PROJECT_INDEX.md b/docs/PROJECT_INDEX.md index 0e9ddd1..a89433c 100644 --- a/docs/PROJECT_INDEX.md +++ b/docs/PROJECT_INDEX.md @@ -4,7 +4,7 @@ This is the entry point. Read this first — it links to everything else and tel ## ⚠️ Read before touching routing or storefront static pages -`pages/category/*`, `pages/search/*`, `pages/item-detail/*`, `pages/info/**`, and `pages/legal/**` (40+ files) look like live storefront pages but are **entirely unrouted dead code**. `src/app/app.routes.ts`'s `cmsContentRoutes` is a literal empty array. The real routes redirect `category/:id`/`search` to `CatalogContainerComponent`, `product/:id` to `ProductDetailsContainerComponent`, and every static/legal page (About, Contacts, FAQ, etc.) is served by the catch-all `:staticPath` route resolving `bootstrap.staticPages` — not by the hardcoded components under `pages/info`/`pages/legal`. Full detail: [KNOWN-ISSUES.md](KNOWN-ISSUES.md) item 13. Several polish passes in `docs/archive/` were applied to this dead code before this was caught — treat any claim in an archived doc about "the category page" or "the search page" as **not describing what currently renders in production**. +`pages/category/*`, `pages/search/*`, `pages/item-detail/*`, `pages/info/**`, and `pages/legal/**` (40+ files) look like live storefront pages but are **entirely unrouted dead code**. `src/app/app.routes.ts`'s `cmsContentRoutes` is a literal empty array. The real routes redirect `category/:id`/`search` to `CatalogContainerComponent`, `product/:id` to `ProductDetailsContainerComponent`, and every static/legal page (About, Contacts, FAQ, etc.) is served by the catch-all `:staticPath` route resolving `bootstrap.staticPages` — not by the hardcoded components under `pages/info`/`pages/legal`. Full detail: [KNOWN-ISSUES.md](KNOWN-ISSUES.md) item 13, tracked in [TODO.md](TODO.md). Several earlier polish passes (see git history) were applied to this dead code before this was caught. ## What this is @@ -41,6 +41,7 @@ Read these directly — they're the current source of truth, not one-off reports | [AUTH.md](AUTH.md) | Ed25519 admin auth — prepared, not live; current live gate is Telegram-QR | | [FRONTEND-ROADMAP.md](FRONTEND-ROADMAP.md) | Status snapshot refreshed from recent commits — what shipped, what's open | | [KNOWN-ISSUES.md](KNOWN-ISSUES.md) | Running list of open/fixed bugs found during manual verification | +| [TODO.md](TODO.md) | Checklist of everything still remaining, verified against current repo state | | [ANGULAR22_PLAN.md](ANGULAR22_PLAN.md) | Angular 22 upgrade feasibility (research only, not yet executed) | | [SALES-GUIDE.md](SALES-GUIDE.md) | Plain-language guide for the sales team — what to demo, what's not live yet | | [`../DESIGN.md`](../DESIGN.md) | Visual design system: colors, typography, elevation, component specs | @@ -49,11 +50,15 @@ Read these directly — they're the current source of truth, not one-off reports | `docs/architecture/foundation/**` | Enforced ADRs (ADR-001…ADR-010) and standards docs — governance, read directly | | `docs/context/**` | Barry Cache's own source-backed memory system — infrastructure, not project documentation, do not edit by hand | -**One topic, one place**: routing lives in FRONTEND.md, not repeated here. Backend contract lives in BACKEND_API.md, not repeated in ADMIN.md. Design tokens live in DESIGN.md, not repeated in the archived UI review docs. If you find the same fact stated two places with different values, the doc in this table wins over anything in `docs/archive/`. +**One topic, one place**: routing lives in FRONTEND.md, not repeated here. Backend contract lives in BACKEND_API.md, not repeated in ADMIN.md. Design tokens live in DESIGN.md, not repeated elsewhere. -## Historical / completed audits — `docs/archive/` +## What's still open -One-time audit reports, sprint reports, and polish-pass logs. Useful for "why was this changed" archaeology, **not** for "what's true now" — check the living docs above for that. Contents: `SPRINT-PLAN.md`, `ADMIN-UX-AUDIT.md`, `ADMIN_REVIEW.md`, `RELEASE-CANDIDATE-AUDIT.md`, `STORE_FRONT_REVIEW.md`, `STORE_FRONT_UX_REVIEW.md`, `STORE_REVIEW.md`, `UI-COMPOSITION-REVIEW.md`, `UI-DESIGN-REVIEW.md`, `UI-ICON-AUDIT.md`, `PERFORMANCE_REPORT.md`, `ACCESSIBILITY_REPORT.md`, `RELEASE_REPORT.md`, `CLEANUP_REPORT.md`, `PROJECT-STATE.md`, plus 3 early sprint reports and a platform-standardization report at the repo root's `docs/archive/`. Every open finding worth keeping from these was merged into [KNOWN-ISSUES.md](KNOWN-ISSUES.md) or [FRONTEND-ROADMAP.md](FRONTEND-ROADMAP.md) before archiving — nothing was lost, just deduplicated. +[TODO.md](TODO.md) — checklist of every remaining item across the docs, verified against current repo state. + +## Historical reports + +19 one-off audit/sprint/review reports were archived, then deleted once every open finding worth keeping was confirmed merged into [KNOWN-ISSUES.md](KNOWN-ISSUES.md)/[FRONTEND-ROADMAP.md](FRONTEND-ROADMAP.md)/[TODO.md](TODO.md). Full original text recoverable via `git log --diff-filter=D -- docs/archive` if needed. ## How to run it @@ -79,7 +84,7 @@ See root `CLAUDE.md` for the full Barry Cache workflow and memory policy. - **Frontend**: ~96% of planned UI built. Storefront/Builder/Backoffice all have working UI; several polish/audit passes complete (see below). - **Backend**: in progress — mostly PLANNED/mock gateways, no confirmed live backend contract beyond auth/session and storefront reads. Categories is the one domain fully wired to a real gateway. -- **Storefront polish, performance audit, WCAG 2.1 AA accessibility audit, release-candidate walkthrough**: all done — see [FRONTEND-ROADMAP.md](FRONTEND-ROADMAP.md) for the summary of each, `docs/archive/` for the full original reports. +- **Storefront polish, performance audit, WCAG 2.1 AA accessibility audit, release-candidate walkthrough**: all done — see [FRONTEND-ROADMAP.md](FRONTEND-ROADMAP.md) for the summary of each. - **Angular 22 upgrade**: not started, feasibility researched — see [ANGULAR22_PLAN.md](ANGULAR22_PLAN.md) (verdict: safe, ~2-3.5 days, 2 tooling blockers to clear first). - **Documentation**: consolidated (this pass) — 19 one-off reports archived, 2 files renamed for clarity (`PROJECT.md`→`PROJECT_INDEX.md`, `backend/BACKEND-INTEGRATION.md`→`BACKEND_API.md`), 1 duplicate deleted (`RELEASE-NOTES.md` merged into `CHANGELOG.md`). - **First client demo**: upcoming — blocked on nothing documentation can fix; see [KNOWN-ISSUES.md](KNOWN-ISSUES.md) for what's still open, starting with the dead-routes finding at the top of this document. diff --git a/docs/TODO.md b/docs/TODO.md new file mode 100644 index 0000000..4e0012b --- /dev/null +++ b/docs/TODO.md @@ -0,0 +1,49 @@ +# TODO + +Checklist of everything documented as open/remaining across the docs, verified against current repo state on 2026-07-25. Source: `docs/KNOWN-ISSUES.md`, `docs/FRONTEND-ROADMAP.md`, `docs/BACKEND_API_REMAINING_WORK.md`, `docs/ANGULAR22_PLAN.md`. + +## Critical + +- [ ] `pages/category`, `pages/search`, `pages/item-detail`, `pages/info/**`, `pages/legal/**` (40+ files) — unrouted dead code, `cmsContentRoutes` in `app.routes.ts` is a literal empty array (verified still empty). Needs wire-up-or-delete decision. +- [ ] No `canDeactivate` guard on `admin/products/:id/edit` (categories has one, products doesn't). + +## Backend — skipped, doing together + +- [ ] `bootstrap.json` real content (branding/theme/nav/seo) — default stubs. +- [ ] Builder bootstrap draft/publish/validate — no backend, editor saves nowhere real. +- [ ] Backoffice Products CRUD — mock only. +- [ ] Media upload/delete/replace pipeline — mock only. +- [ ] Backoffice Orders CRUD + status transitions — mock only. +- [ ] Backoffice Transactions — mock only. +- [ ] Backoffice Users/roles/invitations — mock only. +- [ ] Backoffice Moderation (reviews/reports) — mock only. +- [ ] Analytics traffic/funnels/heatmaps — no data source at all (FUTURE). +- [ ] Backend Ready sprint — no real API contract exists yet. + +## i18n + +- [ ] ~178 missing `adminXxx.*` translation keys across admin backoffice. + +## UX/design decisions deferred + +- [ ] Cart payment modal — has focus-trap now, but still not `app-dialog` (composition change deferred 3x). +- [ ] Cart `clearCart()` uses native `confirm()` — no styled dialog exists yet. +- [ ] Brand-color contrast failures (`--border-color`, `--success/warning/error/info-color`) — fails WCAG AA, needs theme-owner sign-off. +- [ ] `stars.component` + legacy hex in category/search — no token match, needs token-extension decision. +- [ ] Footer "Contacts" link — no static-page content exists at all. +- [ ] Builder static-page body editor — hidden under mislabeled "Advanced" section. +- [ ] Theme Mode (dark/system) selector — no runtime CSS effect, real feature project needed. +- [ ] `dynamic-renderer/` pipeline — built, never wired, needs finish-or-delete call. +- [ ] `HeaderConfig.showProfile` toggle — no profile/account UI exists to show. +- [ ] Homepage hero-to-categories dead-space gap — mock config artifact, needs real-tenant repro. + +## Tooling/infra + +- [ ] `primeng`/`primeicons` still in `package.json` (verified: still present). Dead code already removed; `npm uninstall` blocked by `barry-cache@^0.1.0` ETARGET (verified: still pinned to `^0.1.0`, real published range is `0.9.3`). +- [ ] 2 large lazy chunks (`project-editor` 320kB, `catalog-container` 126kB) — no split found yet. +- [ ] Angular 22 upgrade — researched, not executed. Plan: ~2-3.5 days, needs barry-cache fix + Node bump first. +- [ ] `git push` of local B2B commits to origin (verified: still 31 commits ahead, not pushed) — pending your go-ahead. + +## Done this cycle (for reference, not re-tracked here) + +Storefront polish (RC-Visual-02, RC-Premium-01, RC STORE-01), performance audit (RC PERF-01, bundle −24%), WCAG 2.1 AA accessibility audit (RC A11Y-01), release-candidate walkthrough (2 P0s fixed), dead-code cleanup, documentation consolidation. Full detail: `docs/FRONTEND-ROADMAP.md`. diff --git a/docs/archive/ACCESSIBILITY_REPORT.md b/docs/archive/ACCESSIBILITY_REPORT.md deleted file mode 100644 index 0880b9f..0000000 --- a/docs/archive/ACCESSIBILITY_REPORT.md +++ /dev/null @@ -1,61 +0,0 @@ -# Accessibility Report — RC A11Y-01 - -WCAG 2.1 AA audit + fixes across the whole application: Storefront, Builder (Project Editor), Backoffice (Admin). No redesign, no layout changes, no route/business-logic changes. Three sequential commits on branch `B2B` (not pushed): - -| Commit | Scope | -|---|---| -| `fb1afb7` | Storefront | -| `a03260e` | Builder | -| `565fd9b` | Backoffice | - -`npm run build` verified green after every commit. `npx tsc --noEmit` clean throughout. - -This audit goes deeper than the prior composition pass (`docs/UI-COMPOSITION-REVIEW.md` — skeletons/empty-states/`scope="col"`) into categories that pass didn't cover: skip links, keyboard-operable drag-and-drop, dialog focus management, color contrast ratios, form label association, live-region announcements, and combobox/tablist ARIA patterns. - -## Fixes by area - -### Storefront (`fb1afb7`) - -- **Skip link** — didn't exist anywhere in the app. Added as the first focusable element (`app.html`), targeting a new `#main-content` landmark. Single most commonly-missing WCAG 2.4.1 fix, present nowhere before this. -- **Keyboard/focus traps** — header mobile menu kept its items tabbable/screen-reader-reachable while visually collapsed; fixed via `visibility` + delayed transition. Header's search input had no keyboard activation path. -- **Dialog accessibility** — cart's custom payment/bank-payment modals had *no* focus-trap, Escape handling, or return-focus, despite prior docs assuming `app-dialog` coverage — they're custom, not `app-dialog`. Ported the confirmed-correct `app-dialog` pattern directly onto them. -- **Screen-reader announcements** — payment status screens (creating/waiting/success/error/timeout) got `role="status"`/`role="alert"` + `aria-live`. -- **Search combobox** — added `role="combobox"`/`aria-autocomplete`/`aria-controls`/`aria-activedescendant` so the existing arrow-key navigation is actually announced to screen readers (previously silent). -- **Tabs** — product tabs had `role="tab"` with no `tablist`/`tabpanel` wrapper; completed the pattern. -- **Forms** — review-form errors now `aria-describedby` + `role="alert"`; `aria-required` on review textarea and delivery select. -- **Icons** — `app-icon` (shared, app-wide) claimed "decorative by default" in its own contract but never actually applied `aria-hidden` — fixed for real, affects every icon usage across the app. -- **Contrast** — `--text-light` measured 3.39:1 (dexar theme) / 2.54:1 (lavero/novo) against the 4.5:1 requirement. Switched the 2 in-scope usages to `--text-secondary` (7.56:1 / 4.55:1). - -### Builder (`a03260e`) - -- **Skip link** — Builder routes render outside the storefront app-shell entirely (bare ``), so the storefront fix didn't cover it. Added separately with its own `#builder-main-content` landmark. -- **Keyboard-operable drag-and-drop (WCAG 2.1.1)** — Homepage section's block list and Footer section's columns/links use Angular CDK drag-drop with zero keyboard equivalent. Added move-up/move-down button fallbacks (Navigation and Widgets sections already had this from an earlier sprint). -- **Undefined `--color-primary` token** — same bug class as the prior composition pass, missed there: 7 usages across 3 files silently fell back to hardcoded hex, never responding to tenant theming. Remapped to the real `--primary-color` token. -- **Forms** — color-picker's `` swatches (8 instances) had no accessible name; new-locale input relied on placeholder text alone (invisible to screen readers once a value is typed). -- **Screen-reader announcements** — save-bar status/draft-restored notice and media-picker upload errors had no `aria-live`/`role`. - -### Backoffice (`565fd9b`) - -- **Sidebar nav mislabeled** — `