App navigation structure
Side menu grouping
Desktop sidebar and Android navigation drawer use a shared definition in shared/.../navigation/AppMenuDefinition.kt.
| Section | Items (desktop) | Notes |
|---|---|---|
| Overview | Dashboard, Statistics | Android: Home + Statistics drawer item (STATISTICS) |
| Planning | Tasks, Projects, Habits, Calendar | Android: To-do combines Tasks/Habits |
| Health | Meals, Workout, Journal | Android: Health hub |
| Finance | Finance | |
| Focus | Timers, Pomodoros, Study | Android: Pomodoros drawer item (POMODOROS) |
| Work | Work | Android: Work drawer item (WORK) — time log MVP |
| Library | Books | |
| Assistant | AI Chat | Premium + CHAT flag |
| Account | Settings | Footer; Android adds Log out |
Empty sections are hidden when all feature flags in that section are off.
Feature flags
Menu items use existing flags (DASHBOARD, TASKS, FINANCE, etc.). AI Chat also requires a non-free user tier.
Enable Work on Android locally:
UPDATE feature_flags SET enabled = true WHERE feature_key = 'WORK' AND platform = 'ANDROID';Bottom navigation (Android)
Unchanged: Home, Calendar, To-do, Health, Finance. The drawer provides access to secondary destinations.
Android global statistics
Route statistics in home_presentation (StatisticsNavGraph), guarded by STATISTICS:
| Route | Screen |
|---|---|
statistics | Global statistics (shared GlobalStatisticsScreen, dashboard data) |
Home dashboard hero statistics button navigates to statistics when STATISTICS is enabled.
Android finance sub-routes
From the Finance hub (finance_presentation nav graph):
| Route | Screen |
|---|---|
finance_statistics | Finance statistics (shared FinanceStatisticsScreen) |
category_keyword_mapper | Category keyword mapper (shared CategoryKeywordMapperScreen) |
finance_reconcile | Statement reconciliation (shared StatementReconciliationScreen) |
transaction_import | CSV import |
receipt_scan | Receipt scan flow |
product_prices | Product prices (lives under the Shopping menu section in AppMenuDefinition, not the Finance hub) |
watched_products | Watched products list (gated by PRODUCTS_WEB_SEARCH) |
AddPriceObservationRoute (type-safe) | Manual price entry form; optional productId prefills the picker |
WebProductSearchRoute (type-safe) | Ad-hoc web product search; optional productId + initialQuery prefill |
balance_prediction | Balance prediction |
add_transaction / edit_transaction/{id} | Transaction form |
transaction_detail/{id} | Transaction detail |
budget_transactions/{budgetId}/{budgetName} | Budget transactions |
Android focus routes
| Route | Screen |
|---|---|
pomodoros | Pomodoro log (shared PomodorosScreen, last 30 days) |
Android work route
| Route | Screen |
|---|---|
work | Work time log MVP (shared WorkTimeLogScreen) — jobs, tracks, start/stop sessions |
Android workout analytics
From the Workout hub (workout_presentation nav graph):
- View Analytics loads
GET workout/analytics/dashboardand shows sharedWorkoutAnalyticsScreen.
Android home UX additions
- Section filter chips on Home: expand/collapse Tasks, Habits, Projects, Meals, Workout, Books blocks (
HomeDashboardSectionToolbar). - Night Block: settings card + active override screen on Home when enabled (
NightBlockServicevia DataStore). - Walkthrough: manual tour from Settings; overlay in
LoggedScreennavigates Home / To-do / Finance / Timers.
Android settings (extended)
Settings (Routes.SETTINGS) now includes server-backed fields previously desktop-only:
- Daily pomodoro goal, default timer list ID
- Unbudgeted period start/end days
- Notification test buttons (
SettingsService) - Night Block toggle and time
- Take a tour
Connected products and meals
Finance receipt products with type INGREDIENT can be linked from recipe ingredients via Ingredient.productId. See docs/features/finance/bills-reader.md and docs/features/nutrition/README.md.
Android parity backlog
Remaining (optional polish)
| Feature | Notes |
|---|---|
| App language picker | Desktop AppLocaleViewModel; Android uses system locale |
| Night Block journal questions | Desktop full question flow; Android has override-only active screen |
| Walkthrough spotlight holes | Desktop highlights UI targets; Android uses bottom sheet only |
| Dashboard section persistence | Desktop session chips; Android in-memory (same session) |
| Work full hub | Desktop tickets/store/SE panels; Android MVP is time log only |
Phase 3 (future)
| Feature | Notes |
|---|---|
| Separate Tasks/Habits/Meals/Workout routes | Intentional mobile tab model unless UX changes |
| Server-backed dashboard widget config | API exists; no mobile UI yet |