Features & Modules
Dashboard (/dashboard)
Section titled “Dashboard (/dashboard)”The authenticated landing area is the dashboard, not a thin redirect page.
Current dashboard behavior:
- aggregates stats through
useDashboardStats()from@life-manager/shared/hooks - shows active timers, agenda, work stats, finance stats, and quick actions
- opens creation modals for time entries, appointments, and cashflows directly from the dashboard
- can trigger an in-app tutorial based on profile onboarding flags
Key path:
src/components/Dashboard/
Work (/project/overview, /project/detail)
Section titled “Work (/project/overview, /project/detail)”The work module is currently centered around projects, not a /work route.
Main characteristics:
- overview page initializes the module or shows all projects
- detail page is driven by the
projectIdsearch param - project and folder hierarchy is handled in the work UI layer
- manual time entries and timer-created entries both end up in the same shared work entry data model
- project detail and project navbar are separate surfaces
- if no work projects exist,
WorkInitializerbecomes the entry experience
Key paths:
- Routes:
src/routes/_app/project/overview.tsx,src/routes/_app/project/detail.tsx - Components:
src/components/Work/ - Local state:
src/stores/workManagerStore.ts - Calendar integration: shared work entries also surface inside
WorkCalendar
Global Time Tracker
Section titled “Global Time Tracker”The time tracker is a cross-module feature mounted in the shell rather than owned by one page.
Current behavior:
- multiple timers backed by the shared
timeTrackerscollection - add, start, stop, and reorder timers from the shell UI
- compute active display data in a local runtime store
- support Pomodoro, memo, appointment linkage, and per-project rounding logic
- submit stopped timers into persisted work time entries
See the dedicated Time Tracker page for the deeper architecture.
Finance (/finance)
Section titled “Finance (/finance)”Finance is tab-driven and depends on an initialized bank-account context.
Current module split:
- single cashflows
- recurring cashflows
- finance projects
- payouts
Notable runtime behavior:
FinanceTabsswitches byfinanceStore.activeTab- if no bank accounts exist yet,
FinanceInitializeris shown instead of the tab content - recurring cashflows are processed automatically at app level by
useProcessRecurringCashflows() - the module includes contacts, tags, bank accounts, project adjustments, and payout conversion flows
Key paths:
- Route:
src/routes/_app/finance.tsx - Components:
src/components/Finances/ - Local state:
src/stores/financeStore.ts - Finance-wide automation:
src/hooks/financeHooks/useProcessRecurringCashflows.ts
Calendar (/calendar)
Section titled “Calendar (/calendar)”The calendar merges two different persisted sources into one UI:
- work time entries
- appointments
Important behaviors:
- supports day, week, and month views
- computes visible calendar days from view-specific local state
- merges entries and appointments into unified day buckets
- opens separate drawers for time entries and appointments
- supports quick appointment creation and calendar legend controls
- uses local zoom and selection state from
calendarStore
Key paths:
- Route:
src/routes/_app/calendar.tsx - UI:
src/components/WorkCalendar/ - Orchestration:
src/hooks/workHooks/useWorkCalendar.ts - Local state:
src/stores/calendarStore.ts
Profile And Settings (/profile, /settings)
Section titled “Profile And Settings (/profile, /settings)”These are operational modules, not just utility pages.
/profilehandles editable profile fields, locale/theme settings, and logout cleanup/settingsprovides the full settings content surface, especially important on mobile where settings open as a route instead of a modal- desktop feature code should usually open settings through
useOpenSettings()
Notifications
Section titled “Notifications”Notifications are handled centrally in the shell, not per feature page.
Current architecture:
- notifications are read from the shared data layer
useNotificationHandler()polls due notifications and displays Mantine toasts- browser notifications are optionally shown when permissions and settings allow it
- handlers are registered in a small registry by
resource_type - appointment notifications can deep-link back into calendar and work behavior, including starting timers
Key paths:
src/hooks/notificationHooks/useNotificationHandler.tsxsrc/hooks/notificationHooks/handlers/src/hooks/notificationHooks/useAppointmentNotifications.tsxsrc/components/Notification/
Offline And Update Flows
Section titled “Offline And Update Flows”Two cross-module behaviors shape the real user experience:
- offline-first data access via PowerSync and PWA route and asset caching
- build refresh detection via
useCheckNewVersion()
These matter as much as the visible modules because they affect how the whole web app behaves after first load.
Habit Tracker (/habbit-tracker)
Section titled “Habit Tracker (/habbit-tracker)”This route currently remains a placeholder and should not be documented as a completed feature yet.