07 · Identiteit / Websites

Waar we wat plaatsen.

Zes domeinen, twee hostingstacks. Elk domein doet één ding voor één publiek. Deze pagina legt uit wat waar staat, hoe we het opzetten, en waarom de stack zo gesplitst is.

Wat we waar plaatsen · zes domeinen
CMS · OpenCatalogi
conduction.nl

Hoofdmerk. Diensten, consultancy, building, innovation. Hier branden we. Het verhaal voor de MKB-beslisser die ons via Google vindt: wat bouwen we, voor wie, en hoe je vandaag iets installeert.

Publiek
MKB-primair, overheid-secundair
Inhoud
Brand, blog, nieuws, "over ons"
Tech
OpenCatalogi op Nextcloud
Editor
Niet-developer, via CMS
Static · Docusaurus
connext.conduction.nl

Platformpropositie. ConNext als product. Voor de overheid- en MKB-beslisser die het systeem-niveau wil zien: app-ecosysteem, workspace + apps, "wat is ConNext".

Publiek
Beslissers, architecten
Inhoud
Platform, ecosysteem, integraties
Tech
Docusaurus op GitHub Pages
Editor
Marketing + dev, via PR
Static · Docusaurus
[product].conduction.nl

Per-product. Eén subdomein per app: opencatalogi, openregister, docudesk, mydash, openconnector, en de rest. Voor de gebruiker en developer die specifiek met die app aan de slag wil. Docs, API, install-link.

Publiek
Eindgebruiker + developer
Inhoud
Per-product docs, API-spec
Tech
Docusaurus op GitHub Pages
Editor
App-team, via repo
CMS · OpenCatalogi
apps.conduction.nl

App store. Onze eigen catalogus. Gebouwd op OpenCatalogi, want we dogfooden ons eigen product. Externally linked vanuit elke andere site, want hier komt de "installeer nu"-knop.

Publiek
Iedereen, primair MKB
Inhoud
Apps + solutions catalogus
Tech
OpenCatalogi op Nextcloud
Dogfood
Ja, dit is ons eigen product
Common Ground · Docusaurus
commonground.nu

Hostingpropositie. Voor klanten die hun eigen Nextcloud-omgeving willen, beheerd door ons. Apex-domein, dus eigen GitHub Pages-repo met eigen CNAME. Brand-kleur is Common Ground-geel, niet kobalt: dit is de Common Ground-tak, geen Conduction-tak.

Publiek
IT-leads, overheid
Inhoud
Hosting, beheer, prijzen
Tech
Docusaurus op GitHub Pages
Editor
Sales + ops, via PR
Common Ground · Live Nextcloud
[client].commonground.nu

Klantomgeving. Echte Nextcloud-instances per klant. Geen GitHub Pages, geen statische bouw. Live applicatie met data, gebruikers, integraties. Dit is de werkende software, niet de propositie.

Publiek
De klant zelf
Inhoud
Hun eigen data, hun eigen apps
Tech
Nextcloud, één instance per klant
Editor
De klant + Conduction-ops
De domein-boom
conduction.nl connext [product] apps commonground.nu [client] Conduction · cobalt De ene oranje accent · waar je wilt dat de bezoeker klikt Common Ground · geel

Gerenderd met <cn-domain-tree> + <cn-hex>.

Hoe we de site opzetten · twee stacks
Static stack

Docusaurus op GitHub Pages

Voor alles dat marketing- of docs-content is. Statisch, version-controlled, deploybaar via een GitHub Actions-workflow. Eén repo per subdomein, want GitHub Pages bindt één custom domain per repo.

  • Eén repo per subdomein. connext-repo voor connext.conduction.nl, opencatalogi-repo voor opencatalogi.conduction.nl, enzovoort.
  • Shared @conduction/docusaurus-preset. Eén npm-package met de brand-tokens, theme, navbar, footer. Elke site importeert hem; visuele consistentie zonder mono-repo.
  • CNAME-bestand per repo. De custom-domain-naam staat in static/CNAME. GitHub leest hem bij elke deploy.
  • DNS via registrar. A-records van het subdomein naar de GitHub Pages-IP's. Apex-domein eenmalig geverifieerd op org-niveau, alle subdomeinen erven die verificatie.
  • Auto-deploy via Actions. Push naar main bouwt en publiceert naar gh-pages. Live binnen één tot twee minuten.
Dynamic stack

OpenCatalogi op Nextcloud

Voor alles dat CMS-content is, of een echt product is. We dogfooden onze eigen apps: het hoofdmerk en de app store draaien op OpenCatalogi, klantomgevingen draaien op standaard Nextcloud.

  • conduction.nl als CMS-site. Brand-content, blog en nieuws zijn OpenCatalogi-objecten. Niet-developers redigeren via de Nextcloud-UI, geen PR nodig.
  • apps.conduction.nl als app store. Apps en solutions zijn OpenCatalogi-objecten in het standaard register. Eén OpenCatalogi-instantie, één gepoetst publiek register.
  • Custom theme. Nextcloud-app die de brand-tokens uit dit design system inlaadt. Zelfde kleuren, zelfde typografie, zelfde hex-componenten.
  • Klantomgevingen, geen propositie. [client].commonground.nu is een werkende Nextcloud-instance per klant, met hun eigen data en gebruikers. Geen marketing-laag.
Meertalig · nl, en, de, fr
Configuratie

Vier talen, één build

Docusaurus 3 ondersteunt meertaligheid native. Eén build genereert alle vier de talen in dezelfde build/-output. Nederlands is default en woont op de root; de overige talen krijgen een sub-pad: /en/, /de/, /fr/. Marketingtekst en docs zijn dus altijd in vier talen beschikbaar zonder aparte deploys.

  • defaultLocale: 'nl'. Nederlands op /, schoonste URL, matcht "we leiden in NL".
  • localeConfigs per taal: htmlLang, label voor de switcher, richting (allemaal ltr).
  • trailingSlash: true. Expliciet zetten, anders breekt hreflang op GitHub Pages.
  • localeDropdown in de navbar. Eén regel toevoegen aan themeConfig.navbar.items.
  • hreflang komt automatisch. Docusaurus emitteert <link rel="alternate"> per taal, op elke pagina, zonder config.
Vertaalproces

Eerst NL, dan de rest

Vertalingen leven in i18n/<locale>/ per site. Markdown-bestanden komen in i18n/de/docusaurus-plugin-content-docs/current/; UI-strings in code.json. Ontbreekt een vertaling, dan valt Docusaurus terug op de defaultLocale. Pagina's blijven dus altijd vindbaar; de fallback is geen 404.

  • npm run write-translations -- --locale fr. Genereert JSON met alle navbar-, sidebar- en theme-strings die nog vertaald moeten worden.
  • Crowdin of git. Beide werken. Crowdin voor team-vertalers (eigen UI), git voor developer-vertalers (PR's).
  • Beslis vooraf. Migreren van git naar Crowdin halverwege betekent alle keys opnieuw matchen.
  • Tracking-discipline. Niet leunen op de fallback; voeg npm run write-translations aan een CI-check toe zodat ontbrekende keys PR's breken, niet productie.
  • Build-tijd. Schaalt lineair, ~3 tot 4 keer een single-locale build. Op GitHub Actions blijven we ruim binnen de gratis minuten.

Configuratie hoort thuis in @conduction/docusaurus-preset. Eén i18n-blok daar, alle vijf à zes sites blijven in lockstep. Sjabloon-instellingen voor het preset:

// docusaurus.config.js
i18n: {
  defaultLocale: 'nl',
  locales: ['nl', 'en', 'de', 'fr'],
  localeConfigs: {
    nl: { label: 'Nederlands', htmlLang: 'nl-NL' },
    en: { label: 'English',    htmlLang: 'en-GB' },
    de: { label: 'Deutsch',    htmlLang: 'de-DE' },
    fr: { label: 'Français',   htmlLang: 'fr-FR' },
  },
},
trailingSlash: true,

Bron: Docusaurus i18n introduction · i18n tutorial

Waarom de splitsing zo is
GitHub Pages · de restrictie

Eén CNAME per repo. Geen wildcards. Daarom N repos voor N subdomeinen.

GitHub Pages bindt precies één custom domain aan elke repo, via het CNAME-bestand in de root. Wildcards (*.conduction.nl) worden expliciet afgeraden door GitHub vanwege domain-takeover-risico's. Eén Docusaurus-build kan dus geen meerdere subdomeinen serveren.

Dat zou een rommelige stapel repos kunnen worden. Daarom delen ze allemaal het @conduction/docusaurus-preset-package. Brand-tokens, navbar, footer, theme: alles komt uit één plek. Eén design-bug fixen in de preset, alle sites profiteren bij de volgende build.

De CMS-route via OpenCatalogi heeft die restrictie niet, daar serveert één Nextcloud-instance vanzelf alle eigen content. Maar dat geldt alleen waar we ook echt CMS-werk doen. Docs en marketing-content blijven static, want statisch is sneller, goedkoper en betrouwbaarder. GitHub Pages docs.

Een nieuw subdomein opzetten · vier stappen
Stap 01

Repo + CNAME

Maak een nieuwe repo onder ConductionNL/. Scaffold een Docusaurus-site met npx create-docusaurus@latest. Voeg static/CNAME toe met je subdomein: nieuw.conduction.nl.

Stap 02

Preset + DNS

Installeer @conduction/docusaurus-preset en zet hem in docusaurus.config.js. Brand, kleuren en typografie werken meteen. Voeg het A-record toe op de DNS, naar de GitHub Pages-IP's.

Stap 03

i18n + content

Het preset levert het i18n-blok mee (nl/en/de/fr). Vertaal eerst NL, daarna de rest in i18n/<locale>/. Run npm run write-translations -- --locale <x> om UI-strings te genereren.

Stap 04

Workflow + verify

Voeg .github/workflows/deploy.yml toe (publiceert naar gh-pages). Zet GitHub Pages in repo-settings op die branch. Apex-domein is al geverifieerd op org-niveau; DNS-checks werken meteen.