# Setup ## Backend Base URL Build-time (recommended): ```bash flutter run --dart-define=BACKEND_BASE_URL=https://api.example.com ``` Runtime override (for future settings screens): ```dart AppConfig.overrideBackendBaseUrl('https://staging.example.com'); ``` ## Run With Fake Gateway Use fake gateway for local/offline development: ```bash flutter run --dart-define=USE_FAKE_BACKEND=true ``` ## Background Sync Background sync (startup + resume + periodic ticks while authenticated) is enabled by default. In REST mode, auto-triggers are reachability-gated to avoid unnecessary sync attempts while offline. When connectivity returns (offline -> online), sync now triggers immediately in addition to startup/resume/periodic ticks. Control flags: ```bash flutter run \ --dart-define=ENABLE_BACKGROUND_SYNC=true \ --dart-define=BACKGROUND_SYNC_INTERVAL_SECONDS=180 ``` Disable it explicitly: ```bash flutter run --dart-define=ENABLE_BACKGROUND_SYNC=false ``` ## Reminder Delivery Scaffold Reminder scheduling is now wired through `ReminderScheduler` and reconciled from `LocalRepository` on startup/state changes. Default implementation now uses local notifications runtime where supported. Control flag: ```bash flutter run --dart-define=ENABLE_LOCAL_NOTIFICATIONS=true ``` Disable notifications explicitly: ```bash flutter run --dart-define=ENABLE_LOCAL_NOTIFICATIONS=false ``` Behavior notes: - web: no-op fallback - linux: schedule fallback (no-op) due platform scheduling limitations in plugin - android/iOS/macOS/windows: scheduled local notifications - settings screen includes `Request Notification Access` action for runtime permission prompts - tapping a reminder notification opens reminder management UI in-app ## WhatsApp Share Intake (MVP) Inbound WhatsApp share-intake is now wired behind a listener in the authenticated app shell. Control flag: ```bash flutter run --dart-define=ENABLE_WHATSAPP_SHARE_INTAKE=true ``` Disable explicitly: ```bash flutter run --dart-define=ENABLE_WHATSAPP_SHARE_INTAKE=false ``` Behavior notes: - iOS/Android: integrates with share-intent plugin (`receive_sharing_intent`) - shared text is parsed and ingested into: - person profile (auto-create when identity is confident) - source->profile link map for follow-up matching - moment history (`type=whatsapp`) - ambiguous or missing-identity shares are queued in `Share Inbox` for manual resolution - near-name conflicts now also route to `Share Inbox` to avoid accidental profile mismatches - follow-up routing prefers stable source fingerprint matching (when source user/thread IDs are available) - Share Inbox now provides a `Review & Match` conflict flow with candidate confidence scoring and side-by-side preview before confirming profile link - app launch from initial share intent auto-opens the relevant destination: - resolved import -> `People` with imported profile selected - unresolved import -> `Share Inbox` - Settings includes: - `Simulate WhatsApp Share` for local/dev testing - `Open Share Inbox` to resolve queued items People view includes `Merge duplicates` action for resolving duplicate profile records after import. ## Local Persistence Backend Default local store: - `Hive` (`USE_HIVE_LOCAL_DB=true` by default) - first-run migration imports legacy `shared_preferences` payload when present - applies to both: - local product state (`LocalRepository`) - sync queue state (`SyncQueueRepository`) Optional migration path: ```bash flutter run --dart-define=USE_HIVE_LOCAL_DB=true ``` Use legacy mode explicitly if needed: ```bash flutter run --dart-define=USE_HIVE_LOCAL_DB=false ``` ## Run Tests ```bash flutter test ``` ## Generate Code ```bash dart run build_runner build --delete-conflicting-outputs ```