[{"data":1,"prerenderedAt":98},["ShallowReactive",2],{"blog-page":3,"blogs":15},{"id":4,"title":5,"body":6,"description":7,"extension":8,"links":6,"meta":9,"navigation":10,"path":11,"seo":12,"stem":13,"__hash__":14},"pages\u002Fblog.yml","Latest Articles",null,"Thoughts on development, Nuxt, open source, and the tools I use.","yml",{},true,"\u002Fblog",{"title":5,"description":7},"blog","iCqBifCBLTAK6bTaxi-0gmLOnRtWuRgtunTQKgDosgs",[16,30,40,51,61,70,80,89],{"path":17,"title":18,"description":19,"date":20,"image":21,"minRead":24,"author":25},"\u002Fblog\u002Ffft-visualizer","My Audio Runs on a Raspberry Pi — So I Built a Spectrum Visualizer That Doesn't Listen","FFT Visualizer 1.0 is out: a WebGL audio spectrum analyzer that draws spectra computed anywhere — born from a Pi control panel, grown into a TypeScript core with Vue and React wrappers","2026-07-27",{"src":22,"height":23},"\u002Fimages\u002Fblog\u002F989.fft-visualizer\u002Fradial-burst.png",400,6,{"name":26,"description":27,"avatar":28},"Wouter Vernaillen","Full Stack Developer",{"src":29,"alt":26},"\u002Fimages\u002Fwoutervernaillen.jpg",{"path":31,"title":32,"description":33,"date":34,"image":35,"minRead":37,"author":38},"\u002Fblog\u002Fwpnuxt-v2","WPNuxt 2.0: Type-Safe Headless WordPress for Nuxt 4","Announcing WPNuxt 2.0 — type-safe composables, multi-layer caching, Gutenberg block rendering, authentication, and an AI-powered MCP server for headless WordPress with Nuxt","2026-03-14",{"src":36,"height":23},"\u002Fimages\u002Fblog\u002F993.wpnuxt-v2\u002Fwpnuxt.png",9,{"name":26,"description":27,"avatar":39},{"src":29,"alt":26},{"path":41,"title":42,"description":43,"date":44,"image":45,"minRead":48,"author":49},"\u002Fblog\u002Fkaspa","Kaspa: digital silver","A proof-of-work cryptocurrency staying true to Satoshi's vision while using blockDAG technology for faster transactions","2025-12-08",{"src":46,"height":47},"\u002Fimages\u002Fblog\u002F994.kaspa\u002FGxn--EmXEAAjHhA.jpeg",480,4,{"name":26,"description":27,"avatar":50},{"src":29,"alt":26},{"path":52,"title":53,"description":54,"date":55,"image":56,"minRead":58,"author":59},"\u002Fblog\u002Fdiscoveringnuxt","Discovering Nuxt","After starting to learn Vue 3 a few years ago, I decided to continue the learning path to Nuxt 3","2023-04-02",{"src":57},"\u002Fimages\u002Fblog\u002F995.nuxt\u002Fnuxt-logo-green-light.png",2,{"name":26,"description":27,"avatar":60},{"src":29,"alt":26},{"path":62,"title":63,"description":64,"date":65,"image":66,"minRead":58,"author":68},"\u002Fblog\u002Fhello-world-vernaillen-dev","Hello World Vernaillen.dev","Introducing a complete rewrite of the website for my freelance business, now built with Vue 3, Vite, Tailwind and Markdown","2022-11-06",{"src":67},"\u002Fimages\u002Fblog\u002F996.hello-world\u002Fhello-world_dark.png",{"name":26,"description":27,"avatar":69},{"src":29,"alt":26},{"path":71,"title":72,"description":73,"date":74,"image":75,"minRead":77,"author":78},"\u002Fblog\u002Fbuilding-a-stronger-personal-brand","Building a stronger personal brand","The story behind the vernaillen.com website","2017-09-14",{"src":76},"\u002Fimages\u002Fblog\u002F997.personalbrand\u002Fbalivolcanosunset_thumb.png",3,{"name":26,"description":27,"avatar":79},{"src":29,"alt":26},{"path":81,"title":82,"description":83,"date":84,"image":85,"minRead":77,"author":87},"\u002Fblog\u002Fusing-liferay-7-to-build-a-community-website","Using Liferay 7 to build a community website","Plans for the devNomads website","2016-07-24",{"src":86},"\u002Fimages\u002Fblog\u002F998.devnomads\u002Fdevnomads_thumb.png",{"name":26,"description":27,"avatar":88},{"src":29,"alt":26},{"path":90,"title":91,"description":92,"date":93,"image":94,"minRead":58,"author":96},"\u002Fblog\u002Fmy-action-plan-after-liferay-devcon","My action plan after Liferay DevCon","Liferay DevCon","2015-11-16",{"src":95},"\u002Fimages\u002Fblog\u002F999.devcon\u002Fdevcon_thumb.png",{"name":26,"description":27,"avatar":97},{"src":29,"alt":26},1788334243144]