Het CMS voor sites gebouwd met Claude of Codex
Zip erin, bewerkbare site eruit, ontwerp onaangeraakt. Vier dagen ontwerptraject.
![De homepage van CMS[this] met de kop “We eat your HTML zip” op een donkere achtergrond, en ernaast een schema van een pagina waarin de bewerkbare velden oranje omkaderd staan en de gedeelde kop- en voetregel in turkoois.](/projecten/cmsthis-hero.jpg)
- Opdrachtgever
- Product
- Route
- Onderwerp
- Platform
- Jaar
Elk contentsysteem vraagt je je site opnieuw te bouwen in hún gereedschap. CMS[this] draait dat om: je geeft het de site die je al hebt (een zip, een URL, of de map die een taalmodel voor je heeft uitgespuugd) en er komt hetzelfde ontwerp uit, met elke tekst en elk beeld bewerkbaar. Wij waren vier werkdagen design partner in het traject dat één zin uit het merkdocument overeind moest houden: “the design is sacred; we only edit content”.
- Claude Design
- Design tokens
- Widget-prototypes
- Tweetrapsprompts
- grep
In het kort
- 4
- 27+
- 3
- 1.369
- 19
Wat er lag
CMS[this] bouwt een contentsysteem om een site heen die je al hebt: een zip, een URL, of de map die Claude of Codex heeft uitgespuugd. In het merkdocument stond één zin waar alles op terugsloeg: the design is sacred; we only edit content. Wij kwamen er vier werkdagen bij als design partner, met een prototype rond versie twaalf op tafel en een syncmodel dat te simpel bleek. De opgave: die ene zin overeind houden in elke beslissing, van de visuele richting tot wie eigenaar is van een veld.
Drie details die het verschil maken
![Het schema op de homepage van CMS[this]: een pagina met de kop- en voetregel in turkoois als gedeeld op elke pagina, en de velden page.title, page.hero_image, page.intro en item.card in oranje als wat de klant bewerkt.](/projecten/cmsthis-schema.jpg)


Het product in vijf schermen

Zip in, CMS out: drie stappen aan de buitenkant, en eronder het model dat bepaalt wie waarvan eigenaar is. 
Voor ontwerpers en voor wie een site van Claude heeft: de kernzin staat er woordelijk. 
Kleine fabriek, hele lopende band: zes dingen die het systeem doet zonder het ontwerp aan te raken. ![De prijzen van CMS[this]: Free, Pro als meest gekozen, Business en Studio, elk met opslag, verkeer en het aantal sites.](/projecten/cmsthis-prijzen.jpg)
Vier plannen; publiceren mag op elk plan, want de upgrade gaat over maak het van jou en niet over het recht om te publiceren. 
De afsluiting: het oranje dat overal het accent is, nu als vlak.
Hoe het is gemaakt
Eén zin die overeind moest blijven
CMS[this] richt zich op een website die je al hebt (een URL, een zip, of de map die Claude of Codex voor je heeft uitgespuugd) en bouwt daar automatisch een contentsysteem omheen. Het ontwerp blijft onaangeraakt. De doelgroep zijn mensen die met een taalmodel iets moois hebben gebouwd en vastzitten zodra er één woord moet veranderen, freelancers met één klant, en bureaus met tientallen klantsites.
In het merkdocument stond één zin waar alles op terugsloeg, en die is scherper dan hij klinkt. Hij verbiedt niet alleen dat de tool het ontwerp van de klant aanraakt. Hij verbiedt ook dat de tool zelf zich gedraagt als eigenaar. Bijna elke beslissing in dit traject is een variant op de vraag die daaruit volgt: bepaalt de gebruiker hier wát er staat, of begint hij aan hóe het eruitziet?
Wij kwamen erbij als design partner, voor vier werkdagen. Wat er aan het begin lag was een prototype rond versie twaalf: een zwevende bovenbalk, een dock, een commandopalet, overlays. Een editor met zeven mogelijkheden, van tekst bewerken tot het hele menu beheren. En een syncmodel van twee lagen dat te simpel bleek zodra er een derde bij kwam.
The design is sacred; we only edit content.
Drie visuele richtingen naast elkaar
De vraag was niet hoe we het mooier maakten, maar welke van twee heel verschillende beloftes bij dit product hoort. Naast de bestaande richting kwamen er twee: een warme, lichte met één zacht kleurveld, en een die het tegenovergestelde moest bewijzen: dat een interface eruit kan zien als gereedschap in plaats van als sfeer.
De lichte richting werd gedragen door één ontdekking die het uitgangspunt omdraaide: het product waar iedereen naar wees als “modern en donker” is helemaal niet donker. Zijn themakleur is #fcfbf8. De moderne indruk komt van het kleurveld en de beweging, niet van een donker canvas. Na vier volledige revisies werd de merkkleur helemaal losgelaten en verschoof de hele stelling: het meubilair is grijs, kleur is informatie, en het enige verzadigde in beeld is het model. Het verloop werd letterlijk een noorderlicht (groen, cyaan, blauw, violet, magenta), gebonden aan één betekenis: hier werkt de machine. Nooit decoratie.
De gereedschapsrichting was in de eerste build, in de woorden van de opdrachtgever, “gewoon een dark mode versie” van wat er al stond. De correctie daarop is de ingrijpendste visuele iteratie van het hele project, en hij kwam uit een telling: negentien schermen van een Hasselblad-camera geanalyseerd op kleur, en over de hele reeks zijn er maar twee dominante kleuren, samen zestig tot tachtig procent van elk beeld. Geen enkele grijstrap in de top vijf van welk scherm dan ook.
Daaruit volgde de vondst die de richting kantelde: een apparaat maakt secundaire informatie kleiner, niet grijzer. De grijsladder van wit naar 55 naar 34 procent is een webconventie; camera-interfaces kennen die gradatie niet. Tekst is puur wit, of hij is er niet. En daaruit volgde weer een reeks omkeringen die met elkaar consistent moest blijven: hoeken naar nul op alles behalve avatars, typografie die nooit boven twaalf pixels komt behalve één groot getal per scherm, en het accent van actiekleur naar toestandskleur: nooit meer een gevuld vlak groter dan een markering.
Meten voor je ontwerpt
Drie richtingen naast elkaar zijn onmogelijk eerlijk te vergelijken op een codebase zonder één bron per waarde. Dus voordat er over kleur gesproken kon worden, is er geteld.
De eerste meting op de bestaande build: 1.369 hardgecodeerde hexwaarden, waarvan 137 uniek, verspreid over de markup en over strings die in het script aan elkaar werden geplakt. Eén kleur kwam 189 keer voor. De hoek-tokens wáren gedefinieerd, maar werden nul keer gebruikt: er stonden twaalf verschillende letterlijke waarden door de code heen. Daarnaast 175 losse rgba-waarden die nooit met een thema meebewogen, en dertig z-index-getallen zonder ladder.
Dat cijfer is de reden dat elke visuele wijziging vanaf dat punt als tweetrapsprompt geschreven werd. Eerst de tokenlaag invoeren zonder één pixel te veranderen (“het scherm moet er na afloop pixel-identiek uitzien; als er iets zichtbaar verandert, is er een fout gemaakt”), en pas daarna de waarden wisselen. Een latere sweep bracht ook schaduwen, transities, z-index en witruimte onder tokens: negen losse, apart controleerbare passes, met de instructie ze één voor één te draaien. Gaat er iets stuk in een run van zes wijzigingen, dan weet je niet welke het deed.
Dat is ook wat dit proces onderscheidt van “vraag om mooiere schermen”: elke visuele beslissing werd getoetst aan de code en niet alleen aan het oog. Een grep-telling van hexwaarden, lettergroottes en z-index bepaalde of een wijziging één prompt kon zijn of een gefaseerde operatie moest worden.
Halverwege brak het fundament
Midden in het traject viel een beslissing die alle voorgaande visuele iteraties in perspectief zette: de editor mocht geen structuur meer wijzigen. Een tabel uit de eigen bureaupraktijk beantwoordde zeven veelgestelde klantwensen met ja of nee. Nieuwe pagina's, herordenen, verbergen, dupliceren, menubeheer: die kregen allemaal nee.
Het gevolg was groter dan één geschrapte functie. Het syncmodel had drie lagen (ontwerp, structuur, inhoud) en die middelste laag bestond alleen omdat de klant structuur mocht wijzigen. Met dat ene nee klapte het model terug naar twee lagen, en verdween in één klap het moeilijkste onderdeel van het hele product: de botsingsvraag per pagina, de merktekens voor wat jij verplaatst had, het volledige scherm voor structuuroverschrijvingen. Ontwerp en structuur komen uit de bron. Inhoud leeft in het systeem. Geen middenlaag meer.
Maar een grens die alleen zegt dat iets niet kan, leert je niets en voelt als een muur. Daar kwam het patroon uit dat we het vaakst hebben hergebruikt: één zin over waar die mogelijkheid wél leeft, een kopieerbare en al ingevulde prompt voor Claude of Codex, en de weg terug via een nieuwe synchronisatie. Zes verschillende grenzen, één component. Met één uitzondering: publicaties inplannen kreeg het patroon niet, want die functie leeft niet in de bron maar bestaat simpelweg nog niet, en hetzelfde component daarvoor gebruiken zou aanleren dat de bron dingen kan die hij niet kan.
Eigendom per veld
De scherpste vraag van het hele traject, met een antwoord dat in één zin past. Stel: de bouwer schrijft een tekst in Claude. Een redacteur past hem hier aan. De bouwer wijzigt diezelfde tekst opnieuw in zijn bron en synchroniseert. Wie wint?
Laat de bron altijd winnen, en een synchronisatie kan een middag redactiewerk stilletjes wissen, en dan is de belofte van het product stuk. Laat het systeem altijd winnen, en de bouwer kan zijn eigen typefout nooit meer corrigeren: hij past aan, hij synchroniseert, er gebeurt niets. Dus geen van beide. Onaangeraakte velden volgen de bron; zodra iemand een veld hier bewerkt is het van het systeem, tot iemand het expliciet terugzet.
Dat principe vertakte zich meteen naar regels die niet vanzelfsprekend waren. Collecties zijn gesplitst: het schema (welke velden er zijn, dat het een lijst is) komt uit de bron, de items zelf zijn inhoud. Bedrijfsgegevens verhuizen in hun geheel, want je wilt nooit een situatie waarin het telefoonnummer op de contactpagina van de klant is en in de voettekst nog van de bron. En het overschrijvingsscherm dat we net begraven hadden kwam terug, maar kleiner: alleen inhoud, met per regel een knop om naar de bron terug te zetten.
Wat een gegeven is, verandert per functie. Maar de regel die bepaalt wie eigenaar is, mag maar één keer geschreven worden.
Wat we eruit hebben geleerd
- 01
Bijna elke fout in dit project was dezelfde fout in een ander jasje: twee plekken die iets anders beweren over dezelfde toestand. Een abonnementschip naast tegenstrijdige plantekst. “Sync” als werkwoord op een knop terwijl sync een verbinding is. Twee chips in de onderbalk die allebei claimden te zeggen of er een bron gekoppeld was. Eén bron per gegeven is geen architectuurprincipe dat je vooraf bedenkt. Het is de regel die overblijft nadat je dezelfde bug drie keer hebt opgelost.
- 02
Een mooie schets is geen ontwerp. Het geschiedenispaneel begon als een gecentreerde ruggengraat met bron links en inhoud rechts: een vertakkingsgrafiek voor mensen die nog nooit van versiebeheer hebben gehoord. Op een illustratie over de volle breedte werkte dat. In een paneel van vierhonderd pixels viel het uit elkaar: “Tom Bakker synced the source” moest in een kolom van honderddertig, en zodra je op één kant filterde viel de halve tijdlijn leeg met een streep ernaast, op het moment dat een logboek moet blijven werken. De reparatie liet de tweezijdigheid los maar niet het onderscheid: één kolom, een goot van dertig pixels ernaast met een open cirkel voor de bron en een gevulde stip voor wat hier gemaakt is.
- 03
Dat onderscheid zit in het werkwoord, niet in het zelfstandig naamwoord. “Made here” bleek te vaag; “built in Claude” tegenover “edited here” niet. Bouwen doe je met pagina's en indeling, bewerken met woorden en beelden. Bij het opschrijven bleek “edited here” bovendien al te bestaan als merkteken op losse velden: hetzelfde begrip had twee namen gekregen zonder dat iemand het gemerkt had.
- 04
Een grens die alleen weigert is een muur; dezelfde grens met een ingevulde prompt erbij is een deur. Het verschil zit niet in wat er verboden is maar in wat er ná het nee komt. Datzelfde geldt voor het slot op een duurder abonnement: publiceren mag op elk plan, naar een subdomein met een merkteken, want de upgrade gaat over “maak het van jou” en niet over het recht om te publiceren. En nooit een slotje bij iets dat in je eigen bron leeft.
- 05
Tot slot: herhaling is de leercurve, geen rondleiding. Een verplichte tour bij eerste gebruik wordt weggeklikt en de kennis verdwijnt ermee. Eén visuele taal voor “dit komt uit je bron”, overal hetzelfde: op het canvas, in de paginalijst, in het menu, in de geschiedenis. Eenmaal geleerd is overal leesbaar.
Letters en kleuren
- Koppen
- Space Grotesk
- Lopende tekst
- Geist
- #efebe4de achtergrond van de site: warm, geen wit
- #000000tekst
- #f2600chet accent: de knoppen, wat de klant bewerkt, de afsluiting
- #ffffffkaarten
- Oranje is wat jij bewerkt en turkoois is wat op elke pagina gedeeld is: die twee kleuren dragen het model, op de site en in de editor.
- Warm zand in plaats van wit, en één accent: de site laat de aandacht bij het schema en het product.
- Gemeten in de CSS van cmsthis.com, 7 september 2026; de editor achter de inlog is niet gemeten.
Waar het van gemaakt is
- Meten
- grep
- 1.369 hexwaarden
- 137 uniek
- 175 rgba
- 30 z-index
- Tokens
- Tokenlaag
- Negen passes
- Pixel-identiek als toets
- Ontwerpen
- Claude Design
- Widget-prototypes
- Drie richtingen
- Prompts
- Tweetrapsprompts
- Eén pass per run
- Model
- Syncmodel van twee lagen
- Eigendom per veld
Voor wie verder wil lezen
Wat ervan live staat
Na oplevering zijn we teruggegaan naar het echte product, want een ontwerptraject dat zichzelf niet nameet is een moodboard.
Na oplevering zijn we teruggegaan naar het echte product, want een ontwerptraject dat zichzelf niet nameet is een moodboard. Wat opvalt: bijna alle taal uit dit traject staat er letterlijk. De kernzin, de microcopy, de namen van de schermen. Het zwevende dock met drie bestemmingen staat er: de dode CSS die we activeerden is nu de echte navigatie. De modusschakelaar tussen bewerken en inhoud is verdwenen, vervangen door één rustige hint linksonder. De open-versus-gevulde taal voor bron en inhoud is doorgetrokken naar elk element op het canvas: een gestippelde rand voor wat uit de bron komt, een doorgetrokken rand voor wat je mag aanraken.
En het overschrijvingsscherm heet woordelijk “Fields you own”, met eronder: deze veranderen niet als je bijwerkt. Dat is de zin waar het eigendomsmodel uit voortkwam.
Twee dingen zijn eenvoudiger dan wat we ontwierpen, en dat hoort er ook bij te staan. Het geschiedenispaneel is in productie een platte back-uplijst met een herstelknop, niet de tijdlijn met de herkomstgoot en de botsingsregel. En de bron-as die wij tot twee eigenschappen hadden teruggebracht is er nog niet: er is voorlopig alleen de zip-route. De naam en de plek kwamen aan, de rijkere vorm nog niet. Precies wat je verwacht van een team dat een ontwerptraject gebruikt als richting en niet als blauwdruk.
Wat er wél bij kwam en wat wij niet hadden bedacht is de mooiste bevestiging. Rechtsklikken op een kop opent een paneel waarin je het bewerken van dat ene veld kunt uitzetten: “turn off editing to keep the content exactly as it is now”. Een omgekeerde, explicietere versie van hetzelfde principe: niet alleen onthoudt het systeem wat je hebt aangeraakt, je kunt een veld ook zelf vergrendelen. Controle per veld, niet per pagina, met een afslag die het team er zelf bij heeft bedacht.

Wat doet CMS[this] precies?
Het bouwt een contentsysteem om een site die je al hebt: een zip, een URL, of de map die Claude of Codex heeft uitgespuugd. Het ontwerp blijft onaangeraakt.
Wat was de rol van Ideelab?
Vier werkdagen design partner: drie visuele richtingen, het syncmodel en het eigendom per veld, en de microcopy die nu woordelijk in het product staat.
Wie wint als bron en redactie botsen?
Geen van beide. Onaangeraakte velden volgen de bron; een veld dat hier bewerkt is, is van het systeem tot iemand het expliciet terugzet.
Waarom mag de editor geen structuur wijzigen?
Zeven veelgestelde klantwensen kregen allemaal nee: nieuwe pagina's, herordenen, verbergen, menubeheer. Dat leeft in de bron, met een ingevulde prompt als deur.
Wat staat er live van het ontwerp?
De kernzin, de microcopy, de namen van de schermen, het dock, de open-versus-gevulde taal en het scherm Fields you own. De geschiedenis is eenvoudiger dan ontworpen.


