MDX Documentatie

Documentatie

Inleiding

Alle Woordenboek · In het kortcomponentEen component is een afgebakend onderdeel van software met een eigen taak en een duidelijke manier om met andere onderdelen samen te werken.Lees meer worden aangestuurd via JSX-commentaren boven het markdown-element. De algemene syntaxis is:

markdown
{/* prop="waarde" andere-prop="waarde" */}
(markdown-element hieronder)

Sectie-componenten (Hero, SideBySide, Showcase, FeatureSection, FeatureListSection, TechnologySection, KeyTakeaways, TestimonialCarousel, CaseStudyCarousel, CaseOverview, FAQ, Timeline) worden afgesloten met een horizontale lijn (---).


1. Hero

De Hero is het eerste blok op een pagina. Het ondersteunt een achtergrondafbeelding, titel, opsommingslijst en actieknoppen.

Paginatype en presentatie

Een pagina met layout: page en dit hero-blok krijgt een pageKind in de frontmatter. Dit bepaalt de hoogte, uitlijning, ornamentiek en het toegestane aantal bullets en knoppen. Zet daarom geen losse height, grid, hexagons of align op de hero-directive.

pageKindGebruikBulletsKnoppen
section-overviewHoofdoverzichtmaximaal 4maximaal 2
cluster-overviewClusteroverzichtgeenmaximaal 1
service-detail, method-detail, technology-detail, longtail-landingDetailpagina of gerichte landingmaximaal 3maximaal 1
utilityPraktische pagina of documentatiegeenmaximaal 1

De optionele overline kan als tekst op de hero-directive blijven staan. Cases en blogartikelen krijgen hun hero automatisch uit hun layout. Contact en Ons team gebruiken een eigen openingsblok.

Actielink-attributen

Op een commentaar voor een link-paragraaf:

PropWaarden
colorprimary, secondary, gray
iconarrow-right

Voorbeeld

markdown
---
layout: page
pageKind: utility
title: Voorbeeldpagina
description: Een voorbeeld van een praktische pagina met een compacte hero.
---

{/* hero */}
![Hero voorbeeld](https://picsum.photos/seed/doc-hero-example/1600/900)

# Voorbeeld _hero_

Een korte introductie met één vervolgstap.

{/* color="secondary" icon="arrow-right" */}
[Bekijk cases](/cases)

---

Voorbeeld hero

Een korte introductie met één vervolgstap.

Hero voorbeeld

2. Side By Side

Toont een afbeelding naast tekst. De positie van de afbeelding wordt automatisch bepaald: staat de afbeelding boven de tekst, dan verschijnt deze links. Staat de afbeelding onder de tekst, dan verschijnt deze rechts.

Props

PropWaardenStandaard
backgroundwhite, light-grey, dark-secondary, dark-primary, dark-graywhite
shapeskommagescheiden: hexagon, dots, rhombus, arrow, polygons

Content-structuur

  • ![alt](url) — Afbeelding
  • Of, in plaats van de afbeelding: een ```mermaid-diagram of een codeblok (zie hieronder)
  • #### — Overline
  • ## — Titel (ondersteunt *emphasis*)
  • Paragrafen — Body tekst
  • - lijst — Bulletlijst (optioneel, ondersteunt **vet** labels)
  • [tekst](url) — Actielink (met optioneel {/* icon="arrow-right" */})

De mediaplek accepteert een afbeelding, een mermaid-diagram of een codeblok. Voor een diagram of codeblok geldt dezelfde positielogica (boven de tekst = links, eronder = rechts) en kun je met een commentaar erboven de achtergrond bepalen, net als bij een los Code Block of Mermaid-diagram.

Voorbeeld — afbeelding links (standaard)

markdown
{/* side-by-side shapes="hexagon,dots,rhombus,arrow" */}
![Laptop](https://picsum.photos/seed/doc-sbs-right/600)

#### VOORBEELD • DOCUMENTATIE

## Afbeelding _links_

De afbeelding staat boven de tekst in de MDX, dus wordt deze links getoond. Dit is het standaardgedrag. Zorg voor een regel whitespace tussen tekst en afbeelding.

{/* icon="arrow-right" */}
[Meer informatie](/docs)

---

VOORBEELD • DOCUMENTATIE

Afbeelding links

De afbeelding staat boven de tekst in de MDX, dus wordt deze links getoond. Dit is het standaardgedrag. Zorg voor een regel whitespace tussen tekst en afbeelding.

Meer informatie
Laptop

Voorbeeld — afbeelding rechts

markdown
{/* side-by-side background="light-grey" shapes="polygons" */}

#### VOORBEELD • DOCUMENTATIE

## Afbeelding _rechts_

De afbeelding staat onder de tekst in de MDX, dus wordt deze rechts getoond. De achtergrond is light-grey met polygons shapes. Zorg voor een regel whitespace tussen tekst en afbeelding.

![Meeting](https://picsum.photos/seed/doc-sbs-left/600)

{/* icon="arrow-right" */}
[Meer informatie](/docs)

---

VOORBEELD • DOCUMENTATIE

Afbeelding rechts

De afbeelding staat onder de tekst in de MDX, dus wordt deze rechts getoond. De achtergrond is light-grey met polygons shapes. Zorg voor een regel whitespace tussen tekst en afbeelding.

Meer informatie
Meeting

Voorbeeld — donkere achtergrond

markdown
{/* side-by-side background="dark-secondary" shapes="polygons" */}
![Code](https://picsum.photos/seed/doc-sbs-dark/600)

#### DONKERE VARIANT

## Dark-secondary _achtergrond_

Op donkere achtergronden wordt de tekst automatisch wit.

{/* icon="arrow-right" */}
[Bekijk meer](/docs)

---

DONKERE VARIANT

Dark-secondary achtergrond

Op donkere achtergronden wordt de tekst automatisch wit.

Bekijk meer
Code

Voorbeeld — mermaid-diagram als media (rechts)

markdown
{/* side-by-side shapes="hexagon,dots" */}

#### DIAGRAM • SIDE-BY-SIDE

## Diagram naast tekst

Zet een mermaid-diagram op de mediaplek in plaats van een afbeelding. Omdat het diagram onder de tekst staat, verschijnt het rechts.

{/* background="dark-secondary" */}

```mermaid
flowchart TD
  A[Verzoek] --> B{In cache?}
  B -->|Ja| C[Uit cache]
  B -->|Nee| D[Ophalen]
  D --> E[Opslaan]
```

{/* icon="arrow-right" */}
[Meer informatie](/docs)

---

Resultaat:

DIAGRAM • SIDE-BY-SIDE

Diagram naast tekst

Zet een mermaid-diagram op de mediaplek in plaats van een afbeelding. Omdat het diagram onder de tekst staat, verschijnt het rechts.

Meer informatie

Voorbeeld — codeblok als media (links)

markdown
{/* side-by-side background="light-grey" shapes="polygons" */}

{/* background="dark-gray" */}

```typescript
export function greet(name: string) {
  return `Hallo, ${name}!`;
}
```

#### CODE • SIDE-BY-SIDE

## Codeblok naast tekst

Ook een codeblok kan de mediaplek innemen. Omdat het codeblok boven de tekst staat, verschijnt het links.

---

Resultaat:

CODE • SIDE-BY-SIDE

Codeblok naast tekst

Ook een codeblok kan de mediaplek innemen. Omdat het codeblok boven de tekst staat, verschijnt het links.

typescript
export function greet(name: string) {
  return `Hallo, ${name}!`;
}

3. Feature Section

Toont feature-inhoud in een kaartgrid of — met variant="list" — als een scrollbare lijst met detailpaneel. Beide varianten ondersteunen optionele achtergrondpatronen.

Props

PropWaarden
gridPatternleft, right, both, none
variantlist (optioneel; zonder variant = kaartgrid)

Feature-kaart props

PropWaarden
iconsettings, pencil, arrow-right, etc.

Content-structuur — kaartgrid (standaard)

  • #### — Overline
  • ## — Titel (ondersteunt *emphasis*)
  • {/* feature icon="..." */} — Start van elke kaart
  • ### — Kaarttitel
  • Paragraaf — Beschrijving
  • [tekst](url) — Optionele kaartlink
  • Laatste link-paragraaf (met optioneel {/* icon="arrow-right" */}) — Sectie-actie

Voorbeeld — kaartgrid

markdown
{/* feature-section gridPattern="both" */}

#### Documentatie voorbeeld

## Wat we kunnen _betekenen_

{/* feature icon="settings" */}

### Software ontwikkeling

Donec condimentum sit amet magna vel tincidunt. Sed ullamcorper tortor.

[Bekijk cases](/cases)

{/* feature icon="pencil" */}

### Doorontwikkeling

Donec condimentum sit amet magna vel tincidunt. Sed ullamcorper tortor.

[Bekijk cases](/cases)

{/* feature icon="arrow-right" */}

### Support & onderhoud

Donec condimentum sit amet magna vel tincidunt. Sed ullamcorper tortor.

[Bekijk cases](/cases)

{/* icon="arrow-right" */}
[Ontdek onze diensten](/diensten)

---

Documentatie voorbeeld

Wat we kunnen betekenen

Software ontwikkeling

Donec condimentum sit amet magna vel tincidunt. Sed ullamcorper tortor.

Doorontwikkeling

Donec condimentum sit amet magna vel tincidunt. Sed ullamcorper tortor.

Support & onderhoud

Donec condimentum sit amet magna vel tincidunt. Sed ullamcorper tortor.

Content-structuur — lijst (variant="list")

Gebruik dezelfde {/* feature-section ... */} directive met variant="list". Sub-secties blijven {/* feature icon="..." */} heten.

  • #### — Overline (sectie)
  • ## — Titel (sectie, ondersteunt *emphasis*)
  • {/* feature icon="..." */} — Start van elk lijstitem
  • #### — Subtitel van het item (getoond in lijst en detailpaneel)
  • ### — Titel van het item
  • Paragraaf — Beschrijving
  • [tekst](url) — Optionele itemlink
  • Laatste link-paragraaf (met optioneel {/* icon="arrow-right" */}) — Sectie-actie

Voorbeeld — lijst

markdown
{/* feature-section variant="list" gridPattern="both" */}

#### Documentatie voorbeeld

## Wat we kunnen _betekenen_

{/* feature icon="settings" */}

#### Van idee tot werkende applicatie

### Software ontwikkeling

Wij bouwen software op maat die naadloos aansluit op jouw processen.

[Bekijk onze projecten](/cases)

{/* feature icon="pencil" */}

#### Bestaande systemen verbeteren

### Software doorontwikkeling

Bestaande applicaties verdienen aandacht. We moderniseren verouderde systemen en voegen nieuwe functionaliteit toe.

[Meer over doorontwikkeling](/cases)

{/* feature icon="wrench" */}

#### Altijd up-to-date en stabiel

### Support & onderhoud

Jouw software blijft bij ons in goede handen met proactief onderhoud en korte lijnen voor support.

[Ontdek ons supportteam](/cases)

{/* icon="arrow-right" */}
[Ontdek onze diensten](/diensten)

---

Documentatie voorbeeld

Wat we kunnen betekenen

Wij bouwen software op maat die naadloos aansluit op jouw processen.

Bestaande applicaties verdienen aandacht. We moderniseren verouderde systemen en voegen nieuwe functionaliteit toe.

Jouw software blijft bij ons in goede handen met proactief onderhoud en korte lijnen voor support.

Van idee tot werkende applicatie

Software ontwikkeling

Wij bouwen software op maat die naadloos aansluit op jouw processen.

4. Technology Section

Toont een tabblad-sectie met technologiecategorieën. Elke tab heeft een linkerkolom (titel en introductietekst), een donkere kaart met bulletpoints en een rij technologie-logo's. Op de homepage staat dit blok doorgaans direct onder Feature Section; gebruik overlapPrevious="false" wanneer er geen sectie boven staat die visueel moet aansluiten.

Props

PropWaardenStandaard
titleEmphasistekst
buttonTexttekstBekijk alle
buttonHrefURL/technologie
overlapPrevioustrue, falsetrue

Content-structuur

Vóór de eerste {/* technology */} (sectie-intro):

  • #### — Overline
  • ## — Titel (zonder emphasis; gebruik titleEmphasis voor het cursieve deel)
  • Eén paragraaf — Beschrijving onder de titel

Per technologie-tab (herhaal {/* technology */}):

Attribuut op {/* technology ... */}Beschrijving
labelTablabel in de tabbalk
leftTitleTitel in de linkerkolom wanneer deze tab actief is

Markdown per tab:

  • ### — Titel op de donkere kaart (cardTitle)
  • Een of meer paragrafen — Introductietekst in de linkerkolom (leftDescription)
  • - lijst — Bulletpoints op de kaart; gebruik een em dash () tussen titel en beschrijving, bijv. - Titel — Beschrijving
  • ![alt](url) — Technologie-logo's (één of meer afbeeldingen op rootniveau, niet ingesprongen onder een lijstitem)

Voorbeeld

markdown
{/* technology-section overlapPrevious="false" titleEmphasis="technologieën" buttonText="Bekijk alle" buttonHref="/technologie" */}

#### hoe we dat doen

## Onze

Donec condimentum sit amet magna vel tincidunt. Sed ullamcorper tortor.

{/* technology label="Back-end" leftTitle="Back-end" */}

### Lorem ipsum dolor

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Donec condimentum sit amet magna vel tincidunt.

- Kwalitatieve technische fundering — Robuuste systemen die meegroeien.
- Proactieve monitoring — Real-time inzicht in performance.

![Node.js](https://cdn.jsdelivr.net/gh/devicons/devicon/icons/nodejs/nodejs-original.svg)
![Python](https://cdn.jsdelivr.net/gh/devicons/devicon/icons/python/python-original.svg)

{/* technology label="Front-end" leftTitle="Front-end" */}

### Moderne interfaces

Onze front-end specialisten bouwen snelle, toegankelijke interfaces.

- Moderne frameworks — React, Vue, Angular en Qwik.
- Performance optimalisatie — Snelle laadtijden op elk apparaat.

![React](https://cdn.jsdelivr.net/gh/devicons/devicon/icons/react/react-original.svg)
![TypeScript](https://cdn.jsdelivr.net/gh/devicons/devicon/icons/typescript/typescript-original.svg)

---

hoe we dat doen

test technologieën

Donec condimentum sit amet magna vel tincidunt. Sed ullamcorper tortor.

Back-end

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Donec condimentum sit amet magna vel tincidunt.

Lorem ipsum dolor
Kwalitatieve technische fundering
Robuuste systemen die meegroeien.
Proactieve monitoring
Real-time inzicht in performance.
Node.jsPython

5. Testimonial Carousel

Een carousel met getuigenissen (citaat, avatar, naam en rol). Het grid-patroon op de achtergrond is configureerbaar; autoplay is optioneel.

Elke getuigenis begint met {/* testimonial */} (vergelijkbaar met {/* feature */} bij Feature Section). Er is geen sectie-intro vóór de eerste getuigenis: plaats direct {/* testimonial-carousel ... */} gevolgd door {/* testimonial */} en de markdown per slide.

Props

PropWaardenStandaard
gridPatternleft, right, both, none
autoplayEnabledtrue, false— (autoplay uit)
autoplayIntervalmilliseconden als string, bijv. 60005000 wanneer autoplay aan staat

Content-structuur per getuigenis

  • ## — Citaat (ondersteunt *emphasis*)
  • ![alt](url) — Avatarafbeelding
  • ### — Naam
  • Paragraaf — Rol of functie

Voorbeeld

markdown
{/* testimonial-carousel gridPattern="both" */}

{/* testimonial */}

## 10KB levert precies wat ze beloven — en meer.

![Klant logo](https://picsum.photos/seed/doc-testimonial-1/550/550)

### Alex de Vries

CTO bij Voorbeeld BV

{/* testimonial */}

## Tweede getuigenis met _nadruk_.

![Tweede persoon](https://picsum.photos/seed/doc-testimonial-2/550/550)

### Jamie Jansen

Product owner

---

10KB levert precies wat ze beloven — en meer.

Alex de Vries

Alex de Vries

CTO bij Voorbeeld BV

Tweede getuigenis met *nadruk*.

Jamie Jansen

Jamie Jansen

Product owner

6. Code Block

Codeblokken worden automatisch voorzien van syntax highlighting via Shiki. Pas de achtergrondkleur, breedte en decoratieve vormen aan met een commentaar boven het codeblok.

Props

PropWaardenStandaard
backgrounddark-gray, light-grey, white, dark-secondary, dark-primarydark-gray
contentWidthproseWideprose (720px)
shapestech, dots, hexagon, polygons

Ondersteunde talen

typescript, javascript, jsx, tsx, css, html, json, bash, shell, yaml, markdown, python, sql, diff, text

Voorbeeld — standaard (dark-gray)

markdown
```typescript
const greeting: string = "Hello, world!";

function greet(name: string): string {
  return `Hello, ${name}!`;
}

console.log(greet("10KB"));
```
typescript
const greeting: string = "Hello, world!";

function greet(name: string): string {
  return `Hello, ${name}!`;
}

console.log(greet("10KB"));

Voorbeeld — light-grey achtergrond

markdown
{/* background="light-grey" */}

```typescript
interface User {
  id: number;
  name: string;
  email: string;
}

const user: User = {
  id: 1,
  name: "Ewout",
  email: "ewout@10kb.nl",
};
```
typescript
interface User {
  id: number;
  name: string;
  email: string;
}

const user: User = {
  id: 1,
  name: "Ewout",
  email: "ewout@10kb.nl",
};

Voorbeeld — dark-primary met hexagon shapes

markdown
{/* background="dark-primary" shapes="hexagon" */}

```css
.container {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
  max-width: 720px;
  margin: 0 auto;
}

@media (min-width: 768px) {
  .container {
    flex-direction: row;
  }
}
```
css
.container {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
  max-width: 720px;
  margin: 0 auto;
}

@media (min-width: 768px) {
  .container {
    flex-direction: row;
  }
}

Voorbeeld — dark-gray met tech shapes en proseWide

markdown
{/* background="dark-gray" shapes="tech" contentWidth="proseWide" */}

```javascript
async function fetchData(url) {
  const response = await fetch(url);
  if (!response.ok) {
    throw new Error(`HTTP error: ${response.status}`);
  }
  return response.json();
}

const data = await fetchData("/api/users");
console.log(data);
```
javascript
async function fetchData(url) {
  const response = await fetch(url);
  if (!response.ok) {
    throw new Error(`HTTP error: ${response.status}`);
  }
  return response.json();
}

const data = await fetchData("/api/users");
console.log(data);

Voorbeeld — dark-gray met polygons shapes

markdown
{/* background="dark-gray" shapes="polygons" */}

```typescript
export type Result<T, E = Error> = { ok: true; value: T } | { ok: false; error: E };

function divide(a: number, b: number): Result<number> {
  if (b === 0) return { ok: false, error: new Error("Deling door nul") };
  return { ok: true, value: a / b };
}
```
typescript
export type Result<T, E = Error> = { ok: true; value: T } | { ok: false; error: E };

function divide(a: number, b: number): Result<number> {
  if (b === 0) return { ok: false, error: new Error("Deling door nul") };
  return { ok: true, value: a / b };
}

Voorbeeld — light-grey met dots shapes

markdown
{/* background="light-grey" shapes="dots" */}

```json
{
  "name": "website",
  "version": "1.0.0",
  "dependencies": {
    "@builder.io/qwik": "^1.12.1",
    "@builder.io/qwik-city": "^1.12.1"
  }
}
```
json
{
  "name": "website",
  "version": "1.0.0",
  "dependencies": {
    "@builder.io/qwik": "^1.12.1",
    "@builder.io/qwik-city": "^1.12.1"
  }
}

Voorbeeld — white achtergrond

markdown
{/* background="white" */}

```bash
# Installeer dependencies en start de dev server
npm install
npm run dev

# Bouw voor productie
npm run build
npm run preview
```
bash
# Installeer dependencies en start de dev server
npm install
npm run dev

# Bouw voor productie
npm run build
npm run preview

Voorbeeld — dark-secondary

markdown
{/* background="dark-secondary" */}

```typescript
import { component$, useSignal } from "@builder.io/qwik";

export const Counter = component$(() => {
  const count = useSignal(0);

  return (
    <div>
      <p>Count: {count.value}</p>
      <button onClick$={() => count.value++}>Increment</button>
    </div>
  );
});
```
typescript
import { component$, useSignal } from "@builder.io/qwik";

export const Counter = component$(() => {
  const count = useSignal(0);

  return (
    <div>
      <p>Count: {count.value}</p>
      <button onClick$={() => count.value++}>Increment</button>
    </div>
  );
});

7. Mermaid-diagram

Mermaid-diagrammen worden geschreven als een ```mermaid-codeblok. Ze worden tijdens development (pnpm dev) door een headless browser omgezet naar een statische SVG die in de repository wordt vastgelegd (src/assets/mermaid/). De productie- en CI-build lezen alleen die vastgelegde SVG en starten dus nooit een browser. Achtergrond en decoratieve vormen werken exact zoals bij het Code Block: via een commentaar boven het blok.

Ontbreekt de SVG tijdens een productie-build, dan faalt de build met een duidelijke melding — draai dan lokaal pnpm dev of pnpm mermaid:render en Woordenboek · In het kortcommitEen commit is een vastgelegde versie van bestanden in een systeem voor versiebeheer. Elke commit vormt een punt in de ontwikkelgeschiedenis van een project.Lees meer het gegenereerde bestand.

Props

PropWaardenStandaard
backgrounddark-gray, light-grey, white, dark-secondary, dark-primarydark-gray
contentWidthproseWideprose (720px)
shapestech, dots, hexagon, polygons
titleToegankelijke omschrijving van het diagram

Voorbeeld — standaard (dark-gray)

markdown
```mermaid
flowchart LR
  A[Start] --> B{Beslissing}
  B -->|Ja| C[Oké]
  B -->|Nee| D[Stop]
```

Resultaat:

Voorbeeld — dark-primary met hexagon shapes

markdown
{/* background="dark-primary" shapes="hexagon" title="Deploymentflow" */}

```mermaid
sequenceDiagram
  participant Dev
  participant CI
  participant Prod
  Dev->>CI: Push commit
  CI->>Prod: Deploy build
  Prod-->>Dev: Status
```

Resultaat:

Voorbeeld — light-grey achtergrond

markdown
{/* background="light-grey" */}

```mermaid
flowchart TD
  A[Idee] --> B[Ontwerp]
  B --> C[Implementatie]
  C --> D[Release]
```

Resultaat:

Voorbeeld — complex diagram

Een uitgebreid diagram met subgraphs, verschillende vormen (stadium, parallelogram, ruit, subroutine, database, hexagon, asymmetrisch), diverse pijltypes (normaal, gestippeld, dik) en classDef-styling.

markdown
{/* background="dark-secondary" shapes="polygons" contentWidth="proseWide" title="Verwerkingspijplijn" */}

```mermaid
flowchart TB
  Start([Start]) --> Input[/Invoer/]
  Input --> Validate{Valide?}
  Validate -->|Nee| Error[[Foutafhandeling]]
  Validate -->|Ja| Process

  subgraph Process [Verwerking]
    direction LR
    Load[(Database)] --> Transform[Transformeer]
    Transform --> Cache{{Cache}}
    Cache -.-> Queue[/Wachtrij/]
  end

  Process ==> Decision{Klaar?}
  Decision -->|Nee| Retry(Opnieuw proberen)
  Retry --> Process
  Decision -->|Ja| Report[Rapport]
  Report --> Notify>Notificatie]
  Notify --> Done([Einde])
  Error --> Done

  classDef success fill:#023020,stroke:#0a5c3e,color:#fff;
  classDef danger fill:#a47b0f,stroke:#e2aa14,color:#fff;
  class Done,Report success;
  class Error danger;
```

Resultaat:


8. Afbeelding met decoratieve vormen

Afbeeldingen in de body kunnen voorzien worden van decoratieve vormen via een variant prop.

Props

PropWaarden
variantrhombus-left-arrow-right, arrow-left-hexagon-right
contentWidthproseWide

Voorbeeld — rhombus-left-arrow-right

markdown
{/* variant="rhombus-left-arrow-right" */}
![Voorbeeld afbeelding met rhombus en arrow](https://picsum.photos/seed/doc-img-rhombus/720/300)
Voorbeeld afbeelding met rhombus en arrow

Voorbeeld — arrow-left-hexagon-right

markdown
{/* variant="arrow-left-hexagon-right" */}
![Voorbeeld afbeelding met arrow en hexagon](https://picsum.photos/seed/doc-img-hexagon/720/300)
Voorbeeld afbeelding met arrow en hexagon

Voorbeeld — proseWide met variant

markdown
{/* variant="rhombus-left-arrow-right" contentWidth="proseWide" */}
![Brede afbeelding met decoratie](https://picsum.photos/seed/doc-img-wide/900/300)
Brede afbeelding met decoratie

9. Pull Quote

Een uitgelicht citaat met optionele auteur en rol.

Props

PropWaarden
authortekst
roletekst
contentWidthproseWide

Voorbeeld

markdown
{/* pull-quote author="Ewout" role="Founder 10KB" */}

> Software ontwikkeling is een continu proces van verbetering en innovatie. Een vast team dat jouw domein begrijpt maakt het verschil.

Software ontwikkeling is een continu proces van verbetering en innovatie. Een vast team dat jouw domein begrijpt maakt het verschil.

Ewout — Founder 10KB

Voorbeeld — proseWide

markdown
{/* pull-quote author="Google DeepMind" role="Productaankondiging" contentWidth="proseWide" */}

> Gemini 2.5 Pro leidt toonaangevende benchmarks voor coding, wiskunde en wetenschap en is nu breed beschikbaar via de Gemini API.

Gemini 2.5 Pro leidt toonaangevende benchmarks voor coding, wiskunde en wetenschap en is nu breed beschikbaar via de Gemini API.

Google DeepMind — Productaankondiging


10. Article List

Een gestileerde lijst met vetgedrukte titels en beschrijvingen. Wordt gebruikt voor samenvattingen of feature-overzichten.

Voorbeeld

markdown
{/* article-list */}

- **Server-side rendering** Alle syntax highlighting wordt server-side uitgevoerd via Shiki, zonder JavaScript in de browser.
- **Comment-syntaxis** Componenten worden aangestuurd via JSX-commentaren, geen imports nodig.
- **Automatische theme-detectie** Donkere achtergronden krijgen automatisch een donker kleurenschema en vice versa.
  • Server-side rendering

    Alle syntax highlighting wordt server-side uitgevoerd via Shiki, zonder JavaScript in de browser.

  • Comment-syntaxis

    Componenten worden aangestuurd via JSX-commentaren, geen imports nodig.

  • Automatische theme-detectie

    Donkere achtergronden krijgen automatisch een donker kleurenschema en vice versa.


11. Key Takeaways

Een opvallend blok met de belangrijkste punten, afgesloten met een horizontale lijn.

Props

PropWaardenStandaard
contentWidthdefault, proseWidedefault

Voorbeeld

markdown
{/* key-takeaways contentWidth="default" */}

## Key _takeaways_

- Alle componenten gebruiken de comment-syntaxis voor configuratie
- Sectie-componenten worden afgesloten met ---
- Achtergrondkleuren en vormen zijn beschikbaar voor meerdere componenten
- Afbeeldingspositie bij SideBySide wordt automatisch bepaald

---

Key takeaways soms dan valt de tekst eronder en dat is ku

  • Alle componenten gebruiken de comment-syntaxis voor configuratie

  • Sectie-componenten worden afgesloten met ---

  • Achtergrondkleuren en vormen zijn beschikbaar voor meerdere componenten

  • Afbeeldingspositie bij SideBySide wordt automatisch bepaald

12. Showcase

Toont een achtergrondafbeelding met een donker-naar-transparant verloop, grid-patroon en content aan een configureerbare zijde. De eerste paragraaf wordt vet weergegeven als lead-tekst.

Props

PropWaardenStandaard
gridtrue, falsetrue
alignleft, rightleft

Content-structuur

  • ![alt](url) — Achtergrondafbeelding
  • #### — Overline
  • ## — Titel (ondersteunt *emphasis*)
  • Eerste paragraaf — Lead-tekst (vet)
  • Overige paragrafen — Body tekst
  • - lijst — Bulletlijst (optioneel, ondersteunt **vet** labels)
  • [tekst](url) — Actielink (met optioneel {/* icon="arrow-right" */})

Voorbeeld — content links (standaard)

markdown
{/* showcase */}
![Laptop op bureau](https://picsum.photos/seed/doc-showcase/1920/1080)

#### TECHNIEK 1 • TECHNIEK 2 • TECHNIEK 3

## Toegevoegde waarde als vaste IT _partner_

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque sed lacus ultrices, blandit elit vitae, imperdiet tortor.

Donec condimentum sit amet magna vel tincidunt. Sed ullamcorper tortor maximus, dignissim urna vulputate, tempor libero. Nunc hendrerit diam eu diam eleifend efficitur ut id mauris.

{/* icon="arrow-right" */}
[Lees meer](/cases)

---
Laptop op bureau

TECHNIEK 1 • TECHNIEK 2 • TECHNIEK 3

Toegevoegde waarde als vaste IT partner

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque sed lacus ultrices, blandit elit vitae, imperdiet tortor.

Donec condimentum sit amet magna vel tincidunt. Sed ullamcorper tortor maximus, dignissim urna vulputate, tempor libero. Nunc hendrerit diam eu diam eleifend efficitur ut id mauris.

Lees meer

Voorbeeld — content rechts

markdown
{/* showcase align="right" */}
![Kantoor](https://picsum.photos/seed/doc-showcase-right/1920/1080)

#### SOFTWARE ONTWIKKELING

## Mission critical _software_

Wij bouwen software die betrouwbaar, veilig en schaalbaar is.

Donec condimentum sit amet magna vel tincidunt. Sed ullamcorper tortor maximus.

{/* icon="arrow-right" */}
[Ontdek onze diensten](/diensten)

---
Kantoor

SOFTWARE ONTWIKKELING

Mission critical software

Wij bouwen software die betrouwbaar, veilig en schaalbaar is.

Donec condimentum sit amet magna vel tincidunt. Sed ullamcorper tortor maximus.

Ontdek onze diensten

13. FAQ

Toont een accordion met veelgestelde vragen, optionele introductietekst en een optionele actieknop. De sectie wordt afgesloten met een horizontale lijn.

Gebruik een kleine letter in het openingscommentaar: {/* faq ... */}. Commentaar zoals {/* FAQ ... */} wordt niet als directive herkend.

Props

PropWaardenStandaard
contentWidthdefault, proseWidedefault
backgroundwhite, light-greywhite

Gebruik background="light-grey" als de FAQ direct na key takeaways staat. De achtergrond loopt over de volle breedte; de vragen en antwoorden blijven op witte vlakken staan.

Content-structuur

  • {/* faq ... */} — Optioneel contentWidth en background (zoals background="light-grey").
  • ## — Sectietitel (ondersteunt *emphasis*).
  • Paragrafen (en optioneel een lijst) vóór de eerste ### — Optionele introductie (subheader).
  • ### — Vraag; daaropvolgende paragrafen en lijsten tot de volgende ###Antwoord.
  • Optioneel: een paragraaf met afsluitende tekst, daarna {/* icon="arrow-right" */} en een link naar de actie (CTA).
  • --- — Einde sectie.

Voorbeeld

markdown
{/* faq contentWidth="default" background="light-grey" */}

## Veelgestelde _vragen_

Korte intro vóór de vragen.

### Eerste vraag?

Hier het antwoord. Met een [link](/docs).

### Tweede vraag?

Nog een antwoord.

Nog niet gevonden?

{/* icon="arrow-right" */}
[Neem contact op](/contact)

---

Veelgestelde vragen

Korte intro vóór de vragen.

Nog niet gevonden?

Neem contact op

14. Case Study Carousel

Toont een carrousel met casestudy-kaarten naast een introductiekolom. De directive beschrijft de selectie-intentie; kaartcopy, assets en volgorde komen uit de centrale case-registry.

Props

PropWaardenStandaard
placementhome, generic, contextverplicht, tenzij context is gezet
contexteen gecontroleerde contexttag uit W03
limitpositief geheel getal6, context standaard 3
autoplaytrue, false— (uit component: autoplay uit)
intervalmilliseconden als geheel getal5000 (als autoplay gezet wordt)

Content-structuur

  • #### — Overline
  • ## — Titel (ondersteunt *emphasis* in de Markdown-bron)
  • Een of meer paragrafen — Intro-tekst
  • Optioneel één link — CTA naar het casesoverzicht
  • --- — Einde van de carousel

Voeg geen handgeschreven {/* case */}-blokken toe. De registry levert alleen cases die voor de locale en placement door de publicatiegate komen. Het casesoverzicht op /cases gebruikt {/* case-overview */} in plaats van deze carousel.

Voorbeeld

markdown
{/* case-study-carousel placement="generic" limit="6" */}

#### ONS WERK

## Cases waar we _trots_ op zijn

Eerste intro paragraaf.

Tweede intro paragraaf.

---

Voorbeeld — autoplay

markdown
{/* case-study-carousel placement="generic" limit="6" autoplay="true" interval="6000" */}

#### CARROUSEL

## Met _autoplay_

Korte intro.

---

15. Case Overview

Toont alle gepubliceerde cases op /cases als afwisselende side-by-side-secties. Volgorde, copy, assets en de wisseling van achtergrond en beeldpositie komen uit de centrale case-registry. De pagina schrijft alleen de directive; er zijn geen extra props.

Content-structuur

  • {/* case-overview */}
  • --- — Einde van het overzicht

Voorbeeld

markdown
{/* case-overview */}

---

16. Timeline

Toont een verticale tijdlijn met historische mijlpalen. Elke mijlpaal heeft een jaartal, een titel en een korte beschrijving. De sectie wordt afgesloten met een horizontale lijn.

Props

PropWaardenStandaard
backgroundwhite, light-grey, dark-secondary, dark-primary, dark-graywhite
shapeskommagescheiden: hexagon, dots, rhombus, arrow, polygons

Content-structuur

  • #### — Overline (optioneel)
  • ## — Titel (ondersteunt _nadruk_)
  • Paragraaf — Optionele introductie
  • {/* milestone year="..." */} — Start van elke mijlpaal; year is verplicht (vrije tekst, bijvoorbeeld 2012, 2012–2014 of Nu)
  • ### — Titel van de mijlpaal (verplicht)
  • Paragraaf — Beschrijving (verplicht)
  • --- — Einde van de sectie

Op een donkere achtergrond wordt de tekstkleur automatisch meegeschakeld.

Voorbeeld

markdown
{/* timeline background="light-grey" shapes="hexagon,dots" */}

#### Documentatie voorbeeld

## Onze _geschiedenis_

Een korte tijdlijn van momenten die het bureau hebben gevormd.

{/* milestone year="2012" */}

### Start van het bureau

Een compact ontwikkelteam dat software bouwt die jaren meegaat.

{/* milestone year="2016" */}

### Groei van het team

Meer specialisten, dezelfde werkwijze en dezelfde aandacht voor kwaliteit.

{/* milestone year="Nu" */}

### Doorlopende samenwerking

Langetermijnpartnerschappen in plaats van eenmalige projecten.

---

Documentatie voorbeeld

Onze geschiedenis

Een korte tijdlijn van momenten die het bureau hebben gevormd.

2012

Start van het bureau

Een compact ontwikkelteam dat software bouwt die jaren meegaat.

2016

Groei van het team

Meer specialisten, dezelfde werkwijze en dezelfde aandacht voor kwaliteit.

Nu

Doorlopende samenwerking

Langetermijnpartnerschappen in plaats van eenmalige projecten.

17. Frontmatter referentie

Elke MDX-pagina begint met frontmatter. Er zijn drie layouts beschikbaar: page, blog en blog-overview. De blog-layout heeft een uitgebreid plugin-systeem dat velden automatisch berekent en overerft, en de blog-overview gebruikt diezelfde data om child-pagina's automatisch te tonen.

URL-afleiding

De URL waarop een MDX-pagina wordt geserveerd wordt automatisch afgeleid uit de bestandslocatie binnen pages/, met uitzondering van de speciale pages/home/ map.

De regels (in volgorde van prioriteit):

  1. url (of slug) in frontmatter — wanneer aanwezig wint deze, met leading/trailing slashes gestript. Dit is de escape hatch om de map-gebaseerde URL te overschrijven (bijv. url: /andere-url of een locale-specifieke URL slug: /en/blog/my-article). Beide sleutels werken hetzelfde; url heeft voorrang wanneer beide aanwezig zijn.
  2. pages/home/ map — bestanden in deze map worden op de site-root geserveerd in plaats van onder de mapnaam. Het standaard-locale bestand (nl.mdx) komt op /, elke andere locale op /<locale> (bijv. en.mdx/en). Deze pagina's krijgen automatisch inBreadcrumbs: false.
  3. Directorypad — in alle andere gevallen wordt de slug afgeleid uit de mapstructuur: pages/blog/post/nl.mdx/blog/post.
BestandURL
pages/home/nl.mdx/
pages/home/en.mdx/en
pages/diensten/nl.mdx/diensten
pages/blog/post/nl.mdx/blog/post
pages/blog/post/en.mdx (met slug: /en/blog/post)/en/blog/post
pages/diensten/maatwerk/nl.mdx (met url: /software-op-maat)/software-op-maat

Page layout

yaml
---
layout: page
title: Paginatitel
description: Meta-beschrijving voor SEO.
---

Blog layout

yaml
---
layout: blog
title: Blogtitel - 10KB
heroTitle: "Titel met\nregelafbreking en *emphasis*"
description: Meta-beschrijving voor SEO.
image: ~/assets/photos/afbeelding.png
authorName: Ewout
date: 2026-01-15
tags: [continuity, software-development]
---

Blog overview layout

yaml
---
layout: blog-overview
overviewType: blog
title: Blog van 10KB - 10KB
heroTitle: "Inzichten over *softwareontwikkeling*"
description: Artikelen van 10KB over softwareontwikkeling, DevOps en maatwerksoftware.
---

Handmatig ingestelde velden

VeldLayoutBeschrijving
layoutallepage, blog of blog-overview
titleallePaginatitel (SEO)
descriptionalleMeta-beschrijving
urlalleOverschrijf de map-gebaseerde URL (bijv. /software-op-maat). Alias van slug; url heeft voorrang.
heroTitleblogHerotitel met *emphasis* en \n regelafbreking. Valt terug op title.
imageblogHero-afbeelding, ondersteunt ~/assets/... paden
authorNameblogAuteursnaam
dateblogPublicatiedatum (YYYY-MM-DD)
tagsblogArray van tags, gebruikt voor gerelateerde artikelen
showcaseblogBoolean waarmee een blogartikel in de showcase-stroom van de blog-overview komt
slugblogURL-pad voor locale-specifieke pagina's (bijv. /en/blog/my-article)
inheritKeysblogOverschrijf welke velden overgeërfd worden (zie Locale-overerving)
overviewTypeblog-overviewType overview-pagina, momenteel blog

Automatisch berekende velden

Deze velden worden door frontmatter-plugins berekend en hoeven niet handmatig ingesteld te worden.

VeldBronBeschrijving
localebestandsnaamAfgeleid van de bestandsnaam: nl.mdx"nl", en.mdx"en"
readTimeinhoudBerekend op basis van het aantal woorden (woorden ÷ 200, minimaal 1 minuut). Codeblokken worden overgeslagen.
dateStringdate + localeLocale-bewuste opmaak van date, bijv. "15 januari 2026" voor NL
relatedArticlestagsAutomatisch gegenereerd op basis van gedeelde tags. Toont maximaal 3 artikelen in dezelfde taal. Overline en titel worden automatisch vertaald per locale.
postsoverview-pluginVoor blog-overview: platte lijst van directe child-artikelen per locale, gesorteerd op datum (nieuwste eerst), gebruikt door de client-side filters
inBreadcrumbspages/home/ mapAutomatisch false voor pagina's in pages/home/. Kan handmatig worden overschreven door inBreadcrumbs expliciet in frontmatter te zetten.

Locale-overerving

Blog-artikelen ondersteunen automatische overerving van velden tussen taalversies. Bestanden in dezelfde map worden aan elkaar gekoppeld.

Hoe het werkt:

  • Het standaardbestand (zonder slug veld, bijv. nl.mdx) is de bron
  • Locale-specifieke bestanden (met slug veld, bijv. en.mdx) erven ontbrekende velden

Standaard overgeërfde velden: image, authorName, tags, date

Dit betekent dat je deze velden alleen in het standaardbestand hoeft in te stellen. De vertalingen erven ze automatisch.

Voorbeeld — standaardbestand (nl.mdx):

yaml
---
layout: blog
title: Hoe continuïteit waarde creëert - 10KB
heroTitle: "Hoe continuïteit waarde\ncreëert voor *bedrijven*"
description: Ontdek hoe continuïteit in software ontwikkeling waarde creëert.
image: ~/assets/photos/continuity.png
authorName: Ewout
date: 2026-01-15
tags: [continuity, software-development]
---

Voorbeeld — locale-specifiek bestand (en.mdx in dezelfde map):

yaml
---
layout: blog
slug: /en/blog/how-continuity-creates-value
title: How Continuity Creates Value - 10KB
heroTitle: "How continuity creates\nvalue for *businesses*"
description: Discover how continuity in software development creates value.
---

Het Engelse bestand erft automatisch image, authorName, tags en date van nl.mdx.

Overschrijven: Stel inheritKeys in om te bepalen welke velden overgeërfd worden:

yaml
---
inheritKeys: [image, date]
---

Plugin-volgorde

Frontmatter-plugins worden in twee fasen uitgevoerd:

FasePluginActie
1 — per bestandlocalePluginLeidt locale af uit bestandsnaam
1 — per bestandreadTimePluginBerekent readTime uit woordtelling
1 — per bestandhomeBreadcrumbPluginZet inBreadcrumbs: false voor pages/home/
2 — cross-filelocaleInheritPluginErft velden over van standaard-locale
2 — cross-filebreadcrumbPluginBouwt breadcrumb-crumbs en sibling-dropdowns
2 — cross-filedateFormatPluginFormatteert date naar dateString
2 — cross-filerelatedArticlesPluginGenereert gerelateerde artikelen op basis van tags

Fase 1 verwerkt elk bestand apart. Fase 2 draait over alle bestanden tegelijk, zodat latere plugins data zien die door eerdere plugins is verrijkt.


CONTACT

Neem contact met ons op

Heb je een vraag of wil je sparren over je software? Laat je gegevens achter, dan nemen we snel contact met je op.