Skip to content

Design system

Map: design-system/ · De derde tier van de fundering: de styling-laag die de frontend-kits consumeren in plaats van herimplementeren.

Waar kits mechaniek leveren en capability-modules een vermogen, levert het design system de visuele taal — merkneutraal, zodat elk product er zijn eigen identiteit overheen legt.

Waarom het naast foundation/ staat en niet erin

Het is functioneel onderdeel van de fundering, maar fysiek een eigen deelproject. Het heeft zijn eigen package-lock.json, zijn eigen build (tokenpipeline + vue-tsc), een geneste Nuxt-docssite onder server/ met een tweede lockfile, en een Playwright-suite — geen daarvan overleeft een root---workspaces-fan-out intact. Dezelfde reden waarom de foundation zijn workspaces liet vallen.

Clone-and-rebrand, geen runtime-theming

Het model is expliciet: je kopieert het design system je product in. Daarna hoort het bij dat product.

WelNiet
Clonen per productAls dependency delen
Eigen versie per kopieUpstream-koppeling
Rebranden via één bestandMulti-tenant runtime-theming
Publiceren onder eigen scope: @seifer-webapp-factory/<product>-design-systemEén gedeeld package

Rebrandkosten horen bijna nul te zijn, en een LLM moet het uit één voor de hand liggend bestand kunnen doen.

De vier tokenlagen

Dit is waarom de rebrand goedkoop is: alles hangt aan één bestand.

De enige regel

Bewerk tokens/brand.json en draai npm run build:tokens. Bewerk niettokens/semantics/ of een <Naam>.tokens.json — die verwijzen indirect naar brand.json. En hardcode nooit een hex in component-SCSS.

rebrand — de skill

Wat je in brand.json zet:

VeldWat
nameProductnaam
palette.<rol>.rampWelke primitive-ramp hoort bij primary, secondary, accent, success, warning, danger, info, neutral
fonts.{sans, display, mono}CSS-fontstacks
fonts.faces@font-face-entries — alleen bij eigen .woff2
feel.radiusScalefibonacci | linear
feel.shadowDepthsubtle | default | dramatic
feel.useGradientsboolean

De beschikbare ramps staan in tokens/primitives/color.jsonneutral, navy, blue, purple, orange, amber, yellow, green, red, pink, teal. Een nieuwe ramp voeg je daar éérst toe, met 12 tinten (50, 100, …, 950).

De verificatiestap

Na npm run build:tokens:

  1. Lees dist/css/tokens.css
  2. Grep naar de hexcodes van het vorige primaire ramp
  3. Blijft er iets staan → er lekt een brand-vorm door. Zoek in tokens/components/*.json naar directe primitive-referenties en vervang ze door semantische refs ({intent.action.*}, {surface.*}, {text.*}, {border.*})
  4. Draai npm test en npm run typecheck

Waarom die grep erin staat

Zonder die stap lijkt een rebrand geslaagd terwijl het oude merk nog in een handvol componenten zit. Je ontdekt dat pas als iemand ernaar kijkt.

BRAND.md bevat drie uitgewerkte voor/na-snapshots: serious-fintech, warm-DTC en minimalist-SaaS. Voor precies die looks is apply-preset de kortere weg.

theme-manager — de theming-skill

Waar rebrand het mérk zet, bezit theme-manager de theme-lifecycle bovenop de per-thema co-located tokenarchitectuur.

OperatieDoet
Toevoegen"Voeg een high-contrast / print / [naam] thema toe"
BijstellenLosse tokenwaarden binnen één thema
Pariteit auditenVerifiëren dat élk thema dezelfde set tokenkeys heeft
WCAG validerenContrast toetsen over alle thema's
Dekking tonenWelke componenten missen een theme-X-tokenbestand
ExtraherenEen thema afleiden uit een afbeelding of URL — herschrijft het basisthema en her-synct de andere

De skill is tokens-only: hij raakt brand/primitives, .vue-bestanden en SCSS niet aan. En evidence_mode staat op required — elke aanbeveling citeert een pad, elke auditbevinding een file:line.

De overige skills

SkillDoet
add-componentEen component toevoegen volgens het canonieke patroon — ook om een PrimeVue-component te repliceren
test-componentDe drielaagse teststrategie: Vitest-contract + logica, Playwright per-component via de /isolate-route, axe-matrixdekking
apply-presetEen benoemd preset toepassen
build-prototype-by-design-systemEen runnende multi-page prototype uit journeys, stories en personas — alléén met design-system-componenten
kanban-workerHet bord autonoom richting DONE draaien
sync-templateUpstream-verbeteringen naar een productkopie halen ⚠️

sync-template werkt niet meer

De skill liet verbeteringen terugvloeien via een template-git-remote en een git merge-base-three-way-merge. Sinds de monorepo-migratie klopt geen van beide: deze map is geen repo-root meer (de paden die hij categoriseert zitten een niveau mis), en de monorepo deelt geen voorouder met bestaande kopieën. Tot hij herbouwd is op een pad-gescopete diff is syncen handwerk.

Wireframe-kit

wireframe-ds/ is een aparte laag met een ander doel: hand-getekende Rough.js-wireframecomponenten voor spoor 4 van de ideation-fase.

Package@for-the-people-initiative/wireframe-kit
ZichtbaarheidPubliek — het enige publieke package in deze repo
Gebruikt doorDe wireframing-skill, die er een runnende Vue 3 + Vite-app mee scaffoldt
Waarom hand-getekendEen wireframe die er af uitziet, krijgt feedback over kleuren. Een wireframe die er geschetst uitziet, krijgt feedback over de flow.

Eén scherm per bestand, automatisch ontdekte routes, een screen-picker-navigatie, per-platform device-frame-wrapping en click-through-bedrading via router.push.

Draaien

bash
cd design-system
npm install
npm --prefix server install
npm run dev              # de Nuxt-docssite
npm run build:tokens     # na elke brand.json-wijziging
npm test && npm run typecheck
bash
cd wireframe-ds
npm install
npm run storybook

Seifer — interne documentatie. Bron van waarheid blijft de repo zelf.