Files
SluijsensandClaude Sonnet 5 0bf807f9c0
Continuous Integration / config (pull_request) Successful in 9s
Continuous Integration / prepare (pull_request) Successful in 1m17s
Continuous Integration / build-production (pull_request) Skipped
Continuous Integration / build (pull_request) Successful in 1m59s
Continuous Integration / test (pull_request) Successful in 1m51s
Continuous Integration / deploy-production (pull_request) Skipped
Deploy / deploy (pull_request) Successful in 38s
Continuous Integration / deploy-test (pull_request) Successful in 38s
Toon leesbare slug in plaats van GUID-ID op pakketkaarten
Nu de pakketten dynamisch uit de API komen is het id een GUID, wat
niet leesbaar is op de pagina. Voeg een slug-veld toe aan
PackageCardData en toon dat op de kaart; id blijft ongewijzigd
gebruikt als React key en data-testid.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-04 11:31:29 +02:00

4.1 KiB

Domain Entities — react-frontend-app

Overview

This unit has no persisted backend entities. The "domain" here is the static content model and the theme model that drive rendering.

Entity Relationships

graph TD
    theme_pref["ThemePreference"]
    theme_tokens["ThemeTokens"]
    site_content["SiteContent"]
    nav_link["NavLink"]
    hero_content["HeroContent"]
    package_card["PackageCard"]
    process_step["ProcessStep"]
    about_content["AboutContent"]
    contact_info["ContactInfo"]

    theme_pref -->|"selects"| theme_tokens
    site_content -->|"has many"| nav_link
    site_content -->|"has one"| hero_content
    site_content -->|"has many"| package_card
    site_content -->|"has many"| process_step
    site_content -->|"has one"| about_content
    site_content -->|"has one"| contact_info

    classDef entity fill:#2196F3,stroke:#0d47a1,stroke-width:1px,color:#000;
    classDef value fill:#FF9800,stroke:#e65100,stroke-width:1px,color:#000;

    class theme_pref,site_content entity;
    class theme_tokens,nav_link,hero_content,package_card,process_step,about_content,contact_info value;

Text alternative: A ThemePreference selects a set of ThemeTokens; SiteContent aggregates NavLinks, one HeroContent, many PackageCards, many ProcessSteps, one AboutContent, and one ContactInfo (blue = stateful entity, orange = static value objects).

Entity Definitions

ThemePreference

Field Type Required Description
value 'red' | 'purple' Yes Currently active theme; defaults to 'red' per BR-1
source 'stored' | 'default' Yes Whether the value came from localStorage or the default fallback

ThemeTokens

Field Type Required Description
bg, surface, surfaceAlt, line, text, muted string (hex) Yes Neutral palette tokens, taken 1-to-1 from the reference CSS variables
accent, accentSoft, accentLine string (hex/rgba) Yes Accent palette tokens (red or purple variant), taken 1-to-1 from the reference CSS variables
Field Type Required Description
label string Yes Link text (e.g. "Pakketten")
href string Yes Anchor target (e.g. "#pakketten")
isCta boolean No Marks the "Start project" call-to-action link

HeroContent

Field Type Required Description
eyebrow string Yes Small label above the heading
heading string Yes Main H1 text
lead string Yes Lead paragraph text
codeLine string Yes The animated code-line snippet text

PackageCard

Field Type Required Description
id string Yes Backend record identifier (GUID). Not shown on the page.
slug string Yes Readable, URL-safe identifier derived from title, e.g. landingspagina. Shown on the card instead of id.
title string Yes e.g. "Landingspagina"
description string Yes Short description
price string Yes e.g. "€ 300" or "Op maat"
priceNote string Yes e.g. "eenmalig, excl. btw"
features string[] Yes Bullet list of included features
ctaLabel string Yes Button text
featured boolean No Marks the "Meest gekozen" (most chosen) card

ProcessStep

Field Type Required Description
label string Yes e.g. "stap 01 — intake"
title string Yes e.g. "Kennismaken"
description string Yes Step description

AboutContent

Field Type Required Description
paragraphs string[] Yes About-section body paragraphs
techStack { label: string; value: string }[] Yes Tech-stack list items (Front-end, Back-end, API's, Focus)

ContactInfo

Field Type Required Description
heading string Yes Contact section heading
description string Yes Contact section body text
email string Yes info@slpsoftware.nl
mailSubject string Yes Prefilled mailto subject