Skip to Content
ArchitectureNavigation

App navigation structure

Side menu grouping

Desktop sidebar and Android navigation drawer use a shared definition in shared/.../navigation/AppMenuDefinition.kt.

SectionItems (desktop)Notes
OverviewDashboard, StatisticsAndroid: Home + Statistics drawer item (STATISTICS)
PlanningTasks, Projects, Habits, CalendarAndroid: To-do combines Tasks/Habits
HealthMeals, Workout, JournalAndroid: Health hub
FinanceFinance
FocusTimers, Pomodoros, StudyAndroid: Pomodoros drawer item (POMODOROS)
WorkWorkAndroid: Work drawer item (WORK) — time log MVP
LibraryBooks
AssistantAI ChatPremium + CHAT flag
AccountSettingsFooter; 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:

RouteScreen
statisticsGlobal 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):

RouteScreen
finance_statisticsFinance statistics (shared FinanceStatisticsScreen)
category_keyword_mapperCategory keyword mapper (shared CategoryKeywordMapperScreen)
finance_reconcileStatement reconciliation (shared StatementReconciliationScreen)
transaction_importCSV import
receipt_scanReceipt scan flow
product_pricesProduct prices (lives under the Shopping menu section in AppMenuDefinition, not the Finance hub)
watched_productsWatched 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_predictionBalance prediction
add_transaction / edit_transaction/{id}Transaction form
transaction_detail/{id}Transaction detail
budget_transactions/{budgetId}/{budgetName}Budget transactions

Android focus routes

RouteScreen
pomodorosPomodoro log (shared PomodorosScreen, last 30 days)

Android work route

RouteScreen
workWork 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/dashboard and shows shared WorkoutAnalyticsScreen.

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 (NightBlockService via DataStore).
  • Walkthrough: manual tour from Settings; overlay in LoggedScreen navigates 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)

FeatureNotes
App language pickerDesktop AppLocaleViewModel; Android uses system locale
Night Block journal questionsDesktop full question flow; Android has override-only active screen
Walkthrough spotlight holesDesktop highlights UI targets; Android uses bottom sheet only
Dashboard section persistenceDesktop session chips; Android in-memory (same session)
Work full hubDesktop tickets/store/SE panels; Android MVP is time log only

Phase 3 (future)

FeatureNotes
Separate Tasks/Habits/Meals/Workout routesIntentional mobile tab model unless UX changes
Server-backed dashboard widget configAPI exists; no mobile UI yet