The schedule to grow this site phase-by-phase, generated from the Django
Sitemodel. No OpenRouter / no API — you (Claude Code) do the work, grounded in the real markdown undercontent/.
Work through every step in order. Do not skip the uplift, the term cleanup, the SVG render check, or the finish/deploy steps — those were the gaps in earlier runs.
Read & orient. Read this whole file, then skim content/ to learn what exists and the writing tone.
Uplift EVERY existing page (not just new ones). Bring all current pages — from earlier phases — up to the Page blueprint below: its page anatomy, frontmatter, JSON-LD schema, the custom SVG visuals, and the mandatory wiki-style interlinking. Old pages must reach the current standard, not be left as they were. Two presentation fixes that apply site-wide:
mermaid code fences, .mermaid containers, or mermaid runtime may remain — the mermaid_check gate enforces this.<code> to blend with the prose — no background box or border, body-text colour, and not coloured like a link (this is a CSS change in the site’s stylesheet; block code in <pre> keeps its box). The inline_code_check gate enforces this.Build the next phase. Add this phase’s page mix (see schedule), slotting pages into the existing hierarchy, each built to the same blueprint standard.
Upgrade the homepage AND site navigation to reflect the new content. This is mandatory every phase — new pages must not be left orphaned or unreachable:
_data/nav.*, _data/menu.*, layout includes). Every section/topic area must be reachable from the nav; remove links to pages that no longer exist.sitemap.xml include the new URLs, and wire the new pages in with the same wiki-style interlinking standard.Keep it niche-specific. Section topics must be drawn from this niche, not generic placeholders.
Remove internal IA/SEO terms from visible copy. The words pillar, cluster, long-tail (and “hub and spoke”, “supporting page”, etc.) are internal labels — they must not appear in reader-facing prose. Scan and fix:
python3 /home/martin/WebstormProjects/_qa/term_lint.py waterutility.org
(Legit domain uses of “cluster” — e.g. a Kafka/DB cluster — are fine; rewrite only the information-architecture sense.)
Author custom SVG visuals per the “Custom visuals” section, then build the site and verify the SVGs render correctly ON THE PAGE — the page’s CSS/typography must not leak in and break them. Fix and rebuild until clean:
cd /home/martin/WebstormProjects/waterutility.org && npm run build
python3 /home/martin/WebstormProjects/_qa/qa_gates.py waterutility.org
qa_gates.py runs every shared deterministic gate against the BUILT site and must report ALL PASS: term_lint (IA/SEO term leaks), svg_check (inline-SVG validity + hidden/overlapping/clipped/low-contrast labels), mermaid_check (no Mermaid left un-converted to SVG), inline_code_check (inline blends with prose — no box/border, body colour, not link-like), a11y_check (FULL-PAGE WCAG 2 A/AA via axe-core — contrast, alt text, link names, lang, duplicate ids, heading order, keyboard-scrollable regions), links_check (internal links + anchors resolve), jsonld_check (structured-data validity), seo_meta_check (title/description/canonical/og/one-h1 + cross-page duplicates), render_check (no uncaught JS errors / broken same-origin assets), markup_lint (no unrendered markdown or template leakage), sitemap_check (sitemap ↔ built pages), dup_content_check (no near-duplicate article prose), and perf_check (Lighthouse mobile performance budget over a sampled set). Fix the site until every gate passes.
Record completion (re-runs qa_gates and will NOT advance the phase unless they all pass; then updates page/word count, advances current→next phase, and rewrites this plan ready for the next phase). From the Django project (/home/martin/PycharmProjects/Django-Pillar-Cluster-Long-Tail):
.venv/bin/python manage.py finish_phase waterutility.org --completed expansion \
--blueprint "/home/martin/WebstormProjects/waterutility.org/_plan/blueprint.json"
Commit & deploy. Build, deploy to Cloudflare, and push to GitHub:
cd /home/martin/WebstormProjects/waterutility.org
npm run deploy # build + wrangler deploy (auth from the site .env)
git add -A && git commit -m "Upgrade to expansion phase" && git push
Use this when you want to bring the site fully up to the current standard and pass every gate, without building the next phase — the site stays on its current phase (foundation).
Run /qa-refresh (or just say “do a QA refresh”) — it runs the qa_refresh workflow for this site, which performs everything below automatically: rewrites every page to standard (incl. hand-authored SVGs and Mermaid→SVG), restyles inline code + homepage + navigation, then builds, fixes until every gate passes, records the uplift and deploys. Direct call:
Workflow({scriptPath: "/home/martin/WebstormProjects/_qa/qa_refresh_workflow.js", args: "waterutility.org"})
refresh_site does NOT do the uplift for you — YOU must do the actual work first. It is only the bookkeeping/verification step: it re-syncs counts, re-detects the phase (no advance), re-exports this plan, and runs qa_gates. It will refuse to record the uplift unless every gate passes, so you cannot mark a site “uplifted” without having genuinely rewritten the pages and fixed the SVGs.
Do the checklist above but SKIP step 3 (Build the next phase) — i.e. actually rewrite EVERY existing page to the blueprint (2: anatomy, frontmatter, schema, wiki interlinking, hand-authored SVGs, no Mermaid, blended inline code), update homepage & navigation (4), keep it niche-specific (5), term cleanup (6), and pass the SVG + qa_gates checks (7). Then record the refresh and deploy:
.venv/bin/python manage.py refresh_site waterutility.org \
--blueprint "/home/martin/WebstormProjects/waterutility.org/_plan/blueprint.json"
cd /home/martin/WebstormProjects/waterutility.org
npm run deploy
git add -A && git commit -m "QA refresh (foundation)" && git push
| # | Phase | Status | Adds | Target total | Focus |
|---|---|---|---|---|---|
| 1 | 1. Foundation | ✅ done | 2-3 pillars + 10-14 clusters + 8-12 long-tails | ~22 | Establish core authority: the main pillars and their primary clusters, with enough long-tails to validate demand. Get a consistent page skeleton in place. |
| 2 | 2. Expansion | ➡️ NEXT | 1-2 pillars + 7-10 clusters + 18-25 long-tails | ~50 | Broaden coverage: fill out each pillar’s clusters and add the high-intent long-tails around them. Strengthen interlinking between siblings. |
| 3 | 3. Maturity | … future | 4-6 clusters + 28-40 long-tails | ~82 | Deepen the long tail: comprehensive how-tos, comparisons and edge-case pages under existing clusters. Ensure FAQ blocks and schema on every page. |
| 4 | 4. Authority | … future | 2-3 clusters + 20-30 long-tails | ~105 | Complete topical authority: remaining gaps, advanced/expert pages, and a tight internal link graph so every page is 1-2 clicks from its pillar. |
(tailored to this site)
All code blocks must contain valid, production-quality Python — the site spec requires a QA check for valid code and indentation. Mermaid diagrams should always include a %% caption comment. Every Mermaid diagram should be styled to match the site light color scheme. Checkbox lists (Production Validation Checklists) must use ‘- [ ]’ markdown so the 11ty build renders them as interactive checkboxes per the site spec. Inline code spans should NOT use backtick-bordered heavy styling — the site spec calls for light background inline code that blends with surrounding text. KaTeX should be applied to any formula expressing an MCL averaging calculation, statistical threshold (±3σ), or signal scaling equation. Tables must be used for: register maps, MCL reference values, configuration parameters, and quality-flag code definitions — all must be responsive. External links appear ONLY where they already exist in source content (EPA, NIST, Pydantic docs); do not add new external links per site spec.
When upgrading or building any page, add a custom, hand-authored inline SVG wherever a visual would genuinely raise quality (architecture/data-flow diagrams, sequence or state diagrams, comparison matrices, timelines, annotated illustrations). Do NOT add decorative or generic stock-style images. Each SVG must: be original and specific to the page’s content; match the site’s existing design system (colours, fonts, stroke weight); be responsive (viewBox, no fixed pixel width) and accessible (