[{"data":1,"prerenderedAt":492},["ShallowReactive",2],{"blog-_batch_2026-05-23_index":3},{"id":4,"title":5,"author":6,"body":7,"date":6,"description":484,"extension":485,"image":6,"meta":486,"navigation":487,"path":488,"seo":489,"stem":490,"__hash__":491},"blog/blog/_BATCH_2026-05-23_INDEX.md","Content Batch — InvoiceAgent.ai — 2026-05-23",null,{"type":8,"value":9,"toc":466},"minimark",[10,14,27,30,35,64,69,90,111,133,147,151,161,165,176,178,182,186,200,204,219,223,244,248,263,267,306,310,373,377,410,412,416,459,463],[11,12,5],"h1",{"id":13},"content-batch-invoiceagentai-2026-05-23",[15,16,17,18,22,23,26],"p",{},"30 pieces (15 blogs + 10 resources + 5 lead magnets) — the pre-confirmed slug plan from the handoff, all written verbatim to spec. All files prefixed ",[19,20,21],"code",{},"2026-05-23-",". Frontmatter mirrors existing posts (",[19,24,25],{},"title, description, date, author, image","). Voice: confident, direct, technical-but-accessible. Audience: founders/operators/lean finance. Real tools referenced (Vercel, Figma, Notion, Linear, Cursor, Ramp, Brex, etc.). Positioned per the tech-spend pivot + manifesto: Gmail-first SaaS spend discovery, \"the audit comes before the optimization,\" trust/restraint on inbox access.",[28,29],"hr",{},[31,32,34],"h2",{"id":33},"️-before-build-prerender-routes-do-not-edit-nuxtconfigjs-yourself-this-is-a-flag-for-you-to-action-manually","⚠️ Before build: prerender routes (DO NOT edit nuxt.config.js yourself — this is a flag for you to action manually)",[36,37,38],"blockquote",{},[15,39,40,41,44,45,56,57,60,61,63],{},"Per ",[19,42,43],{},"easy-invoice-website/CLAUDE.md",": ",[46,47,48,49,52,53],"strong",{},"new blog posts must be added to ",[19,50,51],{},"nitro.prerender.routes"," in ",[19,54,55],{},"nuxt.config.js"," or Nuxt's crawler won't generate them and they'll 404 on the static host. I did ",[46,58,59],{},"not"," touch ",[19,62,55],{}," (per the hard constraint). You need to add these 30 routes manually.",[65,66,68],"h3",{"id":67},"url-prefix-decision-you-must-make-first","🔧 URL-prefix decision you must make first",[15,70,71,72,75,76,79,80,83,84,89],{},"The existing posts live at ",[19,73,74],{},"/blog/\u003Cslug>"," (no date prefix). The handoff mandated ",[19,77,78],{},"2026-05-23-\u003Cslug>.md"," ",[46,81,82],{},"filenames",". By default, Nuxt Content will generate these at ",[46,85,86],{},[19,87,88],{},"/blog/2026-05-23-\u003Cslug>"," (filename = route). That creates two problems:",[91,92,93,97],"ol",{},[94,95,96],"li",{},"Public URLs would carry an ugly date prefix, inconsistent with every existing post.",[94,98,99,106,107,110],{},[46,100,101,102,105],{},"All internal ",[19,103,104],{},"relatedLinks"," and in-body cross-links in this batch use the date-stripped form"," (",[19,108,109],{},"/blog/saas-spend-discovery-guide/","), matching the existing-post pattern — so they'd 404 against date-prefixed routes.",[15,112,113,116,117,120,121,124,125,128,129,132],{},[46,114,115],{},"Recommended (Option A):"," strip the date from the public URL so it matches existing posts and the internal links resolve. Either add a ",[19,118,119],{},"slug:"," field to each post's frontmatter, or add a Nuxt Content route rule that maps ",[19,122,123],{},"2026-05-23-\u003Cslug>"," → ",[19,126,127],{},"\u003Cslug>",". Then use the ",[46,130,131],{},"Option A route list"," below.",[15,134,135,138,139,142,143,146],{},[46,136,137],{},"Option B:"," keep the prefix in the URL. Then use the ",[46,140,141],{},"Option B route list"," below ",[46,144,145],{},"and"," update every internal cross-link in the 30 files to include the prefix.",[65,148,150],{"id":149},"option-a-routes-recommended-date-stripped","Option A routes (recommended — date stripped):",[152,153,158],"pre",{"className":154,"code":156,"language":157},[155],"language-text","/blog/saas-spend-discovery-guide\n/blog/shadow-it-audit-playbook-blog\n/blog/saas-renewal-tracking-system\n/blog/zombie-saas-spend-calculation\n/blog/founder-saas-audit-90-minutes\n/blog/ai-tool-sprawl-startups\n/blog/typical-startup-saas-cost-2026\n/blog/cancel-saas-without-losing-data\n/blog/saas-spend-vs-ramp-brex\n/blog/former-employee-subscriptions\n/blog/annual-vs-monthly-saas-decision\n/blog/per-seat-license-audit\n/blog/saas-cost-benchmarks-2026\n/blog/vendor-consolidation-startups\n/blog/billing-inbox-setup\n/blog/saas-spend-audit-checklist\n/blog/vendor-categorization-rubric\n/blog/renewal-calendar-template\n/blog/is-this-tool-worth-it-scoring\n/blog/shadow-it-audit-playbook\n/blog/saas-cancellation-script-library\n/blog/trial-decision-framework\n/blog/owner-assignment-worksheet\n/blog/duplicate-tool-detection-guide\n/blog/gmail-search-operators-saas\n/blog/saas-audit-playbook-full\n/blog/annual-renewal-review-template\n/blog/founder-quarterly-saas-review\n/blog/vendor-consolidation-framework\n/blog/zombie-spend-recovery-workbook\n","text",[19,159,156],{"__ignoreMap":160},"",[65,162,164],{"id":163},"option-b-routes-date-kept-also-requires-updating-internal-links","Option B routes (date kept — also requires updating internal links):",[15,166,167,168,171,172,175],{},"Same 30 paths, each prefixed ",[19,169,170],{},"/blog/2026-05-23-…"," instead of ",[19,173,174],{},"/blog/…",".",[28,177],{},[31,179,181],{"id":180},"blogs-15","Blogs (15)",[65,183,185],{"id":184},"pillar-1-discovery-audit-methods","Pillar 1 — Discovery & Audit Methods",[91,187,188,194],{},[94,189,190,193],{},[19,191,192],{},"2026-05-23-saas-spend-discovery-guide.md"," — What SaaS spend discovery is; one-afternoon method.",[94,195,196,199],{},[19,197,198],{},"2026-05-23-founder-saas-audit-90-minutes.md"," — Time-boxed 6-step founder audit.",[65,201,203],{"id":202},"pillar-2-forgotten-subscriptions-zombie-spend","Pillar 2 — Forgotten Subscriptions & Zombie Spend",[91,205,207,213],{"start":206},4,[94,208,209,212],{},[19,210,211],{},"2026-05-23-zombie-saas-spend-calculation.md"," — Calculate your zombie spend; 5 leak types.",[94,214,215,218],{},[19,216,217],{},"2026-05-23-former-employee-subscriptions.md"," — Find and reclaim departed-employee tools.",[65,220,222],{"id":221},"pillar-3-renewals-trials-billing-traps","Pillar 3 — Renewals, Trials & Billing Traps",[91,224,226,232,238],{"start":225},3,[94,227,228,231],{},[19,229,230],{},"2026-05-23-saas-renewal-tracking-system.md"," — Build a renewal tracker in Gmail.",[94,233,234,237],{},[19,235,236],{},"2026-05-23-cancel-saas-without-losing-data.md"," — Safe cancellation checklist.",[94,239,240,243],{},[19,241,242],{},"2026-05-23-annual-vs-monthly-saas-decision.md"," — When each billing model wins.",[65,245,247],{"id":246},"pillar-4-shadow-it-ownership-governance","Pillar 4 — Shadow IT, Ownership & Governance",[91,249,251,257],{"start":250},2,[94,252,253,256],{},[19,254,255],{},"2026-05-23-shadow-it-audit-playbook-blog.md"," — Find tools nobody approved.",[94,258,259,262],{},[19,260,261],{},"2026-05-23-ai-tool-sprawl-startups.md"," — Auditing 12+ AI subscriptions.",[65,264,266],{"id":265},"pillar-5-vendor-strategy-consolidation-cost","Pillar 5 — Vendor Strategy, Consolidation & Cost",[91,268,270,276,282,288,294,300],{"start":269},7,[94,271,272,275],{},[19,273,274],{},"2026-05-23-typical-startup-saas-cost-2026.md"," — What a 10-person startup pays.",[94,277,278,281],{},[19,279,280],{},"2026-05-23-saas-spend-vs-ramp-brex.md"," — Why spend cards miss SaaS bills.",[94,283,284,287],{},[19,285,286],{},"2026-05-23-per-seat-license-audit.md"," — Spotting wasted seats.",[94,289,290,293],{},[19,291,292],{},"2026-05-23-saas-cost-benchmarks-2026.md"," — Benchmarks that actually matter (waste ratio).",[94,295,296,299],{},[19,297,298],{},"2026-05-23-vendor-consolidation-startups.md"," — Which categories to consolidate first.",[94,301,302,305],{},[19,303,304],{},"2026-05-23-billing-inbox-setup.md"," — Set up a billing-only inbox.",[31,307,309],{"id":308},"resources-10","Resources (10)",[91,311,313,319,325,331,337,343,349,355,361,367],{"start":312},16,[94,314,315,318],{},[19,316,317],{},"2026-05-23-saas-spend-audit-checklist.md"," — 40-item checklist across 6 phases.",[94,320,321,324],{},[19,322,323],{},"2026-05-23-vendor-categorization-rubric.md"," — 10 categories, example vendors, billing signals.",[94,326,327,330],{},[19,328,329],{},"2026-05-23-renewal-calendar-template.md"," — Copy-fill calendar + 30-day trigger + monthly routine.",[94,332,333,336],{},[19,334,335],{},"2026-05-23-is-this-tool-worth-it-scoring.md"," — Weighted 5-factor keep/cut scoring model (worked example).",[94,338,339,342],{},[19,340,341],{},"2026-05-23-shadow-it-audit-playbook.md"," — 7-stage step-by-step detection workflow.",[94,344,345,348],{},[19,346,347],{},"2026-05-23-saas-cancellation-script-library.md"," — 7 copy-paste cancellation email templates.",[94,350,351,354],{},[19,352,353],{},"2026-05-23-trial-decision-framework.md"," — Trial log + decision date + keep/kill test.",[94,356,357,360],{},[19,358,359],{},"2026-05-23-owner-assignment-worksheet.md"," — Owner definition, worksheet, orphan report.",[94,362,363,366],{},[19,364,365],{},"2026-05-23-duplicate-tool-detection-guide.md"," — Group-by-job method + common duplicate patterns.",[94,368,369,372],{},[19,370,371],{},"2026-05-23-gmail-search-operators-saas.md"," — Copy-paste Gmail query reference for an audit.",[31,374,376],{"id":375},"lead-magnets-5","Lead magnets (5)",[91,378,380,386,392,398,404],{"start":379},26,[94,381,382,385],{},[19,383,384],{},"2026-05-23-saas-audit-playbook-full.md"," — Complete end-to-end audit playbook (4 parts).",[94,387,388,391],{},[19,389,390],{},"2026-05-23-annual-renewal-review-template.md"," — Full pre-renewal review template (6 sections).",[94,393,394,397],{},[19,395,396],{},"2026-05-23-founder-quarterly-saas-review.md"," — 60-minute recurring quarterly routine + scorecard.",[94,399,400,403],{},[19,401,402],{},"2026-05-23-vendor-consolidation-framework.md"," — Repeatable 5-stage consolidation system.",[94,405,406,409],{},[19,407,408],{},"2026-05-23-zombie-spend-recovery-workbook.md"," — 5-part find/kill/recover/prevent workbook.",[28,411],{},[31,413,415],{"id":414},"other-notes-for-your-editorial-pass","Other notes for your editorial pass",[417,418,419,433,439,445,451],"ul",{},[94,420,421,424,425,428,429,432],{},[46,422,423],{},"Image paths"," reference ",[19,426,427],{},"/img/blog/2026-05-23-\u003Cslug>.png"," (matching existing ",[19,430,431],{},".png"," pattern). Those images don't exist yet — generate or repoint before publish or they'll 404.",[94,434,435,438],{},[46,436,437],{},"Internal linking"," is dense within the batch (the pieces form a tight hub-and-spoke cluster, good for SEO topical authority). Every internal link assumes the date-stripped URL (Option A above). Reconcile with your prerender decision.",[94,440,441,444],{},[46,442,443],{},"No fabricated stats:"," research-corpus figures used are only those in the manifesto (audit/discovery/sprawl/shadow-IT/cancel/forgotten category counts; \"cancel\" as most-repeated verb). Everything else is framed qualitatively to avoid inventing benchmarks.",[94,446,447,450],{},[46,448,449],{},"Product framing"," stays honest to the manifesto: email-first, \"we only scan billing signals, not your life,\" \"audit before optimization,\" not a Ramp/Brex/Zylo replacement. The CTA in each piece is soft and consistent (\"InvoiceAgent scans your connected billing inbox to…\").",[94,452,453,79,456,458],{},[46,454,455],{},"DID NOT modify",[19,457,55],{},", any code, or any config. Markdown only.",[31,460,462],{"id":461},"suggested-publish-order-5week-drip","Suggested publish order (5/week drip)",[15,464,465],{},"Week 1: the discovery/hook cluster — #1 (discovery guide), #5 (90-min audit), #4 (zombie calc), #16 (checklist), #25 (Gmail operators). These are the top-of-funnel \"see your stack\" pieces that match the product's core hook.\nThen rotate pillars weekly.",{"title":160,"searchDepth":250,"depth":250,"links":467},[468,473,480,481,482,483],{"id":33,"depth":250,"text":34,"children":469},[470,471,472],{"id":67,"depth":225,"text":68},{"id":149,"depth":225,"text":150},{"id":163,"depth":225,"text":164},{"id":180,"depth":250,"text":181,"children":474},[475,476,477,478,479],{"id":184,"depth":225,"text":185},{"id":202,"depth":225,"text":203},{"id":221,"depth":225,"text":222},{"id":246,"depth":225,"text":247},{"id":265,"depth":225,"text":266},{"id":308,"depth":250,"text":309},{"id":375,"depth":250,"text":376},{"id":414,"depth":250,"text":415},{"id":461,"depth":250,"text":462},"30 pieces (15 blogs + 10 resources + 5 lead magnets) — the pre-confirmed slug plan from the handoff, all written verbatim to spec. All files prefixed 2026-05-23-. Frontmatter mirrors existing posts (title, description, date, author, image). Voice: confident, direct, technical-but-accessible. Audience: founders/operators/lean finance. Real tools referenced (Vercel, Figma, Notion, Linear, Cursor, Ramp, Brex, etc.). Positioned per the tech-spend pivot + manifesto: Gmail-first SaaS spend discovery, \"the audit comes before the optimization,\" trust/restraint on inbox access.","md",{},true,"/blog/_batch_2026-05-23_index",{"title":5,"description":484},"blog/_BATCH_2026-05-23_INDEX","5NK-Shmc9zseASR6DYppm_UolwkleaB1WZJI249tDZY",1782093662972]