Spotter Photos
Backoffice path: backoffice/spotters
Available to roles: System Administrator, Administrator; Operations Staff can view, edit, and delete
Overview
The Spotter Photos page is a moderation interface for community-submitted aircraft and airport photographs. Pilots and community members submit photos, which enter a review queue. Staff review each submission and either approve it (awarding Points to the uploader) or reject it (with a required reason). This feature encourages community engagement and builds a visual library of your airline's fleet.
Photo Statuses
Each submitted photo has one of three statuses:
| Status | Description |
|---|---|
| PENDING | The photo has been submitted and is awaiting staff review. This is the initial status for all new submissions. |
| APPROVED | The photo has been reviewed and accepted. Points are awarded to the uploader upon approval. |
| REJECTED | The photo has been reviewed and declined. A rejection reason is required and visible to the uploader. |
Photo Grid and Filtering
The main view displays photos in a grid layout with status filter buttons at the top. Staff can filter the grid to show:
- All photos -- the complete collection regardless of status.
- Pending -- only photos awaiting review (the primary moderation queue).
- Approved -- only photos that have been accepted.
- Rejected -- only photos that have been declined.
Each photo card in the grid shows:
- Image -- a thumbnail of the submitted photo.
- Subject -- the aircraft or airport the photo depicts.
- Uploader -- the pilot or community member who submitted the photo.
- Timestamp -- when the photo was submitted.
- Status badge -- a visual indicator of the current status (pending, approved, rejected).
Staff Actions
Approve
Approving a photo marks it as accepted and triggers a Points reward for the uploader:
- Standard reward: The uploader receives
SPOTTER_PHOTO_POINTSfor each approved photo. - First photo bonus: If this is the first approved photo of that specific aircraft, the uploader receives an additional
SPOTTER_FIRST_PHOTO_POINTSbonus on top of the standard reward. This incentivizes pilots to photograph aircraft that have not yet been captured.
Points are recorded as a transaction with the type spotter.
Reject
Rejecting a photo requires staff to provide a reason explaining why the photo was declined. Common rejection reasons include:
- Low image quality or resolution.
- Incorrect subject identification.
- Duplicate of an existing approved photo.
- Inappropriate or off-topic content.
- Copyright or attribution concerns.
The rejection reason is visible to the uploader so they understand why their submission was not accepted and can improve future submissions.
Delete
Staff can permanently delete a photo from the system. This removes the image and all associated metadata. Deletion is typically reserved for inappropriate content or spam submissions.
Points Configuration
| Setting | Description |
|---|---|
SPOTTER_PHOTO_POINTS | Points awarded to the uploader for each approved photo. |
SPOTTER_FIRST_PHOTO_POINTS | Additional bonus Points awarded when the photo is the first approved photo of a specific aircraft. |
Both values are configured at the airline level and apply uniformly to all spotter photo approvals.
Pilot Spotter Center
Pilot path: spotters
The pilot-facing Spotter Center features:
- Recent Photos Carousel -- A horizontal scrollable carousel at the top showing the latest 12 approved spotter photos. Each card displays the image, subject badge (aircraft registration or airport ICAO), and photographer name. Clicking a photo opens a full-size lightbox.
- Upload Form -- A full-width card below the carousel where pilots can select a subject type (aircraft or airport), search for the subject, and upload a photo with a built-in crop editor.
- Photo Crop Editor -- The upload area is a visual dropzone (click or drag-and-drop) with an amber badge warning that cropping is required. When a photo is selected, a crop editor opens with the image displayed statically and a freely movable, resizable crop box locked to 16:9 aspect ratio. A dashed amber overlay inside the crop box indicates the 32:9 banner crop zone (used for hero banners). Pilots can drag and resize the crop area to frame their shot, use zoom buttons to scale the image, and rotate (90° increments), then click "Crop & Upload" to produce a cropped JPEG (max 1920x1080).
- My Submissions -- A grid showing all photos the pilot has submitted, with status badges and rejection reasons where applicable.
Photographer Credit
Wherever a spotter photo is displayed in the system (fleet page, booking page, briefing page, dashboard), the photographer's first name is shown as a small credit overlay on the image (e.g., "Photo by John"). This provides recognition for community contributions.
When the displayed image is the model's own uploaded picture (not a spotter photo), no credit is shown.
Public API Gallery Endpoints
Approved spotter photos are available via three public API endpoints. These can be used by external websites, widgets, or apps to display the airline's photo gallery.
| Endpoint | Description |
|---|---|
GET /api/public/gallery | All approved photos across the airline, newest first. |
GET /api/public/data/airports/{id}/gallery | Approved photos for a specific airport. |
GET /api/public/data/fleet/{id}/gallery | Approved photos for a specific aircraft. |
All gallery endpoints support pagination via page and per_page query parameters (default 20 items per page, maximum 50).
Each photo in the response includes:
| Field | Description |
|---|---|
id | Photo ID |
url | Full URL to the image |
credit | Photographer's first name |
subject_type | "aircraft" or "airport" |
subject_id | ID of the subject |
subject_label | Aircraft registration or airport ICAO code |
created_at | Submission timestamp (ISO 8601) |
The fleet and live flight API endpoints also include a picture_credit field alongside picture_url, providing the photographer's first name when the displayed image is a spotter photo.