Plumbline — field inspection checklist app
Offline-first iOS/Android inspection app in Expo: checklist templates, Pass/Fail/N/A with notes and camera photos, completion blocked until required evidence exists, lock/reopen with an audit trail, and text/CSV/JSON export.
Creator ($9 a month) includes up to 20 new premium families a billing month (5 in any 24 hours). Already a member? Open your library.
- Version
- 1.0.2
- Platforms
- iOS, Android
- Framework
- expo
- Archive
- 3.2 MB 130 files
Screens from the build
(open full size)
(open full size)
(open full size)
(open full size)
(open full size)
(open full size)App screenshots may come from an Expo web export; those are labelled as such and are not native verification. Native runs are listed under Tested with their own status.
What it does
- create and edit checklist templates (sections, required items, note/photo on fail)
- start an inspection from a template (items snapshotted)
- answer pass / fail / N/A with notes and photos (camera or library)
- validate: completion blocked until required answers, notes and photos exist
- complete, then reopen with a reason; audit trail of every change
- export a completed inspection as text, CSV or JSON
- draft autosave and offline persistence across restarts
Screens
inspectionsIn progress and completed inspections with talliesstartChoose template and details to startinspectionRun checklist, review issues, or read completed reportcompleteConfirm result and completed-by namereopenReopen with a required reasonauditAppend-only change historytemplatesTemplate librarytemplate-editorEdit sections and items with explicit savesettingsInspector name, theme, camera status, export, erase
States covered
- Loading
- Empty
- Filtered empty
- Error
- Validation
- Blocking issues
- Destructive confirm
- Unsaved changes
- Read only
- Permission undetermined
- Permission denied
- Permission blocked
- Camera unavailable
- Not found
Stack and versions
| expo | 57.0.25 |
|---|---|
| expo-router | 57.0.23 |
| react | 19.2.3 |
| react-native | 0.86.3 |
| typescript | 6.0.3 |
| expo-sqlite | 57.0.3 |
| expo-image-picker | 57.0.20 |
| expo-file-system | 57.0.7 |
| expo-sharing | 57.0.22 |
| jest | 29.7.0 |
| jest-expo | 57.0.5 |
| @testing-library/react-native | 14.0.1 |
Commands:
| install | npm ci |
|---|---|
| dev | npx expo start |
| test | npm test |
| typecheck | npx tsc --noEmit |
| doctor | npx expo-doctor |
| build | npx expo run:ios | npx expo run:android (local dev build) or eas build |
| e2e | manual native script in docs/VERIFICATION.md |
| web_preview | npx expo export -p web |
Tested
| Check | Platform | Tool | Result | Date |
|---|---|---|---|---|
| dependency pins for Expo SDK 57 native modules (react-native-reanimated 4.5.1, react-native-worklets 0.10.1, react-native-gesture-handler 2.32): expo install --check, npm audit 0, jest, tsc, expo-doctor, Metro iOS + Android bundles | Node | npm 11 + expo install --check | Pass | 2026-09-26 |
| unit + screen tests (35) | Node | jest 29.7 + jest-expo 57 + @testing-library/react-native 14 | Pass | 2026-09-26 |
| type check | Node | typescript 6.0.3 | Pass | 2026-09-26 |
| expo-doctor | Node | expo-doctor | Pass | 2026-09-26 |
| native project generation (prebuild, not compiled) | Node | expo prebuild --no-install | Pass | 2026-09-26 |
| token contrast WCAG AA | Node | scripts/check-contrast.mjs | Pass | 2026-09-26 |
| web export preview screenshots — not native verification | web | expo export -p web + Chromium 1194 (Playwright) | Pass | 2026-09-26 |
| fresh-copy reproduction (npm ci, npm test, tsc) | Node | npm 10.9 / node 22.22 | Pass | 2026-09-26 |
| Release build of this archive: install, launch, relaunch, dark mode; no crash reports | iOS | iOS Simulator (iPhone 17 Pro, Xcode 27) | Pass | 2026-09-26 |
| Release build of this archive: install, launch, relaunch, dark mode; no crash in logcat | Android | Android Emulator (Pixel 9) | Pass | 2026-09-26 |
| camera capture, file persistence and file sharing | iOS | iOS device | PendingNot run yet | — |
| camera capture, file persistence and file sharing | Android | Android emulator or device | PendingNot run yet | — |
2 checks still pending. Pending means it hasn't been run yet, not that it passed.
Not included
- No account system: data and photos are local to the device
- Inspector names are typed, not verified identities; no e-signature
- No cloud sync, team sharing or assignment; no network calls
- No PDF export (text, CSV and JSON are implemented)
- No analytics or telemetry
Each boundary comes with instructions for adding it in docs/INTEGRATION-BOUNDARIES.md.
Known limitations
- Native iOS/Android runs, camera capture and file sharing not yet verified on a simulator or device
- Web preview has no camera and does not keep photos after a reload
- Phone layouts only; English UI
- Starter templates are illustrative, not regulatory checklists
- Tests require Node 22.13+ (React Native Testing Library 14)
Licence
Use in unlimited end products incl. client/commercial; no resale/redistribution as a template, kit or dataset; no ML training. Survives cancellation for delivered versions.
Full terms: Motif template licence. Open-source parts keep their own licences (licenses.json, id lic-premium-field-checklist-1-0-2).
Ask your agent
Use Motif to activate the premium-field-checklist template and download it. Then adapt it for a climbing gym's route log: replace the content and imagery, keep the design tokens and every state in docs/STATE-MATRIX.md, and run check_design_contract before you finish.Motif guides applied
app-design-gate-workflow · app-category-utility · app-category-productivity · app-template-tab-fab-onboarding-budgets · app-transplant-test-no-generic-template-app · app-visual-identity-system-five-decisions · app-functional-truth-rulings · app-hard-fail-signatures-static-checks · app-navigation-architecture-selection · app-sqlite-data-model-offline-first · app-local-persistence-choice-expo · app-permission-requests-and-recovery · app-form-validation-feedback · app-save-model-and-unsaved-changes-guard · app-destructive-actions-undo-vs-confirm · app-dynamic-type-and-font-scaling · app-react-native-accessibility-semantics · app-touch-targets-and-spacing · app-empty-states · app-screen-state-matrix · app-theming-light-dark-system · app-safe-areas-and-edge-to-edge
Archive
SHA-256 0de917bd579f9334e90ea4be00d2f5fa674f2528936e88048bd307f5adeeeef9