The app has no Settings surface today. Add one.
Scope
Gear icon on every tab's nav bar (or a dedicated tab if we want to invest). Sections:
Notifications
- Master toggle (mirrors system permission)
- Per-type toggles:
- Habit reminders
- Plot wither / death alerts
- Streak milestone celebrations
- Deep-link to system Settings if permission denied
Data
- Export all data as JSON —
UIActivityViewController share sheet with a .json file: every model except FarmState derived state, suitable for backup. Includes a schema version so future imports can migrate.
- Import from JSON — read a file, merge or replace (warn user). Defer if scope balloons.
- Reset farm — destructive, requires double-confirmation. Wipes the model store and re-bootstraps.
About
- App version + build number (read from Info.plist)
- Link to docs/asset-spec.md (when hosted)
- Link to roadmap / GitHub issues
- Acknowledgements
Implementation notes
- New
SettingsView under LifePlanner/UI/Settings/
- New
SettingsInteractor for the destructive operations (export, import, reset) — or extend an existing one
- JSON export:
JSONEncoder against a flat DTO struct; don't try to encode @Model types directly
Acceptance criteria
The app has no Settings surface today. Add one.
Scope
Gear icon on every tab's nav bar (or a dedicated tab if we want to invest). Sections:
Notifications
Data
UIActivityViewControllershare sheet with a.jsonfile: every model exceptFarmStatederived state, suitable for backup. Includes a schema version so future imports can migrate.About
Implementation notes
SettingsViewunderLifePlanner/UI/Settings/SettingsInteractorfor the destructive operations (export, import, reset) — or extend an existing oneJSONEncoderagainst a flat DTO struct; don't try to encode@Modeltypes directlyAcceptance criteria