Photos & Documentation

Photos & Documentation

The Photos & Documentation system allows you to capture visual evidence at every stage of a repair. From initial damage documentation through to the completed fix, photos and files create an auditable record that supports quality control, warranty claims, and client communication.

RepairPhoto data fields

Field Description
repair_idUUID of the parent repair
file_pathStorage path on the tenant disk (S3)
file_nameOriginal file name as uploaded
mime_typeFile MIME type (e.g. image/jpeg, application/pdf)
file_sizeFile size in bytes
photo_typeStage classification: before, during, or after
captionOptional description of the photo
metadataJSON field storing EXIF data (camera, GPS coordinates, timestamp)
uploaded_byUUID of the user who uploaded the file

Photo types

Every photo is classified into one of three types to organise the visual record:

  • Before — damage documentation captured when the repair is first reported. These photos record the initial condition and are essential for warranty claims and client chargebacks.
  • During — work-in-progress shots taken while the repair is underway. Useful for documenting internal component conditions or unusual findings.
  • After — completion photos proving the repair has been carried out successfully. Required for quality sign-off and client reporting.

The model provides query scopes scopeBefore() and scopeAfter() to filter photos by type efficiently.

Uploading photos

On the repair detail page, the photo section features a drag-and-drop dropzone. You can upload up to 10 files per request, each with a maximum size of 10 MB. Accepted image formats are JPEG, PNG, JPG, GIF, and WebP.

Every uploaded file undergoes virus scanning via the VirusScanService before it is stored. If any file fails the security scan, the entire upload is rejected with an error identifying the problematic file.

Files are stored on the tenant S3 disk at the path repairs/{repair_id}/photos/. Each file's metadata (name, MIME type, size, uploader) is recorded in the repair_photos table.

Viewing and accessing photos

Photos are displayed as thumbnails grouped by type (before, during, after). Image files render as visual previews, while PDF and document files show a file-type icon. Each thumbnail displays the file name, human-readable file size (via getHumanFileSize()), and the uploader's name.

Clicking a thumbnail opens the full image or downloads the document. File access uses signed URLs generated by getFileUrl(), which expire after 1 hour to prevent unauthorised access to repair documentation.

Checklist photo requirements

Some checklist items require photographic evidence before they can be marked as complete. When a RepairChecklistItem has requires_photo set to true, the technician must upload a photo and provide its URL before the item's is_completed flag can be set. The isMissingRequiredPhoto() method on the checklist item model identifies items that still need their evidence photo.

Mobile photo upload

On mobile devices, photos can be uploaded either as standard file uploads or as base64-encoded data. The mobile interface also captures GPS location data when available, storing it in the metadata JSON field alongside EXIF information. This geo-tagging provides proof of where the photo was taken, which is valuable for on-site repair documentation.

Repair attachments

In addition to the dedicated photo system, the Repair model includes an attachments field (JSON array) for general file references. This field stores references to supplementary documents attached during repair creation or editing. Supported document types include images (JPEG, PNG), PDF files, and Word documents.

API routes

Method Endpoint Action
GET/repairs/{id}/photosList all photos for a repair (with uploader details)
POST/repairs/{id}/photosUpload photos (max 10 files, max 10 MB each, requires photo_type)
DELETE/repairs/{id}/photos/{photoId}Delete a photo (removes file from storage and database record)

Tips and best practices

  • Always capture "before" photos — document the initial damage state before any work begins. This is critical for warranty claims and client chargeback disputes.
  • Use captions — add a brief description to each photo so that anyone reviewing the repair record can understand the context without guessing.
  • Enable GPS on mobile uploads — geo-tagged photos provide proof of location for on-site repairs and insurance documentation.
  • Capture "after" photos for every repair — completion evidence protects against future claims that the repair was not performed or was performed inadequately.
  • Keep file sizes reasonable — while the system accepts files up to 10 MB, compressing images to a few megabytes speeds up uploads and reduces storage costs.

Next steps

Continue to the next article to learn about Time Tracking & Costs, where you can record labour hours, manage cost breakdowns, and track repair expenses.

Was this article helpful?