Go to file
Krzysztof kuhy Rudnicki ee5a7660cb Add Flutter companion app skeleton with local meal logging
Milestone 1 of the diet-app-as-wise-balloon plan: a phone-native way to
log meals away from the PC, sharing the exact on-disk JSON shape
diet_guard already uses (same field names, no translation layer).

- lib/models/: 1:1 Dart mirrors of the Python dataclasses (Nutrition,
  FoodEntry, MealItem, FoodBankRecord, Slot), including the per-100g/
  amount-eaten portion scaling that matches _resolve.resolve_nutrition's
  semantics exactly.
- lib/services/log_storage_service.dart: plain-JSON persistence to
  food_log.json's exact shape (no sqflite -- the canonical format
  already is this JSON).
- lib/services/foodbank_service.dart: ports _foodbank.py's upsert/fuzzy
  search logic for autocomplete.
- lib/screens/: log_meal_screen.dart (single-item logging) and
  meal_builder_screen.dart (composite multi-item meals, logging full
  per-component macros via the new components field).

Verified end-to-end on a physical device (BL9000): built, installed,
logged a real meal through the UI. 77 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:22:42 +02:00
.github/workflows Extract diet_guard from testsAndMisc as a standalone repo 2026-06-22 12:18:39 +02:00
app Add Flutter companion app skeleton with local meal logging 2026-06-22 18:22:42 +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.