Skip to Content
FeaturesWorkOverview

Work tracking

Track professional work across multiple jobs, each with a type-specific track hierarchy, sessions (time logs) with live timers or manual entry, and job-type-specific planning:

  • Software engineering — per-job team roster, tickets on projects (status, priority, ETA, assignees, checklist tasks), optional session→ticket link
  • Client-basedproject metadata (status, ETA, budget, rate, notes) and milestones on client projects
  • Store — launch profile, flat areas, milestones (with kind), team, suppliers, ops tasks, inventory, shifts, and P&L (finance transactions linked by work_job_id)

Job types

TypeTracksPlanningSession fields
SOFTWARE_ENGINEERINGFlat projectsTickets + checklist tasks per project; per-job people rosterRequired activityCategory; optional ticketId
CLIENT_BASEDClientsprojectsProject metadata + milestonesOptional billable
STOREFlat areas (PROJECT tracks)Area metadata + milestones (milestoneKind, renewalDate)Required store activityCategory

Creating a STORE job with seedLaunchTemplate: true (default) seeds areas (Permits, Fit-out, Inventory), permit milestones, and an empty store profile.

Dates on the wire use dd/MM/yyyy for calendar fields (startDate, endDate, etaDate, dueDate, etc.).

Domain model

TablePurpose
work_peoplePer-job roster (SE + STORE)
work_ticketsSE work items on a project track
work_ticket_tasksChecklist items on a ticket
work_milestonesClient/store deliverables (milestone_kind, renewal_date)
work_tracksProject metadata columns
work_sessionsOptional ticket_id; activity_category as varchar (SE + store enums)
work_store_profiles1:1 store business profile per job
work_store_suppliersVendors per store job
work_store_tasksOperational tasks
work_store_task_templatesRecurring checklist templates (generate instances via API)
work_store_productsSKU catalog per store
work_store_stock_eventsRECEIVE / SALE / ADJUST / WASTE
work_store_shiftsStaff shift records
transactions.work_job_idOptional FK for store P&L

Enums: WorkTicketStatus, WorkTicketPriority, WorkProjectStatus, WorkMilestoneKind, WorkStoreActivityCategory, WorkStoreTaskStatus, WorkStoreStockEventType (shared + server).

Validation (server):

  • Tickets only when jobType == SOFTWARE_ENGINEERING
  • Milestones on PROJECT tracks for CLIENT_BASED or STORE
  • Store APIs require jobType == STORE
  • Store sessions require a store activity category

API (/api/v1/work)

Requires feature flag WORK enabled for the client platform (X-Platform header).

Core routes unchanged; store routes (under /work/jobs/{jobId}/ unless noted):

MethodPathDescription
GET/PUTstore-profileGet / upsert store profile
GETstore-pnl?startDate=&endDate=Income/expense totals for linked transactions
GET/POSTstore-suppliersList / create suppliers
PATCH/DELETE/work/store-suppliers/{id}Update / delete supplier
GET/POSTstore-tasksList / create ops tasks
PATCH/DELETE/work/store-tasks/{id}Update / complete / delete task
GET/POSTstore-task-templatesList / create templates
POSTstore-task-templates/generateInstantiate tasks from templates
DELETE/work/store-task-templates/{id}Delete template
GET/POSTstore-productsList / create products
PATCH/DELETE/work/store-products/{id}Update / delete product
GET/POST/work/store-products/{id}/stock-eventsStock history / add event
GET/POSTstore-shiftsList / create shifts
PATCH/DELETE/work/store-shifts/{id}End shift / delete

POST /work/jobs body may include seedLaunchTemplate (boolean, default true for new STORE jobs).

Desktop UI

Sidebar entry Work (when WORK flag is on). Hub navigation: left menu + one full-width screen per area.

SectionSTORESEClient
Overviewyesyesyes
Store profileyes
Structure (areas / projects)yesyesyes
Planningyesticketsmetadata
Suppliers / Tasks / Inventory / Shifts / P&Lyes
Time logyesyesyes
Teamyesyes

Composable modules: composeApp/.../ui/screens/work/ (WorkStorePanels, WorkNavigation, WorkOverviewContent, etc.).

Enable locally

UPDATE feature_flags SET enabled = true WHERE feature_key = 'WORK' AND platform = 'DESKTOP';

Also ensure OTER is enabled for the platform.

Code layout

LayerPath
Server entitiesserver/.../database/entities/Work*.kt, WorkStoreEntities.kt
Server serviceserver/.../service/WorkService.kt, WorkStoreService.kt
Server routesserver/.../routing/WorkRouting.kt
Shared modelsshared/.../models/Work*.kt, WorkStore.kt
Shared HTTPshared/.../services/work/WorkService.kt
Desktop UIcomposeApp/.../ui/screens/WorkScreen.kt, ui/screens/work/*, WorkViewModel.kt

Migrations: V10__work_tracking.sql, V12__work_tickets_and_project_management.sql, V13__work_store_phase1.sql, V14__work_store_operations.sql, V15__work_store_inventory_and_finance.sql