Skip to content

Give five guide pages their own content and one brand config - #152

Merged
Programcode merged 1 commit into
mainfrom
seo/guide-pages-content
Oct 18, 2026
Merged

Programcode merged 1 commit into
mainfrom
seo/guide-pages-content

Conversation

@Programcode

@Programcode Programcode commented Oct 18, 2026 •

Copy link
Copy Markdown
Owner

Why

Google crawls /ai-debate-practice, /ai-debate-coach, /ai-debate-case-generator, /best-ai-debate-tools and /debate-rebuttal-practice but doesn't index them. Each prerendered page had about 2,000 characters of visible text, and the feature cards repeated "A crawlable overview of a DebateLab workflow that opens into the private app." three times on every one of the 49 guides. To a crawler the pages looked thin and near-identical.

What changed

  • Boilerplate removed from the shared template. Cards can carry a page-specific description. The 44 guides that don't have one yet show the card title only. I didn't write 132 one-line fillers for them, because filler is the same problem in another form.
  • Long-form content for the five pages lives in scripts/seo_guides.py, merged into PAGES by slug so the list order stays the same (the related-guide links are picked by position). Each page gets:
    • step-by-step how-to steps,
    • a worked example: a sample motion plus a case, rebuttal or coaching exchange,
    • format tips for WSDC, BP, PF and LD written for that page's topic,
    • its own five FAQs.
  • FAQs come from one list. That list feeds both the visible <details> block and the FAQPage JSON-LD, so the two can't drift apart.
  • One brand and domain config. src/config/site.json holds the origin, product, brand and organization names. The generator, src/lib/seo/pages.ts (including the PAGE_HEADS strings), src/prerender/entry.tsx (its Organization and SoftwareApplication literals), scripts/prerender.mjs and scripts/sitemap.mjs all read it. Guide copy uses a {product} token. The new copy adds no hardcoded brand or domain strings.
  • CONTENT_DATE is now 2026-10-18, since every guide's visible text changed. The sitemap <lastmod> follows it.
  • docs/operations.md explains how to regenerate the guides and where the brand config lives.

The copy only claims what the app does. Sparring runs School 4-6-6-3, LD and PF. Generate's format setting covers BP, Policy, Classroom and Custom. WSDC tips are written as prep advice, and the pages don't claim the app simulates a WSDC round.

Visible text before → after

Measured on dist/<slug>/index.html from npm run build: <head>, scripts and styles removed, tags stripped, whitespace collapsed. Word counts include about 240 words of nav, related links and footer that every guide shares.

  • ai-debate-practice: 2,398 → 8,825 characters (356 → 1,433 words)
  • ai-debate-coach: 2,118 → 7,712 characters (318 → 1,327 words)
  • ai-debate-case-generator: 2,061 → 7,999 characters (311 → 1,317 words)
  • best-ai-debate-tools: 1,974 → 7,993 characters (294 → 1,302 words)
  • debate-rebuttal-practice: 2,207 → 7,382 characters (326 → 1,210 words)

The boilerplate sentence went from 3 occurrences on each page to 0 across all 49 guides.

Checked

  • On the five pages, the <head> (title, description, canonical, OG tags) is byte-identical to main. So are the Article and BreadcrumbList JSON-LD (apart from dateModified) and the related-guides link block. Only FAQPage.mainEntity changed, and it matches the visible FAQ questions one for one.
  • On the other 44 guides, the only difference is the removed card sentence and the new dateModified. I checked this by script against main.
  • Routing through site.json gives the same prerendered landing, terms, privacy and 404 HTML apart from asset hashes. The sitemap still lists the same 52 URLs.
  • npm run verify passed locally at fc8a7e1f: docs check, lint with knip and repo rules, typecheck, 304 unit tests, 30 collaboration tests, 356 edge tests, build, service-worker test and 30 Playwright smoke tests. That's a local pass, not CI.
  • I opened /debate-rebuttal-practice at desktop width and /ai-debate-case-generator at 390px from the built dist/. Both rendered correctly, with no horizontal overflow on mobile.

Not in this PR

  • The 44 other guides still share the same three generic FAQs. It's the same kind of duplication and a good next step.
  • Brand strings outside these files (locales, index.html, Edge Function CORS and others) are left for the Rebuttl rename. plan/rebrand-rebuttl is untouched.
  • No merge and no production deploy.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Expanded guides for AI debate practice, coaching, case generation, tool comparisons, and rebuttal practice with practical workflows, examples, and tailored FAQs.
  • Content Updates
    • Updated guide highlights and FAQs across the site, and refreshed page metadata. Some highlight cards now show headings without descriptive text.
  • Improvements
    • Site and brand details are now consistent across page titles, structured information, and related-guide links.

Google crawled /ai-debate-practice, /ai-debate-coach,
/ai-debate-case-generator, /best-ai-debate-tools and
/debate-rebuttal-practice but did not index them. Each had about 2,000
characters of visible text, and every feature card repeated the same
sentence, three times per page across all 49 guides.

- The shared template no longer prints that sentence. Cards can carry a
  page-specific description; pages without one show the title only.
- The five pages get long-form copy in scripts/seo_guides.py: step-by-step
  how-tos, a worked example, WSDC/BP/PF/LD tips and their own FAQs. The
  FAQ list feeds both the visible FAQ and the FAQPage JSON-LD.
- src/config/site.json now holds the origin, product, brand and
  organization names. The generator, pages.ts, the prerender entry,
  prerender.mjs and sitemap.mjs read it, and guide copy uses {product}.
- CONTENT_DATE moves to 2026-10-18 because every guide's text changed.

Titles, canonicals, the Article and Breadcrumb JSON-LD and the related
guide links are unchanged on all five pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings October 18, 2026 15:25

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@vercel

vercel Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
debate-navigator Ready Ready Preview Oct 18, 2026 3:26pm UTC
debatelab-staging Ready Ready Preview Oct 18, 2026 3:26pm UTC

@coderabbitai

coderabbitai Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository YAML (base), Organization UI (inherited)
  • Review profile: CHILL
  • Plan: Free
  • Run ID: 9a023cf2-1b46-44c5-b2cd-4fd3ce2ed5a2
📥 Commits

Reviewing files that changed from the base of the PR and between c928589 and fc8a7e1.

📒 Files selected for processing: 57
  • docs/operations.md
  • public/ai-debate-case-generator/index.html
  • public/ai-debate-coach/index.html
  • public/ai-debate-evidence-research/index.html
  • public/ai-debate-practice/index.html
  • public/ai-rebuttal-generator/index.html
  • public/ai-tools-for-debate-students/index.html
  • public/ai-vs-traditional-debate-prep/index.html
  • public/argument-flowchart/index.html
  • public/best-ai-debate-tools/index.html
  • public/british-parliamentary-debate/index.html
  • public/congress-debate/index.html
  • public/debate-argument-flowchart-tool/index.html
  • public/debate-block-file-guide/index.html
  • public/debate-case-generator/index.html
  • public/debate-clash-points/index.html
  • public/debate-collapsing-strategy/index.html
  • public/debate-cross-examination-tips/index.html
  • public/debate-evidence-finder/index.html
  • public/debate-evidence-verification/index.html
  • public/debate-fallacies/index.html
  • public/debate-impact-calculus/index.html
  • public/debate-judge-adaptation/index.html
  • public/debate-motion-analysis/index.html
  • public/debate-note-taking-flowing/index.html
  • public/debate-prep-time-management/index.html
  • public/debate-pronunciation-and-delivery/index.html
  • public/debate-rebuttal-practice/index.html
  • public/debate-speech-structure/index.html
  • public/debate-topics-for-students/index.html
  • public/debate-weighing-guide/index.html
  • public/debatelab-alternatives/index.html
  • public/debatelab-pricing/index.html
  • public/debatelab-vs-chatgpt/index.html
  • public/debatelab-vs-debateclub/index.html
  • public/debatelab-vs-windebate/index.html
  • public/how-to-cross-examine-in-debate/index.html
  • public/how-to-flow-in-debate/index.html
  • public/how-to-practice-rebuttals/index.html
  • public/how-to-prepare-for-a-debate-tournament/index.html
  • public/how-to-weigh-in-debate/index.html
  • public/how-to-write-a-debate-case/index.html
  • public/how-to-write-a-rebuttal-speech/index.html
  • public/lincoln-douglas-debate/index.html
  • public/online-debate-timer-tool/index.html
  • public/online-debate-timer/index.html
  • public/policy-debate/index.html
  • public/public-forum-debate/index.html
  • public/world-schools-debate/index.html
  • public/wsdc-debate-practice/index.html
  • scripts/generate_seo_content.py
  • scripts/prerender.mjs
  • scripts/seo_guides.py
  • scripts/sitemap.mjs
  • src/config/site.json
  • src/lib/seo/pages.ts
  • src/prerender/entry.tsx

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

📝 Walkthrough

The change centralizes site identity values and extends SEO guide generation with long-form content and page-specific FAQs. It updates five guide pages with expanded material and refreshes metadata and highlight cards across other published SEO pages.

Changes: SEO guide generation and published pages

Layer / File(s) Summary
Site identity and guide rendering
src/config/site.json, src/lib/seo/pages.ts, src/prerender/entry.tsx, scripts/generate_seo_content.py, scripts/prerender.mjs, scripts/sitemap.mjs, docs/operations.md
Site origin, product, brand, and organization values now come from shared configuration. The generator merges guide data by slug, substitutes {product}, renders several section formats, and uses page-specific FAQs when available.
Five expanded SEO guides
scripts/seo_guides.py, public/ai-debate-practice/index.html, public/ai-debate-coach/index.html, public/ai-debate-case-generator/index.html, public/best-ai-debate-tools/index.html, public/debate-rebuttal-practice/index.html
Five guide entries and their published pages contain expanded instructions, examples, format-specific guidance, features, and FAQs.
Refresh remaining published SEO pages
public/*/index.html
The other listed pages use October 18, 2026 as their Article modification date. Highlight cards retain their headings and no longer include repeated descriptive paragraphs.

Estimated code review effort: 3 (Moderate) | ~25 minutes

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Essentials by visiting https://app.coderabbit.ai/settings/billing.

Comment @coderabbitai help to get the list of available commands.

@Programcode

Copy link
Copy Markdown
Owner Author

CI didn't run on fc8a7e1. Every Actions job (docs, quality, browser-smoke, and the four suite jobs) stopped 2–3 seconds after it started, with no steps. GitHub's annotation says: "The job was not started because recent account payments have failed or your spending limit needs to be increased." This is a billing block, not a test failure.

These checks ran locally at the same head (fc8a7e1f), so this is a local pass, not a CI pass:

  • npm run verify exited 0:
    • docs check, lint (eslint, knip, repo rules) and typecheck
    • unit tests: 37 files, 304 tests
    • collaboration tests: 5 files, 30 tests
    • edge tests: 356 passed, 0 failed
    • build (prerender, then sitemap with 52 URLs, then build-boundary check)
    • service-worker test
    • Playwright desktop Chromium @smoke: 30 passed

The staging database gate and the full desktop and mobile Playwright suite did not run. This PR doesn't touch either.

This branch was successfully deployed

2 active deployments
Preview – debate-navigator — fc8a7e1f Deployed Oct 18, 2026 by vercel[bot]
Preview – debatelab-staging — fc8a7e1f Deployed Oct 18, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants