The StreakBlink story · Solana Blinks World Cup Hackathon

Predictions where the fans already are.

No app. No login. No database. Just a Blink in a social feed, a 0-lamport Solana transaction, and a leaderboard rebuilt live from chain history alone — tested for real, live, against today's World Cup Final.

What it is

Every prediction product makes fans come to it — an app, a site, a login. The World Cup's actual attention surface is the social feed, mid-match. StreakBlink puts the market inside the feed as a Solana Action: a fan sees the question, taps, signs with the wallet they already have, and is back to scrolling in five seconds. Call it right and a streak grows — on-chain, provably, with nothing to install.

0 lamports per pick

Every prediction is a real signed transaction — value transferred is zero. The memo is the payload, not the money.

1 RPC call, 1 account

getSignaturesForAddress on one public board account reconstructs every pick, every streak, the whole leaderboard.

Free predictions, always

No stakes, no payouts, no wagering — streaks are bragging rights, not money. That's true in the demo and in the live Final.

How it works — no database, on purpose

Three connected nodes representing a feed tap, a signed transaction, and a single chain account that the whole leaderboard is derived from.
  1. 1. Tap in the feed

    A Blink unfurls wherever a link would — X, Telegram, dial.to. “Next goal: Spain or Argentina?” Tap a side. No app, no install, no new tab.

  2. 2. Sign a 0-lamport transfer + memo

    The wallet you already have signs one transaction: a 0-lamport transfer to a single public board account, carrying an SPL memo — { qid, pick, wallet } — as its only payload.

  3. 3. The chain is the whole database

    Every pick references the same board account, so one getSignaturesForAddress(BOARD) call discovers the entire prediction history. Streaks and the leaderboard are computed from that — live, from nothing else.

The board account — the entire database, in one address

This is the actual public account every StreakBlink prediction references. Anyone can independently recompute every streak from it — the leaderboard is a pure function of public chain data, not something we could fake even if we wanted to.

8YzZqWg17wxHHHMsHA3zevqVdVbmYMGNEyoxuHHVJKeP
Live, today

2026 World Cup Final · Spain vs Argentina

This is the part a demo can't fake: today we ran the Final market against the real match, on the real free-tier TxLINE feed — and it did not go perfectly the first time. Here's exactly what happened, with the receipts.

  1. Pre-kickoff · devnet
    First tap, before kickoff — devnet

    The Final market started life on Solana devnet, same as the demo game. A real signed transaction, verifiable on-chain right now:

    4DJfxwJomod1wuvxKDjq8WD6mRjeq7JZtEpXHycmvUmXrVCqCGq5DrvYNMZZtkfxMfoPm8V3NDsZSjLNAfRt26TX
  2. ~kickoff · bug #1
    Bug found live: the status field lied

    The live TxLINE feed's GameState field stayed "scheduled" for the entire match — it never once said the game had started. Caught during the actual live event, not in a test. The real signal turned out to be a different field, StatusId: 1 = pre-kickoff, 2 = live, 3 = halftime — confirmed against the real 1→2 transition at the real kickoff whistle, and fixed on the spot.

  3. Live · bug #2
    Bug found live: a false-positive goal

    The goal-detection logic matched any Action string containing "goal" — which briefly caught "goal_kick", a routine goalkeeper restart, not a score. That false positive voided a real prediction for a moment before it was caught and excluded with a targeted fix, live, mid-match.

  4. Halftime · the pivot
    Halftime: devnet to real mainnet, live

    At halftime the Final market moved from devnet to real Solana mainnet — an architectural decision made and shipped during the event itself, not planned weeks in advance. The first tap to work end-to-end on the new cluster:

    61qFdsQYWjMDqonLrky7hGwG7v1WbSRWi6thg6eYdiPctqRpsyhnaMnUuzVjK8Nx969goV68fcFfqQPBrUiFqDzs
A signal line shifting from a dim cool tone to a bright lime tone at a central pivot point, representing the live devnet-to-mainnet switch at halftime.
A screenshot of the live picks table on /final, showing a real wallet's real Spain pick on the mainnet goal market, status open.

Not a staged screenshot — the project owner tapped this pick live from his own phone wallet during the match, real mainnet transaction, and it's reconstructed on this page the same way every other row is: straight from chain history.

Score at time of writing — 4:58 PM ET, July 19, 2026

Spain 0 – 0 Argentina, in progress. We're reporting this honestly rather than inventing a result: check the live market for the current score — it updates from the same real feed this page describes.

Every pick on the Final market is a real mainnet transaction right now. If the feed can't attribute a goal cleanly, the market voids — no fake wins, ever.

Shipped live, too: the redesign

The UI you're looking at — "broadcast desk at night" — replaced an earlier, rougher vibe-coded version, rebuilt and shipped during the same live event as the mainnet pivot above. Same data, same chain wiring, same honesty rails — a scoreboard-grade interface instead of a first draft.

A split composition: scattered chaotic mismatched shapes on one side representing the earlier interface, a single precise ordered square on the other representing the broadcast-desk redesign.
Before

Default-feeling scaffolding, no consistent type or color system, emoji standing in for iconography.

After — "broadcast desk at night"

One dark night-turf palette, one lime accent, tabular mono for every number, a bespoke 17-glyph icon set, motion reserved for live state. The data and chain wiring underneath never changed.

Real vs. simulated — stated plainly

Real
  • Every prediction — a signed Solana transaction, always.
  • The Final market — real Spain vs Argentina data from the live TxLINE feed, on devnet pre-kickoff and mainnet from halftime on.
  • The leaderboard — 100% reconstructed from chain history, zero database, for both the demo game and the Final.
Simulated
  • The 90-second demo game — a recorded, TxLINE-shaped synthetic fixture on a compressed loop, labeled SYNTHETIC everywhere it appears. Always devnet.
  • Nothing about the Final market's score or feed is simulated — only the demo game's match events are.

No stakes, no wagering, no payouts anywhere in this product — the demo game and the live Final both run on free predictions only.

Try the live market yourself.

Same Blink, same chain, same honesty rails — no install required.