Markers Guide¶
Create, edit, organize, and collaborate on map markers with photos and descriptions.
Creating a Marker¶
You can create a marker using any of these methods:
- Click the map — Tap any empty area on the map. A form opens with pre-filled coordinates.
- Search a location — Use the geocoding search bar to find a place, then click the quick-create button on a result.
The creation form requires:
| Field | Limits | Notes |
|---|---|---|
| Title | Max 50 chars | Required |
| Date | — | Defaults to today |
| Rating | 1–5 | Defaults to 5 |
| Description | Max 10,000 chars | Optional, rich text |
See Your First Marker for a step-by-step walkthrough.
Adding Images¶
Images are compressed client-side before upload. See Image Upload for the full pipeline.
- Max images per marker: configurable (default 5)
- Accepted formats: JPEG, PNG, WebP
- Pre-compression size limit: configurable (default 7 MB)
- Output limit: configurable (default 10 MB)
You can add images during creation or after. Reorder images by drag-and-drop in the form. Delete individual images without removing the marker.
Viewing Markers¶
Markers appear on the map with unicorn icons. The sidebar lists all active markers sorted by date (newest first):
- Click a marker on the map — opens the detail view
- Click an item in the sidebar — flies to that marker on the map
- Click the info button on a sidebar item — opens the detail view directly
The detail view shows the title, date, rating, description (sanitized rich text), and an image carousel.
Search¶
Use the search bar in the sidebar to filter markers by title. Search is server-side with debounced input — it searches your group's markers only.
Editing a Marker¶
Open the detail view and click the edit button. You can modify:
- Title, date, rating, description
- Add, reorder, or delete images
- Change the location (see below)
The edit form shows unsaved-changes detection — closing with unsaved changes prompts confirmation.
Moving a Marker¶
From the detail view, click Move. The marker becomes draggable on the map. Other markers fade to 35% opacity for visibility. A confirmation bar appears at the bottom — confirm the new position or cancel to revert.
This updates only the coordinates, leaving all other fields unchanged.
Deleting and Restoring¶
Soft Delete¶
Deleting a marker moves it to the trash — it is not permanently removed. Deleted markers:
- Disappear from the map and active sidebar list
- Appear in the sidebar's Trash view
- Show a countdown of days until permanent deletion
- Are permanently deleted after the retention period (configurable, default 30 days)
Images are preserved during soft delete so they are available on restore.
Restore¶
From the Trash view, click Restore on any deleted marker. The marker returns to the map and active list with all data and images intact.
Permanent Deletion¶
After the retention period expires, the CleanupJob permanently removes the marker and deletes its images from R2 storage. This cannot be undone.
See Background Jobs for the cleanup schedule.
Collaboration¶
All markers are group-scoped. Every member of your group can:
- See all markers on the map
- View marker details and images
- Create new markers
- Edit any marker (title, description, rating, images)
- Move any marker
- Delete and restore any marker
There are no per-marker permissions or private markers. The Map module must be enabled for your group.
Image Management¶
Adding Images¶
From the edit form, select images from your device. Compression happens automatically via a Web Worker. While images are processing, the form shows a "processing" state and prevents saving.
Reordering¶
Drag images within the upload grid to change their display order. Order is preserved after save.
Deleting¶
Remove individual images from the edit form. This deletes the image from R2 storage and removes the database record — it cannot be undone.
Upload Flow¶
- File validated client-side (type, size)
- Image compressed via
browser-image-compression - Compressed output validated against backend limit
- API returns a presigned URL for direct R2 upload
- File uploaded directly to R2
- Upload confirmed with API (backend verifies file exists and size is within limit)
See File Storage for the full architecture.
Rate Limits¶
| Endpoint | Limit |
|---|---|
| List markers (map) | 30 requests / 60s |
| List markers (sidebar) | 30 requests / 60s |
| Marker detail | 60 requests / 60s |
| Create, Delete | 10 requests / 60s |
| Update, Move, Images | 20 requests / 60s |
Related¶
- Your First Marker — Step-by-step tutorial
- Collaborating on Markers — Editing, moving, restoring
- Data Model — Marker entity fields
- File Storage — Image upload flow
- API Endpoints — Marker endpoints