Skip to content

01 — Brand Identity

Status: 🎨 Vision — Nog niet gebouwd.

Afhankelijkheden: Geen — dit document is zelfstandig. Guild taxonomy (06) wordt later als optionele laag toegevoegd.

Brand identity in Beam bestaat uit twee fasen:

  1. Onboarding wizard — verzamelt merkdata in 7 stappen en levert een Brand JSON
  2. Styling Builder — vertaalt Brand JSON naar een levend design system via presets en finetuning

Het resultaat: merkinfrastructuur als service. Eén bron van waarheid voor alle visuele uitingen, bewaakt door guardrails die professionele kwaliteit garanderen.


  1. Onboarding Wizard
  2. Wizard Stappen (1–7)
  3. Branche & Sub-niche Taxonomie
  4. Font-combinaties
  5. Brand JSON Output
  6. Styling Builder
  7. Sfeer-presets
  8. Guardrail Systeem
  9. Data Flow
  10. Bouwvolgorde
  11. Toekomstige Uitbreidingen

Een wizard die nieuwe gebruikers doorlopen bij het aanmaken van een site. Het resultaat is een Brand JSON die als fundament dient voor de Styling Builder en alle content.

  • 7 stappen — gestructureerd, voorspelbaar, laagdrempelig
  • Stap 5 en 7 zijn optioneel — gebruiker kan overslaan en later invullen
  • Progressie-indicator — gebruiker ziet altijd waar ze zijn
  • Tussentijds opslaan — wizard data persists in localStorage, hervat waar je gebleven bent
  • Validatie per stap — niet pas aan het einde

Beslissing uitgesteld. De wizard kan een aparte app worden (start.beambuilder.com) of een flow binnen het bestaande dashboard. De UX en data-structuur zijn in beide gevallen identiek.


VeldTypeVerplichtValidatie
BedrijfsnaamtekstMin 2, max 100 tekens
Slogan / taglinetekstMax 150 tekens
Korte beschrijvingtextareaMin 20, max 300 tekens
BranchedropdownKeuze uit taxonomie (zie §3)
Sub-nichedropdownDynamisch op basis van branche
Website URL (bestaand)urlURL format validatie

UX: De branche-dropdown filtert dynamisch de sub-niche opties. Bij “Anders” verschijnt een vrij tekstveld.


VeldTypeVerplichtValidatie
Wie is je ideale klant?textareaMin 10, max 500 tekens
B2B of B2C of beide?single select
Leeftijdsrange doelgroeprange slider16–80, stappen van 5
Regio / marktmulti-selectLokaal, nationaal, internationaal

Visuele keuze met live voorbeeldtekst die meebeweegt met de sliders.

DimensieTypeDefault
Formeel ↔ Informeelslider (0.0–1.0)0.5
Serieus ↔ Speelsslider0.5
Technisch ↔ Toegankelijkslider0.5
Zakelijk ↔ Persoonlijkslider0.5

UX: De voorbeeldtekst toont dezelfde boodschap in de gekozen stijl. Bij “informeel + speels” ziet de gebruiker een andere formulering dan bij “formeel + serieus”. Drie voorbeeldzinnen die live reageren:

Slider: Formeel + Serieus
→ "Wij bieden professionele renovatiediensten voor woningeigenaren in de regio Utrecht."
Slider: Informeel + Speels
→ "Droomt je badkamer van een make-over? Wij maken het waar — en het wordt nog leuk ook."
Slider: Midden
→ "Een verbouwing hoeft niet stressvol te zijn. Wij begeleiden je van plan tot oplevering."

VeldTypeVerplichtValidatie
Logo uploadfile uploadSVG, PNG, max 2MB
Primaire kleurcolor pickerHex of OKLCH
Secundaire kleurcolor picker
Accentkleurcolor picker
Font-combinatievisuele keuze12 opties (zie §4)
Gewenste sfeervisuele keuze6 presets (zie §7)

UX bij kleuren: Als de gebruiker geen kleuren kiest, worden ze afgeleid uit de sfeer-preset. Als er wel een primaire kleur is maar geen secundaire/accent, genereert het systeem complementaire kleuren via OKLCH.

UX bij sfeer: 6 visuele kaarten met naam, kleuren, fonts en een mini-preview. De gebruiker klikt één kaart om een sfeer te kiezen. Deze keuze laadt het startpunt van de Styling Builder.


VeldTypeVerplichtValidatie
Welke pagina’s wil je?multi-selectMin 1 selectie
Heb je al teksten?ja/nee toggle
Teksten uploadenfile uploaddocx, txt, pdf, max 10MB
Heb je al foto’s?ja/nee toggle
Foto’s uploadenmulti file uploadjpg, png, webp, max 5MB/stuk, max 20

Pagina-opties: Home, Over ons, Diensten, Contact, Blog, Portfolio, Pricing, FAQ

UX: Duidelijke tekst: “Dit kun je ook later doen in het dashboard.” De stap is overspringbaar.

Wat er met uploads gebeurt:

  1. Teksten (docx, txt, pdf) → opgeslagen in R2 + tekst geëxtraheerd als extracted_text
  2. Afbeeldingen → opgeslagen in R2 + thumbnail gegenereerd
  3. Logo → opgeslagen in R2, URL in de Brand JSON

VeldTypeVerplichtValidatie
Hoofddoel van de websitesingle select
Belangrijkste call-to-actiontekstMax 60 tekens
Secundaire CTAtekstMax 60 tekens
Contactgegevensgestructureerde veldenEmail/telefoon/adres format
Social media linksherhalend veldPlatform + URL, max 6

Hoofddoel opties: Leads genereren, Informeren, Producten/diensten verkopen, Portfolio tonen, Community opbouwen


Stap 7: Concurrentie & Differentiatie (optioneel)

Section titled “Stap 7: Concurrentie & Differentiatie (optioneel)”
VeldTypeVerplichtValidatie
Noem 1–3 concurrenten (of URLs)herhalend tekstveldMax 3 entries
Wat maakt jou anders?textareaMax 300 tekens
Wat moeten bezoekers onthouden?tekstMax 100 tekens

UX: Hele stap is overspringbaar met duidelijke “Overslaan” knop.


De branche-keuze in stap 1 werkt met een twee-niveau systeem: brede categorie → sub-niche. De sub-niche kan later mappen naar vertical packs en guild-archetypes.

BrancheSub-niches
Wellness & ZorgYoga studio, Therapiepraktijk, Coaching, Fysiotherapie, Diëtist, Personal trainer, Massagepraktijk, Anders
Creatieve IndustrieFotograaf, Grafisch ontwerper, Illustrator, Filmmaker, Muzikant, Schrijver, Animator, Anders
Horeca & GastvrijheidRestaurant, Café, Hotel / B&B, Eventlocatie, Catering, Feestzaal, Anders
Retail & E-commerceWebshop, Lokale winkel, Ambachtsman, Food producer, Marktplaats, Anders
Zakelijke DienstverleningAannemer, Architect, Makelaar, Advocaat, Accountant, IT-dienstverlener, Adviseur, Anders
Onderwijs & TrainingOnline cursussen, Trainer/coach, Spreker, Auteur, Onderzoeker, Anders
Tech & SoftwareSaaS, Freelance developer, Agency, Startup, Anders
Non-profitStichting, Vereniging, Vrijwilligersorganisatie, Anders
Overig(vrij tekstveld)

Mapping naar toekomstige guilds:

BrancheGuild (toekomst)
Wellness & Zorg⚕️ Healers
Creatieve Industrie🎨 Creators
Retail & E-commerce🏪 Merchants
Onderwijs & Training📚 Scholars
Horeca & Gastvrijheid🍽️ Hosts
Zakelijke Dienstverlening, Tech🔧 Builders

Non-profit en Overig mappen niet direct naar een guild — daar wordt later een “Kies je stijl” flow voor gebouwd.


12 curated font-combinaties via Google Fonts, verdeeld over de 6 sfeer-presets (2 per preset):

NaamHeadingBodyKarakter
Forest CalmPlayfair DisplayLatoElegant serif + vriendelijke sans — tijdloos en warm
BotanicalCormorant GaramondSource Sans 3Organische serif + neutrale body — licht en natuurlijk
NaamHeadingBodyKarakter
StatementBebas NeueInterDisplay-caps voor impact + cleane body
Creative EdgeSyneDM SansGeometrische kop met karakter + moderne body
NaamHeadingBodyKarakter
Corporate CleanPlus Jakarta SansOpen SansModerne professionele sans — betrouwbaar en helder
Trusted ProMulishNunito SansStrak en open — SaaS en tech-friendly
NaamHeadingBodyKarakter
EditorialLibre BaskervilleMerriweatherDubbele serif — autoriteit voor longform content
AcademicEB GaramondLoraKlassiek humanistisch — intellectueel en diepgaand
NaamHeadingBodyKarakter
Bistro CharmPlayfair DisplayNunitoElegante serif + ronde body — warm en uitnodigend
Cozy TableDM Serif DisplayKarlaKlassiek display + moderne body — restaurant-gevoel
NaamHeadingBodyKarakter
System SolidRoboto SlabRobotoSlab + matching sans — functioneel, no-nonsense
IndustrialSpace GroteskIBM Plex SansTechnisch en efficiënt — tools en engineering
  • Serif heading + sans body = tijdloos contrast, meest universeel
  • Display-only kop (Bebas, Syne, DM Serif Display) = visueel statement, body moet neutraal zijn
  • Dubbele serif (Editorial, Academic) = voor content-zware sites
  • Matched families (Roboto, IBM Plex) = maximale harmonie

De output van de wizard. Dit JSON object wordt via de API opgeslagen en is de input voor de Styling Builder. Volledig contract: zie Brand JSON Spec.

{
"version": "1.0",
"created_at": "2026-03-20T12:00:00Z",
"company": {
"name": "Bouwbedrijf De Vries",
"tagline": "Vakmanschap sinds 1985",
"description": "Renovatie en nieuwbouw voor particulieren in de regio Utrecht",
"industry": "zakelijke-dienstverlening",
"sub_niche": "aannemer",
"website_url": null
},
"audience": {
"type": "b2c",
"description": "Huiseigenaren in regio Utrecht die willen verbouwen",
"age_range": { "min": 30, "max": 65 },
"market": ["regional"]
},
"tone_of_voice": {
"formality": 0.6,
"seriousness": 0.7,
"technicality": 0.3,
"personality": 0.5
},
"visual_identity": {
"logo_url": null,
"colors": {
"primary": "#1B4D7A",
"secondary": "#F5F0EB",
"accent": "#D4883E"
},
"font_combination": "system-solid",
"mood_preset": "solide-strak"
},
"content": {
"requested_pages": ["home", "about", "services", "contact", "portfolio"],
"existing_texts": [],
"existing_media": []
},
"goals": {
"primary_goal": "lead_generation",
"primary_cta": "Vraag een gratis adviesgesprek aan",
"secondary_cta": "Bekijk onze projecten",
"contact": {
"email": "info@devries-bouw.nl",
"phone": "+31 30 123 4567",
"address": "Industrieweg 12, Utrecht"
},
"social_media": [
{ "platform": "instagram", "url": "https://instagram.com/devries.bouw" }
]
},
"positioning": {
"competitors": [],
"differentiator": null,
"key_message": null
}
}
StapBrand JSON veld
1 — De Basiscompany.*, company.industry, company.sub_niche
2 — Doelgroepaudience.*
3 — Tone of Voicetone_of_voice.*
4 — Visuele Identiteitvisual_identity.*
5 — Content & Mediacontent.*
6 — Doelen & Conversiegoals.*
7 — Concurrentiepositioning.*

De Styling Builder ontvangt de Brand JSON en vertaalt die naar een levend design system. Het is het bewerkoppervlak — het token schema is de opslag.

Kernfilosofie: “You cannot make it ugly.”

Section titled “Kernfilosofie: “You cannot make it ugly.””

Elke keuze die de gebruiker maakt wordt begrensd door guardrails die professionele kwaliteit garanderen. Niet omdat de gebruiker dom is, maar omdat goed design moeilijk is en Beam dat probleem oplost.

Wizard ingevuld?
visual_identity.mood_preset aanwezig?
→ JA: laad die sfeer-preset als startpunt
→ NEE: branche/sub_niche → suggereer passende preset
visual_identity.colors aanwezig?
→ JA: overschrijf preset kleuren met gebruikerskeuze
→ NEE: gebruik preset kleuren
visual_identity.font_combination aanwezig?
→ JA: overschrijf preset fonts
→ NEE: gebruik preset fonts
Builder opent met dit samengestelde startpunt

Principe: de Styling Builder vraagt niets wat de wizard al heeft gevraagd. Alle wizard-data wordt direct als startpunt geladen.

┌─────────────────────────────────────────────────────┐
│ KLEUREN TYPOGRAFIE ELEMENTEN EXPORT │ ← tabs
├──────────────┬──────────────────────────────────────┤
│ │ [L][D][M] │
│ Controls │ Live Preview Canvas │
│ (sidebar) │ │
│ │ Bedrijfsnaam │
│ ● Preset │ H1 heading tekst │
│ ● Colors │ H2 subheading │
│ ● Fonts │ Body paragraph tekst... │
│ ● Radius │ [Primary CTA] [Secondary] │
│ ● Spacing │ │
│ ● Shadows │ ┌────────────────────────────┐ │
│ │ │ Block Preview │ │
│ ────────── │ │ (hoe blocks eruitzien │ │
│ Guardrails │ │ met jouw tokens) │ │
│ ✅ Contrast │ └────────────────────────────┘ │
│ ✅ Harmonie │ │
│ ✅ Typografie│ │
│ │ │
│ [Sfeer- │ │
│ preset: │ │
│ Solide & │ │
│ Strak] │ │
│ [Wissel →] │ │
└──────────────┴──────────────────────────────────────┘
  • Canvas toggle rechtsboven: [L] Light · [D] Dark · [M] Mobile
  • Inline selectie: klik op een element in de canvas → sidebar navigeert automatisch naar de juiste sectie
  • Guardrail dashboard: live status van alle guardrail checks onderaan de sidebar

Startpunt: preset palette of wizard-kleuren.

Controls:

ControlTypeFinetuning
Primaire kleurcolor pickerVrij kiezen, met guardrails
Secundaire kleurcolor pickerVrij kiezen
Accentkleurcolor pickerVrij kiezen
Shade schaalautomatischOKLCH 50-900 gegenereerd, niet handmatig
Dark modeauto-toggleAutomatisch berekend, per kleur override mogelijk

Max 3 brand colors — guardrail. Bij poging tot 4e kleur: “Drie kleuren zijn genoeg voor een sterk merk.”

Contrast check (altijd zichtbaar):

primary op background: 14.2:1 ✅ AAA
primary op surface: 11.8:1 ✅ AAA
text op background: 16.1:1 ✅ AAA
text-muted op surface: 4.8:1 ✅ AA
accent op background: 3.1:1 ⚠️ Alleen grote tekst

Bij ⚠️ of ❌: kleur wordt niet geblokkeerd, maar een suggestie voor een betere tint verschijnt.

Semantic mapping:

Role Gekoppeld aan Voorbeeld
──────────────────────────────────────────────────────
primary ● brand.primary [Button] [Link]
background ○ white (#FFFFFF) [Card bg]
surface ○ gray-50 [Section bg]
text ○ gray-900 [Paragraph]
text-muted ○ gray-500 [Caption]
border ○ gray-200 [Table border]
danger ○ #C92A2A [Foutmelding]
success ○ #2F9E44 [Bevestiging]
warning ○ #E67700 [Waarschuwing]

Startpunt: preset font-combinatie of wizard-keuze.

Controls:

ControlTypeFinetuning
Font-combinatievisuele keuze (12 opties)Kies preset, of heading/body apart wisselen
Heading fontdropdownCurated Google Fonts subset (30+ opties)
Body fontdropdownCurated subset, gefilterd op compatibiliteit met heading
Mono fontdropdownOptioneel, voor code/labels

Typografische schaal (vaste presets):

ElementFontDesktopMobielWeightLine-height
H1heading3rem2.25rem7001.2
H2heading2.25rem1.875rem6001.3
H3heading1.875rem1.5rem6001.3
H4heading1.5rem1.25rem5001.4
H5heading1.25rem1.125rem5001.4
H6heading1rem1rem5001.4
Bodybody1rem1rem4001.6
Labelbody0.875rem0.875rem5001.4
Captionbody0.75rem0.75rem4001.4

Guardrail: font-combinatie check. Bij het wisselen van heading font filtert de builder body fonts op compatibiliteit. Incompatibele combinaties zijn niet selecteerbaar.

Alle elementen erven hun styling uit kleuren + fonts + vorm. Per element kan de gebruiker een variant-preset kiezen.

Radius:

PresetWaardeKarakter
None0pxStrak, grafisch
Small4pxFunctioneel
Medium8pxBalanced
Large16pxZacht, vriendelijk
Pill9999pxSpeels, rond

Spacing:

PresetBase unitKarakter
Compact4pxEfficiënt, veel content
Comfortable6pxBalanced
Spacious8pxAdem, rust

Shadows:

PresetKarakter
NonePlat design
SubtleLichte diepte
MediumDuidelijke diepte
ProminentStatement, lagen

Per-element finetuning: Buttons, headings, body tekst, links, tabellen, formuliervelden, badges — elk met een preset die de standaardwaarden uit bovenstaande controls overneemt. Alleen beschikbaar via de “Elementen” tab, niet zichtbaar in de snelle flow.

  • CSS Variables — kant-en-klaar
  • Tailwind v4 @theme — voor Tailwind projecten
  • W3C Design Tokens JSON — standaard formaat, compatibel met Figma Tokens en Style Dictionary

6 visuele presets die als startpunt dienen voor de Styling Builder. Elke preset definieert een complete set kleuren, fonts, radius, spacing en shadows.

Mapping: Deze presets zijn bewust ontworpen als proto-guilds. Ze mappen later 1:1 naar guild Style Packs wanneer het guild-systeem wordt geïntroduceerd.

EigenschapWaarde
KleurenPrimary: sage green (#87A96B), Secondary: warm crème (#F5F0EB), Accent: aarde (#C4956A)
FontsForest Calm (Playfair Display + Lato)
RadiusLarge (16px)
SpacingSpacious
ShadowsSubtle
KarakterRustig, aards, ademruimte
Toekomstige guild⚕️ Healers
EigenschapWaarde
KleurenPrimary: charcoal (#2D3436), Secondary: off-white (#FAFAFA), Accent: electric (#FF6B6B)
FontsStatement (Bebas Neue + Inter)
RadiusMedium (8px)
SpacingComfortable
ShadowsMedium
KarakterOpvallend, creatief, contrast
Toekomstige guild🎨 Creators
EigenschapWaarde
KleurenPrimary: navy (#1B4D7A), Secondary: licht grijs (#F8F9FA), Accent: oranje (#D4883E)
FontsCorporate Clean (Plus Jakarta Sans + Open Sans)
RadiusSmall (4px)
SpacingComfortable
ShadowsSubtle
KarakterProfessioneel, betrouwbaar, helder
Toekomstige guild🏪 Merchants
EigenschapWaarde
KleurenPrimary: diep blauw (#1A365D), Secondary: perkament (#FDF8F0), Accent: goud (#B7791F)
FontsEditorial (Libre Baskerville + Merriweather)
RadiusSmall (4px)
SpacingSpacious
ShadowsNone
KarakterIntellectueel, autoriteit, diepgang
Toekomstige guild📚 Scholars
EigenschapWaarde
KleurenPrimary: warm bordeaux (#722F37), Secondary: ivoor (#FFFFF0), Accent: goud (#DAA520)
FontsBistro Charm (Playfair Display + Nunito)
RadiusMedium (8px)
SpacingComfortable
ShadowsMedium
KarakterWarm, uitnodigend, sfeervol
Toekomstige guild🍽️ Hosts
EigenschapWaarde
KleurenPrimary: antraciet (#374151), Secondary: licht grijs (#F3F4F6), Accent: blauw (#3B82F6)
FontsSystem Solid (Roboto Slab + Roboto)
RadiusNone (0px)
SpacingCompact
ShadowsSubtle
KarakterFunctioneel, efficiënt, no-nonsense
Toekomstige guild🔧 Builders
┌─────────────────────────────────────────────────────────────┐
│ Kies je stijl │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 🌿 │ │ 🖤 │ │ 💼 │ │
│ │ ████████ │ │ ████████ │ │ ████████ │ │
│ │ ████████ │ │ ████████ │ │ ████████ │ │
│ │ │ │ │ │ │ │
│ │ Warm & │ │ Bold & │ │ Zakelijk & │ │
│ │ Aards │ │ Expressief │ │ Betrouwbaar │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 📚 │ │ 🍽️ │ │ 🔧 │ │
│ │ ████████ │ │ ████████ │ │ ████████ │ │
│ │ ████████ │ │ ████████ │ │ ████████ │ │
│ │ │ │ │ │ │ │
│ │ Verfijnd & │ │ Gastvrij & │ │ Solide & │ │
│ │ Diep │ │ Sfeervol │ │ Strak │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ of: [Begin zonder preset — alles handmatig instellen] │
└─────────────────────────────────────────────────────────────┘

“You cannot make it ugly” is geen aspiratie — het is een technische implementatie. Guardrails zijn altijd actief, niet optioneel.

RegelImplementatieFeedback bij falen
Max 3 brand colorsUI blokkeert 4e kleur”Drie kleuren zijn genoeg voor een sterk merk.”
WCAG AA contrastReal-time check bij elke kleurwijzigingContrast ratio badge: ✅ AA / ⚠️ Bijna / ❌ Onvoldoende + suggestie
Harmonie checkKleuren buiten OKLCH-bereik van het palette”Deze kleur botst met je palette. Probeer deze suggestie.”
Dark mode contrastAutomatisch gevalideerd bij generatieIdem als WCAG check
RegelImplementatieFeedback bij falen
Curated font-parenIncompatibele combinaties niet selecteerbaarFont picker toont alleen compatibele matches
Vaste typografische schaalSizes niet handmatig instelbaar— (geen control beschikbaar)
Line-heightAutomatisch berekend per font size
Mobile sizesAutomatisch afgeleid (ratio)Preview toont mobiel mee
RegelImplementatieFeedback bij falen
Consistente radiusEén preset voor allesGeen losse radius per element
Spacing systeemBase unit × vermenigvuldigersStappen, geen vrije waarden
Shadow coherentie3 niveaus, niet vrij instelbaarPreset selector

Guardrails voelen niet als restrictie maar als hulp:

  • Goed: subtiel groen vinkje, bevestigend
  • Waarschuwing: element schudt licht + suggestie slide-in
  • Blokkade: control is simpelweg niet beschikbaar (bijv. 4e kleur, vrije font-size)

Onboarding Wizard
Stap 1-7 (data lokaal opgeslagen in localStorage)
Wizard voltooid → POST /api/onboarding/complete
Body: Brand JSON + upload references
API:
1. brand_profiles aanmaken (Brand JSON opslaan)
2. Uploads verifiëren (R2 URLs)
3. Site aanmaken met basis-instellingen
4. Redirect naar dashboard
Dashboard:
1. Styling Builder opent automatisch bij eerste bezoek
2. Brand JSON → sfeer-preset + wizard-overrides laden
3. Gebruiker past aan → slaat op als design tokens
Design Tokens (levende laag)
├── Pagebuilder leest tokens live
├── Blocks erven styling automatisch
├── Publieke site rendert met tokens als CSS variables
└── Export beschikbaar (CSS, Tailwind, W3C JSON)

Als een gebruiker de wizard skipt of een site aanmaakt zonder wizard:

  1. Dashboard opent met lege Styling Builder
  2. Gebruiker kiest een sfeer-preset of begint leeg
  3. Alle controls zijn beschikbaar, maar zonder brand context
  4. Brand JSON wordt later aangevuld wanneer de gebruiker data invult

De Styling Builder is altijd bereikbaar via het dashboard. Wijzigingen worden direct doorgevoerd in de design tokens. Er is geen “publish” stap voor tokens — ze zijn altijd live op de draft site. Pas bij site-publicatie worden tokens definitief.


  1. Wizard UI (stappen 1–7, progressie-indicator, validatie)
  2. Branche/sub-niche taxonomie
  3. Tone of voice sliders met live voorbeeldtekst
  4. Sfeer-preset selectie UI
  5. Client-side opslag (localStorage)
  6. File uploads naar R2 (logo, teksten, media)
  1. Brand JSON schema (Zod validatie)
  2. API endpoint: POST /api/onboarding/complete
  3. brand_profiles tabel + migratie
  4. Upload verificatie en media library sync
  1. Split layout: sidebar + live canvas
  2. Sfeer-preset selectie + laden
  3. Kleuren tab (color picker, shade preview, semantic mapping)
  4. OKLCH shade generator via culori
  5. Contrast check (WCAG AA real-time)

Fase 4: Styling Builder — Typografie & Elementen

Section titled “Fase 4: Styling Builder — Typografie & Elementen”
  1. Font-combinatie picker (12 presets, visueel)
  2. Individuele font selectie (heading, body, mono)
  3. Radius, spacing, shadow preset selectors
  4. Canvas light/dark/mobile toggle
  5. Per-element preset overrides
  1. Guardrail engine (contrast, harmonie, font-paar)
  2. Guardrail feedback UI (checkmarks, suggesties)
  3. Token opslag (brand_profiles.design_tokens)
  4. CSS, Tailwind v4 en W3C JSON export
  5. Publieke token API endpoint

De volgende features zijn bewust uitgesteld:

FeatureRedenWanneer
AI verfijning (chat na wizard)Focus eerst op goede wizardv2
Site import (URL → kleuren/fonts extraheren)Complex (scraping, AI)v2
Guild taxonomySfeer-presets zijn proto-guildsWanneer guilds gelanceerd worden
Seasonal overridesAfhankelijk van volwassen token systeemNa v1 Styling Builder
Token versioning (named snapshots)Nice to have, niet essentieelv2
Brand health scoreAfhankelijk van token-gebruik trackingv2
Per-element states (hover, focus, disabled)Automatisch afgeleid in v1Later als “Geavanceerd”