[{"data":1,"prerenderedAt":395},["ShallowReactive",2],{"post-\u002Fblog\u002Fproject-log-blog-build":3},{"id":4,"title":5,"body":6,"date":382,"description":383,"extension":384,"meta":385,"navigation":386,"path":387,"seo":388,"stem":389,"tags":390,"__hash__":394},"posts\u002Fblog\u002Fproject-log-blog-build.md","Project log: building this blog",{"type":7,"value":8,"toc":376},"minimark",[9,13,18,37,41,65,291,295,312,315,347,354,358,369,372],[10,11,12],"p",{},"Meta entry: this site itself was the first project I logged.",[14,15,17],"h2",{"id":16},"the-brief","The brief",[19,20,21,25,28,31,34],"ul",{},[22,23,24],"li",{},"A markdown-driven blog",[22,26,27],{},"Retro feel, but legible — not gimmicky",[22,29,30],{},"Greens and browns, outdoor \u002F nature mood",[22,32,33],{},"No mascot",[22,35,36],{},"Static-friendly, low-maintenance",[14,38,40],{"id":39},"the-stack","The stack",[19,42,43,50,56,62],{},[22,44,45,49],{},[46,47,48],"strong",{},"Nuxt 4"," — file-based routing, Vue 3, SSR \u002F SSG out of the box",[22,51,52,55],{},[46,53,54],{},"@nuxt\u002Fcontent v3"," — markdown collections with typed schemas",[22,57,58,61],{},[46,59,60],{},"pnpm"," — fast, disk-friendly package manager",[22,63,64],{},"Hand-written CSS — no framework, palette baked into custom properties",[66,67,72],"pre",{"className":68,"code":69,"language":70,"meta":71,"style":71},"language-ts shiki shiki-themes vitesse-dark","\u002F\u002F content.config.ts\nexport default defineContentConfig({\n  collections: {\n    posts: defineCollection({\n      type: 'page',\n      source: 'blog\u002F**\u002F*.md',\n      schema: z.object({\n        title: z.string(),\n        description: z.string(),\n        date: z.string(),\n        tags: z.array(z.string()).default([])\n      })\n    })\n  }\n})\n","ts","",[73,74,75,84,102,112,126,147,164,184,202,218,234,267,273,279,285],"code",{"__ignoreMap":71},[76,77,80],"span",{"class":78,"line":79},"line",1,[76,81,83],{"class":82},"sux-A","\u002F\u002F content.config.ts\n",[76,85,87,91,94,98],{"class":78,"line":86},2,[76,88,90],{"class":89},"s3QIE","export",[76,92,93],{"class":89}," default",[76,95,97],{"class":96},"sCK9x"," defineContentConfig",[76,99,101],{"class":100},"s_pn2","({\n",[76,103,105,109],{"class":78,"line":104},3,[76,106,108],{"class":107},"sm68I","  collections",[76,110,111],{"class":100},": {\n",[76,113,115,118,121,124],{"class":78,"line":114},4,[76,116,117],{"class":107},"    posts",[76,119,120],{"class":100},": ",[76,122,123],{"class":96},"defineCollection",[76,125,101],{"class":100},[76,127,129,132,134,138,142,144],{"class":78,"line":128},5,[76,130,131],{"class":107},"      type",[76,133,120],{"class":100},[76,135,137],{"class":136},"sNJcY","'",[76,139,141],{"class":140},"s7rlk","page",[76,143,137],{"class":136},[76,145,146],{"class":100},",\n",[76,148,150,153,155,157,160,162],{"class":78,"line":149},6,[76,151,152],{"class":107},"      source",[76,154,120],{"class":100},[76,156,137],{"class":136},[76,158,159],{"class":140},"blog\u002F**\u002F*.md",[76,161,137],{"class":136},[76,163,146],{"class":100},[76,165,167,170,172,176,179,182],{"class":78,"line":166},7,[76,168,169],{"class":107},"      schema",[76,171,120],{"class":100},[76,173,175],{"class":174},"st-jp","z",[76,177,178],{"class":100},".",[76,180,181],{"class":96},"object",[76,183,101],{"class":100},[76,185,187,190,192,194,196,199],{"class":78,"line":186},8,[76,188,189],{"class":107},"        title",[76,191,120],{"class":100},[76,193,175],{"class":174},[76,195,178],{"class":100},[76,197,198],{"class":96},"string",[76,200,201],{"class":100},"(),\n",[76,203,205,208,210,212,214,216],{"class":78,"line":204},9,[76,206,207],{"class":107},"        description",[76,209,120],{"class":100},[76,211,175],{"class":174},[76,213,178],{"class":100},[76,215,198],{"class":96},[76,217,201],{"class":100},[76,219,221,224,226,228,230,232],{"class":78,"line":220},10,[76,222,223],{"class":107},"        date",[76,225,120],{"class":100},[76,227,175],{"class":174},[76,229,178],{"class":100},[76,231,198],{"class":96},[76,233,201],{"class":100},[76,235,237,240,242,244,246,249,252,254,256,258,261,264],{"class":78,"line":236},11,[76,238,239],{"class":107},"        tags",[76,241,120],{"class":100},[76,243,175],{"class":174},[76,245,178],{"class":100},[76,247,248],{"class":96},"array",[76,250,251],{"class":100},"(",[76,253,175],{"class":174},[76,255,178],{"class":100},[76,257,198],{"class":96},[76,259,260],{"class":100},"()).",[76,262,263],{"class":96},"default",[76,265,266],{"class":100},"([])\n",[76,268,270],{"class":78,"line":269},12,[76,271,272],{"class":100},"      })\n",[76,274,276],{"class":78,"line":275},13,[76,277,278],{"class":100},"    })\n",[76,280,282],{"class":78,"line":281},14,[76,283,284],{"class":100},"  }\n",[76,286,288],{"class":78,"line":287},15,[76,289,290],{"class":100},"})\n",[14,292,294],{"id":293},"the-look","The look",[10,296,297,298,305,306,311],{},"I wanted the ",[299,300,304],"a",{"href":301,"rel":302},"https:\u002F\u002Fgarden.bradwoods.io\u002F",[303],"nofollow","Brad Woods"," chunky-shadow\nenergy paired with a ",[299,307,310],{"href":308,"rel":309},"https:\u002F\u002Fposthog.com\u002F",[303],"PostHog","-style retro card,\nbut pulled toward forest greens and warm browns instead of neon.",[10,313,314],{},"Palette ended up roughly:",[19,316,317,323,329,335,341],{},[22,318,319,322],{},[73,320,321],{},"#2a3d2c"," — deep forest (headings, header bg)",[22,324,325,328],{},[73,326,327],{},"#5a6f3a"," — moss (borders, accents, link underline)",[22,330,331,334],{},[73,332,333],{},"#3b2a1a"," — bark (body text)",[22,336,337,340],{},[73,338,339],{},"#efe4c2"," — paper (background)",[22,342,343,346],{},[73,344,345],{},"#a64a2a"," — rust (hover accent)",[10,348,349,350,353],{},"Pixel font for headings (",[73,351,352],{},"VT323","), monospace for body. Drop shadows\nand dashed borders carry the rest of the retro weight.",[14,355,357],{"id":356},"what-id-revisit","What I'd revisit",[19,359,360,363,366],{},[22,361,362],{},"Syntax highlighting theme to match the palette",[22,364,365],{},"An RSS feed",[22,367,368],{},"Tag pages — easy to bolt on once a few more entries pile up",[10,370,371],{},"Done is better than perfect. Camp's set up. Time to start logging\nreal entries.",[373,374,375],"style",{},"html pre.shiki code .sux-A, html code.shiki .sux-A{--shiki-default:#758575DD}html pre.shiki code .s3QIE, html code.shiki .s3QIE{--shiki-default:#4D9375}html pre.shiki code .sCK9x, html code.shiki .sCK9x{--shiki-default:#80A665}html pre.shiki code .s_pn2, html code.shiki .s_pn2{--shiki-default:#666666}html pre.shiki code .sm68I, html code.shiki .sm68I{--shiki-default:#B8A965}html pre.shiki code .sNJcY, html code.shiki .sNJcY{--shiki-default:#C98A7D77}html pre.shiki code .s7rlk, html code.shiki .s7rlk{--shiki-default:#C98A7D}html pre.shiki code .st-jp, html code.shiki .st-jp{--shiki-default:#BD976A}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":71,"searchDepth":86,"depth":86,"links":377},[378,379,380,381],{"id":16,"depth":86,"text":17},{"id":39,"depth":86,"text":40},{"id":293,"depth":86,"text":294},{"id":356,"depth":86,"text":357},"2026-04-28","How I scaffolded AI Trail with Nuxt 4 and the Content module — start to finish in an afternoon.","md",{},true,"\u002Fblog\u002Fproject-log-blog-build",{"title":5,"description":383},"blog\u002Fproject-log-blog-build",[391,392,393],"project-log","nuxt","design","cQ6kKMhGsxf3WI4c0TvPN_q1YLgcs2B5gd8gzjDCTPQ",1777388215005]