ChicoryTV SPA: component library (primitives) #80

Closed
opened 2026-07-02 01:07:17 +02:00 by timothy · 1 comment
Owner

Recreate the ~18 design-system primitives in design-system/components/ as real TypeScript React components (the prototypes there are references; match visual output, use .d.ts + .prompt.md as the spec).

Components: forms (Button, IconButton, Input, Select, Switch, Checkbox); data-display (Badge, StatusDot, Tag, ChannelLogo, Card, Stat, ProgressBar); feedback (Toast, Tooltip, Spinner); navigation (NavItem/NavSection, Tabs).

Do

  • Lucide icon set (per design-system/readme.md iconography).
  • Each component typed, themeable via tokens, matching states (hover/active/focus/disabled/live).
  • A component gallery route to eyeball them against the *.card.html specimens.

Acceptance: all primitives implemented, typed, and visually matching the specimen cards across all 3 themes.

Recreate the ~18 design-system primitives in `design-system/components/` as real TypeScript React components (the prototypes there are references; match visual output, use `.d.ts` + `.prompt.md` as the spec). **Components:** forms (Button, IconButton, Input, Select, Switch, Checkbox); data-display (Badge, StatusDot, Tag, ChannelLogo, Card, Stat, ProgressBar); feedback (Toast, Tooltip, Spinner); navigation (NavItem/NavSection, Tabs). **Do** - Lucide icon set (per `design-system/readme.md` iconography). - Each component typed, themeable via tokens, matching states (hover/active/focus/disabled/live). - A component gallery route to eyeball them against the `*.card.html` specimens. **Acceptance:** all primitives implemented, typed, and visually matching the specimen cards across all 3 themes.
timothy added the frontend label 2026-07-02 01:07:17 +02:00
timothy added a new dependency 2026-07-02 01:08:41 +02:00
timothy added a new dependency 2026-07-02 01:08:41 +02:00
timothy added a new dependency 2026-07-02 01:08:41 +02:00
timothy added this to the Design system (Claude Design ↔ prod) milestone 2026-07-02 01:08:43 +02:00
Author
Owner

Done

What was done: Implemented the ChicoryTV SPA primitive component library for forms, data display, feedback, and navigation; added a token-driven shared component stylesheet; replaced shell nav/action samples with primitives; added a component gallery in the SPA that exercises the specimen-card content across the existing theme switcher; added tests for component exports/interactions and gallery rendering. Committed and pushed as e6df6ac1 (feat(web): add ChicoryTV component primitives, refs #80).

Root cause: n/a

Files changed: web/src/components/*, web/src/App.tsx, web/src/App.test.tsx, web/src/shell.css, docs/superpowers/plans/2026-07-02-chicorytv-spa-component-primitives.md.

Verification: npm test -- --run (7 tests passed); npm run typecheck (passed); npm run build (passed); npm run lint (passed); git diff --check (clean). Vite dev server started at http://127.0.0.1:5174/app/ after 5173 was occupied; lsof shows the listener, but sandboxed curl could not connect to local Vite ports, so the HTTP probe could not be completed from this environment.

Deferred: No code scope deferred. Browser eyeballing remains available via the running gallery URL.

Follow-up issues: n/a

Docs updated: Added the implementation plan under docs/superpowers/plans/.

## Done **What was done**: Implemented the ChicoryTV SPA primitive component library for forms, data display, feedback, and navigation; added a token-driven shared component stylesheet; replaced shell nav/action samples with primitives; added a component gallery in the SPA that exercises the specimen-card content across the existing theme switcher; added tests for component exports/interactions and gallery rendering. Committed and pushed as `e6df6ac1` (`feat(web): add ChicoryTV component primitives`, refs #80). **Root cause**: n/a **Files changed**: `web/src/components/*`, `web/src/App.tsx`, `web/src/App.test.tsx`, `web/src/shell.css`, `docs/superpowers/plans/2026-07-02-chicorytv-spa-component-primitives.md`. **Verification**: `npm test -- --run` (7 tests passed); `npm run typecheck` (passed); `npm run build` (passed); `npm run lint` (passed); `git diff --check` (clean). Vite dev server started at `http://127.0.0.1:5174/app/` after 5173 was occupied; `lsof` shows the listener, but sandboxed `curl` could not connect to local Vite ports, so the HTTP probe could not be completed from this environment. **Deferred**: No code scope deferred. Browser eyeballing remains available via the running gallery URL. **Follow-up issues**: n/a **Docs updated**: Added the implementation plan under `docs/superpowers/plans/`.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: timothy/ersatztv#80