尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗The Cheers is a mobile-first web app for rating espresso martinis at bars and restaurants. Log each drink against a five-part rubric, record what went into the glass, pin the venue on a map, and let the leaderboard, history and stats tell you where to go next.
It is a Progressive Web App with no build step and no runtime dependencies: plain HTML, CSS and ES modules. Open it in a phone browser, "Add to Home Screen", and it works offline (map tiles and address search need a connection).
docs/GROUPS.md.npm start # serves http://localhost:8080 (zero dependencies)
Any static file server works too (python3 -m http.server, GitHub Pages, Netlify…).
Serve over HTTPS or localhost so geolocation and the service worker are allowed.
npm test # unit tests for scoring, ingredients, store and geo (node:test)
npm run e2e # Playwright browser tests: solo smoke test + two-phone group test
npm run icons # regenerate PNG icons from icons/icon.svg (needs Playwright)
The browser test stubs map tiles, place search and geolocation, so it runs offline and deterministically; it walks the whole app: load sample data, search/sort, map pins and "near me", rate a new venue with address lookup and ingredients, edit, delete, export, theme switch, and persistence across reload.
index.html app shell (header, view container, tab bar)
styles.css design tokens, components, map styling, light/dark themes
manifest.webmanifest PWA manifest
sw.js offline app-shell service worker
src/app.js router and all views
src/scoring.js rubric, overall score, aggregates, ranking (pure)
src/ingredients.js ingredient model and insights (pure)
src/store.js persistence, validation, import/export (pure, Storage-agnostic)
src/geo.js haversine, Web Mercator tile math, geocoding (pure)
src/places.js nearby-places discovery via OpenStreetMap Overpass (pure + fetch)
src/map.js dependency-free slippy map (tiles, pan, pinch, pins)
src/ui.js DOM/format helpers
src/sample-data.js demo venues and tastings
src/config.js Supabase URL + anon key (empty = solo mode)
src/cloud.js Supabase REST client over fetch (auth, tables, RPC, storage)
src/sync.js offline-first sync engine for groups
supabase/schema.sql database schema, security rules and functions
tests/fake-supabase.js in-memory Supabase stand-in used by the tests
tests/*.test.js unit tests
tests/e2e.smoke.js Playwright smoke test
scripts/serve.js static dev server
scripts/make-icons.js icon generator
docs/DESIGN.md design rationale, data model, scoring maths
docs/GROUPS.md group setup and how sync works
Map data and place listings © OpenStreetMap contributors. Please respect the
Overpass API usage guidance,
OSM tile usage policy and
Nominatim usage policy if you
deploy this for more than personal use; swap OSM_TILE_URL in src/map.js for your own
tile provider at scale.