# Cozy Games A monorepo for **Cozy Games** — a growing collection of small browser games and the shared, reusable packages that power them. ## Layout ``` cozy-games/ ├── apps/ Playable games (each deploys independently) │ └── mnswpr/ Minesweeper — mnswpr.com (@ayo-run/mnswpr engine + Firebase leaderboard) ├── packages/ Shared, publishable libraries │ ├── mnswpr/ @ayo-run/mnswpr — the vanilla Minesweeper game engine │ ├── leaderboard/ @cozy-games/leaderboard — backend-agnostic, time-windowed leaderboard │ └── utils/ @cozy-games/utils — shared browser utilities (storage, timer, …) └── sites/ Docs (Astro Starlight) and UI demos — placeholders for now ``` Each app owns its own backend config (e.g. mnswpr's Firestore rules live in `apps/mnswpr/`); the shared packages stay backend-agnostic. ## Getting started This is a [pnpm](https://pnpm.io) workspace (pnpm is required). Workspace-wide commands run from the root: ```bash pnpm i # install pnpm test # run all package tests (vitest) pnpm lint # eslint pnpm build:lib # build the engine package -> packages/mnswpr/dist ``` ### Per-app local development Apps aren't run from the root — target the app by name with pnpm's `-F` filter. Apps are named `` (e.g. `mnswpr`), so every app runs the same way: ```bash pnpm -F mnswpr run dev # start that app's Vite dev server pnpm -F mnswpr run build # build just that app -> apps/mnswpr/dist pnpm -F mnswpr run preview # preview its production build ``` ## Infra (per-app, via local CLI) Infra runs through local CLIs, never web dashboards. Each app owns its infra scripts under generic names (`deploy:db`, `deploy:site`, `db:start`, `db:seed`) — run them by targeting the app with pnpm's `-F` filter: ```bash pnpm -F mnswpr run db:start # start the local DB emulator (Firestore) — needs Java, see app README pnpm -F mnswpr run db:seed # seed the running emulator with dev data pnpm -F mnswpr run db:stop # kill a stray emulator left holding :8080 pnpm -F mnswpr run deploy:db # deploy DB rules/indexes (firebase deploy --only firestore) pnpm -F mnswpr run deploy:site # build + deploy hosting (netlify deploy --prod) ``` Apps are named ``, so a future app uses the same command shape (`pnpm -F run deploy:db`), backed by whatever stack that app uses. `deploy:site` needs a one-time `npx netlify-cli login && npx netlify-cli link` per app. See [apps/mnswpr/README.md](apps/mnswpr/README.md) for the game itself, and each package's README for library usage. ## License BSD-2-Clause © Ayo Ayco