The frontend-consistency-improvements.md was stale — it still listed the 13 Tailwind-based ListViews as "to migrate" even though all 21 flagged modules shipped today (a2a43b1d5,86c205ffc,7d6a340b1,52af8c0ce,3e09ff66d). Rewrite to reflect the SHIPPED state and list the next layer of open consistency work (i18n, Phosphor icons, cross-surface theme parity). New docs/optimizable/README.md is the master index. Consolidates: - 🔴 Release blocker: tier-patch revert (links memory entry) - 🟠 Tracked trackers: per-topic links with status - 🟡 Small open items without a dedicated file: module-structure audit, plan-inventory hygiene, memory-hygiene post-release, cross-surface theme parity - How-to: list of `pnpm run audit:*` commands for live metrics Doesn't introduce new work items beyond what's already been discussed this session — just gives them a home so future sessions can pick up any one without re-discovery. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.3 KiB
Frontend Consistency Improvements
Tracked improvements for UI / styling consistency across the Mana unified app.
1. ListView theme-token migration — ✅ SHIPPED 2026-04-22
All 76 module ListViews and the broader lib/modules/** + routes/(app)/**
surface now use theme tokens (text-foreground, bg-muted,
border-border, --color-* scoped CSS) instead of raw Tailwind
white/N or neutral-palette classes.
Enforced by three validators wired into validate:all + lint-staged:
validate:theme-variables— CSS variable naming (--mutedforbidden,--color-mutedrequired)validate:theme-utilities— Tailwind class rules: no(bg|text|border)-white/N, no(bg|text|border)-(gray|slate|zinc|neutral|stone)-Nvalidate:theme-parity— 25 tokens × 9 theme variants parity check
See packages/shared-tailwind/brand-literals.md for the register of
intentional hex literals (period pink, calc retro skins, skilltree
branch accents, who deck colours, etc.).
2. transition-all sweep — ✅ SHIPPED 2026-04-22
All 98 transition-all occurrences replaced with specific transitions
(transition-colors, transition-opacity, transition-[width],
transition-[border-color,box-shadow], transition-[transform,colors,box-shadow]).
Prevents the P5 CSS-custom-property rendering bug where colours don't
resolve on first paint.
Codemod: scripts/migrate-transition-all.mjs.
3. a11y warnings — ✅ SHIPPED 2026-04-22
30 svelte-check warnings resolved; pnpm check now runs with
--fail-on-warnings so any regression blocks pre-push. Covers
a11y (missing keyboard handlers, missing labels), dead CSS selectors,
and Svelte 5 $state local-reference bugs.
4. i18n coverage — OPEN
65 / 78 modules still hardcode German in .svelte templates. The
translation infrastructure (@mana/shared-i18n, per-module locale
files for de / en / it / fr / es with ~3500 German strings) is fully
wired; what's missing is usage. See
i18n-migration-inventory.md for the
priority list and per-module workflow. Run
pnpm run audit:i18n-coverage for live numbers.
Top offenders today: broadcast (26 hits), articles (24), events (23), invoices (22), quiz + stretch (20 each), library (19), profile (17), skilltree PARTIAL (15), calendar PARTIAL (14).
5. Phosphor icon bloat — OPEN
@mana/shared-icons contributes 466 KB of icon paths to the shared
bundle. See bundle-analysis.md §2. Biggest
offender: app-registry/apps.ts imports 69 icons statically for the
module-name → icon-component map — ~290 KB alone. Recommended fix:
lazy getIconComponent(name) helper backed by per-icon dynamic
imports.
Run pnpm run audit:icon-usage for the current inventory.
6. Cross-surface theme parity — OPEN
Not yet audited:
apps/mana/apps/landing/(Astro) — does the landing page use the same theme tokens as the SvelteKit app, or a parallel system? Theme drift would mean Lume / Nature / Stone variants don't match between marketing and app.apps/memoro/apps/mobile/(Expo, RN) — the only remaining mobile surface.@mana/shared-themetargets React Native; is the token set aligned with the web--color-*palette?games/(arcade, voxelava, whopixels, worldream) — separate Vite/Svelte apps; unlikely to be aligned with the main theme but worth confirming.