[{"data":1,"prerenderedAt":194},["ShallowReactive",2],{"blog:page:\u002Fen\u002Fblog\u002Fdemo-content-note":3,"blog:articles:en":133,"blog:translations:\u002Fen\u002Fblog\u002Fdemo-content-note":191},{"id":4,"title":5,"author":6,"body":7,"cover":120,"coverAlt":120,"date":121,"description":122,"extension":123,"featured":124,"meta":125,"navigation":126,"path":127,"seo":128,"stem":129,"tags":130,"__hash__":132},"blog\u002Fen\u002Fblog\u002F6.demo-content-note\u002Findex.md","What this blog is (and is not)","John Martin",{"type":8,"value":9,"toc":113},"minimark",[10,14,23,28,41,48,52,63,67,70,100,103],[11,12,5],"h1",{"id":13},"what-this-blog-is-and-is-not",[15,16,17,18,22],"p",{},"Everything you are reading here is a ",[19,20,21],"strong",{},"demonstration",". The articles exercise\nthe machinery - listings, featured selection, related posts, previous and next,\nlocale switching, media resolution - with editorial copy written for that\npurpose.",[24,25,27],"h2",{"id":26},"what-is-real","What is real",[29,30,31,35,38],"ul",{},[32,33,34],"li",{},"The layout you are reading renders from the same code paths a production\narticle would.",[32,36,37],{},"The build pipeline is the production one: Markdown in, prerendered pages\nout, every link and image resolved at build time.",[32,39,40],{},"The 404 behavior, canonical URLs, and locale alternates are enforced, not\nsimulated.",[15,42,43],{},[44,45],"img",{"alt":46,"src":47},"Pipeline diagram: Markdown flows through a static build into plain HTML, CSS and SVG files","\u002Fassets\u002Fbuild-time-pipeline.svg",[24,49,51],{"id":50},"what-is-not","What is not",[29,53,54,57,60],{},[32,55,56],{},"The articles themselves are not product documentation; the docs surface owns\nthat.",[32,58,59],{},"Names, dates and bylines are demo data.",[32,61,62],{},"There is no CMS behind this - publishing is a commit.",[24,64,66],{"id":65},"how-to-review-it","How to review it",[15,68,69],{},"Click around with intent:",[71,72,73,82,85,93],"ol",{},[32,74,75,76,81],{},"Open ",[77,78,80],"a",{"href":79},"\u002Fen\u002Fblog\u002Furl-model","the featured post",", then use previous\u002Fnext to\nwalk the whole list.",[32,83,84],{},"Switch locale mid-article and confirm the slug survives the trip.",[32,86,87,88,92],{},"Visit ",[89,90,91],"code",{},"\u002Fen\u002Fblog\u002Fnot-a-real-article"," and check you get a real 404.",[32,94,95,96,99],{},"Inspect any page head for one canonical URL and ",[89,97,98],{},"hreflang"," alternates that\nonly point at pages that exist.",[101,102],"hr",{},[15,104,105],{},[106,107,108,109,112],"em",{},"Start anywhere - ",[77,110,111],{"href":79},"the URL model post"," is as good a place\nas any.",{"title":114,"searchDepth":115,"depth":115,"links":116},"",2,[117,118,119],{"id":26,"depth":115,"text":27},{"id":50,"depth":115,"text":51},{"id":65,"depth":115,"text":66},null,"2026-10-07","This is a demo vertical slice - real layout, real pipelines, deliberately editorial content.","md",false,{},true,"\u002Fen\u002Fblog\u002Fdemo-content-note",{"title":5,"description":122},"en\u002Fblog\u002F6.demo-content-note\u002Findex",[131],"meta","nynP2l4dDnsQ7bSxQ2F7fkd3PMaKsr1cfcV9Wel7Sc8",[134,136,148,160,172,181],{"path":127,"stem":129,"title":5,"description":122,"date":121,"author":6,"tags":135,"featured":124},[131],{"path":137,"stem":138,"title":139,"description":140,"date":141,"author":6,"tags":142,"featured":124,"cover":145},"\u002Fen\u002Fblog\u002Freading-first-design","en\u002Fblog\u002F5.reading-first-design\u002Findex","A reading page is not a documentation page","Why the blog article layout deliberately differs from the docs layout - hierarchy, width, and restraint.","2026-09-30",[143,144],"design","typography",{"src":146,"alt":147},"\u002Fassets\u002Fcover-reading-first.svg","Cover illustration: a narrow single-column article layout chosen over a cluttered multi-column layout",{"path":149,"stem":150,"title":151,"description":152,"date":153,"author":6,"tags":154,"featured":124,"cover":157},"\u002Fen\u002Fblog\u002Fstatic-deployment","en\u002Fblog\u002F4.static-deployment\u002Findex","Deploying a blog as static assets","No Worker script, no database binding - the whole deployment is a directory of files and a 404 page.","2026-09-23",[155,156],"deployment","cloudflare",{"src":158,"alt":159},"\u002Fassets\u002Fcover-static-deployment.svg","Cover illustration: a folder of HTML and SVG files flowing onto a globe of CDN edge nodes",{"path":161,"stem":162,"title":163,"description":164,"date":165,"author":6,"tags":166,"featured":124,"cover":169},"\u002Fen\u002Fblog\u002Flocale-switching","en\u002Fblog\u002F3.locale-switching\u002Findex","Locale switching that never lies","A language switcher should only offer what exists. Here is how the link list is derived from real content.","2026-09-16",[167,168],"i18n","ux",{"src":170,"alt":171},"\u002Fassets\u002Ftwo-locales-one-page.svg","Cover illustration: two locale paths joining into one shared page layout",{"path":173,"stem":174,"title":175,"description":176,"date":177,"author":6,"tags":178,"featured":124},"\u002Fen\u002Fblog\u002Fbuild-time-content","en\u002Fblog\u002F2.build-time-content\u002Findex","Content is resolved at build time","Why this blog ships as prerendered files instead of a content API - and what that buys.","2026-09-09",[179,180],"architecture","static-sites",{"path":79,"stem":182,"title":183,"description":184,"date":185,"author":6,"tags":186,"featured":126,"cover":188},"en\u002Fblog\u002F1.url-model\u002Findex","One URL model for every public page","How \u002Flocale\u002Fmount\u002Fpath keeps every public page predictable - and why we enforce it instead of hoping for it.","2026-09-02",[179,187],"urls",{"src":189,"alt":190},"\u002Fassets\u002Fcover-url-model.svg","Cover illustration: a single address bar splitting into locale, mount and path segments",[192,193],"en","vi",1791809694143]