Skip to content

01 — Brand Identity

“De onboarding is niet een formulier. Het is een gesprek over wie je bent.”

Brand identity in Beam bestaat uit twee fasen die naadloos op elkaar aansluiten:

  1. Onboarding wizard (start.beambuilder.com) — verzamelt merkdata en levert een Brand JSON
  2. Styling Builder (onderdeel van Beam dashboard) — vertaalt Brand JSON naar een levend design system

Het resultaat is merkinfrastructuur als service: één bron van waarheid voor alle visuele en tekstuele uitingen, bewaakt door AI en guardrails.


  1. Onboarding Wizard
  2. Wizard Stappen (1–7)
  3. AI Verfijning (Fase B)
  4. Styling Builder
  5. Gilde Style Packs
  6. Entry Points
  7. Bouwvolgorde

Een standalone web app op start.beambuilder.com die nieuwe gebruikers doorlopen bij het aanmaken van een site. Het resultaat is een Brand JSON die naar Beam wordt doorgestuurd als fundament voor alle content.

Twee fasen:

  • Fase A: Wizard — 7 vaste stappen. Snel, voorspelbaar, laagdrempelig.
  • Fase B: AI verfijning — Na de wizard analyseert de AI de data en stelt 3–5 gerichte vervolgvragen. Altijd overslaanbaar.

Twee entry points:

[ Start met wizard ] of [ Importeer bestaande site → URL invoeren ]

Bij URL import extraheert Beam automatisch kleuren, fonts en spacing als startpunt.

Stack:

  • Vite + React (consistent met Beam dashboard)
  • Hosting: CF Pages op eigen domein (start.beambuilder.com)
  • Supabase: gedeeld project met Beam (TBD — zie OQ-2 in README)
  • AI API: Claude voor verfijningsfase en afbeeldingsbeschrijvingen
  • R2: voor uploads (logo, teksten, media)

VeldTypeVerplicht
Bedrijfsnaamtekst
Slogan / taglinetekst
Korte beschrijvingtextarea (max 300 tekens)
Branche / sectordropdown + “anders” optie
Website URL (als die al bestaat)tekst
VeldTypeVerplicht
Wie is je ideale klant?textarea
B2B of B2C of beide?single select
Leeftijdsrange doelgroeprange slider
Regio / marktmulti-select (lokaal, nationaal, internationaal)

Visuele keuze met live voorbeeldtekst die meebeweegt met de sliders.

DimensieType
Formeel ↔ Informeelslider (0.0–1.0)
Serieus ↔ Speelsslider
Technisch ↔ Toegankelijkslider
Zakelijk ↔ Persoonlijkslider

De voorbeeldtekst toont dezelfde boodschap in de gekozen stijl. Bij “informeel + speels” ziet de gebruiker een andere formulering dan bij “formeel + serieus”. De keuze wordt concreet in plaats van abstract.

VeldTypeVerplicht
Logo uploadfile upload (SVG, PNG)
Primaire kleurcolor picker
Secundaire kleurcolor picker
Accentkleurcolor picker
Font voorkeurvisuele keuze (5 curated opties)
Gewenste sfeervisuele moodboard keuze

Font opties:

KeuzeHeadingBody
modern-cleanPlus Jakarta SansDM Sans
classic-serifPlayfair DisplayLato
bold-expressiveSyneInter
warm-friendlyNunitoSource Sans 3
technical-preciseSpace GroteskIBM Plex Sans

AI-assist optie: gebruiker kan een bestaande website URL invoeren → AI extraheert kleuren, fonts en stijl als startpunt.

VeldTypeVerplicht
Welke pagina’s wil je?multi-select (Home, Over ons, Diensten, Contact, Blog, Portfolio, Pricing, FAQ)
Heb je al teksten?ja/nee toggle
Teksten uploadenfile upload (docx, txt, pdf)
Heb je al foto’s?ja/nee toggle
Foto’s uploadenmulti file upload
VeldTypeVerplicht
Hoofddoel van de websitesingle select (leads, informeren, verkopen, portfolio, community)
Belangrijkste call-to-actiontekst (bijv. “Vraag offerte aan”)
Secundaire CTAtekst
Contactgegevensgestructureerde velden (email, telefoon, adres)
Social media linksherhalend veld (platform + URL)
VeldTypeVerplicht
Noem 1–3 concurrenten (of URLs)herhalend tekstveld
Wat maakt jou anders?textarea
Wat moeten bezoekers onthouden?tekst (één zin)

Na de wizard verschijnt een chat-interface. De AI heeft alle wizard-data als context en stelt gerichte vragen om gaten te dichten.

  1. AI analyseert de ingevulde wizard data
  2. AI identificeert waar meer diepte nodig is
  3. AI stelt maximaal 3–5 vervolgvragen — nooit overweldigend
  4. Gebruiker beantwoordt in vrije tekst
  5. AI vat samen en toont de volledige brand profile ter bevestiging

Op basis van wat ontbreekt of vaag is:

  • “Je beschrijving is vrij breed. Kun je één specifiek probleem noemen dat je voor klanten oplost?”
  • “Je richt je op B2B in de bouwsector. Spreek je vooral projectleiders, inkopers of directie aan?”
  • “Je hebt geen slogan ingevuld. Wil je dat ik er een paar voorstel op basis van je beschrijving?”
  • “Je noemt [concurrent] — wat doe jij beter of anders dan zij?”
  • “Je wilt leads genereren. Wat bied je aan in ruil voor contactgegevens?”

Altijd prominent aanwezig: “Overslaan en doorgaan”. De wizard data is voldoende als minimale basis.

  1. Teksten (docx, txt, pdf) → opgeslagen in R2 + tekst geëxtraheerd als extracted_text
  2. Afbeeldingen → opgeslagen in R2 + AI genereert een ai_description voor slimme matching
  3. Logo → opgeslagen in R2, URL in de JSON

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.”

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.

Onboarding veldWat de builder ermee doet
visual_identity.colors.*Direct inladen als brand color tokens
visual_identity.logo_urlLogo direct tonen, geen hernieuwde upload
visual_identity.font_preferenceMappt naar curated font-paar
visual_identity.moodBepaalt preset als startpunt
tone_of_voiceBeïnvloedt stijladviezen en AI-gegenereerde teksten
company.nameGetoond in preview canvas
goals.primary_ctaGetoond op preview button
archetype.gildeBepaalt welke Style Pack als startpunt wordt geladen
archetype.classBepaalt welke vertical pack styling wordt toegepast

Principe: de styling builder vraagt niets wat de onboarding al heeft gevraagd. Hij toont de onboarding data als een reeds ingevuld startpunt.

┌─────────────────────────────────────────────────────┐
│ BRAND & KLEUREN TYPOGRAFIE ELEMENTEN │ ← tabs
├──────────────┬──────────────────────────────────────┤
│ │ [L][D][M] │
│ Controls │ Live Preview Canvas │
│ (sidebar) │ │
│ │ Bedrijfsnaam │
│ ● Colors │ H1 heading tekst │
│ ● Fonts │ H2 subheading │
│ ● Radius │ Body paragraph tekst... │
│ ● Spacing │ [Primary CTA] [Secondary] │
│ │ │
│ ────────── │ ┌────────────────────────────┐ │
│ Guardrails │ │ 🃏 Codex Block Card Preview │ │
│ ✅ Contrast │ │ (hoe blocks eruitzien │ │
│ ✅ Harmonie │ │ met jouw tokens) │ │
│ ✅ Typografie│ └────────────────────────────┘ │
│ │ │
│ ────────── │ │
│ Style Pack: │ │
│ Healer Calm │ │
│ [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
  • Codex Card Preview: preview van hoe een block card eruitziet met de huidige tokens
  • Guardrail dashboard: live status van alle guardrail checks onderaan de sidebar
  • Primary, Secondary, Accent — elk met color picker
  • Max 3 brand colors (guardrail)
  • Shade generator: automatisch 50–900 schaal via OKLCH + dark mode equivalenten
  • WCAG 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 ❌: kleur wordt niet geblokkeerd, maar de gebruiker krijgt een duidelijke waarschuwing + gesuggereerde alternatieve tint.

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]
  • Heading font + Body font, elk individueel inwisselbaar
  • Optioneel: mono font voor code/labels
  • Bronnen: curated Google Fonts subset + eigen WOFF2 upload (opgeslagen in R2)
  • Font-combinatie guardrail: bij het wisselen van heading font toont de builder alleen body fonts die ermee harmoniëren

Typografische schaal:

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

Per elementtype instelbaar. Alle waarden zijn refs naar tokens:

  • Buttons: Primary / Secondary / Ghost / Destructive — per variant: bg, text, border, radius, padding
  • Headings (H1–H6): font, size, weight, color, margin-bottom
  • Body tekst: font, size, line-height, color, max-width
  • Links: kleur, underline stijl, hover state
  • Tabellen: header bg, border, stripe color, cell padding
  • Formuliervelden: border, focus-ring, label stijl
  • Badges / Tags: kleur, border-radius, font-size
  • Codex Block Cards: card achtergrond, rarity badge stijl, merk-doorwerking in rendering

Style Packs ondersteunen seizoensgebonden aanpassingen:

┌─────────────────────────────────────────────┐
│ Seizoensoverzicht │
│ │
│ 🌸 Lente (mrt-mei) [Preview] [Bewerk] │
│ Accent: warmere tint, zachter groen │
│ │
│ ☀️ Zomer (jun-aug) [Preview] [Bewerk] │
│ Geen aanpassingen │
│ │
│ 🍂 Herfst (sep-nov) [Preview] [Bewerk] │
│ Accent: warmer, surface: crème │
│ │
│ ❄️ Winter (dec-feb) [Preview] [Bewerk] │
│ Accent: dieper, shadow: sterker │
└─────────────────────────────────────────────┘

Elk gilde heeft een eigen Style Pack als startpunt:

GildeStyle PackKleurenFontsRadiusSpacing
⚕️ HealersHealer CalmWarm earth tones, sage greenSerif heading, clean bodyLarge (zacht)Spacious
🎨 CreatorsCreator BoldContrast, statement kleurenBold heading, minimal bodyMediumComfortable
🏪 MerchantsMerchant TrustBetrouwbaar, professioneelClean heading, leesbaar bodySmall (scherp)Normal
📚 ScholarsScholar AuthorityDiep, verfijndSophisticated heading, precise bodySmall (strak)Spacious
🍽️ HostsHost AtmosphereWarm, uitnodigendElegant heading, friendly bodyMediumComfortable
🔧 BuildersBuilder SolidSolide, zakelijkStrong heading, functional bodyNone/smallCompact

Mood → Preset fallback (voor gebruikers zonder gilde):

PresetRadiusSpacingShadow
Modern Cleansharp (2px)spaciousflat
Classic Warmbalanced (6px)normalsubtle
Bold Expressiverounded (12px)compactelevated
Luxury Refinedsharp (3px)spacioussubtle
Friendly Accessiblepill-soft (16px)normalsubtle

┌─────────────────────────────────────────┐
│ Hoe wil je starten? │
│ │
│ [Kies je gilde stijl] (aanbevolen) │
│ [Kies een sfeer-preset] │
│ [Begin leeg] │
└─────────────────────────────────────────┘
  1. Gilde stijl — primaire entry point, laadt volledige Style Pack
  2. Sfeer-preset — fallback voor gebruikers zonder gilde
  3. Leeg — alleen de tokenstructuur klaar, alles handmatig
start.beambuilder.com (Onboarding app)
Wizard (7 stappen) + AI verfijning
Brand JSON → POST naar Beam API
+ Gilde & Class selectie (archetype)
Styling Builder (Beam dashboard)
← pakt brand JSON + gilde Style Pack op als startpunt
← gebruiker verfijnt visueel binnen guardrails
Design tokens (levende laag)
├── Pagebuilder leest tokens live
├── Blocks erven styling automatisch
├── Addons respecteren de theming cascade
├── AI content generator leest tokens live
├── Seasonal overrides passen tokens tijdelijk aan
└── Publieke token API endpoint

  1. Vite + React app opzetten op start.beambuilder.com (CF Pages)
  2. Stap-voor-stap wizard UI (stappen 1–7)
  3. Client-side validatie + progressie-indicator
  4. Uploads naar R2 (logo, teksten, media)
  1. Chat interface na de wizard
  2. AI analyse van wizard data → gerichte vragen genereren
  3. Verwerking van antwoorden in de brand JSON
  4. Skip optie altijd prominent
  1. Brand JSON generatie (zie 08-brand-json-spec.md)
  2. API endpoint in Beam voor het ontvangen van brand data
  3. Media library sync (uploads → Beam media library in R2)
  4. Redirect naar Beam dashboard
  1. brand_profiles tabel + token_versions + style_packs
  2. Token API endpoint (GET /api/sites/{site_id}/tokens)
  3. OKLCH shade generator via culori
  4. Guardrail engine (WCAG contrast, kleurharmonie, font-paar)
  5. 6 gilde Style Packs als seed data
  1. Split layout: sidebar + live canvas
  2. Sectie Brand & Kleuren (color picker, shade preview, semantic mapping)
  3. Sectie Typografie (font picker met curated paar-suggesties)
  4. Sectie Elementen (per element type, states)
  5. Canvas light/dark/mobile toggle
  6. Inline selectie + Codex Card Preview
  1. Seasonal override editor
  2. Versioning (auto-save + named snapshots)
  3. CSS, Tailwind v4 en W3C JSON export
  4. Resolved token API endpoint