Pearls

A self-hostable, turn-based multiplayer web implementation of a board game. Race to clear all 12 rows of pearls from your board before your opponents do. Full rules are explained in game.

Demo at pearls.svenjacobs.com.

Features

  • Real-time multiplayer — up to several players per game, board states update live via Server-Sent Events
  • Multiple parallel games — join and manage several games at once from the active games list
  • AI players — play against computer-controlled opponents
  • Invite via link or QR code — share a game with one tap, no account required
  • All-boards view — see every player's board live during the game
  • Initiative dice-off — dice roll determines turn order at game start
  • Emoji reactions — send one of 6 reactions during play, toggleable in settings
  • Sound effects — 9 sounds for dice, pearls, and game events, mutable
  • Pearl color themes — 30+ board themes across colors, nature, seasons, and country flags
  • Progressive Web App — installable on mobile and desktop
  • Push notifications — get notified when it's your turn, opt-in
  • Localization — English and German
  • Dark mode — follows system preference

Tech Stack

Layer Technology
Framework SvelteKit 2 (Svelte 5, SSR)
Language TypeScript 6
Styling TailwindCSS v4
Build tool Vite 8
Test runner Vitest 4
Integration tests Testcontainers (real Redis in container)
Database Redis 8
Realtime Server-Sent Events (SSE)
Logging Pino
i18n Paraglide JS
PWA vite-plugin-pwa + Workbox
Package manager pnpm 11
Runtime Node.js 26
Container Docker / Podman

Self-Hosting & Deployment

See DEPLOYMENT.md for full instructions, including Docker Compose and Podman Quadlet setups.


Disclaimer: This project was created with the assistance of AI tools.

Top categories

Loading Svelte Themes