Go to file
Krzysztof kuhy Rudnicki feef5984f8 Add photo attach, full-size viewer, and a minimal history screen
Milestone 2 of the diet-app-as-wise-balloon plan, plus feedback from
manually testing it on-device:

- PhotoAttachService wraps image_picker and copies the picked photo into
  <app documents>/images/<uuid>.<ext>, so the file survives after the
  picker's own (possibly cache-cleared) temp copy is gone. Phone-local
  only, per the sync plan: imagePath is never synced.
- PhotoAttachField is a shared attach/preview/remove widget, used
  identically by both the single-item and composite-meal logging
  screens, so logging a multi-item meal can now carry a photo too.
- PhotoViewerScreen gives a full-screen, pinch-to-zoom view of an
  attached photo -- the 64x64 inline thumbnail was too small to
  actually check the photo.
- HistoryScreen lists every logged entry across all days, newest first,
  with a thumbnail when one is attached. There was previously no way to
  confirm what got logged (or whether a photo actually attached) short
  of inspecting food_log.json directly.

Verified on a physical device (BL9000): built, installed, and the user
confirmed the photo-attach flow logs a real entry with a real photo,
visible afterward in the new history list. 88 Flutter tests passing,
`flutter analyze` clean against very_good_analysis.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FU3f5KQ1GHXsbbSecfVEyF
2026-06-22 18:57:58 +02:00
.github/workflows Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
app Add photo attach, full-size viewer, and a minimal history screen 2026-06-22 18:57:58 +02:00
diet_guard Add sync-ready log schema: stable id, tombstone undo, composite components 2026-06-22 18:22:24 +02:00
docs Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
scripts Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
.gitignore Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
.pre-commit-config.yaml Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
CLAUDE.md Document the durable-clone editable-install requirement 2026-06-22 12:54:10 +02:00
diet-guard-gate.service Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
diet-guard-gate.timer Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
install.sh Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
pyproject.toml Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
README.md Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
requirements.txt Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00

diet_guard

A log-to-unlock gate: locks the desktop until a meal is logged once a meal slot (08:00 / 12:00 / 16:00 / 20:00) has elapsed without one, and tracks a sealed daily calorie/macro budget.

Install

bash install.sh

This installs the package + dependencies into system Python's user site-packages (the systemd service runs /usr/bin/python directly, not a venv — see CLAUDE.md), installs the systemd user timer, seals your daily budget, and locks the budget file immutable.

Usage

python -m diet_guard init          # one-time: compute and seal today's budget
python -m diet_guard gate --demo   # test the lock window (safe, closeable)

The timer runs the gate automatically every ~30 minutes; no manual invocation is needed once installed.

Development

python -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/pre-commit install && .venv/bin/pre-commit install --hook-type pre-push
.venv/bin/python -m pytest diet_guard/tests/ --cov=diet_guard --cov-branch --cov-fail-under=100

See CLAUDE.md for scheduling details and production deployment gotchas, and docs/design.md for the original feature spec.