Files
loto/web
tiennm99 9933fb49e2 refactor: single-page app — restore master tracking grid, drop /master route
Previous commit misread "remove master board" — restore the 11x9
ones-digit-aligned tracking grid (with circular tokens + draw-order
overlay) inside MasterPanel; remove the host's own player card
("Bảng của quản trò") instead. The host can use the player board
above it; no need for a duplicate card.

Delete /master route entirely (single-page app now). Cloudflare
Pages redirect added via static/_redirects: any unknown path
301-redirects to /, so old /master bookmarks land on the homepage.
Static assets are served first so the rule only fires on misses.

Storage keys loto_master_card_grid / loto_master_card_crossed are
no longer written but old saved data stays in users' localStorage
(harmless leftover).
2026-04-27 01:31:26 +07:00
..
2026-04-26 19:16:46 +07:00
2026-04-26 21:06:53 +07:00

Lô tô

Bàn số của trò chơi "Lô tô" — SvelteKit app.

Two routes: / for players, /master for the host (quản trò) — calls numbers, shows a tracking board, and has its own player card to play along.

See docs/ for architecture, code standards, and deployment.

Development

npm install
npm run dev

Inside code-server (reverse proxy)

cp .env.example .env.local
# edit .env.local: set CODESERVER_HOST and CODESERVER_PORT
npm run dev:codeserver

Open https://<CODESERVER_HOST>/absproxy/<CODESERVER_PORT>/.

Use /absproxy/{port}/, not /proxy/{port}/ — the latter strips the path prefix and breaks the SvelteKit base path.

Build

npm run build         # default — root basePath, for Cloudflare Pages
npm run build:gh      # /loto basePath, for tiennm99.github.io/loto manual export

Static export to build/. Deployed to Cloudflare Pages from main (set up via the CF dashboard — see docs/deployment-guide.md).