mirror of
https://github.com/tiennm99/loto.git
synced 2026-08-30 22:24:41 +00:00
Phase 1 — Vietnamese-safe font + master empty state:
- Add @fontsource/roboto-condensed (700 weight, all subsets including
Vietnamese). font-display:swap. tan-tan-num now resolves the bundled
face on Android instead of system Arial Narrow.
- New MasterEmptyState.svelte: ghost 11×9 grid + "Chế độ Quản trò"
pill + readiness microcopy. Replaces the bare line of text in
MasterPanel's no-game state.
Phase 2 — Mode picker icons, color picker layout, header polish:
- Inline SVG glyphs above each mode button (player card / megaphone /
two stacked cards). Communicates role at a glance.
- Color picker wrapped in a single bordered card with "Tuỳ chỉnh"
and "Mẫu sẵn" sub-headers.
- "Mặc định" → "Đặt lại" with a bordered chip style — clearer
affordance than the previous near-invisible footer link.
- Header subline: drop tracking-[0.28em] all-caps SaaS look; replace
with dash-flanked lantern band ("— 🏮 Hội chợ TN1 —") for
fairground mood.
Phase 3 — Installable PWA + offline audio:
- @vite-pwa/sveltekit with autoUpdate. Precache app shell (~353 KB
→ 213 entries) PLUS the default voice's 92 clips so first-install
is fully offline-capable. Alternate voices fall through to a
CacheFirst runtime rule (cached on first play, 30-day TTL,
maxEntries: 400 for future-proofing).
- New static/manifest.webmanifest (Lô tô — Hội chợ TN1, theme #1565c0,
background #0a0f1f, standalone, vi).
- Icons: 192/512 standard + 512 maskable, generated from a single
rose-amber-gradient SVG source.
- app.html: manifest link, dual theme-color meta (light + dark),
apple-touch-icon, apple-mobile-web-app-capable for proper
standalone launch on iOS Safari.
- _headers: add manifest-src + worker-src to CSP; no-cache on /sw.js
and /manifest.webmanifest so deploys propagate.
Tests: 115/115 pass. Build clean (305 precache entries, 0 glob
warnings).
Reviewer concerns (addressed):
- maxEntries bumped 200 → 400 (was barely enough for 2 voices).
- Default voice precached so offline-first promise holds without
requiring users to play every clip online first.
- "do NOT add skipWaiting" comment added next to autoUpdate.
37 lines
921 B
JSON
37 lines
921 B
JSON
{
|
|
"name": "loto",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "vite dev",
|
|
"dev:codeserver": "VITE_DEV_PROFILE=codeserver vite dev --host 0.0.0.0",
|
|
"build": "vite build",
|
|
"build:gh": "BUILD_PROFILE=gh vite build",
|
|
"preview": "vite preview",
|
|
"lint": "eslint .",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest"
|
|
},
|
|
"optionalDependencies": {
|
|
"lightningcss-linux-x64-gnu": "1.32.0"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "^9",
|
|
"@fontsource/roboto-condensed": "^5.2.8",
|
|
"@sveltejs/adapter-static": "^3",
|
|
"@sveltejs/kit": "^2",
|
|
"@sveltejs/vite-plugin-svelte": "^6",
|
|
"@tailwindcss/vite": "^4",
|
|
"@vite-pwa/sveltekit": "^1.1.0",
|
|
"eslint": "^9",
|
|
"eslint-plugin-svelte": "^2",
|
|
"globals": "^15",
|
|
"happy-dom": "20.9.0",
|
|
"svelte": "^5",
|
|
"tailwindcss": "^4",
|
|
"vite": "^7",
|
|
"vitest": "4.1.5"
|
|
}
|
|
}
|