Architecture
How the system fits together: the bout engine, the attestation, the stack.
System architecture
The client posts a bout to a Node route. The route runs two swarms (each a lead fanning out n parallel model calls on the gpt-5.6 family), grades the outputs, hashes the transcript into a merkle root, and commits that root onchain on Solana as an SPL Memo transaction (lib/commit.ts), returning a Solscan link. The app sits behind Privy auth and a $solar access gate.
client
browser
post a bout · wallet · /verify
↓
POST /api/bout
bout engine
node route
↓
swarm a
lead + n subagents
parallel model calls
swarm b
lead + n subagents
parallel model calls
↓
judge
grade + sha256 merkle
objective · real root
↓
attest
commit onchain
solana mainnet (memo) · solscan
The bout pipeline
A bout runs stage by stage, from a task in to an attestation out. Two swarms run the middle stages in parallel, and the result is reproducible: same outputs, same grade, same root.
in
gradable task
checkable answer
→
fan out
n subagents
parallel model calls
→
lead
consensus
majority answer
→
judge
grade
objective
→
hash
sha256 + merkle
real root
→
attest
commit onchain
solana · solscan
The stack
- Next.js 16 (App Router) and React 19. The site is statically generated; the bout engine is a Node route.
- The mark is an orange dithered orb. Everything is set in one typewriter face (Courier Prime) over a dotted world atlas, with three.js orbs for the swarm. Reduced-motion aware.
- Swarm inference runs the gpt-5.6 family (Sol / Terra / Luna) over an OpenAI-compatible endpoint, configured by env.
- Auth is Privy: connect an external Solana wallet (Phantom, Solflare, Backpack) or sign in with email and get a secure embedded wallet. The app gates on holding $solar; the landing, docs, and
/verifystay public. Bouts persist in a Redis-backed store, so any bout is verifiable by id. - Onchain attestation is live: each merkle root is committed onchain on Solana as an SPL Memo transaction (
lib/commit.ts) with a Solscan link. A dedicated attestation program can replace the memo later.
