Extract the leaderboard into a generic, backend-agnostic package and add rolling Today/Week/Month/All-Time windows, a web component, and local-first development against the Firestore emulator. Package (leaderboard/): - LeaderBoardService: backend-agnostic core via a storage-adapter seam, with Firebase and Supabase adapters (Supabase client injected, no added dep) - Rolling time windows (last 24h / 7d / 30d) with hover tooltips; top-N by score - <cozy-leaderboard> web component built on web-component-base: compose the UI in HTML, configure the backend once in JS - Every user-facing string is configurable (labels, tooltips, empty/loading/ error messages, anonymous name) so i18n lives in the app; README + CONFIGURATION App (mnswpr.com): - Compose the board declaratively in index.html via <cozy-leaderboard> - Nickname + randomized greeting bar; score submission through the element - Legends: the current all-time leaders frozen into a static /legends page - Firebase config and leaderboard namespace via Vite env vars; emulator-first local dev (VITE_FIRESTORE_EMULATOR) Firebase schema-as-code: - firebase.json, .firebaserc, firestore.rules (public reads, create-only scores, no client updates/deletes, namespace-generalized), empty indexes (rolling windows need none) - prod (mw-*) vs dev/test (mw-test-*) separation by collection namespace - emulator config, seed script, and docs (firebase-leaderboards.md, leaderboard-env-migration.md, AYO.md) Utils/tests: UTC date-bucket helper (retained as metadata) with Vitest coverage.
39 lines
756 B
JSON
39 lines
756 B
JSON
{
|
|
"name": "@cozy-games/leaderboard",
|
|
"version": "0.0.1",
|
|
"description": "Generic, game-agnostic Firestore leaderboard with time-windowed views",
|
|
"author": "Ayo Ayco",
|
|
"type": "module",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/ayo-run/mnswpr"
|
|
},
|
|
"main": "leader-board.js",
|
|
"exports": {
|
|
".": {
|
|
"default": "./dist/leader-board.js"
|
|
},
|
|
"./dist/*": {
|
|
"default": "./dist/*"
|
|
},
|
|
"./*": {
|
|
"default": "./*"
|
|
}
|
|
},
|
|
"files": [
|
|
"./*",
|
|
"./dist"
|
|
],
|
|
"dependencies": {
|
|
"web-component-base": "^4.1.2"
|
|
},
|
|
"peerDependencies": {
|
|
"firebase": "^12.11.0"
|
|
},
|
|
"peerDependenciesMeta": {
|
|
"firebase": {
|
|
"optional": true
|
|
}
|
|
},
|
|
"license": "BSD-2-Clause"
|
|
}
|