Skip to content

Describe the DebateOwl case format on the home page, llms.txt and JSON-LD - #259

Merged
Programcode merged 2 commits into
mainfrom
seo/case-format-everywhere
Oct 28, 2026
Merged

Programcode merged 2 commits into
mainfrom
seo/case-format-everywhere

Conversation

@Programcode

@Programcode Programcode commented Oct 28, 2026 •

Copy link
Copy Markdown
Owner

Task 2 from the 28 Oct site spec, including the free-plan addendum: describe the case format DebateOwl writes everywhere an AI answer reads about the product.

How this relates to seo/case-format-copy (#252)

#252 merged in full. Its branch tip bb403acb and the squash commit on main (a04c1568) differ only in scripts/staging-sync.mjs, a later unrelated change. So this PR branches from main, which already contains #252. It doesn't stack on that branch, and it doesn't repeat any of its edits. #252 covered the guides. This PR covers what it left out:

  • the home page (/, /hu, /es): the case generator card, the hero demo, How it works step 2 and two new FAQs;
  • the SoftwareApplication JSON-LD on / and on the guides that carry it;
  • llms.txt Key facts;
  • the sentences on /ai-rebuttal-generator, /best-ai-debate-tools and /ai-debate-coach that still described DebateOwl's output with warrant, contention and framework. Describe the new case format on the public guides #252 left these alone as pedagogy, but the spec counts them as product description.

What changed

  • One source for the sentences. src/config/site.json gains caseFormat, secondSpeech, freePlan and tagline. The app reads them through src/lib/seo/site-text.ts and i18n default variables ({{caseFormat}}, {{freePlan}}). scripts/generate_seo_content.py reads the same keys. Hungarian and Spanish carry their own translations of the two FAQ answers.
  • Home page, EN/HU/ES.
    • The case generator card reads "Opening, arguments with evidence, "If they say…" replies, closing." (10 words).
    • How it works step 2 says the same thing.
    • The hero demo shows Opening / Argument / Evidence / If they say… / Closing, with the labels the app itself uses (Nyitás / Érv / Bizonyíték / Ha azt mondják… / Zárás, Apertura / Argumento / Evidencia / Si dicen… / Cierre). Five sections didn't fit the old two-column demo, so the sample now sits under the form at full width. The owl moved left so it no longer covers text.
    • New FAQs: "What does a DebateOwl case include?" (the format sentence) and "Is DebateOwl free?" (the free-plan sentence). The visible FAQ and the FAQPage JSON-LD come from one list, so their text matches.
  • SoftwareApplication (on / and on guides with software: True):
    • description is the tagline plus the format sentence, 298 of 300 characters. The build fails if it goes past 300.
    • featureList gains "Google Docs and PDF export in the case format". npm run backend:status shows ai and export-gdoc deployed after Generate writes cases the way school debaters prepare them #244, and the PDF and Word exports are client-side, so this export already ships.
    • The free-plan sentence goes in the Free trial Offer.description. The SoftwareApplication description has no room left under 300 characters.
  • llms.txt Key facts gain "Case format: …", the R2 line and "Free plan: …". The R2 line is there because the app does this: in supabase/functions/_shared/prompts/generate.ts, R2 returns no new arguments, about 2 minutes of reinforce and about 4 minutes of "If they say…" counters.
  • Guides. On /ai-rebuttal-generator, /best-ai-debate-tools and /ai-debate-coach, descriptions of what DebateOwl outputs or checks now use plain words. Best-tools criterion 1 is now "Structure: does each argument say what is true, why, and why it matters, or is it a wall of text?". LD value and criterion stay, with framework glossed once as "how the judge should decide".
  • Dates. /debateowl-pricing moves to 2026-10-28 because its JSON-LD changed. The other changed guides were already at 2026-10-28 from Describe the new case format on the public guides #252. No other page's date moved.

Deviations from the spec, on purpose

  • Argument count. The format sentence says "two to four arguments", where the spec drafted "two or three". The generator's length instruction is the source: brief returns 2, standard 3, comprehensive 4.
  • featureList keeps the 3 utilities (Library, Debate timer, History) next to the 8 prep modes and adds the export item. That list was already in place, and the utilities are real features.
  • "What's new… counter-strategies". I couldn't find this text in the repo or in the served HTML of / today. It is probably an in-app announcement stored in the database, so I left it alone. How it works step 2, "Get arguments, evidence and counters", was the nearest home-page copy, and it now uses the format.
  • Criterion 7 on /hu and /es. The literal English "if they say" doesn't appear there, because those pages use the app's own labels. Counts are in the checklist below. I didn't put English copy into the Hungarian and Spanish pages just to satisfy a grep.

Acceptance criteria

  • 1. One canonical sentence, caseFormat in site.json, matching what Generate writes cases the way school debaters prepare them #244 generates.
  • 2. Card text is 10 words. Demo labels are Opening / Argument / Evidence / If they say… / Closing. The "What does a DebateOwl case include?" FAQ is identical in the visible FAQ and FAQPage JSON-LD, on /, /hu and /es.
  • 3. llms.txt has "Case format: …" and the R2 line. The app does R2 this way.
  • 4. SoftwareApplication description includes the format sentence (298 chars). featureList has the 8 prep modes plus the export item.
  • 5. The script splits the visible text and JSON-LD of /ai-rebuttal-generator, /best-ai-debate-tools, /ai-debate-coach and the three vs-pages into sentences. Sentences naming DebateOwl, Case attacker, Ask coach, Sparring or case generator that also contain framework, contention, warrant or impact calculus: 0.
  • 6. Best-tools criterion 1 is rewritten as specified.
  • [~] 7. grep -ci "if they say": / 6, /llms.txt 3, /hu 0, /es 0. On /hu, "Ha azt mondják" appears 5 times; on /es, "Si dicen" 5 times. Deliberate, see above.
  • 8. Only /debateowl-pricing's date moved. The other changed guides were already dated 2026-10-28 by Describe the new case format on the public guides #252.
  • Addendum: the free-plan sentence is in the home FAQ (all three languages), llms.txt Key facts and the SoftwareApplication's Free trial offer.

Jargon counts

\b(frameworks?|contentions?|warrants?|impact calculus)\b, visible text / JSON-LD, built HTML.

Page Before After
/ 0 / 0 0 / 0
/hu 0 / 0 0 / 0
/es 0 / 0 0 / 0
/ai-rebuttal-generator 6 / 0 0 / 0
/best-ai-debate-tools 6 / 0 1 / 0
/ai-debate-coach 5 / 0 1 / 0
/debateowl-vs-chatgpt 0 / 0 0 / 0
/debateowl-vs-windebate 0 / 0 0 / 0
/debateowl-vs-debateclub 0 / 0 0 / 0
/debateowl-pricing 0 / 0 0 / 0

Format pages that keep their own terms, untouched here: /lincoln-douglas-debate 28 / 8, /policy-debate 0 / 0. The remaining single hit on best-tools and coach is the LD "framework" gloss.

Verification

  • npm run verify, Node 22.23.2, NODE_OPTIONS=--max-old-space-size=3072, local. GitHub Actions is billing-blocked, so this is a local pass, not CI.
    • At 87c5eddd: exit 0. Unit 96 files / 714 tests, collaboration 30, edge 493 passed / 0 failed, build, prerender, sitemap (52 URLs), check-site and check-links clean, Playwright @smoke desktop Chromium 47 passed.
    • At the head 878002a3 (hero layout fix): exit 0, same results (unit 714, collaboration 30, edge 493 / 0, sitemap 52, site and link checks clean, smoke 47 passed).
  • python3 scripts/generate_seo_content.py run twice gives a byte-identical public/.
  • validator.schema.org on the built /, /hu and /es: 0 errors, 0 warnings.
  • Local vite preview: all 52 sitemap URLs return 200 with their own title, description and self-canonical (stand-in for the spec's audit.py). On the served /hu/ and /es/ HTML, "Ha azt mondják" and "Si dicen" each appear 5 times. I checked the hero at 1024, 1280 and 1440 px. Screenshots in ~/.t3/scratch/debateowl-site-1028/shots/ on the VPS: home-hero-desktop, home-demo-desktop, home-case-card-*, home-faq-*, hu-faq-*, es-faq-*. The hero demo is hidden below the lg breakpoint, so it has no mobile shot. The mobile feature cards hide their descriptions by design.

Relation to the other two PRs

Independent of #258 (About and Contact) and #260 (plain-language guides). None stacks on another. I trial-merged all three branches together: 0 conflicts. Task 3 doesn't touch the eight product pages this PR edits. If a later merge does conflict in public/, rerun python3 scripts/generate_seo_content.py.

🤖 Generated with Claude Code

Programcode and others added 2 commits October 28, 2026 17:16
site.json now holds one sentence for what a DebateOwl case contains and
one for "no free plan, but the /tools pages are free". The home page FAQ
(EN, HU, ES), the SoftwareApplication JSON-LD on / and the guides, and
llms.txt quote them. The case generator card, How it works and the hero
demo use the new section names (Opening, Argument, Evidence, If they
say..., Closing). The rebuttal generator, coach and best-tools guides
describe DebateOwl's output in plain words instead of warrants,
contentions and frameworks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Stack the demo's form and sample so the case sections get the full
width, shorten the sample lines, and move the owl clear of the text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

Next included review available in 59 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
Commits

Reviewing files that changed from the base of the PR and between cb37e2d and 878002a.

Files selected for processing: 20
  • public/ai-debate-coach/index.html
  • public/ai-rebuttal-generator/index.html
  • public/best-ai-debate-tools/index.html
  • public/debateowl-pricing/index.html
  • public/debateowl-vs-chatgpt/index.html
  • public/debateowl-vs-debateclub/index.html
  • public/debateowl-vs-windebate/index.html
  • public/llms.txt
  • scripts/generate_seo_content.py
  • scripts/seo_guides.py
  • src/components/landing/FAQ.tsx
  • src/components/landing/Hero.tsx
  • src/config/site.json
  • src/i18n.ts
  • src/lib/seo/pages.ts
  • src/lib/seo/site-text.ts
  • src/locales/en.json
  • src/locales/es.json
  • src/locales/hu.json
  • src/prerender/entry.tsx
  • 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 added a commit that referenced this pull request Oct 28, 2026
The jargon gate in npm run verify passes only with #259's product-page
copy, so #260 stacks on #259 and must merge after it.
@Programcode
Programcode marked this pull request as ready for review October 28, 2026 18:22
Copilot AI balanced review requested due to automatic review settings October 28, 2026 18:22
@Programcode
Programcode merged commit 37711d2 into main Oct 28, 2026
3 of 9 checks passed

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 insufficient remaining quota.

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