Mobile App for Inspections and Checklists
Inspector walks through facility, puts checkmarks in paper journal, returns to office, transfers to Excel. Takes violation photos on personal phone, sends via WhatsApp. A week later — need to find specific check, search folders. Typical picture in manufacturing, construction, housing, retail. Mobile inspection app doesn't just digitize paper — it creates auditable data chain with geotags, photos, and timestamps.
Technical Importance in Checklists
Form Constructor
Inspection templates must configure without developer. This means dynamic form engine: question types — checkbox, radio, text, number, photo, signature, geo_point, barcode_scan, rating_stars. Each question has required, conditions (show if previous answer = X), and validation_rules.
Server-side — JSON Schema for template description. Mobile — renderer building UI from schema. iOS: recursive UITableView with custom UITableViewCell per type. For conditional visibility — NotificationCenter between cells or reactive approach via Combine. Android (Compose): LazyColumn with when-switch by question.type, state in FormViewModel (MVVM).
Photo Fixation with Geotag
Violation photos — key evidence. Each shot linked: coordinates (CLLocation / FusedLocationProviderClient), system clock timestamp (not EXIF — can be faked), inspection_id and question_id. Watermark photos with this data before upload.
Watermark iOS: UIGraphicsImageRenderer — draw text over UIImage. Save original and watermarked separately (original for archive, marked for report). Upload — presigned S3 URL, as usual.
Barcode and QR Scanning
Inspection object (equipment, room, store) identified by scanning. iOS: AVCaptureMetadataOutput — native, no extra libs, supports QR, EAN-13, Code-128, DataMatrix. Android: ML Kit Barcode Scanning — fast, works offline. Flutter: mobile_scanner (wrapper over native APIs).
After scan — API request for object, load needed checklist template. Unknown object — create new via form.
Inspector Signature
Final step — signature. UIBezierPath + UIGestureRecognizer on iOS, Canvas + PointerInputScope in Compose. Save as PNG with transparent background, insert in PDF report.
Offline Mode — Most Important
Production facility, basement, construction site — internet unstable or absent. App must work fully offline.
Architecture: local-first. SQLite stores all templates, all started and completed inspections. Photos saved to local storage with upload queue. On network available — WorkManager (Android) or BGProcessingTask (iOS) uploads queue.
Conflicts: if template updated while inspector offline — show warning "template updated, restart inspection?". Save old result with template_version_mismatch flag.
Sync on reconnect: don't flood network — first send inspection metadata (small JSON), then photos in background via URLSession.uploadTask with background config. iOS can continue upload even after force-close if using URLSessionConfiguration.background.
Report and Analytics
PDF report on inspection completion: answer table, violation photos, inspector signature, route map (if GPS tracking enabled). Generated on server (WeasyPrint or Puppeteer) — client gets URL.
Dashboard: % completed checklists by object, top violations, dynamics over period. For mobile — simplified version (Charts via Swift Charts or MPAndroidChart). Full analytics — web panel.
Timeline
Basic app (dynamic checklists, photos, geotags, offline, PDF report) — 4-8 weeks. With template constructor in web panel, NFC/QR object ID, signatures, route tracking, and dashboard — 3-4 months. Cost individual.







