Mobile camera and daily log photos
The mobile camera flow is the primary way site teams capture photographic evidence for the daily log. It runs in the browser — no native app — and is designed to work on construction-grade Android phones and iPads in less-than-ideal connectivity.
Capturing a photo
From the daily log on a mobile device, the Add photo button opens the system camera via the browser's capture attribute. You can capture multiple photos in one session; each one queues into the upload list with a thumbnail preview.
Supported inputs:
- Direct camera capture (rear camera, full resolution)
- Photo library selection (multiple selection allowed)
- HEIC (iOS) — auto-converted to JPEG client-side via
heic2anybefore upload - JPEG and PNG up to 25 MB per file
The capture flow does not require any browser permissions beyond the camera access prompt your phone shows when the file picker opens.
Compression before upload
Photos are compressed in the browser using sharp-equivalent canvas operations before they leave the device. The default profile resizes any dimension above 2400 px down to that ceiling and re-encodes JPEG at quality 82. This typically takes a 12 MB site photo down to ~600 KB without operator-visible quality loss.
The "Compress before upload" toggle on the capture screen lets you turn this off for cases where evidence-grade originals are required (NCRs, HSEQ incident photos). Uncompressed uploads carry a yellow badge in the daily log so site supervisors can spot them.
EXIF stripping
By default, EXIF metadata is stripped from uploaded photos. This is a privacy and security default — original photos contain GPS coordinates, device fingerprints, and timestamps that operators sometimes do not want shared with the principal's auditors.
The "Keep EXIF" toggle preserves the original metadata if you specifically need it (typically for HSEQ incident reports where the GPS coordinates are part of the evidence). The strip operation runs server-side; even if the toggle is off client-side, the server enforces the project's retention policy.
Offline and retry behaviour
If the network drops during capture or upload:
- Captured photos stay in the browser's IndexedDB queue until upload completes.
- The upload retries with exponential backoff up to 5 attempts.
- Failed uploads surface a red badge in the queue list; tap to retry manually.
- Closing the tab does NOT lose queued photos — they resume on next visit to the daily log.
Once the upload completes, the photo is tied to today's daily log entry and the thumbnail appears in the daily log's photo strip.
Where photos end up
Uploaded photos land in project storage (Azure Blob in staging, on-prem mount in self-hosted). The daily log photo record stores:
storageRef— the blob pathcapturedAt— from EXIF when present, otherwise upload timestampcapturedBy— the authenticated userdaily_log_id— the parent daily log entrycompressed/exif_stripped— flags for the audit chain
From the daily log detail page, photos can be downloaded individually or as a zip. They are also rendered in the per-month daily log report and surfaced in the executive dashboard photo strip.
Mobile-specific tips
- Use landscape orientation for slab and wall photography — the daily log report layout assumes landscape and crops portrait images aggressively.
- Capture before you describe. The text fields on the daily log auto-save every 5 seconds, so you do not lose your typing if you hop into the camera mid-entry.
- The
?compress=0URL parameter overrides the toggle for a single session if you forgot to turn it off before capturing.