[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"cms-options":3,"work-case-portfolio-cms":41},{"data":4,"source":40},{"absolitOptions":5},{"absolitOptionsFields":6},{"tagline":7,"shortDescription":8,"faqIntro":9,"email":10,"phone":11,"seoTitleSuffix":12,"seoDefaultDescription":13,"seoDefaultImage":14,"seoPages":15},"Digitaal vakwerk. Vlakbij.","Websites en maatwerk software voor ondernemers die kwaliteit verwachten. Persoonlijk contact, snel geschakeld.","Hier vind je antwoorden op alle vragen over mijn werkwijze, diensten en tarieven.","info@absolit.nl","0644694639"," - Absolit","Websites en maatwerk software voor ondernemers in Nederland. Persoonlijk contact, snel geschakeld.",null,[16,20,24,28,32,36],{"route":17,"title":18,"description":13,"noindex":19,"image":14},"\u002F","Absolit - Webontwikkeling voor ondernemers",false,{"route":21,"title":22,"description":23,"noindex":19,"image":14},"\u002Fwork","Mijn Werk","Bekijk mijn werk: recente webdevelopment projecten voor ondernemers in Nederland.",{"route":25,"title":26,"description":27,"noindex":19,"image":14},"\u002Ffaq","Veelgestelde Vragen","Antwoorden op veelgestelde vragen over webdevelopment en diensten.",{"route":29,"title":30,"description":31,"noindex":19,"image":14},"\u002Ftarieven","Tarieven","Vaste uurtarieven voor webdevelopment: website, webshop, maatwerk software en onderhoud.",{"route":33,"title":34,"description":35,"noindex":19,"image":14},"\u002Fprivacy","Privacyverklaring","Lees hoe Absolit omgaat met jouw persoonlijke gegevens en privacy.",{"route":37,"title":38,"description":39,"noindex":19,"image":14},"\u002Fvoorwaarden","Algemene Voorwaarden","De algemene voorwaarden voor samenwerking met Absolit. Lees hier alles over opdrachten, prijzen en aansprakelijkheid.","live",{"databaseId":42,"title":43,"slug":44,"date":45,"content":46,"seo":47,"projectFields":55,"featuredImage":139,"siteVisibility":146},487,"Portfolio + CMS","portfolio-cms","2026-09-12T12:04:30","\u003Cp>Dit is de site waar je nu op zit, plus de WordPress-installatie voor het inhoudelijke gedeelte. Twee repositories, één geheel: een Nuxt-frontend en een headless CMS op Bedrock. Diezelfde CMS voedt ook absolit.nl.\u003C\u002Fp>\n\u003Cp>De allereerste commit heette &#8220;Messing around with title screen and colors&#8221;. Dat dekt de lading van hoe het begon aardig.\u003C\u002Fp>\n\u003Ch2>Waarom\u003C\u002Fh2>\n\u003Cp>Een portfolio heeft een probleem dat andere sites niet hebben: het is zelf het bewijsstuk. Bij een klantproject kun je vertellen wat je gebouwd hebt. Hier staat degene die je beoordeelt in het ding waar je over praat. Slordige uitlijning is dan geen detail maar een tegenargument.\u003C\u002Fp>\n\u003Cp>Praktisch speelde er iets anders. Ik heb twee sites die deels dezelfde inhoud tonen: projecten, werkervaring, skills. Twee keer onderhouden gaat één keer goed en daarna niet meer. En ik wilde een CV dat uit dezelfde gegevens rolt als de site, want een los Word-bestand loopt binnen een maand achter op de werkelijkheid.\u003C\u002Fp>\n\u003Ch2>Hoe het werkt\u003C\u002Fh2>\n\u003Cp>WordPress op Bedrock als koploze inhoudsbron, WPGraphQL erbovenop en Nuxt 4 aan de voorkant. De WordPress-kant is voor niemand zichtbaar en wordt ook niet geïndexeerd.\u003C\u002Fp>\n\u003Cp>Het mooiste zit in het datamodel. De velden staan niet in de database maar in PHP, via ACF Composer. Een nieuw veld is dus een codewijziging die in git staat, te reviewen en terug te draaien, in plaats van iets wat iemand ooit in een beheerscherm heeft aangeklikt. Bij het overzetten naar een andere omgeving hoef je geen veldgroepen te exporteren.\u003C\u002Fp>\n\u003Cp>Op elk item zit een veld \u003Cem>Zichtbaarheid\u003C\u002Fem>: alleen portfolio, alleen Absolit of allebei. Eén keer schrijven, twee sites bedienen.\u003C\u002Fp>\n\u003Ch2>Kernpunten waar ik trots op ben\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>CV-generatie naar PDF met Dompdf, met de WordPress-installatie als bron.\u003C\u002Fstrong> Je vinkt aan welke projecten en werkervaringen op het CV moeten staan en de PDF rolt eruit. Wijzig je een project, dan klopt het CV de volgende keer dat iemand het downloadt.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Eigen hoogte-inschatting voor de paginabreuken.\u003C\u002Fstrong> Dompdf geeft geen controle over waar een pagina eindigt, dus wordt per blok berekend hoeveel regels het wordt bij die kolombreedte en daaruit volgt de indeling.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Het datamodel staat in code, niet in de database.\u003C\u002Fstrong> ACF-velden via ACF Composer, dus een nieuw veld is een codewijziging die in git staat en terug te draaien is.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Same-origin proxy voor de PDF-download\u003C\u002Fstrong> via een Nuxt server-route, omdat browsers een download van een onbeveiligde herkomst blokkeren en je anders je CMS-domein in een publieke link zet.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>WPGraphQL plus headless Nuxt als vaste basis.\u003C\u002Fstrong> Dit project, de CMS en Absolit draaien op dezelfde combinatie; de kracht zit in die opzet en in het strak houden van het ontwerp erbovenop.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Wat er nog niet in zit\u003C\u002Fh2>\n\u003Cp>Genoeg. Zoals bij de meeste van deze projecten geldt dat dit er een is die nooit echt af zal zijn. Er blijven teveel leuke uitdagingen bestaan.\u003C\u002Fp>\n\u003Ch2>Wat het opleverde\u003C\u002Fh2>\n\u003Cp>GraphQL werkt snel en goed, maar heeft duidelijke beperkingen. Je schrijft je queries in de frontend, wat betekent dat je datalaag verspreid raakt over twee codebases en dat een wijziging aan een veld twee kanten raakt. Dat is een afweging die je maakt, geen gratis winst.\u003C\u002Fp>\n\u003Cp>De PDF-generatie was een leuk miniproject op zichzelf. Het snel krijgen van een headless Nuxt-site was ook leuk om te doen, al ben je daar nooit mee klaar.\u003C\u002Fp>\n\u003Cp>Zie ook het artikel over Absolit, de tweede site die uit dezelfde CMS eet.\u003C\u002Fp>\n",{"title":48,"metaDesc":49,"canonical":49,"opengraphTitle":48,"opengraphDescription":50,"metaRobotsNoindex":51,"metaRobotsNofollow":52,"opengraphImage":53},"Portfolio + CMS - WP - Admin","","Dit is de site waar je nu op zit, plus de WordPress-installatie voor het inhoudelijke gedeelte. Twee repositories, één geheel: een Nuxt-frontend en een headless CMS op Bedrock. Diezelfde CMS voedt ook absolit.nl. De allereerste commit heette “Messing around with title screen and colors”. Dat dekt de lading van hoe het begon aardig. Waarom Een … Continued","noindex","follow",{"sourceUrl":54,"altText":43},"https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fbanner-3.webp",{"client":14,"startDate":56,"duration":57,"projectType":58,"description":60,"liveWebsite":61,"cvDescription":14,"headerImage":62,"skills":72,"gallery":92},"2023-08-09T00:00:00+00:00","Doorlopend",[59],"prive","De site waar je nu op zit en de headless WordPress eronder die ook absolit.nl voedt.","https:\u002F\u002Fmarthijnbeilschmidt.nl",{"node":63},{"mediaItemUrl":64,"altText":65,"caption":66,"thumbnailUrl":67,"previewUrl":68,"mediaDetails":69},"https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fschema-opzet-1.webp","Schema van de opzet: een headless WordPress met twee frontends erop.","\u003Cp>Schema van de opzet: een headless WordPress met twee frontends erop. Onderdeel van het project Portfolio + CMS.\u003C\u002Fp>\n","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fschema-opzet-1-768x410.webp","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fschema-opzet-1-1024x546.webp",{"width":70,"height":71},2400,1280,{"nodes":73},[74,77,80,83,86,89],{"databaseId":75,"title":76},293,"Nuxt",{"databaseId":78,"title":79},392,"Vue 3",{"databaseId":81,"title":82},389,"WordPress",{"databaseId":84,"title":85},287,"Bedrock",{"databaseId":87,"title":88},403,"GraphQL",{"databaseId":90,"title":91},309,"PHP",{"nodes":93},[94,104,113,122,131],{"id":95,"altText":96,"caption":97,"thumbnailUrl":98,"previewUrl":99,"mediaItemUrl":100,"mediaDetails":101},"cG9zdDo0ODg=","De Absolit-instellingen in het CMS, waar de teksten van absolit.nl staan.","\u003Cp>De Absolit-instellingen in het CMS, waar de teksten van absolit.nl staan. Onderdeel van het project Portfolio + CMS.\u003C\u002Fp>\n","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fabsolit-instellingen-desktop-768x1225.webp","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fabsolit-instellingen-desktop-642x1024.webp","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fabsolit-instellingen-desktop-scaled.webp",{"width":102,"height":103},1606,2560,{"id":105,"altText":106,"caption":107,"thumbnailUrl":108,"previewUrl":109,"mediaItemUrl":110,"mediaDetails":111},"cG9zdDo0ODk=","Het cv zoals het portfolio het genereert, op een breed scherm.","\u003Cp>Het cv zoals het portfolio het genereert, op een breed scherm. Onderdeel van het project Portfolio + CMS.\u003C\u002Fp>\n","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fcv-desktop-768x1811.webp","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fcv-desktop-434x1024.webp","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fcv-desktop-scaled.webp",{"width":112,"height":103},1086,{"id":114,"altText":115,"caption":116,"thumbnailUrl":117,"previewUrl":118,"mediaItemUrl":119,"mediaDetails":120},"cG9zdDo0OTA=","De CV-instellingen in het CMS, waar je kiest welke projecten op het cv komen.","\u003Cp>De CV-instellingen in het CMS, waar je kiest welke projecten op het cv komen. Onderdeel van het project Portfolio + CMS.\u003C\u002Fp>\n","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fcv-instellingen-desktop-768x505.webp","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fcv-instellingen-desktop-1024x673.webp","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fcv-instellingen-desktop-scaled.webp",{"width":103,"height":121},1682,{"id":123,"altText":124,"caption":125,"thumbnailUrl":126,"previewUrl":127,"mediaItemUrl":128,"mediaDetails":129},"cG9zdDo0OTE=","Het projectenoverzicht in de beheeromgeving van het portfolio-CMS.","\u003Cp>Het projectenoverzicht in de beheeromgeving van het portfolio-CMS. Onderdeel van het project Portfolio + CMS.\u003C\u002Fp>\n","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fprojecten-desktop-768x480.webp","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fprojecten-desktop-1024x640.webp","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fprojecten-desktop-scaled.webp",{"width":103,"height":130},1600,{"id":132,"altText":133,"caption":134,"thumbnailUrl":135,"previewUrl":136,"mediaItemUrl":137,"mediaDetails":138},"cG9zdDo0OTM=","De Seeder-pagina in het CMS, die uitgeschreven content in de database zet.","\u003Cp>De Seeder-pagina in het CMS, die uitgeschreven content in de database zet. Onderdeel van het project Portfolio + CMS.\u003C\u002Fp>\n","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fseeder-desktop-768x480.webp","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fseeder-desktop-1024x640.webp","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fseeder-desktop-scaled.webp",{"width":103,"height":130},{"node":140},{"sourceUrl":54,"altText":43,"caption":141,"thumbnailUrl":142,"previewUrl":143,"mediaItemUrl":54,"mediaDetails":144},"\u003Cp>Portfolio + CMS\u003C\u002Fp>\n","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fbanner-3-768x432.webp","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F09\u002Fbanner-3-1024x576.webp",{"width":130,"height":145},900,{"site":147,"searchVisible":149},[148],"both",true]