recipe-manager/.harness/styling-stabilization-execu...

9.0 KiB

Recipe Manager — Styling Stabilization Execution Board

Created: 2026-03-27
Owner: Main Orchestrator
Status: READY

Objective

Stabilize frontend styling so recipe-manager has a single, predictable styling system (tokens + reusable UI primitives + clear usage rules) before any further visual redesign work.

Current Repo Reality (Baseline)

recipe-manager (frontend)

  • Stack is React + Vite + Tailwind v4 (frontend/package.json).
  • There is an existing token layer in CSS variables (src/styles/tokens.css) and Tailwind mapping (tailwind.config.js).
  • A reusable utility-class layer exists in src/index.css (.ui-btn, .ui-card, .ui-input, .ui-chip, .ui-page, .ui-section).
  • A parallel TS token file exists (src/theme.ts) with overlapping values (colors/radius/shadows/typography) duplicated from CSS tokens.
  • Styling is currently mixed:
    • some components use the ui-* classes and CSS variable tokens,
    • some use Tailwind utility colors directly (bg-blue-*, text-slate-*, border-gray-* etc.),
    • some use inline style objects from theme.ts (style={{ boxShadow: shadows.card, borderRadius: radius.lg }}),
    • src/App.css still contains legacy scaffold/demo styles not aligned with the current design system,
    • MissionControlPanel.tsx uses older gray utility styling and does not follow ui-* primitives.
  • Result: design drift risk is high because there is no enforced “one true path” for styling.

Fintrove (packages/fintrove-app)

  • Uses Next.js + Tailwind v3 + shadcn/ui pattern.
  • Evidence:
    • components.json configured for shadcn (style: "new-york", aliases, cssVariables true).
    • src/components/ui/* contains shadcn-style primitives (Button, Card, Input, etc.).
    • @radix-ui/*, class-variance-authority, clsx, tailwind-merge are installed and actively used.
    • src/lib/utils.ts exposes cn() pattern (twMerge(clsx(...))).
    • App pages/modules heavily import @/components/ui/* components.
  • Practical note: Fintrove still has some custom CSS for layout edge cases (sidebar), but core UI is standardized through primitives.

Release Gate (Done Definition)

  • recipe-manager has one canonical token source (CSS variables) with no drift between CSS and TS token constants.
  • Base UI primitives are centralized and used across pages/components for buttons, cards, inputs, chips/badges, section shells.
  • No new feature UI uses raw ad-hoc color classes outside tokenized/theme-approved set.
  • Legacy/unused styling artifacts are removed or documented as intentionally retained.
  • A lightweight styling governance doc/checklist exists so future changes remain consistent.

Recommendation Decision

Keep current Tailwind + tokenized CSS variables + shared UI components (Fintrove-inspired discipline), optionally adopting selective shadcn patterns later.

Why (repo-specific)

  1. recipe-manager already has a strong token foundation (tokens.css + ui-* classes) and visual language in flight.
  2. A full migration to Mantine/Chakra now would add heavy churn and force broad rewrites for limited short-term value.
  3. Full shadcn adoption now is possible, but it also introduces migration overhead (Radix + CVA component rewiring) while the current app can be stabilized faster by consolidating what already exists.
  4. Best immediate leverage from Fintrove is process and component architecture, not a wholesale framework switch:
    • centralized primitives,
    • strict use of shared components,
    • cn() utility + variant patterns where helpful.

Option stance

  • Keep Tailwind + shared UI components: Recommended now
  • Adopt shadcn/ui immediately: ⚠️ optional phase-2 enhancement, not first move
  • Adopt Mantine/Chakra: not recommended for current phase
  • Borrow Fintrove patterns: yes — especially primitives + usage discipline

Task Backlog

T01 — Styling Inventory + Drift Map

Priority: P0
Owner: agent-style-audit
Dependencies: none

Deliverables:

  • Component/page inventory tagged by styling mode:
    • ui-* primitives,
    • raw Tailwind utilities,
    • inline theme.ts styles,
    • legacy CSS (App.css) usage.
  • Drift report listing top inconsistency hotspots (starting with App.tsx, MissionControlPanel.tsx, major pages).

Acceptance:

  • Written inventory committed under .harness/docs/styling-inventory.md.
  • Every top-level page and shared component classified.
  • Explicit “first conversion targets” list produced.

T02 — Canonical Token Source Lock

Priority: P0
Owner: agent-design-system
Dependencies: T01

Deliverables:

  • Decide and document canonical token authority (CSS variable tokens in tokens.css).
  • Align/trim theme.ts so it becomes a typed accessor/mirror (or remove overlapping hardcoded values where possible).
  • Add a short token usage guide (when to use class vs CSS var vs helper constant).

Acceptance:

  • No conflicting duplicate token values between CSS and TS token surfaces.
  • Token mapping doc exists (.harness/docs/styling-token-contract.md).
  • New token additions have one defined source-of-truth path.

T03 — UI Primitive Contract (Recipe Manager UI Kit)

Priority: P0
Owner: agent-ui-foundation
Dependencies: T02

Deliverables:

  • Formalize minimal primitives (Button/Card/Input/Badge/Section/Page shell) using existing ui-* base.
  • Add composable wrappers/components where needed to reduce repeated class strings.
  • Introduce cn() utility (Fintrove pattern) if class composition complexity requires it.

Acceptance:

  • Shared primitive surface exists and is documented.
  • At least 3 high-traffic screens consume primitives instead of duplicated class blocks.
  • No regression in behavior/accessibility for converted areas.

T04 — High-Drift Screen Conversions

Priority: P1
Owner: agent-core-ui
Dependencies: T03

Deliverables:

  • Convert highest inconsistency files first:
    • src/App.tsx nav/header/footer,
    • src/components/MissionControlPanel.tsx,
    • one primary page (RecipeListPage or RecipeDetailPage) where mixed style patterns are most visible.
  • Replace raw color utility classes with token-aware variants/primitives where practical.

Acceptance:

  • Converted files show clear reduction in ad-hoc style usage.
  • Visual parity maintained (or intentionally improved with notes).
  • No TypeScript/runtime regressions.

T05 — Legacy Style Debt Cleanup

Priority: P1
Owner: agent-style-cleanup
Dependencies: T04

Deliverables:

  • Remove or quarantine stale scaffold styles in src/App.css.
  • Remove dead class names/selectors no longer referenced.
  • Add comments for any intentionally retained exceptions.

Acceptance:

  • App.css no longer contains unrelated starter/template styling.
  • Dead style selectors removed.
  • Build output CSS size/change reviewed and documented.

T06 — Guardrails + Lightweight Governance

Priority: P1
Owner: agent-qa-polish
Dependencies: T04, T05

Deliverables:

  • Add a concise styling contribution checklist (.harness/docs/styling-governance.md).
  • Add lightweight guardrail command in frontend (npm run style:guardrails) for scoped app-shell/primitive checks.
  • PR checklist items for token/primitive usage and accessibility checks.

Acceptance:

  • Governance doc exists and is referenced by board/task workflow.
  • At least one automated or semi-automated guardrail in place.
  • Team can explain “how to style new UI here” in <2 minutes.

T07 — Stabilization QA Pass

Priority: P1
Owner: agent-qa-polish
Dependencies: T06

Deliverables:

  • Before/after screenshots of converted surfaces.
  • Keyboard focus + contrast spot-check on converted components.
  • Regression notes and signoff summary.

Acceptance:

  • QA notes committed under .harness/docs/styling-stabilization-qa.md.
  • No critical visual regressions on mobile/desktop.
  • Release gate checklist completed.

Wave Plan (Execution Order)

Wave 1 — Discovery + Rules

  • T01 (inventory/drift map)
  • T02 (token source lock)

Wave 2 — Foundation

  • T03 (primitive contract)

Wave 3 — Conversion + Cleanup

  • T04 (high-drift screens)
  • T05 (legacy style debt)

Wave 4 — Prevent Regressions + Signoff

  • T06 (guardrails/governance)
  • T07 (stabilization QA)

Dependencies Summary

  • T02 depends on T01 so token decisions are based on real usage.
  • T03 depends on T02 to avoid rebuilding primitives on unstable tokens.
  • T04/T05 follow T03 for consistent rollout.
  • T06/T07 close the loop and keep drift from reappearing.

First Task to Launch

Launch T01 — Styling Inventory + Drift Map.

Reason: this repo already has multiple parallel styling paths. Without an explicit inventory, refactor work will be noisy and may increase inconsistency. T01 gives the concrete map needed to sequence low-risk, high-impact stabilization.

Reporting Protocol (for each task)

  1. task id
  2. files changed
  3. before/after evidence (screenshots or diffs)
  4. blockers/risks
  5. ready-for-review flag