diff --git a/apps/web/app/home.css b/apps/web/app/home.css index b263857e..d71ebe01 100644 --- a/apps/web/app/home.css +++ b/apps/web/app/home.css @@ -146,7 +146,7 @@ /* Grid layout for the headline / CTAs / lede triple. * Mobile: single column, document order = headline → CTAs (50/50 row) * → lede. So the CTAs sit above the fold without scrolling. - * Desktop: 2-col grid — headline in col 1, CTAs in col 2, lede spans + * Desktop: 2-col grid, headline in col 1, CTAs in col 2, lede spans * full width below. (Tim 2026-05-21) */ .vt-home-hero-top { display: grid; @@ -281,7 +281,7 @@ /* Tim 2026-06-05: top + bottom hairlines removed so the stats row * lives inside the hero rhythm with no chrome of its own. The single * gold divider between this row and the bet feature card comes from - * the new .vt-home-stats-rule below — that's the only horizontal + * the new .vt-home-stats-rule below, that's the only horizontal * line in this area now. */ padding-block: 0; } @@ -1233,7 +1233,7 @@ } /* The image background. image-set picks WebP first then falls back to * JPG. If the file is missing the layer is transparent and the - * underlying #15151a + gradient takes over — section still ships. */ + * underlying #15151a + gradient takes over, section still ships. */ .vt-bet-feature-bg { position: absolute; inset: 0; @@ -1294,12 +1294,12 @@ } .vt-bet-feature-headline em { font-style: italic; - /* Make "mental?" (the italic emphasis) WHITE per Tim 2026-06-05 - * while the design is still in this state. The question mark sits - * inside the so it picks up the italic + colour automatically. - * Slight WONK kicks the serif's swash details up. */ + /* Gold italic, matches the /the-bet header treatment so "mental?" + * reads as the brand pun on both surfaces. Subtle text-shadow lifts + * the gold off the dark photo scrim. Tim 2026-06-05. */ font-variation-settings: "opsz" 120, "SOFT" 50, "WONK" 1; - color: #ffffff; + color: #f6c64f; + text-shadow: 0 2px 12px rgba(0, 0, 0, 0.45); } .vt-bet-feature-shrug { font-family: Fraunces, ui-serif, Georgia, serif; @@ -1437,11 +1437,10 @@ column-gap: clamp(32px, 5vw, 64px); } } -.vt-home-stats-rule { - border: none; - border-top: 1px solid rgba(245, 197, 66, 0.22); - margin: clamp(20px, 3vw, 28px) 0 0; -} +/* .vt-home-stats-rule retired 2026-06-05, Tim wanted the divider + * between the stats row and the bet feature card gone entirely. + * Selector kept so any legacy markup still renders to nothing. */ +.vt-home-stats-rule { display: none; } .vt-home-stats-countdown { /* The compact countdown sits in its own grid cell so it can right- * align cleanly against the stats row on desktop. */ @@ -1457,10 +1456,11 @@ * above the fold on most desktop viewports. */ .vt-home-section--bet { border-top: none !important; - padding-top: clamp(16px, 2vw, 24px); + padding-top: 0 !important; + margin-top: clamp(12px, 1.5vw, 20px); } -/* Compact countdown variant — used inline next to the stats row. */ +/* Compact countdown variant, used inline next to the stats row. */ .vt-countdown--compact { padding: 0; background: none; diff --git a/apps/web/app/page.tsx b/apps/web/app/page.tsx index 7c446ef5..2a0fe3eb 100644 --- a/apps/web/app/page.tsx +++ b/apps/web/app/page.tsx @@ -1,11 +1,11 @@ /* eslint-disable react/no-unescaped-entities */ /** - * Home page — sales / landing flow for play.tournamental.com. + * Home page, sales / landing flow for play.tournamental.com. * * Tim's brief 2026-05-13: the home page must be a sales page, not a * news feed. Flow: * 1. Hero with the platform's one-line pitch + primary CTAs. - * 2. "Set your picks now" — the core game, single big CTA into the + * 2. "Set your picks now", the core game, single big CTA into the * bracket builder. * 3. 3D molecule callout (watch-along + interactive bracket * molecule) with features and benefits. @@ -172,7 +172,7 @@ export default async function HomePage(): Promise { // Split the lede on the {odds_link} placeholder so we can interpolate // the inline . Falls back gracefully when the placeholder is - // missing — render the bare translated lede. + // missing, render the bare translated lede. const ledeParts = lede.split("{odds_link}"); return ( @@ -258,16 +258,14 @@ export default async function HomePage(): Promise { /> - {/* ============== BET FEATURE ============== */} {/* Tim 2026-06-05: dramatic image-overlay feature card directly - * below the hero stats hairline. The --bet modifier kills the - * section's own border-top (the .vt-home-stats-rule above is - * the single divider) and tightens the section's top padding - * so the card lands above the fold on most viewports. */} + * below the hero stats row. The --bet modifier kills the + * default section border-top and zeroes top padding so the + * card lands tight under the stats with no divider. */}
- {/* ============== STEP 1 — PICKS ============== */} + {/* ============== STEP 1, PICKS ============== */} {/* Reveal-on-scroll wrappers below ride the shared motion grammar (8-14px rise + opacity, 600ms power3.out, light stagger). They replace nothing visible: each section was already visible @@ -333,11 +331,11 @@ export default async function HomePage(): Promise { {/* Step 2 (3D Molecule watch-along) and the Watch demo CTAs were - * dropped on 2026-05-21 — play app is bracket-only for the + * dropped on 2026-05-21, play app is bracket-only for the * 2026 WC push; the molecule still works on /world-cup-2026/molecule * but it's no longer promoted from the player surfaces. */} - {/* ============== STEP 2 — SYNDICATES (FRONT AND CENTRE) ============== */} + {/* ============== STEP 2, SYNDICATES (FRONT AND CENTRE) ============== */}
{step2Tag}

{step2Headline}

diff --git a/apps/web/app/the-bet/page.tsx b/apps/web/app/the-bet/page.tsx index 637ce4d0..ea8bc910 100644 --- a/apps/web/app/the-bet/page.tsx +++ b/apps/web/app/the-bet/page.tsx @@ -1,5 +1,5 @@ /** - * /the-bet — the house-prize promotion long-form, on the play app. + * /the-bet, the house-prize promotion long-form, on the play app. * * Lives on play.tournamental.com because the bet is FIFA-WC-bracket * specific and ties to the predictions database that the play app @@ -44,9 +44,8 @@ export default function TheBetPage(): JSX.Element { Am I mental for betting my house on it?

- If you can predict every one of the 104 matches at the - 2026 World Cup, I'll sign over what's left of - my equity. + If you can predict the correct outcome of all 104 matches at the + 2026 World Cup, I'll give you my house.

{/* Tim 2026-06-05: press release lives in * apps/web/public/press/. Anchor target=_blank, not next/link, @@ -67,7 +66,7 @@ export default function TheBetPage(): JSX.Element {

- I'm Tim Thomas. New Zealand engineer. Twenty-six years + I'm Tim Thomas. New Zealand entrepreneur. Twenty-six years building websites and apps. The last three weeks of those years, I built a FIFA World Cup prediction game.

@@ -76,7 +75,7 @@ export default function TheBetPage(): JSX.Element { matches at the 2026 World Cup correctly, I'll sign over my house.

-

It's worth NZ$1.5 million.

+

It's worth NZ$1.5 million.

Quick honesty break.

@@ -103,8 +102,7 @@ export default function TheBetPage(): JSX.Element {

If one person, anywhere in the world, predicts every one of - the 104 matches correctly through{" "} - Tournamental.com, + the 104 matches correctly through play.tournamental.com, I list the house, settle the bank, and wire the rest to their account.

@@ -121,14 +119,17 @@ export default function TheBetPage(): JSX.Element { need every pick locked in by the kickoff of its own match.

-

Worried? No.

+

Worried? No.
Risky? Hardly.

- 104 matches. Three outcomes each that count as a pick: home - win, draw, away win. + 104 matches in total. The group stage has 72 matches, each + with three possible outcomes (home win, draw, away win). The + knockout rounds have 32 matches, each with two outcomes (the + team that progresses, or the team that doesn't).

- Three to the power of one hundred and four is a number with{" "} - fifty digits.{" "} + Multiply that out: 372 × 232. The + answer is a number with{" "} + 44 digits, roughly 9.7 followed by 43 zeros.{" "} See the maths.

@@ -169,7 +170,7 @@ export default function TheBetPage(): JSX.Element {

Smart question. You shouldn't trust me; you should trust - the code, it's 100% open-source. + the code, it's 100% open-source on GitHub.

Every match kickoff, Tournamental hashes the predictions @@ -197,23 +198,28 @@ export default function TheBetPage(): JSX.Element { prediction game is the perfect engagement vehicle. Tournamental is the best one I could possibly build.

-

I'm proud of it. I want people to play it.

+

I'm proud of it. I want people to play it.

+

I've built it to handle 100,000+ concurrent users and want to put it to the test.

The fastest way for one Kiwi developer to be heard above five thousand other product launches in June 2026 is to put my house on the line and mean it. Done.

+

Yes, it's a publicity stunt, but it's a bloody good story isn't it? + Will it work? I don't know. We'll see. +

+

I'm a little bit torn doing this, and maybe mental. It's all in the name, I'm Tournamental.

- Side note: I built this in three weeks. That part + I built this in three weeks. That part shouldn't be possible either. AI coding tools changed what one developer can ship. The whole thing, sign-in, brackets, leaderboards, the 3D match renderer, 21 languages, the Bitcoin-blockchain audit trail, was one person at a laptop.

- If you're in the New Zealand tech industry and - you're reading this thinking “wait, three - weeks?”, yes. Three weeks. Welcome to 2026. + If you're reading this thinking “wait, three + weeks?”, yes. Three weeks. It would have taken 6 months and 6 figures to build this for the 2022 World Cup. + Welcome to 2026. Maybe there'll be a team of Optimuls robots playing in the 2030 World Cup? Elon?

How to enter

@@ -257,7 +263,7 @@ export default function TheBetPage(): JSX.Element {

Short version: open globally, 18+, one bracket per person. You must register with a valid mobile phone number and - verify the one-time code we send you — that's the + verify the one-time code we send you, that's the eligibility check. Picks lock at each match's kickoff. The prize is the{" "} net cash proceeds from the sale of the house{" "} @@ -267,25 +273,20 @@ export default function TheBetPage(): JSX.Element { winner. If two people somehow both go 104-for-104, the proceeds split.

-

- Tournamental is run by Growth Spurt Ltd, - Auckland. -

+

See you on the leaderboard.

- Tim Thomas, Tournamental + Tim Thomas,
Tournamental
info@tournamental.com

- Pick your bracket → - - - Show me the maths + Pick your bracket to enter → +
diff --git a/apps/web/public/hero/the-bet-hero.jpg b/apps/web/public/hero/the-bet-hero.jpg new file mode 100644 index 00000000..b06af1b4 Binary files /dev/null and b/apps/web/public/hero/the-bet-hero.jpg differ diff --git a/apps/web/public/hero/the-bet-hero.png b/apps/web/public/hero/the-bet-hero.png new file mode 100644 index 00000000..3890ab4b Binary files /dev/null and b/apps/web/public/hero/the-bet-hero.png differ diff --git a/apps/web/public/hero/the-bet-hero.webp b/apps/web/public/hero/the-bet-hero.webp new file mode 100644 index 00000000..62daeb58 Binary files /dev/null and b/apps/web/public/hero/the-bet-hero.webp differ diff --git a/apps/web/public/press/2026-06-05.html b/apps/web/public/press/2026-06-05.html new file mode 100644 index 00000000..9dee9552 --- /dev/null +++ b/apps/web/public/press/2026-06-05.html @@ -0,0 +1,197 @@ + + + + +FOR IMMEDIATE RELEASE: Auckland software engineer bets his NZ$1.5M house on FIFA World Cup 2026 + + + + +
+

For immediate release

+

5 June 2026, Auckland, New Zealand

+
+ +

A New Zealand software engineer is publicly betting his NZ$1.5 million house that no one will perfectly predict the 2026 FIFA World Cup, and the bet is open to anyone, anywhere

+ +

In a week when the biggest sporting event on Earth kicks off in Mexico, Canada and the United States, an Auckland software developer is putting his entire property on the line as the prize in a free, global prediction game he built solo in three weeks.

+ +

Tim Thomas (+64 21 535 832, info@tournamental.com) is the founder of Tournamental (play.tournamental.com), a tamper-proof FIFA World Cup bracket-prediction platform. The promise is simple: if any single person, anywhere in the world, correctly predicts the result of all 104 matches at FIFA World Cup 2026, Thomas will sell his Auckland home, pay off the bank, and wire the net cash proceeds (an estimated NZ$700,000 at today's valuation) to the winner.

+ +

The platform launches publicly seven days before the opening match on 11 June.

+ +
"A team of six developers would have taken six months to build this two years ago. AI tooling let me do it solo in three weeks," said Thomas. "The tournament is the biggest sporting event on Earth. Every breakfast show, every football podcast, every workplace Slack channel is going to be talking about it for five weeks. I've built the engagement layer they can drop straight in, free, branded as theirs, and I'm betting my house that nobody can beat the maths."
+ +

The full long-form letter from the founder is published at play.tournamental.com/the-bet, with the probability working at play.tournamental.com/odds and the public terms at play.tournamental.com/terms/house-prize.

+ +
+

Help your audience steal Tim's house

+ +

Any TV show, radio station, podcast, newspaper or influencer covering the World Cup can spin up a free, branded Tournamental pool in five minutes and put it in front of their audience as a five-week engagement hook. The pitch writes itself: every listener, viewer or reader who joins the pool is one bracket closer to being the person who wins Tim's house.

+ +

The branded pool keeps the show's logo, colours, and presenter copy. The leaderboard updates live. The audience can edit picks all the way up to each match's kickoff. The show gets daily on-air talking points ("76% of you picked Brazil to beat Croatia, here's what changed today") and five weeks of guaranteed audience return.

+ +

If one of the show's audience members happens to be the one in 10 thousand trillion trillion who nails 104 from 104, the keys to Tim's house get wired to them via Tournamental.

+ +
"I want broadcasters to encourage their audiences to take my house off me," said Thomas. "If someone wins, I lose the house but I'd love to know I gave it away off the back of a podcast or a breakfast show. That's the dream version of this story."
+
+ +

Why the bet exists

+ +

Thomas, who has been building websites and apps for 26 years and runs Growth Spurt, an Auckland-based web agency, says the bet is the fastest way for a single solo developer to be heard above the noise of other product launches in June 2026.

+ +
"I'm not insured. I'm not running a sweepstake. I built the system, I know the maths, and I'd rather skin in the game than skin in an insurance broker's fine print. If someone nails 104 from 104, the bank gets paid out of the sale, the winner gets the cheque, and I'm moving back in with mum at age 50."
+ +

The maths is the story

+ +

There are 104 matches in the 2026 FIFA World Cup. The group stage accounts for 72 of those, each with three possible outcomes (home win, draw, away win). The knockout rounds account for the remaining 32 matches, each with two possible outcomes (the team that progresses, or the team that does not).

+ +

The total number of distinct possible 104-match brackets is therefore 3 to the power of 72, multiplied by 2 to the power of 32. The answer is a number with 44 digits, approximately 9.74 followed by 43 zeros.

+ +

For context, ESPN has run a March Madness bracket challenge since 1998, with millions of entries every single year. Each ESPN bracket covers 63 matches, with two possible outcomes per match (basketball, no draws). The total combinatorial space for an ESPN bracket is 2 to the power of 63, approximately 9.2 quintillion. In 27 years of ESPN tracking, nobody has ever submitted a perfect bracket.

+ +

Tournamental has 104 matches, and a combinatorial space approximately 10 thousand trillion trillion times larger.

+ +

The full working is at play.tournamental.com/odds.

+ +

How it stays honest

+ +

Every match kickoff, Tournamental hashes the entire predictions database and commits the hash to the Bitcoin blockchain via OpenTimestamps. The script is open-source. The audit trail is publicly verifiable at play.tournamental.com/verify.

+ +

If Thomas (or any external attacker) altered a single pick after a match kicked off, the new hash would not match the on-chain commitment, and any auditor could prove it within minutes using a public command-line tool. Picks become immutable the moment their match kicks off, on the authority of the Bitcoin blockchain.

+ +

The full source code is open under Apache 2.0 at github.com/0800tim/tournamental and is self-hostable by any organisation that wants to run its own pool under its own infrastructure.

+ +

Product points

+ +
    +
  • Free to play. No app install, no password. Sign in by WhatsApp, SMS, email or Telegram one-time code.
  • +
  • 104 picks per player across the full bracket: groups, R32, R16, quarter-finals, semi-finals, third-place play-off, final.
  • +
  • Picks can be edited at any time, locking only when each individual match kicks off. (Other bracket apps lock everything at the opening match.)
  • +
  • Real-time leaderboards per pool, per country, globally and against friends.
  • +
  • 3D match-molecule renders every fixture as predicted.
  • +
  • 21 languages including English, Spanish, French, German, Portuguese (Brazil and Portugal), Italian, Japanese, Korean, Simplified Chinese, Arabic, and te reo Māori.
  • +
  • Custom-branded pools. Logo, colours, prize copy, optional country gating. Two minutes to set up. No engineering needed.
  • +
  • Optional prize pools. Pool owners can offer sponsored prizes, set entry fees and pot splits, or run free pools for pure engagement.
  • +
+ +

The platform is free for accredited media partners through the 2026 cycle.

+ +

Eligibility for the house prize

+ +

Open globally to anyone 18 or over. Free to enter. The only condition is that entrants register with a valid mobile phone number and verify the one-time code, so the Promoter can confirm eligibility if there is a winner. Picks lock at each match's kickoff. Full terms at play.tournamental.com/terms/house-prize.

+ +

Privacy and trust

+ +

No passwords stored. No third-party ad tracking. No data sale to external parties. New Zealand-based operations.

+ +

About

+ +

Tournamental is a subsidiary of Growth Spurt Ltd, a technology company based in Auckland, New Zealand. The platform is open-source under the Apache 2.0 licence.

+ +

Founder available for interview

+ +

Tim Thomas is available for live and recorded interviews from Auckland on short notice over the seven days leading up to the tournament, and throughout the tournament itself. He can speak to:

+ +
    +
  • The build (three weeks, solo, AI-assisted)
  • +
  • The bet (mortgage, equity, why no insurance)
  • +
  • The technology (open-source, blockchain audit trail, anti-tamper)
  • +
  • The product (five-week engagement layer for any broadcaster, and "help your audience steal Tim's house" as the segment hook)
  • +
+ +
+

Press contact

+

Tim Thomas, Founder

+

Tournamental (a subsidiary of Growth Spurt Ltd, Auckland)

+

+64 21 535 832 (WhatsApp, voice, SMS)

+

info@tournamental.com

+

play.tournamental.com

+
+ +

ends

+ + + diff --git a/apps/web/public/press/tournamental-press-release-2026-06-05.pdf b/apps/web/public/press/tournamental-press-release-2026-06-05.pdf new file mode 100644 index 00000000..4ca5ce2b Binary files /dev/null and b/apps/web/public/press/tournamental-press-release-2026-06-05.pdf differ