Orbit Workboard
React Native workboard that helps field service providers triage sites, inspect visits, and capture proof of work with device hardware.
Project overview
Orbit Workboard is a mobile app for field service providers maintaining equipment across many customer sites. A virtualized workboard surfaces which sites need attention today; site and visit detail sheets drill into timelines and warnings; and completing a visit is gated by camera evidence, QR asset verification, and an accelerometer-based motion check—each with explicit permission and fallback states.
Engineering challenges
-
Modeling visit action eligibility as pure domain logic—
getAvailableVisitActionsreturns enabled/disabled actions with human-readabledisabledReasons (e.g. "Required photo evidence is missing", "Asset scan does not match expected equipment") instead of scattering conditionals across UI components. -
Gating
complete_visiton combined readiness—visit status, required evidence photos, asset scan match, and motion check result—so invalid state transitions are impossible from the UI rather than merely hidden. -
Classifying equipment handling from raw accelerometer samples: a 4-second capture window derives peak
deviation from 1g and classifies
stablevsrough_motion_detected, with sensor subscriptions started only while the check is active and cleaned up when the sheet closes. -
Wrapping camera, scanner, and sensor concerns in a thin
native/layer with development fallbacks (simulated capture, manual scan input), keeping the same state model whether or not real hardware is available.
Features
- Virtualized site list with search, status, date-scope, and evidence filters plus pull-to-refresh
- Summary header (sites, visits due today, blocked, urgent, missing evidence) derived from filtered data
- Stacked site and visit detail sheets that preserve list scroll and filter state
- Camera evidence capture with preview, retake, and queued upload status
- QR/barcode asset verification with match and mismatch states and rescan
- Accelerometer motion check with live progress and stable/rough classification
- Async visit actions with pending states, simulated failures, and confirmation for destructive actions
- Typed analytics boundary instrumenting key user actions with consistent payloads
- 65 Jest tests across 11 suites covering filtering, eligibility, transitions, and readiness logic
Architecture
flowchart TB
subgraph ui [1. UI — React Native + Expo]
screen[Workboard screen — virtualized FlatList]
sheets[Site and visit detail sheets]
overlays[Capture overlays — camera, scan, motion]
screen --> sheets --> overlays
end
subgraph vm [2. View models — hooks]
list[useWorkboardList — search, filters, refresh]
workflow[useVisitFieldWorkflow — capture and actions]
end
subgraph dom [3. Pure domain — no React imports]
filters[Filtering, date scope, summaries]
actions[Action eligibility and status transitions]
readiness[Evidence, scan, and motion readiness]
end
native[Native wrappers — expo-camera, expo-sensors]
mock[(Mock API — seeded sites and async mutations)]
analytics[Analytics — typed trackEvent boundary]
ui --> vm
vm --> dom
vm --> native
vm --> mock
vm --> analytics
Technologies used
Mobile
React Native, Expo, TypeScript
Native APIs
expo-camera, expo-sensors, safe-area-context
State & domain
View-model hooks, pure domain modules, mock async API
Testing
Jest, jest-expo (11 suites, 65 tests)
Tooling
pnpm, ESLint, tsc