A local-first web app for counting and processing points in board games. Everything runs in the browser: no backend, no cloud sync, and no special hosted data.
- React + TypeScript + Vite
- MUI for theming and chrome (see
docs/design/design-system.md) - MobX for local-first game state
- Create games with one or more players (name, icon, color); add players while a game is active
- Score the open round with +/− or by typing a value; see before → this round → total
- Close round to save one score per player and start the next (uncapped rounds)
- Save many games; one active at a time — switch via Resume in Games
- Round history with sticky round labels when many players force horizontal scroll
- Wide layout: two-column player list; EN/RU chrome; light/dark theme
- PWA / offline: installable on phone; self-hosted fonts; install prompt + offline banner; scores stay in
localStorage
- Store: MobX
RootStore(src/stores/) hydrates from and persists tolocalStorage. - Keys:
| Key | Contents |
|---|---|
points-data |
Games payload (schemaVersion 1): games[], activeGameId |
points-color-mode |
light | dark |
points-locale |
en | ru (UI strings; default en) |
points-install-dismissed |
1 if the install prompt was dismissed |
Legacy points-counter-* keys are migrated once on load.
- Game timestamps:
createdAt; open roundcurrentRoundStartedAt; closed roundsstartedAt+closedAt. - Game status:
active|paused. Activating a game pauses any previous active game. - Privacy: game data stays on the device unless the user exports or copies it themselves.
Visual tokens and UI recipes: docs/design/design-system.md and docs/design/design-tokens.json.
| Command | Description |
|---|---|
npm run dev |
Start dev server with HMR |
npm run build |
Typecheck and production build (includes PWA SW + manifest) |
npm run preview |
Preview the production build (use this to test install / offline) |
npm run lint |
Run ESLint |
npm run generate:pwa-icons |
Regenerate public/pwa-*.png and Apple touch icon from logo.svg |
Current version is in package.json (see "version"). User-facing changes are summarized in CHANGELOG.md.