Features
Koula Chat is four things that happen to share one account: a browser arcade, a WebRTC calling app, a community chat server, and a bridge into Minecraft. Here is what each part actually does.
Ten games, no gate
Written for this site, not embedded from somewhere else. Everything runs client-side on a canvas.
Play with no account
Every game opens instantly. An anonymous cookie tracks your best score and level so guests still get progression, just not a public rank.
Progress that transfers
Signing up merges your whole guest profile into the new account: XP, plays, every per-game best, and unlocked achievements. Nothing is thrown away.
Real leaderboards
One row per player per game, plus a global XP board across all ten. Land in a top ten and you get a toast about it mid-game.
Touch controls
On-screen buttons appear automatically on touch devices, and each game declares its own pad layout. Merge 2048 takes swipes.
Ten achievements
From "play your first game" to "play all ten" and "land in a top ten". Each is worth 25–300 bonus XP.
Sound you can mute
Every effect is generated with the Web Audio API — no audio files to download. The mute setting is remembered.
Calling that respects your hardware
Peer-to-peer WebRTC with Socket.IO handling signalling. Audio-only by default; video is one button away.
| Feature | What it does | Where |
|---|---|---|
| Group call rooms | Every community server gets a call room. Peers mesh directly with each other. | Dashboard → Call |
| Direct calls | Ring one person by username with real accept / decline / cancel, not just a shared link. | Calls page |
| Device picker | Choose the exact microphone and headset from a live device list, and apply it mid-call. | Call → Settings |
| Mic test with playback | A live input meter plus a short recording played back through your chosen output. | Call → Settings |
| Speaker test | Plays a tone through the selected output using setSinkId where the browser supports it. | Call → Settings |
| Video toggle | Add or drop your camera mid-call. Peers see the change without rejoining. | Call bar |
| Screen share | Share a window or tab as your video track, then switch back to camera. | Call bar |
| Speaking indicators | Tiles glow when that person is talking, driven by a local audio analyser. | Call grid |
| Minecraft ringing | Calling someone also pushes the invite down the bridge to their game client. | Automatic |
Servers, DMs and friends
- Public and password-protected community servers
- Direct messages between friends, stored encrypted at rest with Fernet
- Friend list with live online / offline presence over Socket.IO
- Distinct notification sounds for server messages, DMs, calls and bridge events
- Inline
/payand/requestcommands for moving KAL inside a chat
Play money with somewhere to go
- An idle miner that accrues KAL over time and is collected manually
- Premium tiers you buy with KAL to raise your mining rate
- Four wager games: coin flip, dice roll, blackjack and crash
- Peer-to-peer transfers with a full transaction history
- A separate KAL leaderboard from the arcade XP one
The bridge, both directions
A line-delimited JSON protocol over plain TCP. Simple enough to implement in an afternoon, which is exactly why it was chosen over anything heavier.
Website → Minecraft
Every meaningful site event opens a short connection to the bridge and writes one JSON line: logins, signups, logouts, presence changes, call joins and leaves, and arcade scores. Registered mod clients also receive pushed events on their open socket, which is how a call started in the browser rings in-game.
Minecraft → website
Anything the mod sends is forwarded to every connected browser as a Socket.IO event, so in-game activity shows up live on the site. A monitor pings the bridge every five seconds and broadcasts the connection state, which is what drives the status pill.
What we store, and what we do not
- No email address. Sign-up is username and password only. There is no mailing list because there is no list.
- Passwords are salted hashes via Werkzeug. Plain text never touches disk.
- Messages are encrypted at rest with a Fernet key generated on first run and kept in
data/secret.key. - Guests get one cookie, a random id used solely to attach arcade progress to a device.
- No third-party analytics or ad scripts. The only external file is the Socket.IO client from a CDN.
- Calls are peer-to-peer. Audio and video go directly between browsers; the server only passes the handshake.
Run over HTTPS in production — browsers refuse microphone and camera access on plain HTTP anywhere except localhost.
Try the part that needs no account
The arcade is open right now. Everything else is one username away.