SÉANCE

a haunted parlour game for one house, sixteen phones and three real rooms — this page is also the git repo.

🕯 hold a séance browse the code clone the repo

Clone

This site serves the repository over git's dumb-HTTP protocol as plain static files (plain files — there is no git server here, or any server at all):

git clone https://git.ardegazu.ro/game4.git
cd seance

What it is

A party game you play with your feet. Gather 1–16 people in a home, agree which real room is the Study, the Parlour and the Cellar, and open one shared link on every phone. Each time the bell tolls you have ~20 seconds to physically walk to a room and tap it. A ghost sweeps one room — and it favours wherever the crowd stood last bell. Everyone caught loses a candle; lose all three and you fade. Last lit candle wins the séance.

Every bell, one player is secretly the medium: their phone alone names a room the spirit will shun — truthfully. They can share it, keep it, or lie about it out loud. Where you actually stand is the honor system; the walking is the point, not the enforcement. Installable PWA, works from an iOS home screen.

How it works

What's in the repo

client/src/game/ — the game

TypeScript, no framework: typed wire protocol, host-authoritative séance logic (bells, crowd-hungry ghost, medium hints, candle elimination), WebAudio bell tolls, candlelit DOM/CSS scenes.

client/src/net/ — the p2p layer

js-libp2p assembly copied from neon-grid: relay bootstrap (identity fetched from /.well-known/ap2p with a compiled-in fallback), room crypto, the sealed-hello membership gate, and one long-lived varint-framed stream per pair. Only the protocol id is game-specific.

deploy/ — the publish pipeline

publish-repo.sh builds this very site: landing page + bare mirror exploded to loose objects (static file servers and git's dumb-HTTP protocol agree on "every path must exist"), with an anonymity gate that refuses to publish identity-bearing bytes.

Run it yourself

cd client && npm install && npm run dev   # :4173
# open two tabs on the same #room URL and haunt yourself (keys 1/2/3 pick rooms)

Deploy: npm run build, then publish client/dist/ as static files anywhere — IPFS, a CDN, a folder behind nginx. It needs nothing but a signaling relay it's allowed to talk to (see src/game/config.ts).

Guarantees & limits, honestly

SÉANCE

un joc de salon bântuit pentru o casă, șaisprezece telefoane și trei încăperi adevărate — pagina asta e și repo-ul git.

🕯 ține o ședință răsfoiește codul clonează repo-ul

Clonare

Situl servește repository-ul prin protocolul dumb-HTTP al lui git, ca simple fișiere statice (chiar simple fișiere — nu există aici niciun server git, de fapt niciun server):

git clone https://git.ardegazu.ro/game4.git
cd seance

Ce este

Un joc de petrecere pe care îl joci cu picioarele. Adună 1–16 oameni într-o casă, stabiliți care încăpere e Biroul, care Salonul și care Pivnița, și deschideți același link pe fiecare telefon. De fiecare dată când bate clopotul ai ~20 de secunde să mergi fizic într-o încăpere și să o atingi. O fantomă mătură o încăpere — și o atrage locul unde a stat mulțimea la clopotul trecut. Toți cei prinși pierd o lumânare; le pierzi pe toate trei și te stingi. Ultima lumânare aprinsă câștigă ședința.

La fiecare clopot, un jucător e în secret mediumul: doar telefonul lui numește o încăpere pe care spiritul o va ocoli — adevărat. Poate să spună, să tacă sau să mintă cu voce tare. Unde stai de fapt rămâne pe cuvânt de onoare; mersul e miza, nu controlul. PWA instalabil, merge de pe ecranul de start al unui iPhone.

Cum funcționează

Ce e în repo

client/src/game/ — jocul

TypeScript, fără framework: protocol de rețea tipat, logică de ședință autoritativă la gazdă (clopote, fantomă atrasă de aglomerație, șoapte pentru medium, eliminare pe lumânări), dangăte WebAudio, scene DOM/CSS la lumina lumânării.

client/src/net/ — stratul p2p

Asamblaj js-libp2p copiat din neon-grid: bootstrap de releu (identitatea citită din /.well-known/ap2p cu rezervă compilată), criptografia camerei, poarta de apartenență cu hello sigilat, și un singur stream persistent cu cadre varint per pereche. Doar id-ul de protocol e specific jocului.

deploy/ — conducta de publicare

publish-repo.sh construiește chiar situl ăsta: pagină de prezentare + oglindă bare explodată în loose objects (serverele de fișiere statice și dumb-HTTP-ul lui git cad de acord că „orice cale trebuie să existe"), cu o poartă de anonimat care refuză să publice octeți care poartă identitate.

Rulează-l singur

cd client && npm install && npm run dev   # :4173
# deschide două taburi pe același URL #cameră și bântuie-te singur (tastele 1/2/3 aleg încăperile)

Deploy: npm run build, apoi publică client/dist/ ca fișiere statice oriunde — IPFS, un CDN, un director în spatele lui nginx. N-are nevoie decât de un releu de semnalizare cu care are voie să vorbească (vezi src/game/config.ts).

Garanții și limite, pe bune

SÉANCE

kísértetjárta szalonjáték egy házra, tizenhat telefonra és három igazi szobára — ez az oldal egyben a git repó is.

🕯 tarts szeánszot böngészd a kódot repó klónozása

Klónozás

Az oldal a repót a git dumb-HTTP protokollján át szolgálja ki, sima statikus fájlokként (tényleg sima fájlok — nincs itt git szerver, sőt semmilyen szerver):

git clone https://git.ardegazu.ro/game4.git
cd seance

Mi ez

Egy partijáték, amit a lábaddal játszol. Gyűjts össze 1–16 embert egy házban, beszéljétek meg, melyik igazi szoba a dolgozószoba, melyik a szalon és melyik a pince, aztán nyissátok meg ugyanazt a linket minden telefonon. Ahányszor megkondul a harang, ~20 másodperced van ténylegesen átsétálni egy szobába és rákoppintani. Egy szellem végigsöpör egy szobán — és oda húz, ahol a tömeg állt az előző harangszónál. Akit elkap, elveszít egy gyertyát; ha mindhármat elveszted, elenyészel. Az utolsó égő gyertya nyeri a szeánszot.

Minden harangszónál egy játékos titokban a médium: egyedül az ő telefonja nevez meg egy szobát, amit a szellem elkerül — igazat mondva. Elmondhatja, magában tarthatja, vagy hazudhat róla fennhangon. Hogy valójában hol állsz, becsületbeli ügy; a séta a lényeg, nem az ellenőrzés. Telepíthető PWA, iOS kezdőképernyőről is megy.

Hogyan működik

Mi van a repóban

client/src/game/ — a játék

TypeScript, framework nélkül: típusos wire-protokoll, hoszt-mérvadó szeánsz-logika (harangok, tömegre éhes szellem, médium-súgások, gyertya-kiesés), WebAudio harangkondulás, gyertyafényes DOM/CSS jelenetek.

client/src/net/ — a p2p réteg

A neon-gridből másolt js-libp2p összeállítás: relé-bootstrap (az identitás a /.well-known/ap2p-ből jön, beforgatott tartalékkal), szoba-kriptográfia, a lepecsételt hello tagsági kapu, és páronként egyetlen hosszú életű, varint-keretezett stream. Csak a protokoll-id játékspecifikus.

deploy/ — a publikáló futószalag

A publish-repo.sh építi ezt az oldalt: nyitólap + bare tükör loose objectekre bontva (a statikus fájlszerverek és a git dumb-HTTP-je egyetértenek abban, hogy „minden útvonalnak léteznie kell"), és egy anonimitás-kapu, amely nem enged identitáshordozó bájtokat publikálni.

Futtasd magad

cd client && npm install && npm run dev   # :4173
# nyiss két fület ugyanarra a #szoba URL-re, és kísértsd magad (az 1/2/3 billentyű szobát választ)

Telepítés: npm run build, aztán tedd ki a client/dist/-et statikus fájlokként bárhová — IPFS, CDN, egy mappa nginx mögött. Semmi másra nincs szüksége, csak egy jelző-relére, amivel beszélhet (lásd src/game/config.ts).

Garanciák és korlátok, őszintén