Photos in place
Drop photos onto the map at the spot they were taken. Captions, thumbnails, lightbox, lazy-loaded sharing. No "upload a gallery" step — every photo carries its own location.
How it positions a photo
When you upload a JPEG / HEIC / PNG to a trip, the system reads the file's EXIF GPS tag if one is present. That's the photo's location on the map.
If there's no EXIF GPS (e.g. the file came from a screenshot or got stripped during a re-export), the photo snaps to the GPS point in your trip whose timestamp is closest to the photo's EXIF capture time. So a photo with a known time but no GPS still lands at roughly the right place.
Messaging-app fallback (WhatsApp, Signal)
WhatsApp and Signal strip EXIF metadata when forwarding images, but they embed the capture time in the filename:
| App | Filename pattern | Extracted time |
|---|---|---|
| WhatsApp (iOS) | WhatsApp Image 2026-05-01 at 14.35.26.jpeg |
2026-05-01 14:35:26 |
| WhatsApp (Android) | IMG-20260501-WA0001.jpg |
2026-05-01 (date only) |
| Signal | signal-2026-05-01-14-35-26.jpg |
2026-05-01 14:35:26 |
| Camera roll | 20260501_143526.jpg |
2026-05-01 14:35:26 |
When a photo has no EXIF timestamp, the upload handler parses the original filename for these patterns. If it finds a date (and optionally a time), it uses that timestamp to match the photo to the closest GPS point — same mechanism as EXIF-timed photos.
Android WhatsApp filenames carry only the date, not the exact time, so the photo lands at the first GPS point of that day rather than the exact minute. You can drag it to the right spot after upload.
If neither EXIF nor filename yield a timestamp, the photo lands at the trip's latest known position with a small "photo time unknown" indicator that you can drag to the right spot in the trip detail.
Placement map preview
The "Place photo on map" modal in trip admin shows the full trip route — including any recent GPS data that hasn't been snap-to-roads matched yet. This way you see today's walk even if the route hasn't been processed, and can place the photo at the right spot along the live route.
Edited photos: borrow EXIF from the original
When you crop, filter, or re-export a photo in any mobile editor, the EXIF block is almost always stripped — including GPS and the original capture time. The edited photo then lands with no location, and filename time hints don't help if the photo was re-shared later (e.g. WhatsApp send-back from your camera roll — the filename reflects the send time, not the capture time).
The fix: open the photo in trip admin and click 📎 Use original for EXIF. A small drop area appears. Drop the unedited original photo there. The server reads its EXIF GPS and capture time in memory, applies them to the edited photo, and discards the original immediately — it's never written to disk and doesn't count against your storage quota.
If the original has GPS, the photo is placed exactly where it was
taken (location_source: "exif_donor"). If the original only has
a capture time but no GPS (rare), the system falls back to
matching that time against your trip's GPS stream within a 1-hour
window (location_source: "time_donor"). If neither GPS nor time
is present in the original either, you'll get a friendly error
message and can fall back to dragging the photo onto the map
manually.
On the public map
Each photo shows as a gold-bordered thumbnail circle on the map. Click it → lightbox opens with full-resolution image + caption. Arrow keys navigate to the previous/next photo in the trip.
Photos are lazy-loaded — only the thumbs in the current viewport download eagerly; full-size images load only on lightbox open.
Captions
Markdown-lite supported: **bold**, *italic*, line breaks.
Per-photo captions show in the lightbox and in social previews
when sharing the photo URL directly (each photo gets its own
shareable URL with proper Open Graph metadata).
Plan limits
| Plan | Photos per org | Storage |
|---|---|---|
| Light | 10 | 100 MB |
| Traveler | 100 | 1 GB |
| Nomad | 500 | 5 GB |
Each upload is capped at 5 MB (Light) / 10 MB (Traveler) / 15 MB (Nomad). HEIC files are accepted; the server transcodes them to JPEG so the public map works in every browser.
Privacy
Photos respect the trip's visibility setting. A private trip's photos require the trip password to load. Photos inside a privacy zone are not shown on the public map (the photo file remains in your admin so you don't lose it, just hidden from the public view).
EXIF metadata other than GPS + capture time is stripped on upload — camera make/model, owner name, etc. won't leak.
Sharing a single photo
Each photo has a URL like app.whereistereza.com/o/yourname/{hash}/{trip-id}?photo={id}.
Pasting that URL anywhere expands to a card with the photo as the
preview image and the caption as the title.
Related
- Trip management — visibility and per-trip controls.
- Trip Replay — photos auto-appear during the cinematic trip playback.
- Privacy & data control — privacy zones, retention.
Need help? Contact support · Where Is Tereza?