Internal, not on the public site
Integration notes
What is connected, what is sample data, and what WTT needs to supply. Kept apart from customer-facing copy on purpose.
Design preview mode
DESIGN_PREVIEW = true (constants/preview.ts). Sample data, internal notes, the preview bar, pending pages and these internal pages are visible, and every page is noindex.
Set it to false for the public version: sample and unverified content disappears, internal and pending pages return 404, and pages follow their own indexing rules. Do that only after the launch checklist below is complete.
Integration points
Member session
Unavailable state- Expected contract
- Server-authoritative session from the WTT platform: an HTTP-only, Secure cookie set by WTT sign-in, checked server-side (for example GET /api/session proxied to WTT) and returning signed-in status plus the member handle. Never read from localStorage.
- Today
- Everyone is signed out. The preview bar can switch the header to its signed-in look (My Arena) for review only.
- Files
- components/generals/session-provider.tsx
Sign-in, account creation and password reset
Unavailable state- Expected contract
- WTT platform authentication. The site never stores passwords and never builds its own auth backend.
- Today
- The sign-in form never sends details. Submitting shows an honest unavailable message.
- Files
- components/account/sign-in-panel.tsx, pages/login.tsx, pages/arena.tsx
Tournaments
Sample data- Expected contract
- List and detail from the WTT tournaments API, mapped to the Tournament model (ids, status, schedule in UTC with an IANA source zone, entry options, prize pool and tiers with statuses, rules version, eligibility policy). Load in getStaticProps with revalidate, and switch the detail route to fallback: "blocking".
- Today
- Three invented tournaments marked isSample. They never render when design preview is off.
- Files
- lib/content.ts, data/sample-tournaments.ts, pages/tournaments/[id].tsx
Standings and results
Sample data- Expected contract
- Per tournament: stage (live or final), asOf timestamp, source time zone, scoring method, rows with rank, player handle, score, secondary metric and prize with status (advertised, awarded, paid). Final results only after WTT confirms them.
- Today
- One live and one final sample table.
- Files
- lib/content.ts, components/compete/results-table.tsx, components/compete/scoreboard.tsx
Eligibility and availability
Sample data- Expected contract
- Per product and per visitor or account: state (available, verification-required, unavailable, unknown), server wording, policy version. Requested at view time (never cached across visitors) and enforced again by WTT when an entry is created. No country list exists in the site.
- Today
- Sample states on each tournament. The notice also has a loading state for the live request.
- Files
- components/compete/availability-notice.tsx, types/content.ts
Entry, payment and vouchers
Unavailable state- Expected contract
- Entries are created by the WTT platform (server to server). Payment success is shown only after the payment provider confirms through WTT. Each entry records cash-paid or voucher. No payment backend is built in this site.
- Today
- Signed-out visitors are sent to log in. A signed-in preview shows "no entry was created and nothing was charged".
- Files
- components/compete/entry-panel.tsx
Identity verification (KYC)
Not started- Expected contract
- Status only (not started, pending, verified, rejected) for My Arena. Identity documents and private transactions never reach this site.
- Today
- Referenced in copy and availability states only.
- Files
- types/content.ts
Brand enquiries
Live- Expected contract
- POST /api/enquiries validates on the server, saves to the Enquiries collection (with consent choices and privacy notice version) and emails the site owner with the enquirer as reply-to. Swap the destination for WTT's CRM when one is supplied.
- Today
- Working end to end. Submissions appear in the CMS tab under Enquiries.
- Files
- pages/api/enquiries.ts, lib/enquiry.ts, components/brands/enquiry-form.tsx
Editorial content
Not started- Expected contract
- Articles, events, sponsor packages, partners, case studies and trust metrics become CMS collections when their pages are built. Models already carry draft, approved and published states and claim sources.
- Today
- Guides are drafts, trust metrics are placeholders, partners and case studies are not shown.
- Files
- types/content.ts, data/editorial.ts
Content rules
- Only published, non-sample content reaches the public site. Drafts and approved items show with a status chip in design preview.
- Every public claim (prize pool, figures, partners) carries a source and a verification date. Unverified claims stay hidden.
- Events are planned or confirmed. Prizes are advertised, awarded or paid. Entries are cash-paid or voucher.
- Money is stored in minor units with an ISO 4217 currency. Timestamps are UTC with the event's IANA time zone, displayed in local time with the event time alongside.
- Player data is limited to public profile fields. No identity documents or private transactions.
- No invented testimonials, partner endorsements, prizes paid, audience sizes, awards, locations, registration numbers or uptime claims.
Routes, SEO and redirects
| Route | Purpose | Status |
|---|---|---|
| / | Homepage | Built |
| /tournaments/{id} | Tournament detail. Keeps the current site's URL contract, so existing links need no redirect. | Built (sample) |
| /for-brands | For Brands with the live enquiry form, sections #sponsor, #partnerships, #host | Built |
| /login, /arena | Sign-in and My Arena gate (noindex) | Built (unavailable state) |
| /rules, /eligibility, /privacy, /terms, /support | Pending approved content. 404 on the public site until supplied | Placeholder |
| /about-us | About page. Keep the current URL when it is built | Next |
| /tournaments | Compete listing (nav currently points at the homepage section) | Next |
| /how-it-works, /rankings, /learn | Dedicated pages (nav currently points at homepage sections) | Next |
- Canonical origin is https://worldtradingtournament.com (constants/site.ts). Every page sets a unique title, description, canonical URL and Open Graph tags through the Seo component, with one H1.
- Index public tournament, results and education pages. Login, My Arena, checkout, internal and pending pages stay noindex.
- Redirects: export the current site's URLs, map each one to its new route, and add permanent redirects in next.config before launch. The tournament detail URL is unchanged.
- Structured data only for verified facts: no review schema and no event offers unless they are real and current.
Performance
- Targets
- LCP 2.5s or less, INP 200ms or less, CLS 0.1 or less, at the 75th percentile.
- Status
- Not measured yet. No pass is claimed until field data or lab runs on a mid-range Android phone on 4G, a recent iPhone and a desktop confirm it.
- Built for it
- Text-led hero (no image in the largest paint), self-hosted fonts with swap, no WebGL, motion on opacity and transform only, sample and content data kept server-side, native dialog and details instead of UI libraries.
- Media rules
- Approved photos as WebP or AVIF with fixed dimensions, lazy-loaded below the fold; the reel uses preload="none" and a poster.
Responsive and accessibility review
- Review widths: 360, 390, 768, 1024 and 1440px. Full navigation appears from 1280px; below that the menu opens a native modal dialog.
- 44px minimum touch targets, visible focus on every control, skip link, semantic landmarks and one H1 per page.
- Forms: visible labels, errors in text linked to fields, an error summary that takes focus, success only after the server confirms.
- Tables scroll inside their container or switch to compact rows without dropping values. No horizontal page overflow.
- Reduced motion removes reveals, hero drift and the line draw. Rankings never animate while being read.
Launch checklist
- Official WTT logo files (SVG) to replace the provisional wordmark and favicon
- Approved event photography and an optional reel with poster and captions
- Operator identity: legal entity, registration number, registered address
- Approved rules, eligibility policy, privacy notice (including email tracking) and terms, with versions and dates
- Support channels and hours
- Legal approval of the simulated trading disclaimer and the two FAQ answers marked "To confirm"
- WTT APIs connected: session, tournaments, standings, eligibility, entries
- Verified trust metrics, each with a period and source, or none
- Written approval for any partner name or logo
- A 16:9 social preview image (from approved photography)
- Sitemap, robots.txt and redirects for every replaced URL (export the current sitemap first)
- Confirm the X and Instagram links are WTT's official accounts
- Then set DESIGN_PREVIEW to false in constants/preview.ts and publish