GARNET GRIDLOADING CASE STUDY...
Home Solutions Showcase Insights Pricing Tools Live Website Builder Website Quiz ROI Calculator Architecture Audit Contact
ShowcaseCase Study
Energy & Utilities · Mobile

Cross-Platform
Field Service App

How we replaced paper-based equipment inspections with an offline-first React Native app — cutting report turnaround from 5 days to 4 hours and eliminating $180K in annual rework.

95%Faster Reports
100%Offline Capable
$180KRework Eliminated
340+Field Users

Client Context

A mid-Atlantic energy utility with 340 field technicians conducted 2,800 equipment inspections per month across substations, transmission lines, and distribution infrastructure. Every inspection was recorded on multi-page paper forms, photographed with personal phones, and transcribed into SAP PM back at the office — often days later.

Many sites had zero cellular connectivity. Technicians would complete a week of inspections, drive back to the regional office, and manually enter data from crumpled, rain-smeared forms. Transcription errors were common — wrong asset IDs, illegible readings, missing photos. 12% of inspections required rework because the data was unusable.

The client needed a cross-platform mobile app that worked identically on iOS and Android, functioned with zero connectivity, auto-synced when back online, and integrated with their existing SAP system.

React Native TypeScript WatermelonDB Expo Node.js / Express PostgreSQL SAP PM (RFC) Azure Blob Storage

Paper in the Rain

Field technicians work in every weather condition — climbing transmission towers in rain, inspecting substations in freezing temperatures. Paper forms don't survive these conditions. Neither does reliable cellular data.

📱 Zero Connectivity

60% of inspection sites had no cellular coverage. Technicians needed a solution that worked entirely offline for days at a time, queue-syncing when connectivity resumed.

📝 Paper Degradation

Multi-page inspection forms were routinely damaged by weather. 12% of completed inspections couldn't be transcribed due to illegible handwriting, water damage, or missing pages.

⏱️ 5-Day Report Lag

Average time from inspection to SAP entry was 5 business days. During peak storm season, the backlog extended to 2 weeks — making compliance reporting impossible.

🔧 Dual Platform

55% of technicians used company-issued iPhones, 45% used Android devices. The app needed to run identically on both platforms with native performance — no compromise on speed or UX.

Offline-First Mobile Platform

We built a React Native app with WatermelonDB providing a full local SQLite database on-device. Every inspection, photo, and reading is stored locally first and synced when connectivity returns — even if that's days later.

01 — WatermelonDB Offline Engine

Full relational database on-device with lazy loading and observable queries. The entire asset catalog (14,000 assets) syncs incrementally. Inspections queue locally with conflict-free merge on reconnect.

02 — Dynamic Inspection Forms

Form schemas defined in JSON and stored on-device. Different asset types render different inspection checklists — substations show breaker tests, transmission lines show clearance measurements. No app update needed to add new form types.

03 — Photo & GPS Capture

Inline camera capture with GPS tagging, timestamps, and asset association. Photos compress to 200KB on-device before sync. Geo-fencing validates that the technician is physically at the correct asset location.

04 — SAP PM Integration

Middleware layer translates inspection records into SAP PM notifications and orders via RFC. Bi-directional sync ensures work orders created in SAP appear in the mobile app and completed inspections close orders automatically.

Offline Sync Architecture

The core challenge was conflict resolution during sync. Multiple technicians might inspect the same asset offline. We implemented a last-write-wins strategy with server-side conflict detection and a review queue for true conflicts.

WatermelonDB Sync — InspectionModel.ts
import { Model, Q } from '@nozbe/watermelondb'; import { field, date, relation, children } from '@nozbe/watermelondb/decorators'; export class Inspection extends Model { static table = 'inspections'; static associations = { assets: { type: 'belongs_to', key: 'asset_id' }, readings: { type: 'has_many', foreignKey: 'inspection_id' }, photos: { type: 'has_many', foreignKey: 'inspection_id' }, }; @field('asset_id') assetId!: string; @field('status') status!: 'draft' | 'complete' | 'synced'; @field('sync_status') syncStatus!: 'pending' | 'synced' | 'conflict'; @field('latitude') latitude!: number; @field('longitude') longitude!: number; @date('inspected_at') inspectedAt!: Date; @date('synced_at') syncedAt?: Date; @children('readings') readings!: Query<Reading>; @children('photos') photos!: Query<Photo>; @relation('assets', 'asset_id') asset!: Relation<Asset>; } // Sync engine — runs on connectivity change export async function syncInspections(db: Database) { const pending = await db.get<Inspection>('inspections') .query(Q.where('sync_status', 'pending')) .fetch(); for (const inspection of pending) { const photos = await inspection.photos.fetch(); await uploadPhotos(photos); // → Azure Blob await pushToServer(inspection); // → REST API await pushToSAP(inspection); // → RFC adapter await inspection.update(r => { r.syncStatus = 'synced'; r.syncedAt = new Date(); }); } }

The app stores up to 2 weeks of inspection data offline, including 500+ compressed photos. Background sync triggers automatically when WiFi or cellular is detected, using exponential backoff on failures. Technicians never need to think about connectivity — the app just works.

Measurable Impact

The app launched to 50 technicians in a controlled pilot, expanded to all 340 within 6 weeks. Paper forms were fully retired 90 days after launch.

Metric Before After Improvement
Report Turnaround 5 business days 4 hours (avg) ▲ 95% faster
Inspection Rework Rate 12% of inspections 0.8% ▲ 93% reduction
Daily Inspections/Tech 6 inspections 9 inspections ▲ 50% throughput
Offline Capability Paper only Full functionality ▲ 100% digital
Photo Documentation Personal phones, unlinked GPS-tagged, auto-linked ▲ 100% traceable
Annual Rework Savings $180K/year waste $12K/year ▲ $168K saved
Our technicians work on 138-foot towers in January. Paper forms were literally freezing in their hands. The app changed everything — they complete inspections in half the time, the data is perfect, and we haven't had a single compliance miss since launch. The offline sync is magic — guys work all week in zero-service areas and everything just appears in SAP when they're back in range.
FD
Field Operations Director
Mid-Atlantic Energy Utility — 340 Technicians

Need a Mobile Solution?

Let's build an app that works where your team does — connected or not.

Start Your Project →