raycer - habit accountability PWA for ray and cer
beforeinstallprompt fires asynchronously after renderLanding() runs, so the click handler was never attached when the prompt arrived late. Always attach the handler and check deferredInstallPrompt at click time. |
||
|---|---|---|
| backend | ||
| deploy | ||
| frontend | ||
| .editorconfig | ||
| .gitignore | ||
| docker-compose.coolify.yaml | ||
| docker-compose.yml | ||
| README.md | ||
raycer
A minimal habit-accountability PWA for two users (ray and cer).
- Frontend: vanilla HTML/JS/CSS, Dexie.js, service worker, installable PWA
- Backend: Node 20 + Hono + better-sqlite3
- Reverse proxy: Traefik on
raycer.test(see~/Code/Personal_TOOLS/traefik-local-proxy) - Sync: offline-first with outbox + last-write-wins server upsert
Run
docker compose up -d --build
~/Code/Personal_TOOLS/traefik-local-proxy/add-domain.sh raycer
open https://raycer.test
Layout
frontend/ nginx:alpine serving the static PWA, proxies /api to backend
backend/ Hono API + SQLite (volume: raycer-data)
Goals (preseeded)
- No sugar — 2026-04-23 → 2026-05-21
- No social media — 2026-04-23 → 2026-05-21