Ecosystem Climate Capital /Technical Documentation

Product

Mobile App

Field-ready companion app for measurement capture, on-the-go approvals, and offline operations in low-connectivity environments.

Stack

  • Framework: React Native via Expo SDK 52, TypeScript.
  • Navigation: Expo Router (file-based).
  • State: TanStack Query with persistence; SQLite (op-sqlite) for offline cache.
  • Maps: Mapbox GL Native with offline tile packs.
  • Sensors: Camera, GPS, accelerometer, NFC for tag scanning.
  • Distribution: Internal TestFlight + Google Play closed track; OTA updates via EAS Update.

Primary personas

  • Field agent — captures plot measurements, tree counts, photos.
  • Community lead — confirms attendance at training, logs grievances.
  • Verifier (on-site) — spot-checks plots, signs off on evidence.
  • Approver (executive) — reviews and approves disbursements on the go.

Offline-first model

The mobile app assumes connectivity is the exception, not the rule. All write operations are queued locally with a deterministic client_id and replayed when the device reconnects. Conflicts are resolved server-side using last-write-wins for editable fields and append-only for measurements.

  1. User performs an action → optimistic UI update, write to local SQLite.
  2. Outbox worker batches writes and uploads when online (Wi-Fi preferred by default).
  3. Server applies writes idempotently; returns canonical ids and timestamps.
  4. Local store is reconciled; tombstones removed; UI re-renders silently.
  5. Failures surface in a "Sync issues" tray with retry / discard actions.

Data capture quality

  • GPS accuracy threshold enforced before allowing a plot measurement to save.
  • Photos stamped with EXIF GPS, device id, and a server-issued nonce to deter tampering.
  • Required-field validation runs locally so users never lose work to a connectivity drop.
  • Voice notes auto-transcribed on the device using Whisper-tiny for low-bandwidth uploads.

Security

  • Biometric unlock (Face ID / fingerprint) required to open the app.
  • Local database encrypted with SQLCipher; keys stored in Secure Enclave / Keystore.
  • Auto-lock after 5 minutes of inactivity; remote wipe via admin console.
  • Screenshots disabled on sensitive screens (capital and KYC views).

Supported devices

iOS 16+ and Android 11+. Ruggedized devices (CAT, Samsung XCover) are part of the test matrix.