tiennm99 2b74b2e2e9 feat(settings): clearer "both" glyph + sticky title/footer on mobile
Two small UX fixes in the settings modal:

1. Mode picker "Cả hai" glyph was two stacked rectangles — read as
   "windows" rather than the two roles being combined. Replace with a
   mini player-grid + mini megaphone side-by-side so the glyph mirrors
   the two single-mode glyphs concretely.

2. On iPhone SE the modal body pushes the title and the action row off
   screen, so the close button needs scrolling-back to reach. Make the
   title block sticky at top and the action row sticky at bottom
   inside the existing scroll container; move the panel padding from
   the outer wrapper into per-section padding so the sticky bands can
   span edge-to-edge with matching backgrounds.
2026-04-28 11:00:23 +07:00
2026-04-26 19:16:46 +07:00

Lô tô

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

Single page (/). The host enables "Chế độ quản trò" in settings to reveal the master panel inline below their player card; called numbers get spoken aloud in Vietnamese using bundled MP3 clips (no runtime TTS).

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).

Regenerating audio

Vietnamese voice clips live in static/audio/{voiceId}/. Generated once with edge-tts (free, no API key) — runtime never calls TTS. To regenerate (e.g., to add a new voice that Microsoft ships, or to change wording):

pip install edge-tts
python3 scripts/generate-audio.py

The script auto-discovers every vi-* voice and writes a manifest the app reads on next reload.

S
Description
Lô Tô (Vietnamese lottery bingo) number board — Next.js web app
Readme
4.1 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 89.9%
CSS 8%
JavaScript 2.1%