raycer - habit accountability PWA for ray and cer
currentStreak() was starting its backward walk from today, so if the user hadn't checked in yet today the first lookup missed and it returned 0 — even with a perfect streak on previous days. Now when today's entry is absent and the goal is still active, the count starts from yesterday instead. Once the goal window has closed the original end-of-window anchor is preserved. |
||
|---|---|---|
| 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