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

# 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/.

# 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)

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).
Description
No description provided
Readme 15 MiB
Languages
JavaScript 55.8%
CSS 37.6%
HTML 6.6%