An offline-first, mobile-friendly web app for tracking home poker games: players, buy-ins, cash-outs, adjustments, settle-up transfers, and game history — plus a built-in Texas Hold'em odds calculator.
- Track a game's players, buy-ins, and cash-out (out) values.
- Record adjustments and settle-up transfers between players.
- Chronological history per game.
- Works offline and syncs when back online.
- No login: games are shared via a PIN code instead of accounts.
- Texas Hold'em odds calculator.
- Localized UI (Polish default, English available).
- Meteor 3 for the backend/build, with Vue 3 as the SPA frontend,
bundled by Vite via
jorgenvatle:vite. - PrimeVue (unstyled "Volt" components in
src/volt/) styled with Tailwind CSS. jam:methodfor mutations andjam:offlinefor offline-first writes/sync.vue-i18nfor translations (en/plcatalogs inimports/lang/).vue-meteor-trackerfor reactive subscriptions in components.
There's no login UI. Each browser generates a creatorId (stored in
localStorage) that owns the games it creates. To let someone else into a
game, share its PIN code — entering it adds the game to that browser's local
accessToGameIds list. The games publication returns games matching either
the creatorId or the accessToGameIds.
meteor npm install # installs deps, runs patch-package via postinstall
meteor # or: npm startOpen http://localhost:3000.
npm run type-check/npm run type-check:watch— type-check withvue-tsc(the bundler does not check types itself).npm run format/npm run format:check— Prettier write/verify.npm test— run the Mocha suite once.npm run test-appruns it in watch mode. Filter tests withMOCHA_GREP="pattern" npm test.npm run buildthennpm run prod— production build and run.
You need MongoDB running locally (or point MONGO_URL elsewhere):
# macOS, via Homebrew
brew tap mongodb/brew
brew install mongodb-community
brew services start mongodb-communitynpm run build # builds to ./build/bundle/ (installs server deps)
npm run prod # runs the built appConfigure via .env.local:
MONGO_URL— MongoDB connection string (default:mongodb://localhost:27017/poker-notes)ROOT_URL— the app's public URL (default:http://localhost:3000)PORT— port to run on (default:3000)NODE_ENV— Node environment (default:production)
compose.yaml in this repo defines a Docker Compose setup (app + a pinned
mongo:8.0 container) used for a real deployment behind a reverse proxy —
it's not required for local development.
imports/api/— Meteor data layer:collections/(Mongo collections),methods/(jam:methodmutations — all writes go through these),publications/(games,game).imports/ui/— the Vue SPA:router.ts(routes),App.vue(root, holds the top-levelgamessubscription),views/(list, details, new game, odds),volt-based components elsewhere.src/volt/— unstyled PrimeVue components wrapped and styled with Tailwind, imported via the@volt/*alias.imports/workers/oddsWorker.ts— runspoker-odds-calcin a Web Worker for the odds calculator.imports/lang/—en.yml/pl.ymli18n catalogs.
See CLAUDE.md for conventions (path aliases, Prettier config,
TypeScript strictness) and
.claude/docs/offline-first-methods.md
for the offline-first method mechanics and gotchas.