# Sveltia CMS content model. Paths are repo-root-relative (the CMS operates on the git
# repo, not on this package). i18n: one entry, locale switcher in the editor; translations
# pair by file path (multiple_folders) or nest per locale in one file (single_file).

backend:
  name: github
  repo: schakl-app/schakl
  branch: dev
  # Remote sign-in goes through our own token-exchange service, deployed with this site as a
  # Cloudflare Pages Function (apps/site/functions/api/auth/, see apps/site/AUTH.md). The CMS
  # requests `<base_url>/<auth_endpoint>`, so these two produce https://schakl.dev/api/auth.
  # Only the auth URL is built from base_url; the GitHub API root is separate and untouched.
  # This must be the origin the CMS is *served* from, and it is the one value here that no
  # code derives: the function itself reads its callback off the incoming request, so it
  # follows whatever host answers. Change this and the OAuth app's callback URL together.
  # Until that is deployed, local editing ("Work with Local Repository") works without it.
  base_url: https://schakl.dev
  auth_endpoint: api/auth

media_folder: apps/site/public/images
public_folder: /images

i18n:
  structure: multiple_folders
  locales: [nl, en]
  default_locale: nl
  # A page may exist in one language: untranslated docs fall back to Dutch on the site.
  save_all_locales: false

collections:
  - name: settings
    label: Site-instellingen
    icon: settings
    files:
      - name: site
        label: Site-instellingen
        file: apps/site/src/data/settings/site.json
        fields:
          - { name: brandName, label: Merknaam, widget: string }
          - { name: siteUrl, label: Site-URL, widget: string }
          - name: logo
            label: Logo
            widget: image
            required: false
            media_folder: /apps/site/src/assets/site
            public_folder: /src/assets/site
          - name: logoDark
            label: Logo — donker thema (optioneel; anders wordt het gewone logo gebruikt)
            widget: image
            required: false
            media_folder: /apps/site/src/assets/site
            public_folder: /src/assets/site
          - name: favicon
            label: Favicon (SVG aangeraden)
            widget: image
            required: false
            media_folder: /apps/site/public
            public_folder: /
          - name: colors
            label: Kleuren
            widget: object
            fields:
              - { name: accent, label: 'Accentkleur — licht thema', widget: color }
              - { name: accentDark, label: 'Accentkleur — donker thema', widget: color }
          - name: social
            label: Sociale links
            widget: object
            fields:
              - { name: github, label: GitHub-URL, widget: string }
          - name: demo
            label: Live demo (knoppen door de site)
            widget: object
            required: false
            hint: 'Laat de URL leeg om alle "live demo"-knoppen te verbergen.'
            fields:
              - { name: url, label: Demo-URL, widget: string, required: false }
              - name: label
                label: Knoptekst
                widget: object
                fields:
                  - { name: nl, label: NL, widget: string }
                  - { name: en, label: EN, widget: string }
          - name: forms
            label: Formulieren
            widget: object
            required: false
            fields:
              - name: turnstileSiteKey
                label: Cloudflare Turnstile site key (publiek)
                widget: string
                required: false
                hint: 'Publieke site key. Laat leeg tot de anti-spamwidget is ingericht. De secret key staat als omgevingsvariabele bij de Cloudflare-functie, niet hier.'
          - name: nav
            label: Hoofdnavigatie
            widget: list
            summary: '{{fields.nl}}'
            fields:
              - { name: href, label: Link, widget: string }
              - { name: nl, label: Label (NL), widget: string }
              - { name: en, label: Label (EN), widget: string }
          - name: footerLinks
            label: Footerlinks
            widget: list
            summary: '{{fields.nl}}'
            fields:
              - { name: href, label: Link, widget: string }
              - { name: nl, label: Label (NL), widget: string }
              - { name: en, label: Label (EN), widget: string }
          - name: footerNote
            label: Footertekst
            widget: object
            fields:
              - { name: nl, label: NL, widget: string }
              - { name: en, label: EN, widget: string }

  - name: landing
    label: Landingspagina
    icon: home
    i18n:
      structure: single_file
      locales: [nl, en]
      default_locale: nl
    files:
      - name: landing
        label: Landingspagina
        file: apps/site/src/data/landing.json
        i18n: true
        fields:
          - name: blocks
            label: Secties
            label_singular: sectie
            widget: list
            i18n: true
            types:
              - name: hero
                label: Hero
                widget: object
                summary: 'Hero — {{fields.title}}'
                fields:
                  - { name: eyebrow, label: Eyebrow (regeltje boven de titel), widget: string }
                  - { name: title, label: Titel, widget: string }
                  - { name: subtitle, label: Subtitel, widget: text }
                  - name: ctaPrimary
                    label: Primaire knop
                    widget: object
                    fields:
                      - { name: label, label: Tekst, widget: string }
                      - { name: href, label: Link, widget: string }
                  - name: ctaSecondary
                    label: Secundaire knop
                    widget: object
                    fields:
                      - { name: label, label: Tekst, widget: string }
                      - { name: href, label: Link, widget: string }
              - name: features
                label: Functie-kaarten
                widget: object
                summary: 'Functies — {{fields.title}}'
                fields:
                  - { name: anchor, label: 'Anker (voor #links)', widget: string, required: false }
                  - { name: title, label: Titel, widget: string }
                  - { name: intro, label: Intro, widget: text }
              - name: textBullets
                label: Tekst + punten
                widget: object
                summary: 'Tekst — {{fields.title}}'
                fields:
                  - { name: anchor, label: 'Anker (voor #links)', widget: string, required: false }
                  - { name: title, label: Titel, widget: string }
                  - { name: body, label: Tekst, widget: text }
                  - name: bullets
                    label: Punten
                    widget: list
                    field: { name: bullet, label: Punt, widget: string }
              - name: integrations
                label: Koppelingenstrook
                widget: object
                summary: 'Koppelingen — {{fields.title}}'
                # De kaarten zelf komen uit de collectie Koppelingen; hier kies je alleen welke
                # er op de landingspagina staan, op naam. Een slug die niet bestaat wordt
                # overgeslagen in plaats van een lege kaart te tonen.
                fields:
                  - { name: anchor, label: 'Anker (voor #links)', widget: string, required: false }
                  - { name: title, label: Titel, widget: string }
                  - { name: intro, label: Intro, widget: text }
                  - name: slugs
                    label: 'Welke koppelingen (slug uit Koppelingen)'
                    widget: list
                    field: { name: slug, label: Slug, widget: string }
                  - { name: label, label: 'Tekst van de link naar alle koppelingen', widget: string }
              - name: cta
                label: Call-to-action-band
                widget: object
                summary: 'CTA — {{fields.title}}'
                fields:
                  - { name: anchor, label: 'Anker (voor #links)', widget: string, required: false }
                  - { name: title, label: Titel, widget: string }
                  - { name: body, label: Tekst, widget: text }
                  - { name: label, label: Knoptekst, widget: string }
                  - { name: href, label: Knoplink, widget: string }

  - name: features
    label: Functie-kaarten
    icon: category
    folder: apps/site/src/data/features
    extension: json
    create: true
    identifier_field: name
    summary: '{{name}}'
    fields:
      - { name: name, label: Naam (intern), widget: string }
      - { name: slug, label: 'Slug (URL /features/<slug>/)', widget: string }
      - { name: order, label: Volgorde, widget: number, value_type: int }
      - { name: lucide, label: 'Icoon (Lucide-naam, zie Icon.astro)', widget: string }
      - { name: icon, label: 'Icoon (emoji, legacy — niet meer getoond)', widget: string, required: false }
      - { name: demo, label: 'Demo (optioneel: createClient/addTime/budget/tasks/leave/whiteLabel)', widget: string, required: false }
      - name: title
        label: Titel (kaart)
        widget: object
        fields:
          - { name: nl, label: NL, widget: string }
          - { name: en, label: EN, widget: string }
      - name: description
        label: Omschrijving (kaart)
        widget: object
        fields:
          - { name: nl, label: NL, widget: text }
          - { name: en, label: EN, widget: text }
      - name: page
        label: Functiepagina
        widget: object
        required: false
        fields:
          - name: eyebrow
            label: Eyebrow
            widget: object
            fields:
              - { name: nl, label: NL, widget: string }
              - { name: en, label: EN, widget: string }
          - name: title
            label: Titel (pagina)
            widget: object
            fields:
              - { name: nl, label: NL, widget: string }
              - { name: en, label: EN, widget: string }
          - name: lead
            label: Lead
            widget: object
            fields:
              - { name: nl, label: NL, widget: text }
              - { name: en, label: EN, widget: text }
          - name: sections
            label: Secties
            label_singular: sectie
            widget: list
            fields:
              - name: heading
                label: Kop
                widget: object
                fields:
                  - { name: nl, label: NL, widget: string }
                  - { name: en, label: EN, widget: string }
              - name: body
                label: Tekst
                widget: object
                fields:
                  - { name: nl, label: NL, widget: text }
                  - { name: en, label: EN, widget: text }
              - name: bullets
                label: Punten (optioneel)
                widget: object
                required: false
                fields:
                  - { name: nl, label: NL, widget: list, field: { name: item, widget: string }, required: false }
                  - { name: en, label: EN, widget: list, field: { name: item, widget: string }, required: false }

  - name: integrations
    label: Koppelingen
    icon: hub
    folder: apps/site/src/data/integrations
    extension: json
    create: true
    identifier_field: slug
    summary: '{{name}} ({{status}})'
    # De categorie is een keuzelijst en geen vrij veld: de indeling van de pagina staat in
    # src/lib/integrations.ts. Een categorie die daar niet bestaat levert een kaart op die
    # nergens getoond wordt, dus de opties hieronder moeten gelijk blijven aan die lijst.
    fields:
      - { name: slug, label: 'Slug (URL /integrations/<slug>/)', widget: string }
      - { name: name, label: Naam, widget: string }
      - { name: order, label: Volgorde, widget: number, value_type: int }
      - name: category
        label: Categorie
        widget: select
        options:
          - { label: Betalen, value: payments }
          - { label: Boekhouding, value: accounting }
          - { label: 'Domeinen & DNS', value: domains }
          - { label: Google Workspace, value: google }
          - { label: 'Marketing & analytics', value: marketing }
          - { label: 'AI & assistenten', value: ai }
          - { label: 'Inloggen & identiteit', value: identity }
          - { label: 'Opslag & verzending', value: infrastructure }
          - { label: 'Automatisering & API', value: automation }
      - name: status
        label: Status
        widget: select
        default: live
        hint: 'Beschikbaar = werkt vandaag. Bèta = werkt, maar is nog nooit tegen een echte account van die leverancier gedraaid. Roadmap = nog niets te koppelen.'
        options:
          - { label: Beschikbaar, value: live }
          - { label: 'Bèta (nog niet op een echte account gedraaid)', value: beta }
          - { label: 'Op de roadmap', value: planned }
      - { name: lucide, label: 'Icoon (Lucide-naam, zie Icon.astro)', widget: string }
      - name: mark
        label: Merkteken
        widget: object
        fields:
          - { name: monogram, label: 'Letter(s)', widget: string }
          - { name: color, label: Merkkleur, widget: color, required: false }
      - name: tagline
        label: 'Ondertitel (kort)'
        widget: object
        fields:
          - { name: nl, label: NL, widget: string }
          - { name: en, label: EN, widget: string }
      - name: summary
        label: Samenvatting (kaart)
        widget: object
        fields:
          - { name: nl, label: NL, widget: text }
          - { name: en, label: EN, widget: text }
      - name: highlights
        label: 'Punten op de kaart (max 3 worden getoond)'
        widget: object
        required: false
        fields:
          - { name: nl, label: NL, widget: list, field: { name: item, widget: string }, required: false }
          - { name: en, label: EN, widget: list, field: { name: item, widget: string }, required: false }
      - name: where
        label: 'Waar je het vindt (schermnaam)'
        widget: object
        required: false
        fields:
          - { name: nl, label: NL, widget: text }
          - { name: en, label: EN, widget: text }
      - { name: docs, label: 'Link naar de handleiding (laat leeg bij roadmap)', widget: string, required: false }
      - name: roadmapNote
        label: 'Roadmaptoelichting (alleen bij status roadmap)'
        widget: object
        required: false
        fields:
          - { name: nl, label: NL, widget: text }
          - { name: en, label: EN, widget: text }
      - name: page
        label: Koppelingspagina
        widget: object
        required: false
        fields:
          - name: lead
            label: Lead
            widget: object
            fields:
              - { name: nl, label: NL, widget: text }
              - { name: en, label: EN, widget: text }
          - name: requirements
            label: 'Wat je nodig hebt'
            widget: object
            required: false
            fields:
              - { name: nl, label: NL, widget: list, field: { name: item, widget: string }, required: false }
              - { name: en, label: EN, widget: list, field: { name: item, widget: string }, required: false }
          - name: steps
            label: 'Stappen (mag <strong> en <code> bevatten)'
            widget: object
            required: false
            fields:
              - { name: nl, label: NL, widget: list, field: { name: item, widget: text }, required: false }
              - { name: en, label: EN, widget: list, field: { name: item, widget: text }, required: false }
          - name: sections
            label: Secties
            label_singular: sectie
            widget: list
            required: false
            fields:
              - name: heading
                label: Kop
                widget: object
                fields:
                  - { name: nl, label: NL, widget: string }
                  - { name: en, label: EN, widget: string }
              - name: body
                label: Tekst
                widget: object
                fields:
                  - { name: nl, label: NL, widget: text }
                  - { name: en, label: EN, widget: text }
              - name: bullets
                label: Punten (optioneel)
                widget: object
                required: false
                fields:
                  - { name: nl, label: NL, widget: list, field: { name: item, widget: string }, required: false }
                  - { name: en, label: EN, widget: list, field: { name: item, widget: string }, required: false }
          - name: permissions
            label: Rechten
            label_singular: recht
            widget: list
            required: false
            fields:
              - { name: key, label: 'Rechtsleutel (bijv. mollie.settings.manage)', widget: string }
              - { name: nl, label: 'Uitleg NL', widget: string }
              - { name: en, label: 'Uitleg EN', widget: string }
          - name: limits
            label: 'Wat het bewust niet doet'
            widget: object
            required: false
            fields:
              - { name: nl, label: NL, widget: list, field: { name: item, widget: string }, required: false }
              - { name: en, label: EN, widget: list, field: { name: item, widget: string }, required: false }

  - name: forms
    label: Formulieren
    icon: mail
    folder: apps/site/src/data/forms
    extension: json
    create: true
    identifier_field: slug
    summary: '{{slug}}'
    fields:
      - { name: slug, label: 'Slug (URL /<slug>/)', widget: string }
      - { name: order, label: Volgorde, widget: number, value_type: int }
      - name: title
        label: Titel
        widget: object
        fields:
          - { name: nl, label: NL, widget: string }
          - { name: en, label: EN, widget: string }
      - name: intro
        label: Intro
        widget: object
        fields:
          - { name: nl, label: NL, widget: text }
          - { name: en, label: EN, widget: text }
      - name: submitLabel
        label: Verzendknop
        widget: object
        fields:
          - { name: nl, label: NL, widget: string }
          - { name: en, label: EN, widget: string }
      - name: successMessage
        label: Bevestigingstekst
        widget: object
        fields:
          - { name: nl, label: NL, widget: text }
          - { name: en, label: EN, widget: text }
      - { name: recipient, label: 'Ontvanger (e-mailadres)', widget: string }
      - name: fields
        label: Velden
        label_singular: veld
        widget: list
        fields:
          - { name: name, label: 'Naam (technisch, geen spaties)', widget: string }
          - name: type
            label: Type
            widget: select
            options: [text, email, tel, textarea, select]
            default: text
          - { name: required, label: Verplicht, widget: boolean, default: false }
          - name: label
            label: Label
            widget: object
            fields:
              - { name: nl, label: NL, widget: string }
              - { name: en, label: EN, widget: string }
          - name: options
            label: 'Opties (alleen bij type keuzelijst)'
            widget: list
            required: false
            fields:
              - { name: value, label: Waarde, widget: string }
              - name: label
                label: Label
                widget: object
                fields:
                  - { name: nl, label: NL, widget: string }
                  - { name: en, label: EN, widget: string }

  - name: pages
    label: "Pagina's"
    icon: description
    folder: apps/site/src/content/pages
    extension: mdx
    format: frontmatter
    create: true
    i18n: true
    slug: '{{slug}}'
    summary: '{{title}}'
    # De slug is het URL-pad (/<slug>/ en /en/<slug>/) — gebruik niet "docs", "nl" of "en".
    fields:
      - { name: title, label: Titel, widget: string, i18n: true }
      - { name: description, label: Omschrijving (voor zoekmachines), widget: text, required: false, i18n: true }
      - { name: body, label: Inhoud, widget: markdown, i18n: true }

  - name: docs
    label: Documentatie
    icon: menu_book
    folder: apps/site/src/content/docs
    extension: mdx
    format: frontmatter
    create: true
    i18n: true
    nested: { depth: 5 }
    summary: '{{title}}'
    meta:
      path: { widget: string, label: Pad, index_file: index }
    fields:
      - { name: title, label: Titel, widget: string, i18n: true }
      - { name: description, label: Omschrijving, widget: text, required: false, i18n: true }
      - name: sidebar
        label: Zijbalk
        widget: object
        required: false
        i18n: duplicate
        fields:
          - { name: order, label: Volgorde, widget: number, value_type: int, required: false }
      - { name: body, label: Inhoud, widget: markdown, i18n: true }
