# Toadstool Cottage Counter PWA-friendly, cottagecore row counter for crochet/knitting projects. Manage projects and parts, set max stitches, lock/finish, and enjoy a themed experience with install support and offline caching. ## Features - Add projects and parts; rename, delete, minimize, lock, or mark finished. - Increment/decrement counts, manual set, and per-part max stitch cap. - Dark/light toggle, focus mode (fullscreen + wake lock), haptic tick on count. - PWA ready: install prompt, manifest, service worker caching, offline-friendly. - Themed UI with footer artwork and responsive layout. ## Development ```bash # Open locally open index.html # or use a simple HTTP server for PWA/service worker # Example dev server python3 -m http.server 8080 ``` - Service worker requires an HTTP/HTTPS context; use a local server to test install/offline. - Data is stored in `localStorage`; clear it to reset. ## Backend (optional sync) Node + Docker demo backend lives in `server/`. ```bash # Dev cd server npm install npm run dev # http://localhost:4000 # Docker docker build -t toadstool-api . docker run -p 4000:4000 toadstool-api ``` ### Docker Compose (app + Postgres) ```bash docker compose up --build # App/API: http://localhost:4000 # Postgres: localhost:5432 (user/pass/db: toadstool) ``` API (in-memory, demo): - `POST /api/signup` `{ email, password, displayName? }` -> `{ token, email }` - `POST /api/login` `{ email, password }` -> `{ token, email }` - `POST /api/logout` (Bearer token) - `GET /api/sync?since=...` (Bearer token) -> `{ projects, patterns }` - `POST /api/sync` (Bearer token) `{ projects, patterns }` - `GET /api/me`, `POST /api/me` (profile) - `POST /api/patterns/:id/share` -> `{ token, url }`, `GET /share/:token` -> `{ pattern }` - `POST /api/upload` (Bearer token, multipart `file`) -> `{ url }` (resizes/compresses to `/uploads`) Replace with real auth/storage before production. ## PWA Notes - Manifest: `assets/site.webmanifest` - Service worker: `sw.js` - Install button appears when installable (desktop browsers that support `beforeinstallprompt`).