[{"data":1,"prerenderedAt":1173},["ShallowReactive",2],{"navigation":3,"projects-page":54,"projects":71},[4],{"title":5,"path":6,"stem":7,"children":8,"page":53},"Projects","\u002Fprojects","projects",[9,13,17,21,25,29,33,37,41,45,49],{"title":10,"path":11,"stem":12},"BSP website rebuild","\u002Fprojects\u002Fbsp-rebuild","projects\u002Fbsp-rebuild",{"title":14,"path":15,"stem":16},"DLTA — Super administration platform","\u002Fprojects\u002Fdlta","projects\u002Fdlta",{"title":18,"path":19,"stem":20},"Fluid Grotto","\u002Fprojects\u002Ffluid-grotto","projects\u002Ffluid-grotto",{"title":22,"path":23,"stem":24},"GOODGEAR","\u002Fprojects\u002Fgoodgear-dj","projects\u002Fgoodgear-dj",{"title":26,"path":27,"stem":28},"Goodger.dev — Website audit workflow","\u002Fprojects\u002Fgoodger-dev-audit","projects\u002Fgoodger-dev-audit",{"title":30,"path":31,"stem":32},"Laneway Studio","\u002Fprojects\u002Flaneway-studio","projects\u002Flaneway-studio",{"title":34,"path":35,"stem":36},"LuckPerms Web v3","\u002Fprojects\u002Fluckperms-web-v3","projects\u002Fluckperms-web-v3",{"title":38,"path":39,"stem":40},"Morpheus","\u002Fprojects\u002Fmorpheus","projects\u002Fmorpheus",{"title":42,"path":43,"stem":44},"School's Out — Shopify performance","\u002Fprojects\u002Fschools-out-shopify-performance","projects\u002Fschools-out-shopify-performance",{"title":46,"path":47,"stem":48},"Syscraft wiki","\u002Fprojects\u002Fsyscraft-wiki","projects\u002Fsyscraft-wiki",{"title":50,"path":51,"stem":52},"tailz.dev","\u002Fprojects\u002Ftailz-dev","projects\u002Ftailz-dev",false,{"id":55,"title":5,"body":56,"description":57,"extension":58,"links":59,"meta":65,"navigation":66,"path":6,"seo":67,"stem":7,"__hash__":70},"pages\u002Fprojects.yml",null,"Case studies from employer platforms, client work, open source, and personal products.","yml",[60,63],{"label":61,"color":62},"Get in touch","neutral",{"label":64},"Email me",{},true,{"title":68,"description":69},"Projects — Sam Goodger","Portfolio of recent work — GROW\u002FDLTA, Goodger.dev audits, client builds, LuckPerms, and more.","I-0St9qE67oq5FN946HUnE-x2sg8Avf6wQWY3T689_4",[72,174,326,399,475,580,661,793,937,1015,1089],{"id":73,"title":10,"body":74,"category":158,"date":159,"description":160,"draft":66,"extension":161,"featured":53,"image":148,"meta":162,"navigation":66,"path":11,"repo":163,"role":164,"seo":165,"status":166,"stem":12,"tags":167,"url":172,"__hash__":173},"projects\u002Fprojects\u002Fbsp-rebuild.md",{"type":75,"value":76,"toc":149},"minimark",[77,82,94,98,101,105,118,122,138,142],[78,79,81],"h2",{"id":80},"overview","Overview",[83,84,85,86,93],"p",{},"Rebuild of ",[87,88,92],"a",{"href":89,"rel":90},"https:\u002F\u002Fbigsoundpercussion.com",[91],"nofollow","Big Sound Percussion"," from Wix Premium + Wix Stores to a custom Nuxt site: artist roster (57+ pages imported from scrape), monochrome rebrand UI, Shopify Buy Button commerce, and Cloudflare Pages hosting with email routing.",[78,95,97],{"id":96},"my-role","My role",[83,99,100],{},"Full rebuild under Goodger.dev — scaffold, migration, DNS\u002Fdomain cutover, email Worker, staging feedback rounds.",[78,102,104],{"id":103},"stack","Stack",[106,107,108,112,115],"ul",{},[109,110,111],"li",{},"From: Wix Premium + Wix Stores",[109,113,114],{},"To: Nuxt 4, Nuxt Content, Nuxt UI, Tailwind, Cloudflare Pages",[109,116,117],{},"Shopify Buy Button; Turnstile + Cloudflare Email; domain on Cloudflare NS",[78,119,121],{"id":120},"outcomes","Outcomes",[106,123,124,127,130],{},[109,125,126],{},"57 artists imported; staging and home-flow previews live",[109,128,129],{},"Wix Premium cancelled; production currently on maintenance until hard launch (~Oct 2026)",[109,131,132,133,137],{},"Inbound ",[134,135,136],"code",{},"info@"," email routing live; hosting positioned at ~$0 vs Wix recurring",[78,139,141],{"id":140},"screenshots","Screenshots",[83,143,144],{},[145,146],"img",{"alt":147,"src":148},"BSP staging","\u002Fshots\u002Fbsp-rebuild.webp",{"title":150,"searchDepth":151,"depth":151,"links":152},"",2,[153,154,155,156,157],{"id":80,"depth":151,"text":81},{"id":96,"depth":151,"text":97},{"id":103,"depth":151,"text":104},{"id":120,"depth":151,"text":121},{"id":140,"depth":151,"text":141},"Client","2026","Custom Nuxt marketing site replacing a Wix storefront for Melbourne drumstick brand Big Sound Percussion — artists roster, Shopify Buy Button, Cloudflare hosting.","md",{},"https:\u002F\u002Fgithub.com\u002FTurbotailz\u002Fbsp","Freelance developer",{"title":10,"description":160},"Pre-launch",[168,169,170,171],"Nuxt","Shopify","Cloudflare","Migration","https:\u002F\u002Fstaging.bsp-73b.pages.dev\u002F","CLyReJYIDmwCnQNfgHvD1tHSY6UaSPPxBIRuSQJUpH0",{"id":175,"title":14,"body":176,"category":311,"date":159,"description":312,"draft":53,"extension":161,"featured":66,"image":313,"meta":314,"navigation":66,"path":15,"repo":56,"role":315,"seo":316,"status":317,"stem":16,"tags":318,"url":324,"__hash__":325},"projects\u002Fprojects\u002Fdlta.md",{"type":75,"value":177,"toc":304},[178,180,183,186,188,199,201,228,230,278,280,286,292,298],[78,179,81],{"id":80},[83,181,182],{},"DLTA is GROW Inc's administration platform for Australian superannuation funds — member data, case and process workflows, and compliance. I spent six years on this product, from hiring onto the Vue front end through team leadership and senior IC work on platform and developer experience.",[83,184,185],{},"Public details stay high-level: this is an internal SaaS product. Imagery below combines GROW's public marketing site with product UI concepts designed by Ed Yao.",[78,187,97],{"id":96},[106,189,190,193,196],{},[109,191,192],{},"Front-end Engineer → Senior SWE → Engineering Team Lead → Senior IC (2020–2026)",[109,194,195],{},"Owned large parts of the SPA architecture, authorisation UX, paved paths, and reliability work",[109,197,198],{},"Mentored peers and acted as go-to engineer for permissions and front-end architecture",[78,200,104],{"id":103},[106,202,203,210,216,222],{},[109,204,205,209],{},[206,207,208],"strong",{},"Front end:"," Vue.js SPA (Vue 2 → Vue 3), S3 + CloudFront delivery",[109,211,212,215],{},[206,213,214],{},"Services:"," Spring Boot APIs, process workers on SQS → ECS, MongoDB workflow services",[109,217,218,221],{},[206,219,220],{},"Auth:"," Custom service-manager permissions (node \u002F fund \u002F product)",[109,223,224,227],{},[206,225,226],{},"Ops:"," AWS, Terraform, CI\u002FCD, Elastic APM, Sentry, LaunchDarkly",[78,229,121],{"id":120},[106,231,232,247,254,265,272],{},[109,233,234,235,238,239,242,243,246],{},"Authorisation payloads cut by ~",[206,236,237],{},"90%",", with ~",[206,240,241],{},"50%"," better API latency and ~",[206,244,245],{},"$150k\u002Fyr"," AWS savings",[109,248,249,250,253],{},"JSON Schema validation framework adopted by ",[206,251,252],{},"100+"," developers",[109,255,256,257,260,261,264],{},"Automated PR previews — ~",[206,258,259],{},"80%"," less manual QA setup, ",[206,262,263],{},"10+ hrs\u002Fweek"," DevOps toil saved",[109,266,267,268,271],{},"Client-side list rendering from ~",[206,269,270],{},"3–5s"," to near-instant on slower hardware",[109,273,274,275,277],{},"Enterprise Vue 2 → Vue 3 migration; SQS deduplication via PostgreSQL locking; ",[206,276,241],{}," faster tests via automated migration testing",[78,279,141],{"id":140},[83,281,282],{},[145,283],{"alt":284,"src":285},"GROW marketing site","\u002Fshots\u002Fdlta-grow-inc.webp",[83,287,288],{},[145,289],{"alt":290,"src":291},"DLTA UI concepts — Case Management (designs by Ed Yao)","\u002Fshots\u002Fdlta-figma-1.webp",[83,293,294],{},[145,295],{"alt":296,"src":297},"DLTA UI concepts — Login \u002F forms (designs by Ed Yao)","\u002Fshots\u002Fdlta-figma-2.webp",[83,299,300],{},[301,302,303],"em",{},"Product UI concepts from Figma designs by Ed Yao. Fund names and member data are omitted. High-resolution frame exports can replace these workspace thumbnails later.",{"title":150,"searchDepth":151,"depth":151,"links":305},[306,307,308,309,310],{"id":80,"depth":151,"text":81},{"id":96,"depth":151,"text":97},{"id":103,"depth":151,"text":104},{"id":120,"depth":151,"text":121},{"id":140,"depth":151,"text":141},"Work","Front-end and platform engineering on GROW's SaaS admin platform for Australian superannuation funds — authorisation, DX, Vue 2→3, and reliability at ~1M-member scale.","\u002Fshots\u002Fdlta.webp",{},"Senior Software Engineer \u002F Engineering Team Lead",{"title":14,"description":312},"Employer product (not public)",[319,320,321,322,323],"Vue","Platform","AWS","Authorisation","DX","https:\u002F\u002Fgrow.inc","PTJyUFlBKbKl98lklRBgRMJqJVxtpaXRlKQRsmPSY_s",{"id":327,"title":18,"body":328,"category":388,"date":159,"description":389,"draft":53,"extension":161,"featured":53,"image":380,"meta":390,"navigation":66,"path":19,"repo":56,"role":391,"seo":392,"status":393,"stem":20,"tags":394,"url":56,"__hash__":398},"projects\u002Fprojects\u002Ffluid-grotto.md",{"type":75,"value":329,"toc":381},[330,332,335,337,340,342,356,358,373,375],[78,331,81],{"id":80},[83,333,334],{},"Fluid Grotto is a long-running side project (since 2019): a phrase generator for a private friend-group party game. The original SPA is being replaced by a Nuxt 4 PWA with accounts, credit packs for AI images, a library, and admin tools. A public URL will be linked here once the beta is pushed to production — the legacy site is intentionally not linked.",[78,336,97],{"id":96},[83,338,339],{},"Sole developer of both the legacy app and the Nuxt rewrite.",[78,341,104],{"id":103},[106,343,344,350,353],{},[109,345,346,347],{},"Nuxt 4, Nuxt UI, TypeScript, Vitest, ",[134,348,349],{},"@vite-pwa\u002Fnuxt",[109,351,352],{},"Cloudflare Pages + D1 + R2; Better Auth (Google + email\u002Fpassword)",[109,354,355],{},"Stripe credit packs; OpenRouter image generation; Resend for mail",[78,357,121],{"id":120},[106,359,360,363,366],{},[109,361,362],{},"Beta shipped Aug 2026: auth, credits, library, suggestions, admin",[109,364,365],{},"Mixer remains free; AI images gated by login + credits",[109,367,368,369,372],{},"Future: extract open-source ",[206,370,371],{},"Phraser","; archive legacy API",[78,374,141],{"id":140},[83,376,377],{},[145,378],{"alt":379,"src":380},"Fluid Grotto beta","\u002Fshots\u002Ffluid-grotto.webp",{"title":150,"searchDepth":151,"depth":151,"links":382},[383,384,385,386,387],{"id":80,"depth":151,"text":81},{"id":96,"depth":151,"text":97},{"id":103,"depth":151,"text":104},{"id":120,"depth":151,"text":121},{"id":140,"depth":151,"text":141},"Personal","Private friend-group party-game phrase generator — Nuxt 4 rewrite with auth, credits, and AI image packs. Public link arrives when beta replaces production.",{},"Sole developer",{"title":18,"description":389},"Beta — prod cutover pending",[168,395,396,397,170],"PWA","Better Auth","Stripe","9QnBech_KDolek8ctD6mHSNW5jEgSNCM10-_39_WNHA",{"id":400,"title":22,"body":401,"category":388,"date":159,"description":466,"draft":53,"extension":161,"featured":53,"image":458,"meta":467,"navigation":66,"path":23,"repo":468,"role":391,"seo":469,"status":470,"stem":24,"tags":471,"url":409,"__hash__":474},"projects\u002Fprojects\u002Fgoodgear-dj.md",{"type":75,"value":402,"toc":459},[403,405,413,415,418,420,439,441,452,454],[78,404,81],{"id":80},[83,406,407,412],{},[87,408,411],{"href":409,"rel":410},"https:\u002F\u002Fgoodgear.dj",[91],"goodgear.dj"," is the site for my DJ alias GOODGEAR — house, trance, and pop sets around Sydney (Your Shot, Home, Kinselas, ARQ, and private events). Content-driven mixes and gigs, SoundCloud embeds, press kit download, and a contact form wired to Cloudflare Email.",[78,414,97],{"id":96},[83,416,417],{},"Sole developer of the site and related email Worker. Brand practice since 2025.",[78,419,104],{"id":103},[106,421,422,429,436],{},[109,423,424,425,428],{},"Nuxt 4, Nuxt UI 4, Nuxt Content, ",[134,426,427],{},"@nuxtjs\u002Fseo",", Tailwind 4",[109,430,431,432,435],{},"Cloudflare Pages; ",[134,433,434],{},"goodgear-email"," Worker + Turnstile",[109,437,438],{},"SoundCloud OAuth API (plays\u002Flikes baked at build); Web Audio hero waveform clips; GA4",[78,440,121],{"id":120},[106,442,443,446,449],{},[109,444,445],{},"Production site with mixes, gigs, and press kit",[109,447,448],{},"Confirmed club dates including YOU @ ARQ (2026)",[109,450,451],{},"Aug 2026 upgrade to Nuxt 4 with SEO\u002FOG, Turnstile, and email Worker",[78,453,141],{"id":140},[83,455,456],{},[145,457],{"alt":411,"src":458},"\u002Fshots\u002Fgoodgear-dj.webp",{"title":150,"searchDepth":151,"depth":151,"links":460},[461,462,463,464,465],{"id":80,"depth":151,"text":81},{"id":96,"depth":151,"text":97},{"id":103,"depth":151,"text":104},{"id":120,"depth":151,"text":121},{"id":140,"depth":151,"text":141},"Promo site for my DJ project — mixes, press kit, bookings, SoundCloud stats at build, and a Web Audio waveform hero.",{},"https:\u002F\u002Fgithub.com\u002FTurbotailz\u002Fgoodgear.dj",{"title":22,"description":466},"Live",[168,472,170,473],"SoundCloud","Content","P-TOe3AkfjmlJJwExC0YWruzNfTcyeUTM3Z6c8FBpgQ",{"id":476,"title":26,"body":477,"category":388,"date":159,"description":569,"draft":53,"extension":161,"featured":66,"image":561,"meta":570,"navigation":66,"path":27,"repo":571,"role":572,"seo":573,"status":470,"stem":28,"tags":574,"url":578,"__hash__":579},"projects\u002Fprojects\u002Fgoodger-dev-audit.md",{"type":75,"value":478,"toc":562},[479,481,495,497,500,502,533,535,554,556],[78,480,81],{"id":80},[83,482,483,488,489,494],{},[87,484,487],{"href":485,"rel":486},"https:\u002F\u002Fgoodger.dev",[91],"Goodger.dev"," is my consultancy site. The primary lead magnet is ",[206,490,491],{},[134,492,493],{},"\u002Fcheck"," — visitors submit a URL and receive a structured online-presence audit. Behind the scenes, a homelab n8n workflow gathers field and lab metrics, crawls the site, and an LLM synthesises a report that I review in an admin app before sending.",[78,496,97],{"id":96},[83,498,499],{},"Sole builder of the Nuxt monorepo (marketing site + admin), Cloudflare infrastructure, and the audit automation stack.",[78,501,104],{"id":103},[106,503,504,517,527],{},[109,505,506,509,510,513,514],{},[206,507,508],{},"Apps:"," Nuxt 4 + Nuxt UI 4 — ",[134,511,512],{},"apps\u002Fwww"," and ",[134,515,516],{},"apps\u002Fadmin",[109,518,519,522,523,526],{},[206,520,521],{},"Hosting:"," Cloudflare Pages, D1 (",[134,524,525],{},"goodger-audits","), Access \u002F Zero Trust on admin, Turnstile, Email Sending",[109,528,529,532],{},[206,530,531],{},"Pipeline:"," n8n → Python gatherer (CrUX, PageSpeed\u002FLighthouse, HTTP\u002FSSL, shallow crawl, tech fingerprint, SerpAPI presence) → LLM synthesis → ingest → Telegram → admin approve → email",[78,534,121],{"id":120},[106,536,537,542,548,551],{},[109,538,539,541],{},[134,540,493],{}," live in production; ingest cut over to prod mid-July 2026",[109,543,544,547],{},[206,545,546],{},"23"," production audits recorded by mid-July 2026 (and growing)",[109,549,550],{},"CrUX + checklist + opportunity score + Places lead finder shipped as a pipeline upgrade",[109,552,553],{},"Free audit as primary CTA; paid full audits and fix tiers priced on the site",[78,555,141],{"id":140},[83,557,558],{},[145,559],{"alt":560,"src":561},"Goodger.dev \u002Fcheck audit","\u002Fshots\u002Fgoodger-dev-audit.webp",{"title":150,"searchDepth":151,"depth":151,"links":563},[564,565,566,567,568],{"id":80,"depth":151,"text":81},{"id":96,"depth":151,"text":97},{"id":103,"depth":151,"text":104},{"id":120,"depth":151,"text":121},{"id":140,"depth":151,"text":141},"Productised online presence audit at \u002Fcheck — CrUX, Lighthouse, crawl, and SERP signals synthesised into a reviewable report pipeline for Goodger.dev.",{},"https:\u002F\u002Fgithub.com\u002FTurbotailz\u002Fgoodger.dev","Founder \u002F sole developer",{"title":26,"description":569},[168,170,575,576,577],"n8n","Lighthouse","D1","https:\u002F\u002Fgoodger.dev\u002Fcheck","uA_EmLaC6qwPbUDV0hMmk-BEMB6B1N0CwzipBVnrK2Q",{"id":581,"title":30,"body":582,"category":158,"date":159,"description":652,"draft":53,"extension":161,"featured":53,"image":644,"meta":653,"navigation":66,"path":31,"repo":654,"role":655,"seo":656,"status":470,"stem":32,"tags":657,"url":590,"__hash__":660},"projects\u002Fprojects\u002Flaneway-studio.md",{"type":75,"value":583,"toc":645},[584,586,593,595,598,600,617,619,638,640],[78,585,81],{"id":80},[83,587,588,592],{},[87,589,30],{"href":590,"rel":591},"https:\u002F\u002Flanewaystudio.sydney",[91]," is the marketing and guest site for a Surry Hills studio apartment. I built it for my partner's short-term rental — public pages for discovery, a passworded digital guest guide, neighbourhood explore content, and a direct-booking enquiry path alongside Airbnb.",[78,594,97],{"id":96},[83,596,597],{},"Design, build, deploy, and ops: email workers, Places sync, SEO, and Airbnb reviews sync.",[78,599,104],{"id":103},[106,601,602,608,614],{},[109,603,604,605,428],{},"Nuxt 4, Nuxt UI, Nuxt Content, Nuxt Image\u002FFonts, ",[134,606,607],{},"@nuxtjs\u002Fsitemap",[109,609,610,611],{},"Cloudflare Pages + D1; inbound email Worker; Turnstile on ",[134,612,613],{},"\u002Fbook",[109,615,616],{},"Airbnb iCal availability; Google Places synced at build time; weekly GitHub Action for reviews",[78,618,121],{"id":120},[106,620,621,624,635],{},[109,622,623],{},"Live custom domain with guest guide and neighbourhood explore",[109,625,626,627,630,631,634],{},"~",[206,628,629],{},"31"," curated venues; ",[206,632,633],{},"10"," public URLs indexed shortly after launch",[109,636,637],{},"Direct booking with Airbnb CTA and enquiry form; reviews carousel pipeline",[78,639,141],{"id":140},[83,641,642],{},[145,643],{"alt":30,"src":644},"\u002Fshots\u002Flaneway-studio.webp",{"title":150,"searchDepth":151,"depth":151,"links":646},[647,648,649,650,651],{"id":80,"depth":151,"text":81},{"id":96,"depth":151,"text":97},{"id":103,"depth":151,"text":104},{"id":120,"depth":151,"text":121},{"id":140,"depth":151,"text":141},"Brochure site, passworded guest guide, and direct-booking path for a Surry Hills short-term rental — built for my partner's Airbnb studio.",{},"https:\u002F\u002Fgithub.com\u002FTurbotailz\u002Flanewaystudio.sydney","Design & build",{"title":30,"description":652},[168,170,577,658,659],"Airbnb","SEO","iOjr4qplG-RVwv7fsNSl8qI1CNQUMftvKgpVtYTu5r4",{"id":662,"title":34,"body":663,"category":780,"date":159,"description":781,"draft":53,"extension":161,"featured":66,"image":772,"meta":782,"navigation":66,"path":35,"repo":783,"role":784,"seo":785,"status":786,"stem":36,"tags":787,"url":791,"__hash__":792},"projects\u002Fprojects\u002Fluckperms-web-v3.md",{"type":75,"value":664,"toc":773},[665,667,691,693,696,698,727,729,766,768],[78,666,81],{"id":80},[83,668,669,674,675,678,679,682,683,686,687,690],{},[87,670,673],{"href":671,"rel":672},"https:\u002F\u002Fluckperms.net",[91],"LuckPerms"," is a widely used Minecraft permissions plugin. I've been the primary long-term contributor to ",[206,676,677],{},"LuckPermsWeb"," since 2018 (~",[206,680,681],{},"380"," commits — top author on the repo). ",[206,684,685],{},"v3"," is a Nuxt 4 rewrite of the site, wiki, and editor tools, built with Luck (",[134,688,689],{},"lucko","). The apply\u002Fedit protocol (bytebin \u002F bytesocks) stays compatible with the existing plugin.",[78,692,97],{"id":96},[83,694,695],{},"De facto maintainer of the web editor and website; leading the Nuxt 4 rebuild with Luck. Minor contributor on the Java plugin core.",[78,697,104],{"id":103},[106,699,700,707,714,721],{},[109,701,702,703,706],{},"Nuxt 4, Nuxt UI, Nuxt Content, Pinia, TypeScript, Tailwind 4, ",[134,704,705],{},"@nuxtjs\u002Fi18n"," + Crowdin",[109,708,709,710,713],{},"Editor: Comlink, immer, ",[134,711,712],{},"@tanstack\u002Fvue-virtual",", pako, minimessage-js",[109,715,716,717,720],{},"Backends: bytebin (",[134,718,719],{},"usercontent.luckperms.net","), bytesocks WebSockets, metadata API",[109,722,723,724],{},"Deploy: Netlify static generate for production; Cloudflare Pages preview at ",[134,725,726],{},"luckperms.tailz.dev",[78,728,121],{"id":120},[106,730,731,734,749,760],{},[109,732,733],{},"Longest commit history among named authors on LuckPermsWeb",[109,735,736,737,740,741,744,745,748],{},"Plugin ecosystem (public figures): ~",[206,738,739],{},"8.8M"," Spigot downloads, ~",[206,742,743],{},"2.7M"," Modrinth downloads, ~",[206,746,747],{},"2.3k"," GitHub stars on the plugin",[109,750,751,752,755,756,759],{},"Editor stress samples include sessions with ~",[206,753,754],{},"53k"," nodes \u002F ",[206,757,758],{},"1,100+"," users",[109,761,762,763,765],{},"v3 Nuxt rewrite on branch ",[134,764,685],{}," (Sep 2026); Vue 2 production remains until beta cutover",[78,767,141],{"id":140},[83,769,770],{},[145,771],{"alt":34,"src":772},"\u002Fshots\u002Fluckperms-web-v3.webp",{"title":150,"searchDepth":151,"depth":151,"links":774},[775,776,777,778,779],{"id":80,"depth":151,"text":81},{"id":96,"depth":151,"text":97},{"id":103,"depth":151,"text":104},{"id":120,"depth":151,"text":121},{"id":140,"depth":151,"text":141},"Open source","Official LuckPerms website and web permissions editor rewrite on Nuxt 4 — long-term maintainer of the web stack for a plugin with millions of downloads.",{},"https:\u002F\u002Fgithub.com\u002FTurbotailz\u002FLuckPermsWeb","Primary web maintainer",{"title":34,"description":781},"v3 in preview",[168,319,788,789,790],"Open Source","Minecraft","i18n","https:\u002F\u002Fluckperms.tailz.dev","Ecj7As767Bt3OiwWWPHFB7dxPXYYoM4K71OcsQXpFrg",{"id":794,"title":42,"body":795,"category":158,"date":159,"description":928,"draft":53,"extension":161,"featured":66,"image":920,"meta":929,"navigation":66,"path":43,"repo":56,"role":930,"seo":931,"status":470,"stem":44,"tags":932,"url":935,"__hash__":936},"projects\u002Fprojects\u002Fschools-out-shopify-performance.md",{"type":75,"value":796,"toc":921},[797,799,810,812,815,817,828,830,833,899,910,913,915],[78,798,81],{"id":80},[83,800,801,802,805,806,809],{},"School's Out Designer Kidswear needed a performance fix on their Shopify (Be Yours) theme. Mobile Lighthouse was unusable — Total Blocking Time in the ",[206,803,804],{},"minutes",". I root-caused a rogue ",[134,807,808],{},"announcement-bar.js"," script, restored sane Core Web Vitals lab scores, then continued with product import pipelines and taxonomy work under a retainer.",[78,811,97],{"id":96},[83,813,814],{},"Theme diagnosis and fix (Milestone 1), then ongoing merchandising ops: CSV imports, Cloudflare R2 image hosting, taxonomy cleanup. Engaged via Lucy Lu for store owner Kris.",[78,816,104],{"id":103},[106,818,819,822,825],{},[109,820,821],{},"Shopify + Be Yours theme (Liquid \u002F theme JS)",[109,823,824],{},"Python transform scripts + Shopify Admin CSV",[109,826,827],{},"Cloudflare R2 for drop imagery",[78,829,121],{"id":120},[83,831,832],{},"Mobile Lighthouse (lab, median on 9.1.0 preview after fix):",[834,835,836,852],"table",{},[837,838,839],"thead",{},[840,841,842,846,849],"tr",{},[843,844,845],"th",{},"Metric",[843,847,848],{},"Before",[843,850,851],{},"After",[853,854,855,871,886],"tbody",{},[840,856,857,861,866],{},[858,859,860],"td",{},"Performance",[858,862,863],{},[206,864,865],{},"33",[858,867,868],{},[206,869,870],{},"64",[840,872,873,876,881],{},[858,874,875],{},"TBT",[858,877,626,878],{},[206,879,880],{},"161,000 ms",[858,882,626,883],{},[206,884,885],{},"94 ms",[840,887,888,891,894],{},[858,889,890],{},"LCP",[858,892,893],{},"~10–11 s",[858,895,626,896],{},[206,897,898],{},"4.5 s",[83,900,901,902,905,906,909],{},"Post-incident live recovery (script removal): Perf ",[206,903,904],{},"38 → 62",", TBT ",[206,907,908],{},"163,600 → 350 ms",".",[83,911,912],{},"Ops follow-on: multi-drop CSV pipelines (50+ colourways per drop), hundreds of images to R2, taxonomy Phase 2 underway.",[78,914,141],{"id":140},[83,916,917],{},[145,918],{"alt":919,"src":920},"School's Out storefront","\u002Fshots\u002Fschools-out-shopify-performance.webp",{"title":150,"searchDepth":151,"depth":151,"links":922},[923,924,925,926,927],{"id":80,"depth":151,"text":81},{"id":96,"depth":151,"text":97},{"id":103,"depth":151,"text":104},{"id":120,"depth":151,"text":121},{"id":140,"depth":151,"text":141},"Diagnosed and fixed a catastrophic mobile TBT regression on a Shopify kidswear store, then ran catalogue imports, R2 imagery, and taxonomy cleanup.",{},"Shopify theme engineer",{"title":42,"description":928},[169,860,933,934],"Liquid","Cloudflare R2","https:\u002F\u002Fwww.schoolsoutdesignerkidswear.com.au","w8sAg0LfPM_ZXToD9W7B_0RLNiqJQfGKA-s9cqpHkCU",{"id":938,"title":46,"body":939,"category":780,"date":159,"description":1005,"draft":53,"extension":161,"featured":53,"image":997,"meta":1006,"navigation":66,"path":47,"repo":1007,"role":1008,"seo":1009,"status":1010,"stem":48,"tags":1011,"url":1013,"__hash__":1014},"projects\u002Fprojects\u002Fsyscraft-wiki.md",{"type":75,"value":940,"toc":998},[941,943,954,956,963,965,981,983,991,993],[78,942,81],{"id":80},[83,944,945,950,951,909],{},[87,946,949],{"href":947,"rel":948},"https:\u002F\u002Fsyscraft.dev",[91],"syscraft.dev"," is the wiki for the Syscraft Minecraft server-admin Discord community. I originally built the Astro site; in 2026 I rebuilt it on Nuxt 4 with Nuxt Content, LLMs.txt support, and OG images. Production still serves Astro until DNS cutover; the rebuild is previewed at ",[134,952,953],{},"syscraft.tailz.dev",[78,955,97],{"id":96},[83,957,958,959,962],{},"Original creator; sole developer of the Nuxt rebuild. Community DNS\u002Fadmin ownership sits with Larry (",[134,960,961],{},"Laarryy",").",[78,964,104],{"id":103},[106,966,967,978],{},[109,968,969,970,973,974,977],{},"Rebuild: Nuxt 4, Nuxt UI, Nuxt Content, ",[134,971,972],{},"nuxt-og-image",", ",[134,975,976],{},"nuxt-llms",", Tailwind 4, Cloudflare Pages",[109,979,980],{},"Production (current): Astro 2 + MDX + Algolia DocSearch",[78,982,121],{"id":120},[106,984,985,988],{},[109,986,987],{},"Nuxt preview shipped Sep 2026 with original guides plus FAQ\u002FGoogle Doc ports",[109,989,990],{},"Waiting on community DNS cutover for production",[78,992,141],{"id":140},[83,994,995],{},[145,996],{"alt":46,"src":997},"\u002Fshots\u002Fsyscraft-wiki.webp",{"title":150,"searchDepth":151,"depth":151,"links":999},[1000,1001,1002,1003,1004],{"id":80,"depth":151,"text":81},{"id":96,"depth":151,"text":97},{"id":103,"depth":151,"text":104},{"id":120,"depth":151,"text":121},{"id":140,"depth":151,"text":141},"Minecraft server-admin wiki for the Syscraft Discord — Nuxt 4 rebuild of the original Astro site, preview live pending production cutover.",{},"https:\u002F\u002Fgithub.com\u002FTurbotailz\u002Fsyscraft.dev","Creator \u002F rebuild lead",{"title":46,"description":1005},"Preview live",[168,473,170,1012],"Docs","https:\u002F\u002Fsyscraft.tailz.dev","X50QQ7HFjUsxsWYBcCh9XVXyLAZ_UT3q41qagvsqfNQ",{"id":1016,"title":50,"body":1017,"category":388,"date":159,"description":1081,"draft":53,"extension":161,"featured":53,"image":1073,"meta":1082,"navigation":66,"path":51,"repo":1083,"role":1084,"seo":1085,"status":470,"stem":52,"tags":1086,"url":1025,"__hash__":1088},"projects\u002Fprojects\u002Ftailz-dev.md",{"type":75,"value":1018,"toc":1074},[1019,1021,1035,1037,1040,1042,1057,1059,1067,1069],[78,1020,81],{"id":80},[83,1022,1023,1027,1028,1031,1032,909],{},[87,1024,50],{"href":1025,"rel":1026},"https:\u002F\u002Ftailz.dev",[91]," is the public credit brand for my open-source work (LuckPerms, Syscraft, Morpheus, and related tools). A dependency-light Nuxt app with a custom terminal UI — projects listing, ",[134,1029,1030],{},"\u002Fuses",", contrib graph, and contact at ",[134,1033,1034],{},"turbo@tailz.dev",[78,1036,97],{"id":96},[83,1038,1039],{},"Sole author. Distinct from Goodger.dev (consultancy) and gaming brand turbotailz.com.",[78,1041,104],{"id":103},[106,1043,1044,1047,1054],{},[109,1045,1046],{},"Nuxt 4 (minimal deps — no Nuxt UI), TypeScript, pnpm",[109,1048,1049,1050,1053],{},"Custom ",[134,1051,1052],{},"tailz-sh"," shell UI; Cloudflare Pages",[109,1055,1056],{},"Build-time GitHub API via token for telemetry",[78,1058,121],{"id":120},[106,1060,1061,1064],{},[109,1062,1063],{},"Live on Cloudflare Pages with apex domain",[109,1065,1066],{},"v2 terminal UX shipped Sep 2026; subdomains reserved for sibling projects",[78,1068,141],{"id":140},[83,1070,1071],{},[145,1072],{"alt":50,"src":1073},"\u002Fshots\u002Ftailz-dev.webp",{"title":150,"searchDepth":151,"depth":151,"links":1075},[1076,1077,1078,1079,1080],{"id":80,"depth":151,"text":81},{"id":96,"depth":151,"text":97},{"id":103,"depth":151,"text":104},{"id":120,"depth":151,"text":121},{"id":140,"depth":151,"text":141},"Synthwave terminal-style OSS home for Turbotailz — projects, \u002Fuses, GitHub telemetry, and contact.",{},"https:\u002F\u002Fgithub.com\u002FTurbotailz\u002Ftailz.dev","Sole author",{"title":50,"description":1081},[168,170,1087],"GitHub API","EI3mFfMPRsu2qDKzkaoM6TbNJBPQhPpCDQ-TWA_sEXs",{"id":1090,"title":38,"body":1091,"category":780,"date":1162,"description":1163,"draft":53,"extension":161,"featured":53,"image":1154,"meta":1164,"navigation":66,"path":39,"repo":1165,"role":1084,"seo":1166,"status":1167,"stem":40,"tags":1168,"url":1099,"__hash__":1172},"projects\u002Fprojects\u002Fmorpheus.md",{"type":75,"value":1092,"toc":1155},[1093,1095,1102,1104,1107,1109,1128,1130,1142,1147,1149],[78,1094,81],{"id":80},[83,1096,1097,1101],{},[87,1098,38],{"href":1099,"rel":1100},"https:\u002F\u002Fmorpheus.tailz.dev",[91]," (formerly DataMunger) is a browser-based data transformer. Paste structured data, write a sandboxed JavaScript transform, and convert between JSON, YAML, CSV, TOML, and XML. Optional Gemini code generation helps sketch transforms; execution runs in a Web Worker.",[78,1103,97],{"id":96},[83,1105,1106],{},"Sole author and maintainer (MIT).",[78,1108,104],{"id":103},[106,1110,1111,1114,1121],{},[109,1112,1113],{},"Nuxt 4, Nuxt UI 4, CodeMirror 6, Vitest",[109,1115,1116,1117,1120],{},"Parsers: js-yaml, PapaParse, ",[134,1118,1119],{},"@iarna\u002Ftoml",", fast-xml-parser",[109,1122,1123,1124,1127],{},"Google Gemini for optional codegen; ",[134,1125,1126],{},"ssr: false"," for the editor surface",[78,1129,121],{"id":120},[106,1131,1132,1139],{},[109,1133,1134,1135,1138],{},"Live at morpheus.tailz.dev; ",[206,1136,1137],{},"68"," Vitest tests",[109,1140,1141],{},"Created Oct 2025 from mid-2025 concept work",[83,1143,1144],{},[301,1145,1146],{},"Card image is a placeholder while I polish the UI for a proper screenshot.",[78,1148,141],{"id":140},[83,1150,1151],{},[145,1152],{"alt":1153,"src":1154},"Morpheus placeholder","\u002Fshots\u002Fmorpheus.svg",{"title":150,"searchDepth":151,"depth":151,"links":1156},[1157,1158,1159,1160,1161],{"id":80,"depth":151,"text":81},{"id":96,"depth":151,"text":97},{"id":103,"depth":151,"text":104},{"id":120,"depth":151,"text":121},{"id":140,"depth":151,"text":141},"2025","Browser tool to transform JSON, YAML, CSV, TOML, and XML with sandboxed JavaScript — optional Gemini-assisted code generation.",{},"https:\u002F\u002Fgithub.com\u002FTurbotailz\u002Fmorpheus",{"title":38,"description":1163},"Live — screenshot pending polish",[168,1169,1170,1171],"CodeMirror","Web Worker","Gemini","mcQGGayDy1At32urGw0ZDLxuLGtD7Bc5nSyFGrjHYhw",1789696473899]