[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"portfolio-options":3,"WCgrU6uagxylTIJpl3avY_ITt2Lui0RifIIoXL8wgPw":55,"_apollo:default":167},{"footerColofon":4,"siteLogo":5,"footerSocials":6,"heroRole":18,"heroName":19,"heroLede1":20,"heroLede2":21,"contactTitle":22,"contactHomeIntro":23,"contactIntro":24,"contactReplyNote":25,"registerTitle":26,"projectsTitle":27,"projectsIntro":28,"experiencesTitle":29,"experiencesIntro":30,"cvTitle":31,"cvIntro":32,"seoTitleSuffix":33,"seoDefaultDescription":34,"seoDefaultImage":5,"seoPages":35,"seoHomeTitle":5,"seoHomeDescription":5,"seoProjectsTitle":5,"seoProjectsDescription":5,"seoExperiencesTitle":5,"seoExperiencesDescription":5,"seoCvTitle":5,"seoCvDescription":5,"seoContactTitle":5,"seoContactDescription":5,"__typename":54},"\u003Cp>Geen idee wat je hier verwachtte.\u003C\u002Fp>\n\u003Cp>&nbsp;\u003C\u002Fp>\n",null,[7,13],{"icon":8,"url":10,"label":11,"__typename":12},[9],"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fpondake\u002F","LinkedIn","PortfolioOptionsFieldsFooterSocials",{"icon":14,"url":16,"label":17,"__typename":12},[15],"github","https:\u002F\u002Fgithub.com\u002FPondake","GitHub","Full-stack developer, Nederland, remote beschikbaar","Marthijn Beilschmidt","Acht jaar ervaring in webdevelopment: bij bureaus, in loondienst en als zelfstandige.","Hier laat ik zien wat ik daarbuiten bouw: van interne dashboards tot hobbyprojecten die niemand vroeg, maar die ik toch maakte.","Laten we connecten","Vragen over m'n werk, een rol, of gewoon nieuwsgierig naar hoe iets gebouwd is? Laat het weten.","Vragen over m'n werk, een rol, of gewoon nieuwsgierig hoe iets gebouwd is? Stuur een bericht.","Meestal reageer ik binnen een werkdag.","Register","Projecten","Mijn klantwerk, interne tools en hobbyprojecten, elk met de techniek die erin zit. Filterbaar op vaardigheid.","Werkervaring","Waar ik gewerkt heb en wat ik er deed, van m'n eerste stage tot nu, als tijdlijn, met de plekken die nog doorlopen.","Curriculum Vitae","Mijn achtergrond, vaardigheden en werk op één pagina. Ook te downloaden als PDF."," - Marthijn Beilschmidt","Full-stack developer uit Nederland met zes jaar ervaring. Hier laat ik zien wat ik bouw: klantwerk, interne tools en eigen projecten.",[36,41,43,45,47,50],{"route":37,"title":38,"description":34,"noindex":39,"image":5,"__typename":40},"\u002F","Marthijn Beilschmidt - Portfolio",false,"PortfolioOptionsFieldsSeoPages",{"route":42,"title":27,"description":28,"noindex":39,"image":5,"__typename":40},"\u002Fprojects",{"route":44,"title":29,"description":30,"noindex":39,"image":5,"__typename":40},"\u002Fexperiences",{"route":46,"title":31,"description":32,"noindex":39,"image":5,"__typename":40},"\u002Fcv",{"route":48,"title":49,"description":24,"noindex":39,"image":5,"__typename":40},"\u002Fcontact","Contact",{"route":51,"title":52,"description":53,"noindex":39,"image":5,"__typename":40},"\u002Fblog","Blog","Artikelen en inzichten over webdevelopment, technologie en projecten.","PortfolioOptionsFields",{"project":56},{"id":57,"databaseId":58,"title":59,"slug":60,"date":61,"content":62,"seo":63,"featuredImage":73,"projectFields":83,"__typename":166},"cG9zdDozMjg=",328,"TV Dashboard","tv-dashboard","2026-08-10T13:44:23","\u003Cp>Aan de muur van een gedeelde kantoorruimte hangt een scherm. Daarop staat wat er die dag toe doet: de tijd, wie er jarig is, welke pipelines er draaien, hoe de sprint ervoor staat, wat er in de agenda staat en welk nummer er speelt.\u003C\u002Fp>\n\u003Cp>Elke afnemer draait een eigen installatie op een eigen subdomein, met een eigen database en eigen instellingen. Het heeft eerst bij Specialist in Websites gedraaid en draait nu bij Cyso. Doorverkopen is het idee, maar zover is het nog niet.\u003C\u002Fp>\n\u003Ch2>Waarom\u003C\u002Fh2>\n\u003Cp>Om als bedrijfzijnde intern te pronken met belangrijke informatie, progressies van projecten of te weten wie er gefeliciteerd moet worden met een verjaardag. Met het tv-dashboard toon je alles tegelijkertijd instelbaar door één beheerder.\u003C\u002Fp>\n\u003Ch2>Hoe het werkt\u003C\u002Fh2>\n\u003Cp>Laravel met Inertia en Vue 3 en een beheerpaneel op Nuxt UI. Het scherm zelf en het beheer zijn twee losse oppervlakken met verschillende regels: het scherm mag mooi zijn, het beheerpaneel moet vooral duidelijk zijn.\u003C\u002Fp>\n\u003Cp>Wat erop komt is opgebouwd uit modules, inmiddels drieëntwintig. Een klok, verjaardagen, een agenda, een poll, vrije tekst, medewerker van de maand, pipelines en release-tags uit GitLab, sprint- en roadmapoverzichten en tijdregistratie uit YouTrack, uren- en omzetcijfers uit Simplicate, wat er op de Sonos speelt en een statusmonitor. En een module die de standen uit Old School RuneScape haalt, want een scherm dat de hele dag hangt mag ook iets tonen waar niemand om gevraagd heeft. Elke module haalt zijn eigen gegevens op en heeft zijn eigen instellingen.\u003C\u002Fp>\n\u003Cp>De code is zo opgezet dat het kan worden afgenomen door elke partij. Het doel is dan ook om de dashboard-app te verkopen aan bedrijven met een lege TV.\u003C\u002Fp>\n\u003Ch2>Kernpunten waar ik trots op ben\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Multi-tenant opzet: eigen installatie, database en instellingen per afnemer\u003C\u002Fstrong>, met een wizard die een nieuwe installatie door de eerste configuratie loodst.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Realtime updates via Reverb\u003C\u002Fstrong>, met kanalen per module. Sommige events via back-end polling, sommige via webhooks.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Compatibiliteit met oude tv-browsers.\u003C\u002Fstrong> Het scherm hangt aan een televisie en die browsers lopen soms jaren achter.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>23+ modules met hun eigen instellingen.\u003C\u002Fstrong> Elke module haalt zijn eigen gegevens op, heeft zijn eigen configuratie en zijn eigen lege staat.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Geen hardgecodeerde waarden.\u003C\u002Fstrong> Elk endpoint, elk project en elke credential is een instelling per installatie, en credentials worden versleuteld opgeslagen.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Wat er nog niet in zit\u003C\u002Fh2>\n\u003Cp>De publieke verkoopsite bestaat nog niet; het kale domein staat er wel voor gereserveerd. Verder staan er nog genoeg ideeën op de planning; dit project blijft voortdurend in ontwikkeling.\u003C\u002Fp>\n\u003Ch2>Wat het opleverde\u003C\u002Fh2>\n\u003Cp>Veel ervaring met realtime data: eerst met Pusher en later met Reverb en met het inrichten van kanalen en het doorsturen van wijzigingen daarover.\u003C\u002Fp>\n\u003Cp>Verder is dit het project waar ik het langst aan heb gewerkt wat in gebruik is. Bij een hobbyproject bouw je voor jezelf en weet je waar de scherpe randjes zitten. Hier moest ik ervan uitgaan dat iemand anders het instelt, zonder mij, op apparatuur die ik niet ken.\u003C\u002Fp>\n",{"title":64,"metaDesc":65,"canonical":65,"opengraphTitle":64,"opengraphDescription":66,"metaRobotsNoindex":67,"metaRobotsNofollow":68,"opengraphImage":69,"__typename":72},"TV Dashboard - WP - Admin","","Aan de muur van een gedeelde kantoorruimte hangt een scherm. Daarop staat wat er die dag toe doet: de tijd, wie er jarig is, welke pipelines er draaien, hoe de sprint ervoor staat, wat er in de agenda staat en welk nummer er speelt. Elke afnemer draait een eigen installatie op een eigen subdomein, met … Continued","noindex","follow",{"sourceUrl":70,"altText":65,"__typename":71},"https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F08\u002FGemini_Generated_Image_qw0awaqw0awaqw0a.png","MediaItem","PostTypeSEO",{"node":74,"__typename":82},{"altText":75,"mediaItemUrl":76,"mediaType":77,"mediaDetails":78,"__typename":71},"Het logo van het TV Dashboard op een vlak in de merkkleur.","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F08\u002Fbanner-tv-dashboard.webp","image",{"width":79,"height":80,"__typename":81},1600,900,"MediaDetails","NodeWithFeaturedImageToMediaItemConnectionEdge",{"description":84,"projectType":85,"client":5,"duration":87,"headerImage":88,"gallery":95,"skills":124,"liveWebsite":5,"__typename":165},"Een kioskdashboard voor aan de kantoormuur, dat elke klant op zijn eigen installatie draait.",[86],"prive","Doorlopend",{"node":89,"__typename":94},{"altText":90,"mediaItemUrl":91,"mediaType":77,"mediaDetails":92,"__typename":71},"Het kioskscherm van het TV Dashboard, zoals het aan de kantoormuur hangt.","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F08\u002Fkiosk-desktop.webp",{"width":79,"height":93,"__typename":81},1000,"AcfMediaItemConnectionEdge",{"nodes":96,"__typename":123},[97,104,110,116],{"id":98,"databaseId":99,"altText":100,"mediaItemUrl":101,"mediaType":77,"mediaDetails":102,"__typename":71},"cG9zdDo1MTA=",510,"De beheeromgeving van het TV Dashboard, met de systeemstatus en de laatste pipelines.","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F08\u002Fbeheer-desktop.webp",{"width":79,"height":103,"__typename":81},1611,{"id":105,"databaseId":106,"altText":107,"mediaItemUrl":108,"mediaType":77,"mediaDetails":109,"__typename":71},"cG9zdDo1MTI=",512,"Hetzelfde kioskscherm in donkere modus, die het scherm van de TV zelf overneemt.","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F08\u002Fkiosk-donker-desktop.webp",{"width":79,"height":93,"__typename":81},{"id":111,"databaseId":112,"altText":113,"mediaItemUrl":114,"mediaType":77,"mediaDetails":115,"__typename":71},"cG9zdDo1MTM=",513,"De lay-out-editor van het TV Dashboard, waar de blokken over het raster worden verdeeld.","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F08\u002Flay-out-desktop.webp",{"width":79,"height":93,"__typename":81},{"id":117,"databaseId":118,"altText":119,"mediaItemUrl":120,"mediaType":77,"mediaDetails":121,"__typename":71},"cG9zdDo1MTQ=",514,"Het modulescherm van het TV Dashboard, waar per installatie wordt bepaald welke blokken meedoen.","https:\u002F\u002Fadmin.marthijnbeilschmidt.nl\u002Fapp\u002Fuploads\u002F2026\u002F08\u002Fmodules-desktop.webp",{"width":79,"height":122,"__typename":81},1733,"AcfMediaItemConnection",{"nodes":125,"__typename":164},[126,135,140,146,152,158],{"id":127,"databaseId":128,"title":129,"skillFields":130,"__typename":134},"cG9zdDoyOTE=",291,"Laravel",{"icon":131,"description":132,"__typename":133},"simple-icons:laravel","Wanneer je applicatie* aanzienlijk complexer wordt en vanaf de basis moet worden opgebouwd.","SkillFields","Skill",{"id":136,"databaseId":137,"title":138,"skillFields":139,"__typename":134},"cG9zdDo0MDY=",406,"Inertia",{"icon":5,"description":5,"__typename":133},{"id":141,"databaseId":142,"title":143,"skillFields":144,"__typename":134},"cG9zdDozOTI=",392,"Vue 3",{"icon":145,"description":5,"__typename":133},"logos:vue",{"id":147,"databaseId":148,"title":149,"skillFields":150,"__typename":134},"cG9zdDozMDk=",309,"PHP",{"icon":151,"description":5,"__typename":133},"simple-icons:php",{"id":153,"databaseId":154,"title":155,"skillFields":156,"__typename":134},"cG9zdDozOTA=",390,"MySQL",{"icon":157,"description":5,"__typename":133},"logos:mysql-icon",{"id":159,"databaseId":160,"title":161,"skillFields":162,"__typename":134},"cG9zdDozOTE=",391,"Tailwind CSS",{"icon":163,"description":5,"__typename":133},"logos:tailwindcss-icon","AcfContentNodeConnection","ProjectFields","Project",{}]