Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion public/best-ai-debate-tools/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
<a href="/debateowl-vs-windebate">DebateOwl vs WinDebate</a>
<a href="/debateowl-pricing">DebateOwl Pricing and Plans</a>
<a href="/ai-debate-practice">AI Debate Practice for Stronger Cases, Rebuttals, and Speeches</a>
<a href="/public-forum-debate">Public Forum Debate Prep with AI</a><a href="/free-vs-paid-ai-debate-tools">Free vs paid AI debate tools: what you actually get</a><a href="/chatgpt-vs-claude-for-debate">ChatGPT vs Claude for debate prep</a><a href="/ai-debate-tools-for-teachers">AI debate tools for teachers</a><a href="/best-ai-for-public-forum">Best AI for Public Forum debate</a><a href="/debateowl-vs-argufight">DebateOwl vs ArguFight: which debater should pick which</a><a href="/debateowl-vs-mindduel">DebateOwl vs MindDuel: one motion, two workflows</a><a href="/debateowl-vs-claude">DebateOwl vs Claude: the same prep night done twice</a><a href="/debateowl-vs-publicforumai">DebateOwl vs PublicForumAI: Public Forum only, or every format</a><a href="/debateowl-vs-gemini">DebateOwl vs Gemini: five assumptions about AI debate prep, checked</a><a href="/debateowl-vs-hyperwrite">DebateOwl vs HyperWrite: a one-shot writer or a practice loop</a><a href="/debateowl-vs-schoolai">DebateOwl vs SchoolAI: a checklist for debate teachers</a></nav></section>
<a href="/public-forum-debate">Public Forum Debate Prep with AI</a><a href="/free-vs-paid-ai-debate-tools">Free vs paid AI debate tools: what you actually get</a><a href="/chatgpt-vs-claude-for-debate">ChatGPT vs Claude for debate prep</a><a href="/ai-debate-tools-for-teachers">AI debate tools for teachers</a><a href="/best-ai-for-public-forum">Best AI for Public Forum debate</a><a href="/debateowl-vs-argufight">DebateOwl vs ArguFight: which debater should pick which</a><a href="/debateowl-vs-mindduel">DebateOwl vs MindDuel: one motion, two workflows</a><a href="/debateowl-vs-debate-ladder">DebateOwl vs Debate Ladder</a><a href="/debateowl-vs-claude">DebateOwl vs Claude: the same prep night done twice</a><a href="/debateowl-vs-publicforumai">DebateOwl vs PublicForumAI: Public Forum only, or every format</a><a href="/debateowl-vs-gemini">DebateOwl vs Gemini: five assumptions about AI debate prep, checked</a><a href="/debateowl-vs-hyperwrite">DebateOwl vs HyperWrite: a one-shot writer or a practice loop</a><a href="/debateowl-vs-schoolai">DebateOwl vs SchoolAI: a checklist for debate teachers</a></nav></section>
</main>
<footer class="footer"><div class="wrap">DebateOwl: <a href="/">Home</a> / <a href="/debateowl-pricing">Pricing</a> / <a href="/privacy">Privacy</a> / <a href="/terms">Terms</a> / <a href="/about">About</a> / <a href="/contact">Contact</a> / <a href="/sitemap.xml">Sitemap</a></div></footer>
</body>
Expand Down
2 changes: 1 addition & 1 deletion public/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ Free to use, no account needed, and they run in the browser.

## Guides

- [AI Debate Practice for Stronger Cases, Rebuttals, and Speeches](https://debateowl.com/ai-debate-practice): How to choose an AI debate practice tool, with a checklist and a comparison of DebateOwl, ArguFight, MindDuel, PublicForumAI and Debate Ladder.
- [Best AI Debate Practice Tools (2026): Sparring and Timed Rounds](https://debateowl.com/ai-debate-practice): How to choose an AI debate practice tool, with a checklist and a comparison of DebateOwl, ArguFight, MindDuel, PublicForumAI and Debate Ladder.
- [AI Debate Case Generator with Citations](https://debateowl.com/ai-debate-case-generator): DebateOwl turns a motion into a ready-to-read debate case: an opening, arguments with evidence, If they say… replies, a closing line and sources to check.
- [Practice Rebuttals Before Your Opponent Finds the Weakness](https://debateowl.com/debate-rebuttal-practice): Paste an opposing argument into DebateOwl to find its weak links, missing evidence and logic gaps, then practice the rebuttal you would give.
- [Ask an AI Debate Coach for Round-Ready Prep](https://debateowl.com/ai-debate-coach): Ask DebateOwl's AI debate coach about strategy, arguments, rebuttals and speeches, with answers tied to your own motion, side and speaker role.
Expand Down
4 changes: 3 additions & 1 deletion scripts/generate_seo_content.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ def fill(value):
("/best-ai-for-public-forum", "Best AI for Public Forum debate"),
("/debateowl-vs-argufight", "DebateOwl vs ArguFight: which debater should pick which"),
("/debateowl-vs-mindduel", "DebateOwl vs MindDuel: one motion, two workflows"),
("/debateowl-vs-debate-ladder", "DebateOwl vs Debate Ladder"),
("/debateowl-vs-claude", "DebateOwl vs Claude: the same prep night done twice"),
("/debateowl-vs-publicforumai", "DebateOwl vs PublicForumAI: Public Forum only, or every format"),
("/debateowl-vs-gemini", "DebateOwl vs Gemini: five assumptions about AI debate prep, checked"),
Expand Down Expand Up @@ -833,7 +834,8 @@ def compare_llms_lines():

def llms_txt():
"""public/llms.txt: a plain summary for AI agents, from the same facts as the pages."""
guides = "\n".join(f'- [{p["h1"]}]({page_url(p["slug"])}): {p["description"]}' for p in PAGES if p["slug"] not in COMPARE_SLUGS | {"debateowl-pricing"})
# A page with its own headline (the title without the brand) is listed by it, as its <title> reads.
guides = "\n".join(f'- [{p.get("headline", p["h1"])}]({page_url(p["slug"])}): {p["description"]}' for p in PAGES if p["slug"] not in COMPARE_SLUGS | {"debateowl-pricing"})
tools = "\n".join(f"- [{name}]({BASE}{route}): {blurb}" for route, name, blurb in FREE_TOOLS)
return f"""# {BRAND}

Expand Down
15 changes: 13 additions & 2 deletions src/components/landing/FAQ.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
import { useTranslation } from "react-i18next";
import type { ReactNode } from "react";
import { Trans, useTranslation } from "react-i18next";
import { ChevronDown } from "lucide-react";
import { PREP_MODE_COUNT } from "@/components/features/tools/tool-links";
import { factsAsOf } from "@/lib/seo/pages";
import { useRouteLanguage } from "@/lib/seo/localized-routes";
import { Reveal } from "./Reveal";

/** The "which AI for debate" answer page in each landing page's language (generated by scripts/seo_comparison_pages.py). */
const BEST_AI_PAGE = { en: "/best-ai-for-debate", hu: "/hu/melyik-ai-a-legjobb-vitara", es: "/es/mejor-ia-para-preparar-un-debate" } as const;

const FAQ = () => {
const { t, i18n } = useTranslation();
const language = useRouteLanguage();
const asOf = factsAsOf(i18n.language);

const faqs = [
const faqs: Array<{ question: string; answer: ReactNode }> = [
{
question: t('faq.q10'),
// A static page, not an app route: a plain link loads it from the server.
answer: <Trans i18nKey="faq.a10" components={{ link: <a href={BEST_AI_PAGE[language]} className="font-semibold text-primary underline underline-offset-4" /> }} />,
},
{ question: t('faq.q6'), answer: t('faq.a6', { modes: PREP_MODE_COUNT }) },
{ question: t('faq.q8'), answer: t('faq.a8') },
{ question: t('faq.q7'), answer: t('faq.a7', { asOf }) },
Expand Down
11 changes: 10 additions & 1 deletion src/components/landing/GuideHub.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,16 @@ const GROUPS = [
{ id: "formats", paths: ["/public-forum-debate", "/lincoln-douglas-debate", "/policy-debate", "/british-parliamentary-debate", "/world-schools-debate", "/congress-debate"] },
{ id: "skills", paths: ["/how-to-write-a-debate-case", "/how-to-practice-rebuttals", "/debate-clash-points", "/debate-fallacies", "/debate-judge-adaptation", "/how-to-prepare-for-a-debate-tournament"] },
{ id: "tools", paths: ["/tools", "/tools/debate-timer", "/tools/debate-motion-generator", "/tools/debate-flow-sheet", "/tools/speech-time-calculator"] },
{ id: "compare", paths: ["/best-ai-debate-tools", "/best-ai-for-debate", "/debateowl-vs-chatgpt", "/debateowl-vs-debate-ladder", "/free-vs-paid-ai-debate-tools", "/chatgpt-vs-claude-for-debate", "/best-ai-for-public-forum"] },
{ id: "compare", paths: ["/best-ai-debate-tools", "/best-ai-for-debate", "/free-vs-paid-ai-debate-tools", "/chatgpt-vs-claude-for-debate", "/best-ai-for-public-forum"] },
// Every /debateowl-vs-* page, so each one is a click from the home page.
{
id: "versus",
paths: [
"/debateowl-vs-chatgpt", "/debateowl-vs-claude", "/debateowl-vs-gemini", "/debateowl-vs-hyperwrite", "/debateowl-vs-schoolai",
"/debateowl-vs-publicforumai", "/debateowl-vs-windebate", "/debateowl-vs-debateclub", "/debateowl-vs-debate-ladder",
"/debateowl-vs-argufight", "/debateowl-vs-mindduel",
],
},
] as const;

const TOOLS = GROUPS.find((group) => group.id === "tools")!;
Expand Down
16 changes: 14 additions & 2 deletions src/locales/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -1013,7 +1013,9 @@
"q8": "What does a {{product}} case include?",
"a8": "{{caseFormat}}",
"q9": "Is {{product}} free?",
"a9": "{{freePlan}}"
"a9": "{{freePlan}}",
"q10": "Which AI is best for debate?",
"a10": "It depends on the job. For brainstorming and background reading, a general chatbot such as ChatGPT, Claude or Gemini is fine. For preparing a set motion in your own format, with a case you can read out, \"If they say X, we answer Y\" replies and timed practice rounds, {{product}} is built for that. <link>Our comparison page</link> goes through the options one by one."
},
"guideHub": {
"title": "Debate guides and free tools",
Expand All @@ -1023,6 +1025,7 @@
"skills": "Skills guides",
"tools": "Free tools",
"compare": "Compare",
"versus": "Compare {{product}}",
"englishGuides": "Guides in English",
"hungarianPrep": "Debate prep with AI, in Hungarian",
"nativeAnswer": "Which AI is best for debate?",
Expand Down Expand Up @@ -1055,7 +1058,16 @@
"debateowl-vs-debate-ladder": "{{product}} vs Debate Ladder",
"free-vs-paid-ai-debate-tools": "Free vs paid AI debate tools",
"chatgpt-vs-claude-for-debate": "ChatGPT vs Claude for debate",
"best-ai-for-public-forum": "Best AI for Public Forum"
"best-ai-for-public-forum": "Best AI for Public Forum",
"debateowl-vs-claude": "{{product}} vs Claude",
"debateowl-vs-publicforumai": "{{product}} vs PublicForumAI",
"debateowl-vs-gemini": "{{product}} vs Gemini",
"debateowl-vs-hyperwrite": "{{product}} vs HyperWrite",
"debateowl-vs-schoolai": "{{product}} vs SchoolAI",
"debateowl-vs-argufight": "{{product}} vs ArguFight",
"debateowl-vs-mindduel": "{{product}} vs MindDuel",
"debateowl-vs-windebate": "{{product}} vs WinDebate",
"debateowl-vs-debateclub": "{{product}} vs DebateClub"
}
},
"finalCta": {
Expand Down
16 changes: 14 additions & 2 deletions src/locales/es.json
Original file line number Diff line number Diff line change
Expand Up @@ -1013,7 +1013,9 @@
"q8": "¿Qué incluye un caso de {{product}}?",
"a8": "Un caso de {{product}} se escribe como lo preparan los debatientes escolares: una apertura, de dos a cuatro argumentos, cada uno con explicación, evidencia y por qué importa, respuestas «Si dicen… respondemos…», una frase de cierre y las fuentes que usó.",
"q9": "¿{{product}} es gratis?",
"a9": "La app {{product}} no tiene plan gratuito (prueba gratis de {{trialDays}} días y después ${{proMonthly}}/mes); las herramientas aparte de /es/tools son gratis y no piden cuenta."
"a9": "La app {{product}} no tiene plan gratuito (prueba gratis de {{trialDays}} días y después ${{proMonthly}}/mes); las herramientas aparte de /es/tools son gratis y no piden cuenta.",
"q10": "¿Qué IA es mejor para el debate?",
"a10": "Depende de para qué la quieras. Para sacar ideas y leer sobre el tema, un chatbot general como ChatGPT, Claude o Gemini sirve. Para preparar una moción concreta en tu formato, con un caso que puedes leer en voz alta, respuestas «Si dicen X, respondemos Y» y rondas de práctica cronometradas, {{product}} está hecho para eso. <link>Nuestra comparativa</link> repasa las opciones una por una."
},
"guideHub": {
"title": "Guías de debate y herramientas gratis",
Expand All @@ -1023,6 +1025,7 @@
"skills": "Guías de habilidades",
"tools": "Herramientas gratis",
"compare": "Comparar",
"versus": "Comparar {{product}}",
"englishGuides": "Guías en inglés",
"hungarianPrep": "Preparación de debate con IA, en húngaro",
"nativeAnswer": "Qué IA sirve para preparar un debate (guía en español)",
Expand Down Expand Up @@ -1055,7 +1058,16 @@
"debateowl-vs-debate-ladder": "{{product}} frente a Debate Ladder",
"free-vs-paid-ai-debate-tools": "Herramientas de debate con IA: gratis o de pago",
"chatgpt-vs-claude-for-debate": "ChatGPT o Claude para debatir",
"best-ai-for-public-forum": "La mejor IA para Public Forum"
"best-ai-for-public-forum": "La mejor IA para Public Forum",
"debateowl-vs-claude": "{{product}} frente a Claude",
"debateowl-vs-publicforumai": "{{product}} frente a PublicForumAI",
"debateowl-vs-gemini": "{{product}} frente a Gemini",
"debateowl-vs-hyperwrite": "{{product}} frente a HyperWrite",
"debateowl-vs-schoolai": "{{product}} frente a SchoolAI",
"debateowl-vs-argufight": "{{product}} frente a ArguFight",
"debateowl-vs-mindduel": "{{product}} frente a MindDuel",
"debateowl-vs-windebate": "{{product}} frente a WinDebate",
"debateowl-vs-debateclub": "{{product}} frente a DebateClub"
}
},
"finalCta": {
Expand Down
16 changes: 14 additions & 2 deletions src/locales/hu.json
Original file line number Diff line number Diff line change
Expand Up @@ -1013,7 +1013,9 @@
"q8": "Mit tartalmaz egy {{product}} által írt eset?",
"a8": "A {{product}} úgy írja meg az esetet, ahogy az iskolai vitázók készülnek: nyitás, két–négy érv, mindegyik magyarázattal, bizonyítékkal és azzal, hogy miért fontos, „Ha azt mondják… erre azt feleljük…” válaszok, egy zárómondat és a felhasznált források.",
"q9": "Ingyenes a {{product}}?",
"a9": "A {{product}} alkalmazásnak nincs ingyenes csomagja ({{trialDays}} napos ingyenes próba, utána havi ${{proMonthly}}); a /hu/tools oldalon lévő külön eszközök ingyenesek, és fiók nélkül is használhatók."
"a9": "A {{product}} alkalmazásnak nincs ingyenes csomagja ({{trialDays}} napos ingyenes próba, utána havi ${{proMonthly}}); a /hu/tools oldalon lévő külön eszközök ingyenesek, és fiók nélkül is használhatók.",
"q10": "Melyik MI a legjobb vitához?",
"a10": "A feladattól függ. Ötleteléshez és háttérolvasáshoz egy általános chatbot, például a ChatGPT, a Claude vagy a Gemini is megfelel. Ha egy konkrét indítványra készülsz a saját vitaformátumodban, és felolvasható esetet, „Ha azt mondják X-et, erre azt feleljük Y” válaszokat és időzített gyakorlófordulókat szeretnél, arra készült a {{product}}. <link>Részletes összehasonlításunk</link> egyenként végigveszi a lehetőségeket."
},
"guideHub": {
"title": "Vitaútmutatók és ingyenes eszközök",
Expand All @@ -1023,6 +1025,7 @@
"skills": "Készségfejlesztő útmutatók",
"tools": "Ingyenes eszközök",
"compare": "Összehasonlítás",
"versus": "{{product}} összehasonlítások",
"englishGuides": "Angol nyelvű útmutatók",
"hungarianPrep": "Vitafelkészülés MI-vel (magyar útmutató)",
"nativeAnswer": "Melyik AI a legjobb vitára? (magyar kérdések és válaszok)",
Expand Down Expand Up @@ -1055,7 +1058,16 @@
"debateowl-vs-debate-ladder": "{{product}} vagy Debate Ladder",
"free-vs-paid-ai-debate-tools": "Ingyenes és fizetős MI-vitaeszközök",
"chatgpt-vs-claude-for-debate": "ChatGPT vagy Claude vitára",
"best-ai-for-public-forum": "A legjobb MI Public Forumhoz"
"best-ai-for-public-forum": "A legjobb MI Public Forumhoz",
"debateowl-vs-claude": "{{product}} vagy Claude",
"debateowl-vs-publicforumai": "{{product}} vagy PublicForumAI",
"debateowl-vs-gemini": "{{product}} vagy Gemini",
"debateowl-vs-hyperwrite": "{{product}} vagy HyperWrite",
"debateowl-vs-schoolai": "{{product}} vagy SchoolAI",
"debateowl-vs-argufight": "{{product}} vagy ArguFight",
"debateowl-vs-mindduel": "{{product}} vagy MindDuel",
"debateowl-vs-windebate": "{{product}} vagy WinDebate",
"debateowl-vs-debateclub": "{{product}} vagy DebateClub"
}
},
"finalCta": {
Expand Down
2 changes: 2 additions & 0 deletions src/prerender/entry.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ function landingQuestions(language: PageLanguage = 'en'): Array<[string, string]
const asOf = factsAsOf(language);
return [
[i18n.t('shortAnswer.question'), i18n.t('shortAnswer.answer', { asOf })],
// The visible answer links its last sentence; the JSON-LD keeps the words without the tag.
[i18n.t('faq.q10'), i18n.t('faq.a10').replace(/<\/?link>/g, '')],
[i18n.t('faq.q6'), i18n.t('faq.a6', { modes: PREP_MODE_COUNT })],
[i18n.t('faq.q8'), i18n.t('faq.a8')],
[i18n.t('faq.q7'), i18n.t('faq.a7', { asOf })],
Expand Down
Loading