Skip to main content

Design preview

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

RoutePurposeStatus
/HomepageBuilt
/tournaments/{id}Tournament detail. Keeps the current site's URL contract, so existing links need no redirect.Built (sample)
/for-brandsFor Brands with the live enquiry form, sections #sponsor, #partnerships, #hostBuilt
/login, /arenaSign-in and My Arena gate (noindex)Built (unavailable state)
/rules, /eligibility, /privacy, /terms, /supportPending approved content. 404 on the public site until suppliedPlaceholder
/about-usAbout page. Keep the current URL when it is builtNext
/tournamentsCompete listing (nav currently points at the homepage section)Next
/how-it-works, /rankings, /learnDedicated 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

  1. Official WTT logo files (SVG) to replace the provisional wordmark and favicon
  2. Approved event photography and an optional reel with poster and captions
  3. Operator identity: legal entity, registration number, registered address
  4. Approved rules, eligibility policy, privacy notice (including email tracking) and terms, with versions and dates
  5. Support channels and hours
  6. Legal approval of the simulated trading disclaimer and the two FAQ answers marked "To confirm"
  7. WTT APIs connected: session, tournaments, standings, eligibility, entries
  8. Verified trust metrics, each with a period and source, or none
  9. Written approval for any partner name or logo
  10. A 16:9 social preview image (from approved photography)
  11. Sitemap, robots.txt and redirects for every replaced URL (export the current sitemap first)
  12. Confirm the X and Instagram links are WTT's official accounts
  13. Then set DESIGN_PREVIEW to false in constants/preview.ts and publish