tane/apps/app_seeds/lib
vjrj f1aa8f8e66 feat(app): scan a printed seed label back into its record
Closes the physical↔digital loop the labels opened: the QR on a printed
envelope (tane://seed, already encoded by seed_label_codec) can now be
scanned from the inventory bar. A known label opens its variety; an
unknown one asks before adding anything, then creates the variety (species
linked by exact scientific name when bundled) with a lot carrying the
label's year and origin. Scanner is pure ZXing (zxing_barcode_scanner,
MIT) — no ML Kit, no Play Services, F-Droid-safe, the stack Ğ1nkgo ships.
Mobile-only; other platforms don't show the button (OCR precedent).
The post-scan flow is a plain function (handleScannedPayload) so it's
widget-tested without a camera.
2026-07-18 12:26:27 +02:00
..
data feat(app): scan a printed seed label back into its record 2026-07-18 12:26:27 +02:00
db feat(app): ask 'how did it do?' when a harvest is noted (schema v13) 2026-07-18 12:18:25 +02:00
di feat(market): saved searches with in-app alerts (Wallapop-style) 2026-07-17 13:18:29 +02:00
domain feat(seed-saving): source attribution + advisory note 2026-07-11 07:52:48 +02:00
i18n feat(app): scan a printed seed label back into its record 2026-07-18 12:26:27 +02:00
security feat(backup): sealed backups + printable recovery sheet 2026-07-09 22:32:13 +02:00
services feat(app): scan a printed seed label back into its record 2026-07-18 12:26:27 +02:00
state feat(market): saved searches with in-app alerts (Wallapop-style) 2026-07-17 13:18:29 +02:00
ui feat(app): scan a printed seed label back into its record 2026-07-18 12:26:27 +02:00
app.dart feat(market): saved searches with in-app alerts (Wallapop-style) 2026-07-17 13:18:29 +02:00
bootstrap.dart feat(market): saved searches with in-app alerts (Wallapop-style) 2026-07-17 13:18:29 +02:00
main.dart feat(identity): switch social identity, all from the one backup 2026-07-10 20:22:24 +02:00