A bundled, curated knowledge layer — the differentiator of a serious seed app. For a variety's crop it shows how the plant reproduces and what it takes to keep the variety true: life cycle, pollination (self/cross + insect/wind), isolation distance, how many plants to save from, dry/wet processing, a difficulty pill, and a short tip — all in human words. - assets/catalog/seed_saving.json: curated public-domain data (Seed to Seed / Seed Savers), keyed by botanical FAMILY (defaults) with per-species/genus OVERRIDES that win — so e.g. Vicia faba is correctly insect-cross-pollinated despite the selfing Fabaceae default, and maize is wind-pollinated with a large population. Notes are locale-keyed (es/en), extensible to any language — a starter set, not a ceiling. - domain/seed_saving.dart (pure): enums + SeedSavingGuide (merge, note fallback) + SeedSavingData.guideFor (species → genus → family). - data/seed_saving_catalog.dart: loads the asset once into an in-memory singleton (no DB table, no migration); injector loads it at startup. - VarietyDetail gains (from the linked species — the reliable key, vs the editable category); detail screen shows a _SeedSavingView when a guide resolves. - i18n seedSaving block (labels + enum values + params) in en/es/pt/ast. - Tests: domain lookup/merge, the real asset's key corrections, and the detail section shows/hides. 314 suite tests green; analyze clean.
158 lines
5.4 KiB
YAML
158 lines
5.4 KiB
YAML
name: tane
|
||
description: "Tanemaki — local-first, encrypted, decentralized traditional-seed inventory."
|
||
publish_to: 'none'
|
||
version: 0.1.0+1
|
||
|
||
environment:
|
||
sdk: ^3.11.5
|
||
|
||
resolution: workspace
|
||
|
||
dependencies:
|
||
flutter:
|
||
sdk: flutter
|
||
flutter_localizations:
|
||
sdk: flutter
|
||
|
||
commons_core:
|
||
path: ../../packages/commons_core
|
||
|
||
# State management (Cubit-first). Drift streams are the source of truth.
|
||
flutter_bloc: ^9.1.1
|
||
equatable: ^2.0.5
|
||
|
||
# Stream combinators (StreamGroup) for reactive multi-table reads.
|
||
async: ^2.11.0
|
||
|
||
# Encrypted local database. NOTE: do NOT add sqlite3_flutter_libs / drift_flutter
|
||
# — their bundled plain SQLite collides (same symbols) with SQLCipher and
|
||
# segfaults on desktop. SQLCipher is the only native sqlite provider here.
|
||
drift: ^2.28.0
|
||
sqlite3: ^2.7.5
|
||
sqlcipher_flutter_libs: ^0.6.5
|
||
|
||
# Dependency injection composition root.
|
||
get_it: ^8.0.3
|
||
|
||
# i18n (Weblate-friendly JSON per locale).
|
||
slang: ^4.7.0
|
||
slang_flutter: ^4.7.0
|
||
# ICU date/number formatting (locale-aware, never ad-hoc).
|
||
intl: ^0.20.2
|
||
|
||
# Secure key storage (OS keystore).
|
||
flutter_secure_storage: ^9.2.4
|
||
|
||
# Routing + media + paths.
|
||
go_router: ^14.6.2
|
||
image_picker: ^1.1.2
|
||
# On-device OCR (Tesseract, Apache-2.0/BSD) to suggest a name from a packet
|
||
# photo. Offline, no Google/cloud. Mobile-only; other platforms use a no-op.
|
||
flutter_tesseract_ocr: ^0.4.31
|
||
# Pure-Dart image preprocessing (grayscale/contrast/upscale) before OCR to
|
||
# lift accuracy on blurry packet photos.
|
||
image: ^4.3.0
|
||
# Save/open dialogs for the inventory export/import (MIT license).
|
||
file_picker: ^10.1.2
|
||
# Pure-Dart PDF generation (Apache-2.0) for the printable "what I share"
|
||
# catalog. No platform channels, so the whole flow is host-testable.
|
||
pdf: ^3.11.3
|
||
# Pure-Dart barcode/QR generation (Apache-2.0; already used transitively by
|
||
# pdf). Painted on screen for the profile's shareable identity QR.
|
||
barcode: ^2.2.9
|
||
path: ^1.9.0
|
||
path_provider: ^2.1.5
|
||
|
||
cupertino_icons: ^1.0.8
|
||
material_symbols_icons: ^4.2951.0
|
||
url_launcher: ^6.3.2
|
||
package_info_plus: ^9.0.1
|
||
# Optional coarse device location (BSD-3) to set the sharing area without
|
||
# typing a code. Low accuracy only; the value is immediately reduced to a
|
||
# low-precision geohash. Behind an interface so it's fakeable and pluggable.
|
||
geolocator: ^13.0.1
|
||
# Network reachability (BSD-3) to show a global "you're offline" banner — the
|
||
# social layer needs a connection; the inventory works regardless.
|
||
connectivity_plus: ^6.1.0
|
||
# Local OS notifications (BSD-3) for a heads-up when a private message arrives
|
||
# while the app is foregrounded. Mobile/Linux/macOS only; a no-op on web and
|
||
# Windows. Foreground-only by design — background/push is a later concern.
|
||
flutter_local_notifications: ^18.0.1
|
||
|
||
dev_dependencies:
|
||
flutter_test:
|
||
sdk: flutter
|
||
integration_test:
|
||
sdk: flutter
|
||
|
||
flutter_lints: ^6.0.0
|
||
build_runner: ^2.4.13
|
||
drift_dev: ^2.28.0
|
||
slang_build_runner: ^4.7.0
|
||
mocktail: ^1.0.4
|
||
# Nostr types (Event/Filter) to fake a NostrChannel in the connection test.
|
||
nostr: ^2.0.0
|
||
flutter_launcher_icons: ^0.14.4
|
||
flutter_native_splash: ^2.4.7
|
||
|
||
# App launcher icon: a white sprout on brand green (#2F7D34) for strong
|
||
# contrast. Regenerate with: dart run flutter_launcher_icons
|
||
flutter_launcher_icons:
|
||
image_path: assets/icon.png
|
||
android: true
|
||
ios: true
|
||
remove_alpha_ios: true
|
||
adaptive_icon_background: "#2F7D34"
|
||
adaptive_icon_foreground: assets/icon_foreground.png
|
||
web:
|
||
generate: true
|
||
image_path: assets/icon.png
|
||
background_color: "#2F7D34"
|
||
theme_color: "#2F7D34"
|
||
windows:
|
||
generate: true
|
||
image_path: assets/icon.png
|
||
icon_size: 256
|
||
|
||
# Native splash: white sprout on brand green, a darker green in dark mode.
|
||
# Regenerate with: dart run flutter_native_splash:create
|
||
flutter_native_splash:
|
||
color: "#2F7D34"
|
||
color_dark: "#22521E"
|
||
image: assets/splash_logo.png
|
||
android_12:
|
||
image: assets/splash_logo.png
|
||
color: "#2F7D34"
|
||
color_dark: "#22521E"
|
||
|
||
flutter:
|
||
uses-material-design: true
|
||
# Seed strings for slang live under lib/i18n (not a Flutter asset; compiled).
|
||
assets:
|
||
- assets/catalog/species.json
|
||
# Curated seed-saving guidance (pollination, isolation, difficulty…).
|
||
- assets/catalog/seed_saving.json
|
||
# Web-of-trust bootstrap referents (Duniter "seeds"). Empty until real
|
||
# founding identities are curated; users bootstrap by adding their own.
|
||
- assets/trust/referents.json
|
||
- assets/logo.png
|
||
# Bundled so the Linux runner can use it as the GTK window icon.
|
||
- assets/icon.png
|
||
# Tesseract OCR language data (tessdata_fast: eng + spa). Bundled for
|
||
# offline, on-device label OCR on mobile.
|
||
- assets/tessdata/
|
||
- assets/tessdata_config.json
|
||
# Real packet photos for the on-device OCR validation integration test.
|
||
# Remove before shipping if you don't want them in the bundle.
|
||
- assets/ocr_fixtures/
|
||
# Embedded in generated PDFs (printable catalog). DejaVu covers Latin
|
||
# (extended), Cyrillic and Greek; like the OCR packs, PDF fonts are a
|
||
# per-locale resource — swap in wider coverage (Arabic, CJK) as locales
|
||
# land. Free license (Bitstream Vera / public domain additions).
|
||
- assets/fonts/DejaVuSans.ttf
|
||
- assets/fonts/DejaVuSans-Bold.ttf
|
||
fonts:
|
||
# Custom seed-themed icon glyphs (chars a–k). See docs/mockups/seedks-glyphs.png.
|
||
- family: seedks
|
||
fonts:
|
||
- asset: fonts/seedks.ttf
|