[{"data":1,"prerenderedAt":104},["ShallowReactive",2],{"blog-posts":3},[4,14,23,32,40,48,57,65,72,80,89,97],{"_path":5,"title":6,"description":7,"date":8,"tags":9,"readingTime":13},"\u002Fblog\u002Faccessible-forms-people-finish\u002F","Accessible Forms That People Actually Finish","Practical accessibility checks for labels, errors, and focus so your forms work for more users.","2026-07-07",[10,11,12],"accessibility","html","frontend",1,{"_path":15,"title":16,"description":17,"date":18,"tags":19,"readingTime":22},"\u002Fblog\u002Fvue-composition-api-patterns\u002F","Practical Vue Composition API Patterns","Reusable patterns for composables, shared state, and cleaner component logic in Vue 3.","2026-06-28",[20,21,12],"vue","javascript",2,{"_path":24,"title":25,"description":26,"date":27,"tags":28,"readingTime":13},"\u002Fblog\u002Fwhy-indie-games-keep-winning\u002F","Why Indie Games Keep Winning Attention","How small teams punch above their weight with focused design, personality, and smart scope.","2026-06-10",[29,30,31],"gaming","indie","industry",{"_path":33,"title":34,"description":35,"date":36,"tags":37,"readingTime":22},"\u002Fblog\u002Fcss-layout-without-the-hacks\u002F","CSS Layout Without the Hacks","Modern Flexbox and Grid techniques that replace brittle floats, magic numbers, and overflow tricks.","2026-05-12",[38,12,39],"css","design",{"_path":41,"title":42,"description":43,"date":44,"tags":45,"readingTime":13},"\u002Fblog\u002Fcloud-gaming-what-gets-in-the-way\u002F","Cloud Gaming: What Still Gets in the Way","Latency, input feel, and library lock-in—why streaming games is impressive and still uneven.","2026-04-21",[29,46,47],"cloud-gaming","tech",{"_path":49,"title":50,"description":51,"date":52,"tags":53,"readingTime":22},"\u002Fblog\u002Fshipping-static-sites-with-nuxt\u002F","Shipping Static Sites with Nuxt","How I generate and deploy a Nuxt site to GitHub Pages with predictable routes and content.","2026-04-03",[54,55,56],"nuxt","ssg","devops",{"_path":58,"title":59,"description":60,"date":61,"tags":62,"readingTime":13},"\u002Fblog\u002Fdebugging-faster-in-the-browser\u002F","Debugging Faster in the Browser","A short toolkit of DevTools habits—breakpoints, network filters, and DOM inspection—that cut debug time.","2026-03-22",[21,63,64],"devtools","debugging",{"_path":66,"title":67,"description":68,"date":69,"tags":70,"readingTime":22},"\u002Fblog\u002Fsmall-javascript-habits-that-scale\u002F","Small JavaScript Habits That Scale","Everyday habits—naming, early returns, and clearer async flow—that keep front-end codebases maintainable.","2026-02-18",[21,71,12],"best-practices",{"_path":73,"title":74,"description":75,"date":76,"tags":77,"readingTime":13},"\u002Fblog\u002Fhealthier-gaming-routine\u002F","Building a Healthier Gaming Routine","Simple habits for sessions that stay fun—breaks, goals, and knowing when to stop.","2026-02-02",[29,78,79],"habits","wellness",{"_path":81,"title":82,"description":83,"date":84,"tags":85,"readingTime":13},"\u002Fblog\u002Fgit-habits-for-small-teams\u002F","Git Habits for Solo and Small Teams","Branch naming, commit messages, and PR hygiene that keep history useful without slowing you down.","2026-01-09",[86,87,88],"git","workflow","productivity",{"_path":90,"title":91,"description":92,"date":93,"tags":94,"readingTime":13},"\u002Fblog\u002Fwhat-makes-a-game-stream-worth-watching\u002F","What Makes a Game Stream Worth Watching","Commentary, pacing, and community—why some streams click even when the gameplay is messy.","2025-12-14",[29,95,96],"streaming","content",{"_path":98,"title":99,"description":100,"date":101,"tags":102,"readingTime":13},"\u002Fblog\u002Fwhen-to-reach-for-typescript-vue\u002F","When to Reach for TypeScript on a Vue App","A pragmatic take on where TypeScript pays off in Vue—and where plain JS is still fine.","2025-11-30",[103,20,12],"typescript",1784110286199]