Glossary
Terms that mean something specific here.
Product
PlayPal — a creator on the platform: e-girls, gamers, and coaches. Marked by User.userType = "playpal" and carrying the PlayPal badge. Fans subscribe to them, gift them coins, and book sessions with them.
Coach — a PlayPal who provides gaming coaching. Distinguished by a manually assigned coach badge, not by a separate user type. /trending/coaches filters on it.
Fan — a regular user (userType = "user") who consumes and pays for creator content.
Play Coin — the in-app currency, bought as a consumable IAP. Spendable in the store or giftable to creators during livestreams. Valued by COST_PER_COIN, default $0.02.
e-date / session — a booked 1-on-1 between a fan and a PlayPal. A Session row with a private ChannelRoom only the two parties can enter.
Channel — a creator-owned space containing rooms. Fans join as ChannelMembers.
Room — a space inside a channel: text (chat), audio (voice), video, or e-date. Access is governed by visibility.
VIP room — a room with visibility = "vip", requiring an active CreatorSubscription to enter. Channel membership alone is not enough — this is the paywall.
Badge — a marker on a profile. The PlayPal badge is automatic for creators; others are earned. A user displays one and keeps the rest in an earned tab.
Services
esu — the Socket.IO realtime server. Named for the Yoruba deity of language, mediation, and exchange. Holds connections, fans out events, stores nothing.
ogun — the BullMQ media worker. Named for the deity of iron and transformation. Generates image variants and creates Mux video assets.
anansi — the payouts and accounting service. Named for the trickster spider associated with webs of connection. Calculates earnings and executes Stripe transfers.
igdb-heartbeat — the scheduled job that keeps the game catalog in sync with IGDB.
api — the Express REST service. Owns every endpoint and all authorization.
Technical
Sealed Secret — a Kubernetes secret encrypted with the cluster's public certificate, safe to commit. Only the in-cluster controller can decrypt it.
tokenVersion — an integer on User. Incrementing it invalidates every JWT ever issued to that user, which is how logout-everywhere works without a token blocklist.
dmKey — a deterministic key derived from two user ids, unique on Conversation. Makes "open a DM with this person" an upsert rather than a search.
Variant — a generated size of an image (thumb, medium, full, story, cover), produced by ogun and stored at variants/<mediaId>/<type>.jpg.
Ledger — the append-only double-entry record of every value movement. Never updated; corrections are new ADJUSTMENT rows.
idempotencyKey — a unique column on Ledger. The database-level guard against double-posting money.
Impression — a record that a user viewed a post, unique per (userId, postId). Repeat views accumulate duration on the same row rather than adding rows.
Interservice channel — the HTTP path from api/ogun to esu's /admin/emit/* routes, guarded by X-Realtime-Admin-Token.
Authz callback — esu asking the API whether a user may join a DM or room, so authorization rules exist in only one place.
Third parties
RevenueCat — the mobile in-app purchase layer. Normalises App Store and Play Store receipts and sends webhooks. All money enters here.
Mux — video transcoding, HLS playback, and RTMP livestream ingest.
LiveKit — self-hosted WebRTC for voice and video rooms, running on a dedicated droplet.
Stripe Connect — how creators get paid. anansi transfers from the PlayPalz platform account to each creator's connected account.
Spaces — DigitalOcean's S3-compatible object storage, with a CDN in front.
DOKS — DigitalOcean Kubernetes Service.
IGDB — the Internet Game Database, authenticated through Twitch OAuth.
Bugsnag — mobile crash reporting.
Loki — the log aggregation store behind Grafana.
Spelling
playpals vs playpalz — the repository directory, the git remote (cryptixcoder/playpals), and package names use playpals. The product, the production domain (playpalz.gg), and the container registry (playpalzproduction) use playpalz. Both appear in the codebase. Anything user-facing or infrastructure-related uses the z.
Status markers used in these docs
Shipped — implemented and running.
Partial — code exists but is incomplete or unverified.
Planned — designed but not built.
