3.6 KiB
3.6 KiB
Onboarding
This app is a local-first Flutter prototype for capturing relationship context: people, moments, reminders, ideas, shared messages, preference signals, and private AI-assisted suggestions.
The most important product constraint is trust. The app should preserve relationship details locally by default, avoid accidental profile matching, and send only pseudonymous, reviewed context to LLM flows.
First Hour
- Read this file, then Architecture, Data Model, and Feature Map.
- Run
flutter pub get. - Run
flutter analyze. - Run focused tests before full tests:
flutter test test/features/share_intakeflutter test test/features/ai_digestflutter test test/features/local
- Run the app with the fake backend:
flutter run --dart-define=USE_FAKE_BACKEND=true
Project Posture
The app is not a fully server-backed production product yet. It is a prototype-friendly, local-first app with REST/OpenAPI scaffolding for later backend work. Fake backend mode is the default development path and should remain safe offline.
Current product strengths:
- people profiles with aliases, notes, tags, facts, dates, and preference signals
- manual capture for moments, ideas, reminders, and dashboard tasks
- share intake with inbox-first review for ambiguous content
- local notifications for reminders
- private weekly AI digest with pseudonymous prompt payloads
- fake backend auth/sync plus REST gateway boundary
Current constraints:
- data is mostly stored as one local aggregate snapshot
- many backend mappings are incomplete for newer local entities
- iOS share support has native targets, but real device behavior still needs continued verification
- tests are good for parsers/repositories/widgets, but native share and background scheduling need manual device testing
Daily Development Commands
flutter pub get
flutter analyze
flutter test
dart run build_runner build --delete-conflicting-outputs
Useful run modes:
flutter run --dart-define=USE_FAKE_BACKEND=true
flutter run --dart-define=USE_FAKE_BACKEND=false --dart-define=BACKEND_BASE_URL=https://your-api
flutter run --dart-define=ENABLE_BACKGROUND_SYNC=false
flutter run --dart-define=ENABLE_LOCAL_NOTIFICATIONS=true
Where To Start For Common Work
| Task | Start Here |
|---|---|
| Add or change persisted relationship data | lib/app/state/local_data_state.dart, model file in lib/features/*/domain/, repository part in lib/app/data/ |
| Change profile UI | lib/features/people/presentation/ |
| Change share capture | lib/features/share_intake/, lib/app/data/relationship_repository_share.dart, native files under ios/ or Android manifest |
| Change AI suggestions | lib/features/ai_digest/, lib/core/llm/ |
| Change reminder behavior | lib/features/reminders/, lib/app/data/relationship_repository.dart schedule reconciliation |
| Change backend sync | lib/features/sync/, lib/integrations/backend/, docs/api/openapi.yaml |
| Add settings/debug tools | lib/features/settings/presentation/settings_view.dart |
Non-Negotiable Maintainer Rules
- Prefer canonical slice files under
presentation/,application/,domain/, anddata/. - Do not expand compatibility exports unless preserving old imports is the task.
- Keep local-first behavior working in fake backend mode.
- Treat ambiguous shared identities as inbox items, not auto-linked profiles.
- Never include names, aliases, sender names, source URLs, or raw shared text in scheduled digest prompts.
- Update the nearest doc when changing architecture-level behavior.