Up to 16 pilgrims glide across a floating terrace, painting every tile they
cross in soft Monument-Valley pastels. Step on a white bloom and a whole
patch blossoms in your colour. When the sun sets — 45 seconds — the largest
mosaic takes the round; first to 3 rounds keeps the terrace. The edges fold
back on themselves: walk off one side, appear on the other.
There is no game server. Your browser and your friends' browsers are
js-libp2p peers: they meet through a
circuit-relay on signal.ardegazu.ro, prove room membership
with a sealed hello derived from the invite link's secret, then upgrade to
direct WebRTC. libp2p's noise layer encrypts every pair end-to-end — even
the relay only ever routes ciphertext. The room key lives in the URL
fragment and never leaves your browser. One peer referees the round; if it
disappears, the terrace quietly elects a new referee and starts the next
sunrise.
This page is also the repository
The site you're reading is a static snapshot that doubles as a
git remote (dumb-HTTP protocol, loose objects):
git clone https://git.ardegazu.ro/game3.git
Run it yourself
cd tessera/client
npm install
npm run dev # http://localhost:5173 — open two tabs on the same #room URL
Honest guarantees & limits
End-to-end encrypted: every peer pair is noise-encrypted
(relay included); room membership is proven by an AES-256-GCM hello
keyed from the room secret, which the relay never sees.
No accounts, no database, no telemetry. Static files + WebRTC.
Host-authoritative: the referee peer could cheat in its own
favour — play with people you like.
Full mesh: rooms allow 16, but a practical ceiling is ~12
simultaneous players (O(n²) connections).
No history: close the last tab and the terrace is gone;
the room key in the link is the only state.
If direct connection fails, traffic falls back to the circuit relay
or TURN — rate-limited, and still unreadable to either.
Anatomy
client/src/net/ — the js-libp2p layer (bootstrap, room
crypto, peer manager), vendored from
neon-grid; only the
protocol id is game-specific
Până la 16 pelerini alunecă pe o terasă plutitoare, pictând fiecare plăcuță
pe care o traversează în pasteluri blânde, à la Monument Valley. Calci pe o
floare albă și un petic întreg înflorește în culoarea ta. Când soarele
apune — 45 de secunde — cel mai mare mozaic ia runda; primul la 3 runde
păstrează terasa. Marginile se îndoaie una în alta: ieși pe o parte, apari
pe cealaltă.
Nu există server de joc. Browserul tău și browserele prietenilor tăi sunt
peers js-libp2p: se întâlnesc printr-un
circuit-relay pe signal.ardegazu.ro, dovedesc apartenența la
cameră cu un hello sigilat derivat din secretul linkului de invitație, apoi
trec pe WebRTC direct. Stratul noise al lui libp2p criptează fiecare
pereche cap-la-cap — până și releul rutează doar ciphertext. Cheia camerei
stă în fragmentul URL-ului și nu pleacă niciodată din browser. Un peer
arbitrează runda; dacă dispare, terasa alege în liniște un arbitru nou și
pornește următorul răsărit.
Pagina asta e și repository-ul
Situl pe care îl citești e un snapshot static care e totodată un git
remote (protocolul dumb-HTTP, loose objects):
git clone https://git.ardegazu.ro/game3.git
Rulează-l singur
cd tessera/client
npm install
npm run dev # http://localhost:5173 — deschide două taburi pe același URL #cameră
Garanții și limite, pe bune
Criptat cap-la-cap: fiecare pereche de peers e criptată noise
(releu inclus); apartenența la cameră se dovedește cu un hello
AES-256-GCM derivat din secretul camerei, pe care releul nu-l vede
niciodată.
Fără conturi, fără bază de date, fără telemetrie. Fișiere
statice + WebRTC.
Autoritate la gazdă: peer-ul arbitru ar putea trișa în
favoarea lui — joacă cu oameni care îți plac.
Mesh complet: camerele permit 16, dar plafonul practic e ~12
jucători simultani (conexiuni O(n²)).
Fără istoric: închizi ultimul tab și terasa dispare; cheia
camerei din link e singura stare.
Dacă conexiunea directă eșuează, traficul cade pe circuit relay sau
TURN — cu limită de debit, și tot ilizibil pentru amândouă.
Anatomie
client/src/net/ — stratul js-libp2p (bootstrap, cripto de
cameră, manager de peers), preluat din
neon-grid; doar id-ul de
protocol ține de joc
client/src/game/ — jocul: protocol de rețea tipat, simulare
la gazdă indexată pe locuri, renderer izometric pe canvas, clinchete
pentatonice
deploy/publish-repo.sh — construiește chiar pagina asta +
oglinda bare
TESSERA
mozaikok csendes versenye — szerver nélkül, p2p, végponttól végpontig titkosítva
Akár 16 zarándok siklik egy lebegő teraszon, és minden lapot, amin áthalad,
lágy Monument Valley-pasztellre fest. Lépj egy fehér virágra, és egy egész
folt virágzik ki a színedben. Amikor lemegy a nap — 45 másodperc —, a
legnagyobb mozaik viszi a kört; aki előbb ér 3 körig, azé marad a terasz.
A szélek önmagukba hajlanak: az egyik oldalon kilépsz, a másikon
megjelensz.
Nincs játékszerver. A te böngésződ és a barátaid böngészői
js-libp2p peerek: egy circuit-relay-en át
találkoznak a signal.ardegazu.ro-n, a szobatagságot a
meghívólink titkából származtatott lepecsételt hellóval bizonyítják, majd
közvetlen WebRTC-re váltanak. A libp2p noise rétege minden párt végponttól
végpontig titkosít — még a relé is csak ciphertextet továbbít. A szoba
kulcsa az URL fragmentben él, és soha nem hagyja el a böngésződet. Az egyik
peer bíráskodik a körben; ha eltűnik, a terasz csendben új bírót választ,
és indítja a következő napkeltét.
Ez az oldal egyben a repó is
Az oldal, amit olvasol, statikus pillanatkép, amely egyben git remote is
(dumb-HTTP protokoll, loose objectek):
git clone https://git.ardegazu.ro/game3.git
Futtasd magad
cd tessera/client
npm install
npm run dev # http://localhost:5173 — nyiss két fület ugyanarra a #szoba URL-re
Garanciák és korlátok, őszintén
Végponttól végpontig titkosítva: minden peer-pár
noise-titkosított (a relét is beleértve); a szobatagságot a szoba
titkából kulcsolt AES-256-GCM hello bizonyítja, amit a relé soha nem
lát.
Nincs fiók, nincs adatbázis, nincs telemetria. Statikus
fájlok + WebRTC.
Hoszt-mérvadó: a bíró peer a saját javára csalhatna — olyanokkal
játssz, akiket kedvelsz.
Teljes mesh: a szobák 16 főt engednek, de a gyakorlati plafon
~12 egyidejű játékos (O(n²) kapcsolat).
Nincs előzmény: zárd be az utolsó fület, és a terasz eltűnik;
a linkben lévő szobakulcs az egyetlen állapot.
Ha a közvetlen kapcsolat nem jön össze, a forgalom a circuit relay-re
vagy TURN-re esik vissza — sebességkorlátosan, és mindkettő számára
olvashatatlanul.
Bonctan
client/src/net/ — a js-libp2p réteg (bootstrap,
szoba-kripto, peer-kezelő), a
neon-grid-ből átvéve; csak
a protokoll-id játékfüggő