halfscarf GitHub

World Cup 2026 · built for the Tether Developers Cup

Two fans. Nothing in common. One scarf.

She speaks Spanish. He speaks English. The stadium Wi-Fi is on its knees and neither carries the other's currency. halfscarf joins their two phones directly — voice translated by AI that never leaves the device, over a link with no server in the middle, settling the beer bet in USDt from wallets only they hold.

01Half-time, concourse B.
Three walls between two strangers.

NO. 1

No common language

“¿Viste ese gol?” meets a blank smile. Translation apps want the cloud; the cloud wants a signal.

→ solved on-device · QVAC
NO. 2

No reliable network

80,000 phones on one cell tower. Anything that needs a server is already out of the match.

→ solved peer-to-peer · Pears
NO. 3

No common currency

Pesos in one pocket, pounds in the other, and the beer queue takes neither.

→ solved in USDt · WDK

02Ninety seconds of matchday,
on a fourteen-second loop.

A faithful re-run of the real app: every number below was measured on a live session, not invented. Prefer the real thing? ▶ watch the recorded live session (1:57).

  1. 00s Alice holds the mic
  2. 02s Whisper + Bergamot run on her phone — 1.78s, no cloud
  3. 04s the sentence crosses fan-to-fan, Noise-encrypted
  4. 06s Bob reads it — and hears it, TTS on his phone
  5. 09s Bob tips 🍺 1 USDt — on-chain, self-custodial
  6. 12s Alice’s wallet ticks up. Rematch.

03One meetup,
all three tracks of the Cup.

QVAC · local AI

The whole AI stack lives on the phone.

Push-to-talk. Whisper transcribes, Bergamot translates, Supertonic speaks — three models, one device, zero requests leaving it. The peer hears your words in their own language.

speech → text
0.95s
translate
0.35s
text → speech
2.3s
mic → translated text, measured live
1.78s
PEARS · P2P

No server. Not “serverless” — none.

A shared room code — typed, or scanned as a QR — becomes a DHT topic. Two devices find each other on the public swarm and speak directly over an end-to-end encrypted stream.

room codesha256DHT topicNoise stream

paired in 6–9s across the public internet · chat, payments & voice share one channel

WDK · wallets

The beer bet settles on-chain.

Each fan’s wallet is generated on their device and stays there — halfscarf never sees a seed. Tips and requests ride the same P2P channel; the transfer itself is a real USDt transaction.

live testnet transfer · 0xb557ecd4…1866a1 ↗

04Kick off in three commands.

two terminals · one match
# clone & install (Node ≥ 22.17)
$ git clone https://github.com/tang-vu/halfscarf && cd halfscarf && npm install

# fan one — Alice 🇦🇷
$ INSTANCE=Alice NATION=Argentina FLAG=🇦🇷 LANG_CODE=es PORT=3001 npm start

# fan two — Bob 🏴
$ INSTANCE=Bob NATION=England FLAG=🏴 LANG_CODE=en PORT=3002 npm start

then open localhost:3001/?room=worldcup-final and :3002/?room=worldcup-final — they pair themselves. Or show a QR on one screen and scan it with the other.