[{"data":1,"prerenderedAt":640},["ShallowReactive",2],{"route:\u002F2026\u002F11\u002F10\u002Faussie-outrage-launch-static-news-site-nuxt-cloudflare":3},{"kind":4,"doc":5,"prev":632,"next":636},"post",{"id":6,"title":7,"body":8,"categories":615,"date":619,"description":620,"extension":621,"image":33,"meta":622,"navigation":623,"path":624,"seo":625,"stem":626,"tags":627,"updated":619,"__hash__":631},"blog\u002F2026\u002F11\u002F10\u002Faussie-outrage-launch-static-news-site-nuxt-cloudflare.md","Aussie Outrage Launch: A Static News Site on Nuxt and Cloudflare",{"type":9,"value":10,"toc":591},"minimark",[11,27,34,39,42,45,79,83,86,94,180,187,191,194,259,263,272,277,288,359,368,375,379,386,393,407,411,414,421,425,428,442,445,449,456,460,522,526,530,533,537,540,544,547,551,554,558,566,570],[12,13,14,26],"p",{},[15,16,17,18,25],"strong",{},"Beewebby has launched ",[19,20,24],"a",{"href":21,"rel":22},"https:\u002F\u002Faussieoutrage.com\u002F",[23],"nofollow","Aussie Outrage",", an independent Australian news site covering government waste, the cost of living, the national debt and how policy lands on ordinary people."," It is a fully static site built with Nuxt 4 and Nuxt Content 3, hosted on Cloudflare Workers with no database and no server code. Behind it sits a publishing pipeline that scores every story for search and AI answers, checks facts before anything goes live, and turns stories into social carousels and short videos.",[12,28,29],{},[30,31],"img",{"alt":32,"src":33},"Aussie Outrage: the receipts on how your money is spent","\u002Fimages\u002F2026\u002F11\u002Faussie-outrage-launch.png",[35,36,38],"h2",{"id":37},"what-is-aussie-outrage","What is Aussie Outrage?",[12,40,41],{},"Aussie Outrage is a news and explainer site about Australian public money. Each story leads with one striking, sourced figure (a blown budget, a tender, a price rise) and links every factual claim to its source, ideally an audit report, Budget paper, Hansard or a regulator's own data. The site's tagline sums it up: \"The receipts on how your money is spent.\"",[12,43,44],{},"At launch the site carries:",[46,47,48,55,61,73],"ul",{},[49,50,51,54],"li",{},[15,52,53],{},"27 published stories"," across sections such as Government Waste, Cost of Living, Policy Watch, Follow the Money and Debt & Deficit",[49,56,57,60],{},[15,58,59],{},"13 \"Spending Trail\" profiles"," of federal and state politicians, each a dated, sourced list of spending and what official reviews found",[49,62,63,66,67,72],{},[15,64,65],{},"Live data pages",": a national debt clock, a cost-blowout leaderboard at ",[19,68,71],{"href":69,"rel":70},"https:\u002F\u002Faussieoutrage.com\u002Fblowouts",[23],"\u002Fblowouts"," and cost-of-living indicators on the homepage",[49,74,75,78],{},[15,76,77],{},"147 URLs in the sitemap",", all prerendered",[35,80,82],{"id":81},"why-build-a-news-site-as-a-static-site","Why build a news site as a static site?",[12,84,85],{},"A static site serves pre-built HTML files from a CDN instead of generating each page on request. For a news site that hopes a story will go viral, that is the right trade: there is no database to fall over, no server to scale and almost nothing to attack.",[12,87,88,89,93],{},"Stories are written as Markdown, built with ",[90,91,92],"code",{},"nuxt generate",", and deployed as plain files on Cloudflare Workers static assets. The design decisions that made that work:",[95,96,97,110],"table",{},[98,99,100],"thead",{},[101,102,103,107],"tr",{},[104,105,106],"th",{},"Decision",[104,108,109],{},"Why it matters",[111,112,113,122,130,145,164,172],"tbody",{},[101,114,115,119],{},[116,117,118],"td",{},"No CMS, no database (Cloudflare D1 was considered and dropped)",[116,120,121],{},"Cheap, fast, and survives a traffic spike",[101,123,124,127],{},[116,125,126],{},"Site search runs in the browser",[116,128,129],{},"Nuxt Content ships a WASM SQLite database, so search needs no server",[101,131,132,142],{},[116,133,134,135,138,139],{},"Pagination by path (",[90,136,137],{},"\u002Fstories\u002Fpage\u002F2",") not ",[90,140,141],{},"?page=2",[116,143,144],{},"Every page can be prerendered and indexed",[101,146,147,157],{},[116,148,149,150,153,154],{},"Pages written as ",[90,151,152],{},"about.html",", not ",[90,155,156],{},"about\u002Findex.html",[116,158,159,160,163],{},"Cloudflare serves ",[90,161,162],{},"\u002Fabout"," without a trailing-slash redirect",[101,165,166,169],{},[116,167,168],{},"Charts render to SVG at build time",[116,170,171],{},"Built with d3-scale and d3-shape; they show with JavaScript off, and each has a \"Show the data\" table",[101,173,174,177],{},[116,175,176],{},"The debt clock is a client-side estimate",[116,178,179],{},"A baseline figure plus a growth rate, checked against official data (below)",[12,181,182,183,186],{},"The whole site is styled in its own design system, \"The Docket\": receipts, carbon copies and stamps, condensed headlines, monospaced figures and one colour per section. It was checked with axe-core against WCAG 2.2 AA with no violations on the built site: one ",[90,184,185],{},"h1"," per page, a skip link, visible focus rings, reduced-motion support and a data table under every chart.",[35,188,190],{"id":189},"technical-seo-built-into-every-page","Technical SEO built into every page",[12,192,193],{},"Every SEO element is generated at build time, so a new story gets all of it automatically:",[46,195,196,204,212,238,244,253],{},[49,197,198,203],{},[15,199,200],{},[90,201,202],{},"sitemap.xml"," with every story, profile, section, tag and page, last-modified dates and each story's share image",[49,205,206,211],{},[15,207,208],{},[90,209,210],{},"news-sitemap.xml"," listing stories from the last two days, for Google News",[49,213,214,217,218,221,222,225,226,229,230,233,234,237],{},[15,215,216],{},"Structured data",": ",[90,219,220],{},"NewsArticle"," and breadcrumbs on stories, ",[90,223,224],{},"ProfilePage"," on Spending Trail profiles, ",[90,227,228],{},"WebSite"," and ",[90,231,232],{},"NewsMediaOrganization"," on the homepage, and ",[90,235,236],{},"FAQPage"," wherever a story answers common questions",[49,239,240,243],{},[15,241,242],{},"Generated share images",": a 1200×630 card per story (big number, section, headline) rendered at build time with Satori and resvg, used by Facebook, X, LinkedIn and Google Discover",[49,245,246,229,249,252],{},[15,247,248],{},"Canonical URLs, Open Graph and X cards",[90,250,251],{},"max-image-preview:large"," on every page; drafts, search results and the 404 page are never indexed",[49,254,255,258],{},[15,256,257],{},"Google Tag Manager"," loads on production builds only, once the page is idle, so tracking doesn't slow the first paint",[35,260,262],{"id":261},"the-marketing-automation-behind-it","The marketing automation behind it",[12,264,265,266,271],{},"The interesting part of this build is not the website but the publishing system around it. Most of it runs as scripts and ",[19,267,270],{"href":268,"rel":269},"https:\u002F\u002Fclaude.com\u002Fclaude-code",[23],"Claude Code"," skills in the project repository, with the site owner approving every step that matters.",[273,274,276],"h3",{"id":275},"_1-an-seo-score-built-for-ai-search","1. An SEO score built for AI search",[12,278,279,280,283,284,287],{},"Aussie Outrage has its own SEO score, like a WordPress SEO plugin but weighted for how pages get ranked ",[15,281,282],{},"and quoted in AI answers"," (Google AI Overviews, ChatGPT, Perplexity) rather than for keyword repetition. ",[90,285,286],{},"pnpm seo:score"," marks a story out of 100:",[95,289,290,303],{},[98,291,292],{},[101,293,294,297,300],{},[104,295,296],{},"Group",[104,298,299],{},"Points",[104,301,302],{},"What it checks",[111,304,305,316,326,337,348],{},[101,306,307,310,313],{},[116,308,309],{},"Answer and relevance",[116,311,312],{},"30",[116,314,315],{},"Keyword in title, description, a subheading and URL; the first ~60 words answer the search",[101,317,318,321,323],{},[116,319,320],{},"Evidence and trust",[116,322,312],{},[116,324,325],{},"Share of primary sources, figures attributed and dated, a word-for-word quote, freshness",[101,327,328,331,334],{},[116,329,330],{},"Coverage and originality",[116,332,333],{},"20",[116,335,336],{},"Subtopics competitors cover, an original calculation or chart, a real FAQ",[101,338,339,342,345],{},[116,340,341],{},"Structure",[116,343,344],{},"12",[116,346,347],{},"Internal links in and out, a visual, short paragraphs, subheadings",[101,349,350,353,356],{},[116,351,352],{},"Snippet",[116,354,355],{},"8",[116,357,358],{},"Title and description length",[12,360,361,362,367],{},"The weights draw on Google's guidance on generative AI search and the Princeton ",[19,363,366],{"href":364,"rel":365},"https:\u002F\u002Farxiv.org\u002Fabs\u002F2311.09735",[23],"GEO study",", which found that adding quotations, statistics and cited sources raised visibility in AI answers by roughly 28 to 41%, while keyword stuffing lowered it. Keyword density over 2.5% is flagged as a warning, not rewarded.",[12,369,370,371,374],{},"A ",[90,372,373],{},"\u002Fkeyword"," skill does the research: it expands a keyword with Google Australia autocomplete, checks which existing story already targets it (update before you write a new one), drafts or rewrites against the brief, adds an FAQ, and suggests internal links in both directions. A story isn't handed over for review until it scores 80 or more with zero blockers.",[273,376,378],{"id":377},"_2-fact-checks-and-publishing-guardrails","2. Fact checks and publishing guardrails",[12,380,381,382,385],{},"Outrage gets attention, but credibility keeps it. Facts come from primary sources that are fetched and quoted, never from memory, and each round of edits gets an independent fact check logged by date. Anything only the owner can supply (a real person's story, a right-of-reply response, a photo) is left as an ",[90,383,384],{},"[OWNER: …]"," placeholder.",[12,387,388,389,392],{},"The deploy script (",[90,390,391],{},"pnpm run deploy",") then refuses to publish if:",[46,394,395,398,404],{},[49,396,397],{},"a draft's title appears anywhere in the built files (Nuxt Content ships each collection's data to the browser, so drafts are left out of the build entirely, not just hidden)",[49,399,400,401,403],{},"any published story still contains an ",[90,402,384],{}," placeholder",[49,405,406],{},"the reader-tip buttons still point at Stripe sandbox links",[273,408,410],{"id":409},"_3-search-console-tracking-on-every-deploy","3. Search Console tracking on every deploy",[12,412,413],{},"Each deploy compares every page with its last live version and logs what changed (headline, description, FAQ, internal links, word count) in a tracker file. A weekly report then pulls Google Search Console data and judges each change at 14, 28 and 56 days on position for the same searches, impressions relative to the rest of the site, and click-through rate. Over time that shows which kinds of SEO work actually pay off, instead of guessing.",[12,415,416,417,420],{},"The early numbers are encouraging. In its first full week (31 October to 6 November 2026), Search Console recorded ",[15,418,419],{},"5,919 impressions and 123 clicks at an average position of 8.4",", up from 325 impressions in the partial week before.",[273,422,424],{"id":423},"_4-carousels-and-short-videos-from-each-story","4. Carousels and short videos from each story",[12,426,427],{},"A story can become social content without leaving the repository:",[46,429,430,436],{},[49,431,432,435],{},[15,433,434],{},"Slide carousels",": a skill drafts 1080×1350 slides from the story's own facts, renders them with Playwright, and after approval embeds them in the story and readies them for Instagram and Facebook",[49,437,438,441],{},[15,439,440],{},"Short videos",": a second skill writes a voiceover from the same facts, voices it with ElevenLabs, renders a branded 1080×1920 video with animated scenes and background music (normalised to -14 LUFS), makes 16:9 and 9:16 thumbnails, and drafts captions for Reels, Shorts and TikTok",[12,443,444],{},"Both follow one rule: every figure comes from the published story, copied exactly, so social posts can't drift from the sourced article.",[273,446,448],{"id":447},"_5-data-that-keeps-itself-honest","5. Data that keeps itself honest",[12,450,451,452,455],{},"The debt clock is only as good as its baseline. ",[90,453,454],{},"pnpm debt:check"," compares the site's figures with the latest AOFM and ABS data and flags anything due for a re-check after a Budget or MYEFO. It runs on every deploy and weekly on a timer that sends a desktop notification. Reader tips (\"shouts\") go through Stripe Payment Links, so the site takes payments while staying fully static.",[35,457,459],{"id":458},"results-at-a-glance","Results at a glance",[95,461,462,472],{},[98,463,464],{},[101,465,466,469],{},[104,467,468],{},"Metric",[104,470,471],{},"At launch (November 2026)",[111,473,474,482,490,498,506,514],{},[101,475,476,479],{},[116,477,478],{},"Published stories",[116,480,481],{},"27",[101,483,484,487],{},[116,485,486],{},"Politician profiles",[116,488,489],{},"13",[101,491,492,495],{},[116,493,494],{},"URLs in sitemap",[116,496,497],{},"147",[101,499,500,503],{},[116,501,502],{},"Hosting",[116,504,505],{},"Cloudflare Workers static assets, no server code",[101,507,508,511],{},[116,509,510],{},"Accessibility",[116,512,513],{},"WCAG 2.2 AA, no axe-core violations",[101,515,516,519],{},[116,517,518],{},"First full week in Google Search",[116,520,521],{},"5,919 impressions, 123 clicks, average position 8.4",[35,523,525],{"id":524},"frequently-asked-questions","Frequently asked questions",[273,527,529],{"id":528},"what-is-aussieoutragecom","What is aussieoutrage.com?",[12,531,532],{},"Aussie Outrage is an independent Australian news site about government waste, injustice, the national debt and the cost of living. Every story links its facts to sources such as audit reports, Budget papers and Hansard, and leads with one headline figure.",[273,534,536],{"id":535},"what-technology-is-aussie-outrage-built-with","What technology is Aussie Outrage built with?",[12,538,539],{},"It is built with Nuxt 4 and Nuxt Content 3 and deployed as a fully static site on Cloudflare Workers. There is no database or server code: search runs in the browser using Nuxt Content's WASM SQLite, and charts and share images are rendered at build time.",[273,541,543],{"id":542},"can-a-static-site-handle-a-news-sites-traffic","Can a static site handle a news site's traffic?",[12,545,546],{},"Yes. A static site serves pre-built files from a global CDN, so a story going viral means more file downloads, not more database queries. Cloudflare caches the files at the edge, which keeps pages fast and hosting costs low under a spike.",[273,548,550],{"id":549},"how-does-the-seo-score-differ-from-a-wordpress-seo-plugin","How does the SEO score differ from a WordPress SEO plugin?",[12,552,553],{},"Most plugins reward keyword placement and density. The Aussie Outrage score gives half its points to answering the search early and to evidence (primary sources, attributed and dated figures, quotes, freshness), because those are what get a page cited in AI answers. Keyword stuffing is flagged, not rewarded.",[273,555,557],{"id":556},"can-beewebby-build-a-publishing-pipeline-like-this-for-my-business","Can Beewebby build a publishing pipeline like this for my business?",[12,559,560,561,565],{},"Yes. The same approach (Markdown content, static hosting on Cloudflare, an SEO score tuned for AI search, deploy guardrails and Search Console tracking) suits blogs, news sites and content marketing for small businesses. We have already reused it for ",[19,562,564],{"href":563},"\u002F2026\u002F11\u002F10\u002Fsmashconnect-launch-badminton-pickleball-socials-directory\u002F","SmashConnect",".",[35,567,569],{"id":568},"work-with-beewebby","Work with Beewebby",[12,571,572,573,577,578,229,582,586,587,565],{},"Aussie Outrage follows our earlier Nuxt build for ",[19,574,576],{"href":575},"\u002F2023\u002F06\u002F14\u002Fnew-website-launched-project-powder\u002F","Project Powder",", and this site, beewebby.com.au, runs on the same Nuxt and Cloudflare stack. If you want a fast website with SEO and marketing automation built in from day one, see our ",[19,579,581],{"href":580},"\u002Fservices\u002Fweb-development\u002F","web development",[19,583,585],{"href":584},"\u002Fservices\u002Fseo-sem\u002F","SEO"," services, or ",[19,588,590],{"href":589},"\u002Fcontact-us\u002F","get in touch",{"title":592,"searchDepth":593,"depth":593,"links":594},"",2,[595,596,597,598,606,607,614],{"id":37,"depth":593,"text":38},{"id":81,"depth":593,"text":82},{"id":189,"depth":593,"text":190},{"id":261,"depth":593,"text":262,"children":599},[600,602,603,604,605],{"id":275,"depth":601,"text":276},3,{"id":377,"depth":601,"text":378},{"id":409,"depth":601,"text":410},{"id":423,"depth":601,"text":424},{"id":447,"depth":601,"text":448},{"id":458,"depth":593,"text":459},{"id":524,"depth":593,"text":525,"children":608},[609,610,611,612,613],{"id":528,"depth":601,"text":529},{"id":535,"depth":601,"text":536},{"id":542,"depth":601,"text":543},{"id":549,"depth":601,"text":550},{"id":556,"depth":601,"text":557},{"id":568,"depth":593,"text":569},[616,617,618],"News","Portfolio","Web Development","2026-11-10","How Beewebby built aussieoutrage.com: a fully static Nuxt 4 news site on Cloudflare Workers, with an AI-assisted SEO score, fact checks and social video automation.","md",{},true,"\u002F2026\u002F11\u002F10\u002Faussie-outrage-launch-static-news-site-nuxt-cloudflare",{"title":7,"description":620},"2026\u002F11\u002F10\u002Faussie-outrage-launch-static-news-site-nuxt-cloudflare",[628,629,585,630],"Nuxt","Cloudflare","Marketing Automation","FBUFx8mVvt6fawF7hebtzUGKWH28pXlr7-5Zj3MeCiY",{"title":633,"path":634,"stem":635,"children":-1},"Welcome to InMyKorea.com: Your Ultimate Guide to Discovering Korea","\u002F2024\u002F06\u002F10\u002Fwelcome-to-inmykorea-com-your-ultimate-guide-to-discovering-korea","2024\u002F06\u002F10\u002Fwelcome-to-inmykorea-com-your-ultimate-guide-to-discovering-korea",{"title":637,"path":638,"stem":639,"children":-1},"SmashConnect Launch: Find Badminton and Pickleball Socials in Australia","\u002F2026\u002F11\u002F10\u002Fsmashconnect-launch-badminton-pickleball-socials-directory","2026\u002F11\u002F10\u002Fsmashconnect-launch-badminton-pickleball-socials-directory",1794291555140]