.claude/skills/frontend-design/SKILL.md
Create premium React components and pages for statFootV3 using the Design System V3. Use when building UI components, pages, dashboards, or styling/beautifying any view in the frontend. Generates distinctive code using ds-* classes, CSS tokens, and the Visual Manifesto aesthetic — never generic AI aesthetics.
npx skillsauth add FRmicrow/dataFootV1 frontend-designInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill guides creation of premium, production-grade frontend interfaces for statFootV3 that respect the existing Design System V3 and Visual Manifesto. It enforces intentional design philosophy before any code is written.
Before writing any code, commit to a clear aesthetic direction by answering:
ds-* components cover this feature? List them before creating anything new.Document this in docs/features/Vxx-[Name]/DESIGN_PHILOSOPHY.md before proceeding. Get user validation.
Check frontend/src/design-system/ before writing any style. Use existing components:
ds-card, ds-badge, ds-button, ds-input, ds-select, ds-table,
ds-tabs, ds-progress, ds-skeleton, ds-metric-card, ds-profile-header,
ds-fixture-row, ds-league-card, ds-player-card, ds-navbar
Use CSS variables from tokens.css — NEVER hardcode values:
/* CORRECT */
color: var(--color-primary-500);
padding: var(--spacing-md);
border-radius: var(--radius-md);
/* FORBIDDEN */
color: #8b5cf6;
padding: 24px;
border-radius: 12px;
See references/design-tokens.md for the full token reference.
Avoid Inter for display text. Use the --font-family token for body, but override headings with a distinctive font (e.g. 'DM Sans', 'Sora', 'Outfit'). Pair a display font with the body font — see Visual Manifesto rule.
animation-delay, not instant poptransition: var(--transition-base) on all hover/active statesbox-shadow: var(--focus-ring) on all interactive elementsEvery component that fetches data must render a <Skeleton> from the design system while loading. No spinners, no blank spaces.
import Skeleton from '../../../design-system/components/Skeleton';
if (isLoading) return <Skeleton variant="card" />;
useMemouseCallbackstyle={{...}} with more than 2 properties — use className + CSS variablesrgb(), rgba() in JSX — use tokens<div> grids when ds-grid or layout tokens exist#FF0000, #0000FF primary colorsUser: "Build a player comparison module."
Agent:
frontend/src/design-system/components/ — find MetricCard, Table, TabsDESIGN_PHILOSOPHY.md: tone = "analytical/data-dense, dark observatory"ds-tabs for navigation, ds-metric-card for stats, ds-skeleton for loadingqa-automation-v2 skill for testingdevelopment
Écrire des tests unitaires Node.js. Utiliser quand on teste une fonction isolée avec Vitest dans backend/test/.
testing
Tester l'intégration entre services. Utiliser quand on vérifie l'interaction contrôleur/service avec Supertest + Vitest.
development
Tester les composants React avec Vitest + Testing Library. Utiliser quand on teste le rendu ou les interactions.
testing
Écrire des tests end-to-end Playwright. Utiliser quand on teste l'application complète du point de vue utilisateur.