Football Fan Mesh Network + Local AI + Self-Custodial Tipping
A peer-to-peer stadium mesh platform that connects football fans via P2P networking (Pears/Hyperswarm), delivers AI-powered match predictions running entirely on-device (QVAC SDK), and enables self-custodial tipping and payments (WDK/Tether).
Tether Developers Cup 2026 — 3-Track Entry
- 🧠 QVAC / Local AI — On-device match predictions, fan message classification, RAG knowledge base
- 📡 Pears / P2P — Distributed fan messaging over Hyperswarm P2P network
- 💰 WDK / Wallets — Self-custodial wallet creation, fan tipping, goal celebration tips
🏟️ StadiumMesh
├── ⚽ Live Match — Scoreboard, goals, events, real-time SSE
├── 💬 Fan Chat — P2P messaging (Pears) + categorized messages (QVAC)
├── 🤖 AI Predict — QVAC-powered match predictions & RAG
├── 💰 Wallet & Tips — WDK self-custodial tipping
└── 📡 Network — P2P mesh, peer discovery, integration status
# 1. Start the Python server
./server.py
# 2. Start the QVAC sidecar (separate terminal)
cd qvac && npm install && node qvac-service.js
# 3. Open the dashboard
open http://localhost:4180/dashboard
# 4. Use the CLI
./stadium status
./stadium match start "FC Barcelona" "Real Madrid"
./stadium match goal "Messi" 23
./stadium predict "FC Barcelona" "Real Madrid"
./stadium wallet create "My Wallet"┌──────────────────────────────────────────────────────────────┐
│ StadiumMesh Python Server │
│ :4180 — HTTP API, Dashboard, Match Engine, Fan State │
│ :4191 — P2P Mesh (UDP peer discovery & messaging) │
└────────────────────┬─────────────────────────────────────────┘
│ HTTP (localhost :4198)
┌────────────────────▼─────────────────────────────────────────┐
│ StadiumMesh Node.js Sidecar │
│ │
│ ┌─────────────────┐ ┌──────────────┐ ┌────────────────┐ │
│ │ QVAC SDK │ │ Pears Stack │ │ WDK Wallet │ │
│ │ @qvac/sdk │ │ hyperswarm │ │ @tether/wdk │ │
│ │ │ │ hypercore │ │ │ │
│ │ • Predictions │ │ hyperbee │ │ • Create │ │
│ │ • Classification│ │ │ │ • Balance │ │
│ │ • RAG │ │ • P2P chat │ │ • Transfer │ │
│ │ • AI Agents │ │ • Fan mesh │ │ • Goal tips │ │
│ └─────────────────┘ └──────────────┘ └────────────────┘ │
└──────────────────────────────────────────────────────────────┘
The Python server handles real-time match state, HTTP routing, SSE events, and lightweight P2P mesh discovery (stadium-to-stadium). The Node.js sidecar handles all three mandated SDKs:
- QVAC requires the Node.js JS/TS SDK (
@qvac/sdk) - Pears requires the Pear/Hyperswarm JS runtime
- WDK is a JS/TS SDK for self-custodial wallets
The two processes communicate over localhost HTTP, keeping each layer clean and independently testable.
| Feature | Description |
|---|---|
| Match Predictor | AI predicts scores, key players, match dynamics |
| Fan Message Classification | Auto-categorizes messages (celebration, complaint, question, tip-request, general) |
| RAG Knowledge Base | Ask questions about teams, players, rules — answered from local context |
| Zero Cloud | All inference runs on-device via @qvac/sdk — no API keys, no data exfiltration |
AI runs entirely on the user's device using the QVAC SDK (@qvac/sdk). Default model: LLAMA_3_2_1B_INST_Q4_0 (~1B params). Works on laptops, desktops, and SBCs.
| Feature | Description |
|---|---|
| Hyperswarm P2P | Distributed fan messaging over the Hyperswarm DHT |
| Hypercore + Hyperbee | Persistent, append-only message stores per topic |
| Stadium Topics | Fans join match-specific topics (stadium-global, match-<id>) |
| No Central Server | Messages are distributed across the P2P network |
Built on the Pears Stack: Hyperswarm for peer discovery, Hypercore for storage, Hyperbee for queryable indexes.
| Feature | Description |
|---|---|
| Wallet Creation | Create self-custodial wallets for fans |
| Balance Check | Query wallet balances |
| Fan Tipping | Send tips between fans during the match |
| Goal Celebration Tips | Tip a player when they score — celebration economy |
Built on the Tether Wallet Development Kit (WDK) — users hold their own keys, non-custodial by design.
| Method | Path | Description |
|---|---|---|
GET |
/status |
Full stadium status |
GET |
/match/status |
Match state (score, minute, teams) |
POST |
/match/start |
Start match |
POST |
/match/stop |
End match |
POST |
/match/goal |
Score a goal |
GET |
/match/goals |
Goal history |
GET |
/match/events |
Match event log |
| Method | Path | Description |
|---|---|---|
POST |
/fan/message |
Send a fan message (auto-classified by QVAC) |
GET |
/fan/messages |
Message history |
POST |
/fan/predict |
Submit a fan prediction |
GET |
/fan/predictions |
All predictions |
GET |
/fan/tips |
Tip history |
| Method | Path | Description |
|---|---|---|
GET |
/qvac/status |
QVAC sidecar status |
POST |
/qvac/predict |
AI match prediction |
POST |
/qvac/classify |
Classify a message |
POST |
/qvac/rag |
Query knowledge base |
| Method | Path | Description |
|---|---|---|
GET |
/pears/status |
Pears mesh status |
POST |
/pears/send |
Send P2P message |
GET |
/pears/messages |
Get P2P messages |
| Method | Path | Description |
|---|---|---|
GET |
/wdk/status |
WDK status |
POST |
/wdk/wallet |
Create wallet |
POST |
/wdk/balance |
Check balance |
POST |
/wdk/transfer |
Send tip |
POST |
/wdk/tip-goal |
Tip a goal! |
| Method | Path | Description |
|---|---|---|
GET |
/events |
Server-Sent Events stream |
StadiumMesh wraps the football experience in a playful stadium metaphor:
| Element | Meaning |
|---|---|
| Match | Active game session |
| Goal | Score event with celebration alert |
| Fan | Connected user |
| Message | Fan chat, classified by AI |
| Tip | P2P payment between fans |
| Stadium | A mesh node (each stadium is a server) |
| Pears | P2P messaging layer |
| Kick Off | Start match |
| Full Time | End match |
./stadium status # Server status
./stadium match start "Arsenal" "Chelsea" # Start a match
./stadium match goal "Saka" 32 # Score a goal
./stadium match stop # End match
./stadium predict "Liverpool" "Man City" # AI prediction
./stadium classify "What a goal!" # Categorize message
./stadium rag "Who won the 2026 World Cup?" # RAG query
./stadium wallet create "John" # Create wallet
./stadium wallet balance <addr> # Check balance
./stadium wallet transfer <from> <to> 10 # Send tip
./stadium wallet tip-goal <from> "Salah" 5 # Tip a goal!
./stadium pears send global "Hello stadium!" # P2P broadcast| Variable | Default | Description |
|---|---|---|
STADIUM_PORT |
4180 |
HTTP server port |
STADIUM_QVAC_PORT |
4198 |
QVAC sidecar port |
STADIUM_HOST |
localhost | Server hostname |
STADIUM_MESH |
1 |
Enable P2P mesh |
STADIUM_MESH_PORT |
4191 |
Mesh UDP port |
STADIUM_HOME_TEAM |
StadiumMesh FC | Home team name |
STADIUM_AWAY_TEAM |
Hash United | Away team name |
STADIUM_LEAGUE |
Premier League | League name |
STADIUM_NAME |
(hostname) | Stadium name |
├── server.py # Python HTTP + mesh server
├── stadium # CLI client
├── qvac/
│ ├── package.json # Node.js dependencies
│ ├── qvac-service.js # QVAC + Pears + WDK sidecar
│ ├── pears.js # Pears/Hyperswarm P2P mesh
│ └── wdk.js # WDK wallet integration
├── web/
│ └── index.html # Football-themed dashboard SPA
├── README.md
└── LICENSE
- Python 3.10+
- Node.js 22.17+
- npm 10.9+
python3 server.pycd qvac
npm install
# Fix Bare runtime binary permissions (linux-arm64)
chmod +x node_modules/bare-runtime-linux-arm64/bin/bare 2>/dev/null || true
node qvac-service.jsNavigate to http://localhost:4180/dashboard
Track 1 — QVAC (Local AI): All inference via @qvac/sdk — match predictions, message classification, RAG. Zero cloud dependencies. On-device privacy.
Track 2 — Pears (P2P): Hyperswarm-based distributed fan messaging. Hypercore/Hyperbee persistence. Topic-based P2P channels.
Track 3 — WDK (Wallets): Self-custodial wallet creation and tipping. Fan-to-fan transfers. Goal celebration tipping economy.
Judging Criteria:
- ✅ Technical ambition: 3 independent SDK integrations in a single application
- ✅ User experience: Real-time dashboard, live SSE events, CLI, AI interactions
- ✅ Real-world use: Stadium fan engagement, P2P messaging, AI predictions, tipping economy
- ✅ Creativity: Football-themed mesh protocol, AI-classified fan messages, goal celebration tips
- ✅ Real use of track: All three SDKs meaningfully integrated and demonstrable
- GitHub: https://github.com/WilliamMajanja/StadiumMesh
- Demo Video: (create unlisted YouTube link, add to DoraHacks BUIDL)
- BUIDL: https://dorahacks.io/hackathon/tether-developers-cup
When submitting on DoraHacks, select all three tracks:
- QVAC : Local AI
- Pears : Peer to Peer
- WDK : Wallets
Apache 2.0 — see LICENSE.