A generated matching card arrived on a phone with three identical definitions (the generation guards now drop those), but there was no way to get past a bad card from inside a session. The feed chrome (deck study, review, mistakes and exam) now has the red "!" control: one tap records the question, skips to the next card and shows an Undo toast. - lib/question-reports.ts: the local list (freezmo.reports.v1, zod on read, capped 200) is the skip state — reported cards leave every session type, count as "not attempted" in the results instead of wrong, and Undo takes a report back. A deck where everything is reported stays studiable so it can be regenerated. - POST /api/reports appends one JSON line per report to REPORTS_DIR/reports.jsonl (shared/freezmo/reports in production, the dev data dir in dev). Deliberately write-only: the question text is readable on the server (that is the point — prompt tuning) but never over HTTP, since the app has no auth. Best effort: offline reports stay local. - The button: a red outlined rounded square with "!", the chrome's control size, in both feed headers (hidden on the results slide). - config: REPORTS_DIR + RATE_LIMIT_REPORTS (20); the deploy creates the shared reports dir; the dev unit and AGENTS.md note the new server data location. - Suites: phase-1 (append + validation + no GET), phase-2 (button, toast, server POST, local copy, skip counter, hidden next session, Undo, exam pool). SW -> freezmo-v38.
41 lines
1.6 KiB
Desktop File
41 lines
1.6 KiB
Desktop File
[Unit]
|
|
# Freezmo — dev instance (hot reload, LAN only).
|
|
#
|
|
# This is the working tree (~/freezmo). Everything live happens here: edits are
|
|
# visible within seconds, its build folder is .next-dev (a production build can
|
|
# never clobber it) and its data lives in ~/freezmo/.freezmo-dev, so test
|
|
# shares, sync blobs and rate limits never touch production data.
|
|
#
|
|
# It binds the LAN so the phone can reach it, but nothing routes this port
|
|
# through the public proxy — production stays the only public instance.
|
|
# It shows a DEV badge, uses a dev favicon/theme colour, installs as
|
|
# "Freezmo Dev" (separate origin, separate storage) and never registers the
|
|
# production service worker.
|
|
#
|
|
# Install (per user, no root needed):
|
|
# cp ~/freezmo/deploy/freezmo-dev.service ~/.config/systemd/user/
|
|
# systemctl --user daemon-reload
|
|
# systemctl --user enable --now freezmo-dev.service
|
|
# Logs: journalctl --user -u freezmo-dev -f
|
|
Description=Freezmo dev instance (hot reload, LAN only)
|
|
Documentation=file://%h/freezmo/README.md
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
WorkingDirectory=%h/freezmo
|
|
Environment=NEXT_TELEMETRY_DISABLED=1
|
|
Environment=NEXT_DIST_DIR=.next-dev
|
|
Environment=NEXT_PUBLIC_FREEZMO_DEV=1
|
|
Environment=SYNC_DIR=%h/freezmo/.freezmo-dev/sync
|
|
Environment=PUSH_DIR=%h/freezmo/.freezmo-dev/push
|
|
Environment=REPORTS_DIR=%h/freezmo/.freezmo-dev/reports
|
|
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
ExecStart=/bin/node %h/freezmo/node_modules/next/dist/bin/next dev -H 0.0.0.0 -p 3217
|
|
Restart=always
|
|
RestartSec=2
|
|
TimeoutStartSec=0
|
|
|
|
[Install]
|
|
WantedBy=default.target
|