Skip to content

Add About and Contact pages and fix the privacy contact address - #258

Merged
Programcode merged 2 commits into
mainfrom
seo/about-contact
Oct 28, 2026
Merged

Programcode merged 2 commits into
mainfrom
seo/about-contact

Conversation

@Programcode

@Programcode Programcode commented Oct 28, 2026 •

Copy link
Copy Markdown
Owner

Task 1 from the 28 Oct site spec: About and Contact pages, and a privacy contact that reaches us.

What changed

  • New pages /about and /contact, prerendered like /terms and /privacy (AboutPage.tsx, ContactPage.tsx). Copy is in the catalog in English, Hungarian and Spanish, so the language switcher works on them. Both pages show the site footer.
  • Addresses in one place. contactEmail (hello@debateowl.com) and privacyEmail (privacy@debateowl.com) live in src/config/site.json. Changing an address is a one-line edit.
  • Privacy policy fix. Sections 8 and 11 told users to write to privacy@debatelab.app, a domain owned by a different product with no MX record. They now use privacyEmail. The policy date moves to 28 October 2026 because its text changed.
  • Terms gain section 11, Contact, with both addresses as mailto: links. Date moves to 28 October 2026.
  • JSON-LD. /about is an AboutPage and /contact a ContactPage, both about the home page's #organization, each with a breadcrumb. The home Organization gains email and a contactPoint (customer support, en/hu/es). url is unchanged.
  • Footers. The React footer (landing, /hu, /es, tools pages, About, Contact, and now Privacy, Terms and /expocit/sources, which had no footer before) links About and Contact, labelled Rólunk / Kapcsolat and Acerca de / Contacto in Hungarian and Spanish. All three point at the English pages. The 31 generated guides get the same two links. Only the footer line changed in each guide, so no dateModified moved.
  • llms.txt lists About and Contact under Main pages.
  • docs/operations.md lists the two new prerendered pages.

Not on the pages: phone number, street address, city, the developer's name. The maker is "a student developer". I also left out "in Hungary", since the brief ruled out the location.

Acceptance criteria

  • 1. /about and /contact are prerendered, titled About DebateOwl | DebateOwl and Contact | DebateOwl, one-sentence meta descriptions (137 and 128 chars), self-canonical, favicon links, header brand link to /, and a body link with anchor text DebateOwl to https://debateowl.com/.
  • 2. /about says only what DebateOwl is, the DebateLab name until 27 October 2026, built by a student developer, made by Pi-Stack (linked), the trial and price ($5/month + tax, from site.json), the three languages, and links to pricing, privacy, terms and contact. No user counts, testimonials, partners or time-saved claims.
  • 3. /contact shows both addresses as mailto: links and lists what to write about: account, billing or something broken; privacy and data requests; feedback.
  • 4. curl -s <preview>/privacy/ | grep -c debatelab.app gives 0 on a local vite preview (the slash makes vite preview serve dist/privacy/index.html; Vercel serves it without one), and dist/privacy/index.html has 0 too. /terms has a Contact section with the same addresses.
  • 5. AboutPage with about: {"@id": "https://debateowl.com/#organization"}, ContactPage, and the home Organization's email and contactPoint are in the built HTML.
  • 6. Footer links on EN, HU and ES pages, React and generated guides, with translated labels. Every one of the 54 sitemap pages now links About and Contact. Shared links (/share/…) and the 404 page, which are noindex and outside the sitemap, still have no footer.
  • 7. The build's sitemap has 54 URLs (sitemap: 54 URLs, 53 with lastmod), and llms.txt lists both pages.
  • 8. validator.schema.org on the built /, /about and /contact: 0 errors, 0 warnings. Google's Rich Results Test needs a public URL, so it hasn't run. Run it on the preview or after deploy.

Jargon counts

\b(frameworks?|contentions?|warrants?|impact calculus)\b, visible text / JSON-LD. This PR doesn't change guide copy.

Page Before After
/ 0 / 0 0 / 0
/about (new) – 0 / 0
/contact (new) – 0 / 0
/privacy 0 / 0 0 / 0
/terms 0 / 0 0 / 0

Format pages that keep their own terms, unchanged here: /lincoln-douglas-debate 28 / 8, /policy-debate 0 / 0.

Verification

  • npm run verify locally with NODE_OPTIONS=--max-old-space-size=3072, Node 22.23.2, at head 214b1059 (after the review fixes): exit 0. Unit 96 files / 714 tests, collaboration 30, edge 493 passed / 0 failed, build with prerender, sitemap (54 URLs), check-site and check-links clean, Playwright @smoke desktop Chromium 47 passed. The first head, 2b85354d, also passed. GitHub Actions is billing-blocked, so this is a local pass, not CI.
  • Local vite build + vite preview: all 54 sitemap URLs return 200 with their own title, a one-sentence 70–160 character description and a self-canonical. That was checked with a stand-in for the spec's audit.py, which isn't on this VPS. Screenshots at 1440 px and 390 px are in ~/.t3/scratch/debateowl-site-1028/shots/ (about-*.png, contact-*.png, terms-*.png, privacy-*.png) on the VPS.
  • Screenshots at 1440 px and 390 px in ~/.t3/scratch/debateowl-site-1028/shots/ on the VPS: about-*, contact-*, terms-* and privacy-* (.png).
  • hello@ and privacy@ forward through Cloudflare Email Routing, which is already set up. After deploy, send one test message to each.

Relation to the other two PRs

Independent of #259 (Task 2) and #260 (Task 3), and none of them stacks on another. All three regenerate public/*/index.html and public/llms.txt, but on different lines: this PR changes only the guide footer line and the llms.txt Main pages list. They should merge in any order. If one conflicts, rerun python3 scripts/generate_seo_content.py after the merge.

🤖 Generated with Claude Code

/about and /contact are new prerendered pages with AboutPage and
ContactPage JSON-LD. The privacy policy pointed at privacy@debatelab.app,
a domain that belongs to another product; it now uses privacyEmail from
src/config/site.json, and the terms gain a Contact section. The home
Organization gets an email and contactPoint, and every footer (React and
the generated guides) links About and Contact.

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

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Caution

Review failed

The pull request is closed.

  • 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.

Privacy, Terms and the ExpoCit sources page now show the site footer, so
they link About and Contact too. Terms section 11 makes both addresses
mailto links, and the Spanish contact tip heading reads "Para ayudarte
mejor".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Programcode
Programcode marked this pull request as ready for review October 28, 2026 18:21
Copilot AI balanced review requested due to automatic review settings October 28, 2026 18:21
@Programcode
Programcode merged commit d71db2c into main Oct 28, 2026
3 of 10 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