← All documentation

Infrastructure

How to create and edit points of interest

POIs — viewpoints, campsites, water, hazards, trailheads, parking — are filed from the field app and edited from the dashboard slide panel. Covers the ten default POI types, per-type attributes, photos, trail linkage, why POIs are private, and the delete behavior.

Points of interest (POIs) are the things trail users might want to know about but that aren't built infrastructure: viewpoints, campsites, water sources, hazards, trailheads, parking lots. Every POI has coordinates, a category, a name, an optional description, optional photos, and per-type attributes — smaller-footprint than a structure, but the same shape as a data record.

What is a POI?

A POI is a labeled point on the map. Every POI has a name, a category (Trailhead, Viewpoint, Water, Hazard, etc.), coordinates, an optional description, optional photos, and optional per-type custom fields. It can be attached to a trail (the trail's Show page then lists it) or stand alone.

POIs are private to your organization — they show on the dashboard and the field app for your team, but not on the public trail pages or the public map. If you want to publish a viewpoint or a trailhead to the outside world, that's a documentation-side effort (add it to the trail's description or a dedicated marketing page), not a settings toggle.

POIs are simpler than structures — no condition tracking, no inspection cadence, no network linkage, no auto-generated code, no materials calculator. Use them for anything you want a labeled pin for.

POI types and categories

Every POI belongs to one POI type. The type controls its name in the UI, the icon + color of its map marker, the category bucket it falls into, and any per-type attribute fields on the wizard.

Every fresh organization ships with ten default types:

Type Category
Trailhead access
Parking access
Viewpoint viewpoint
Water amenity
Hazard feature
Campsite amenity
Restroom amenity
Shelter amenity
Gate feature
Other feature

The four categories (access, viewpoint, amenity, feature) are used to group POIs on filter chips and to color the marker on the map — access is blue, amenity is green, viewpoint is amber, feature is gray.

You can add, edit, or delete types at Settings → POI types. Adding a type means it appears in the field-app wizard's type picker on step 1; adding fields to its attribute schema means the wizard shows more inputs on step 4. Each type also has an Icon picker so a custom type (like Bike repair station) can borrow any glyph from the built-in library (Trailhead, Parking, Gate, Shelter, Campsite, Restroom, Water, Viewpoint, Trail map, Hazard, Other) instead of falling through to the generic map-pin.

Creating a POI

Same shape as the Infrastructure flow — there is no dashboard "Create POI" form. Every POI is created through the field-app wizard, either on your phone in the field or via the field app in a browser tab. The Points of Interest index's + New point button opens the field app in a new tab; the field app routes you into a 4-step wizard.

The wizard's four steps:

  1. Pick a type — grid of your organization's POI types (Trailhead / Viewpoint / Water / etc.). Tapping a type advances.
  2. Photos — optional, up to 10 files per upload, 5 MB per file. POIs cap out at 20 photos total (oldest rotates off).
  3. Confirm the spot — GPS auto-locks; drag or tap-to-place if needed.
  4. Details — the fields below.

Any active member of your organization can create a POI. The + New point button on the dashboard is visible to everyone (unlike the Infrastructure button, which is manager-gated); server-side, the create endpoint requires an active membership.

Every field on the create form

Step 4 fields (verbatim labels):

  • Name — required, plain text, max 255 characters. If you leave it blank the wizard blocks the submit with "Give the POI a name." Unlike structures, a POI can't be code-only — the name is what shows on the map label and the trail's Show page.
  • Description (optional) — textarea. Longer context: what the viewpoint sees, whether the water source is filtered, how big the hazard is.
  • Per-type custom fields — per the type's attribute schema. See the next section.

Latitude / longitude aren't manual inputs — they come from step 3 (Confirm the spot). Category is picked on step 1 and shown read-only. Server-side validation caps the coordinate range (lat between -90 and 90, lng between -180 and 180) and requires category to match a slug that exists in your organization's poi_types table (or one of the 10 default slugs if you haven't customized your types yet).

Hit Save to create the POI. It shows up on the Points of Interest index and on any linked trail's Show page immediately.

Type-specific attributes

Each POI type carries its own attribute schema — same idea as structures. Supported field types:

  • Text — single-line plain input.
  • Textarea — multi-line for longer notes.
  • Number — numeric input.
  • Date — date picker.
  • Select — dropdown with predefined options.
  • Checkbox — yes/no toggle.

(POIs don't have the Dimension field type that bridges use — POIs aren't measured in the same way.)

Common uses:

  • Water type — a Filtered / Treatment required / Untreated select and a Seasonal checkbox.
  • Campsite type — number of tent sites, fire ring yes/no, permit required.
  • Parking type — capacity, seasonal accessibility, gravel/paved.

Values live on the POI row as JSON under custom_fields. The dashboard renders them read-only in the slide panel's Details block; the edit form renders them inline so a manager can update any of them.

You define the schemas at Settings → POI types → Edit type → Attributes.

Photos and location

Photos. Up to 20 per POI, 10 per upload batch, 5 MB per file, PNG or JPEG. When you upload the 21st, the oldest rotates off. Photos land in the slide panel as a grid; tap any to open the lightbox for a full-size view.

Location. Step 3 of the wizard captures coordinates. Location can come from:

  • GPS auto-lock — the app requests your phone's current position and uses that. Fastest path when you're standing on the POI.
  • Tap to place — you drop the pin on the map manually. Useful when you're not on-site or the GPS signal is bad.

The location_source column records which method was used (gps vs manual) so future reports can distinguish "field-captured on foot" from "desk-marked from an aerial".

You can move a POI after creation by editing its trail linkage or dragging the pin on the trail's map editor — coordinates aren't fixed in stone, they just need to be inside your organization's map extent to display sensibly.

Viewing and editing a POI

There's no standalone POI show page — every POI opens as a slide-out panel on the Points of Interest index. Clicking a POI card, or hitting a direct URL like /points/{id}, both open the panel with the POI pre-selected.

The slide panel shows:

  • Category chip with a color dot (matches the map marker).
  • Coordinates.
  • Trail linkage (or "not on a trail").
  • Description.
  • Photo grid + lightbox.
  • Details block — per-type custom fields rendered read-only.

Managers see an Edit details collapsible below. Editable fields: Name, Type (dropdown — mutable, like structures), Trail (with "— None —"), Description, plus per-type custom fields. Field workers see the panel as read-only.

Permission-wise: creating a POI needs an active organization membership. Editing needs the same. Deleting needs owner or manager.

Linkage to trails

A POI can be attached to a trail or stand alone.

  • On a trail — set Trail in the edit form. The POI shows up on the trail's Show page under Points of interest ({{ n }}) with its name, category, description, and location. Empty-state on a trail with no POIs reads "No points of interest on this trail."
  • Standalone — leave the Trail dropdown at "— None —". The POI still shows on the Points of Interest index and on the field-app POI list; it just isn't attached to a specific trail.

Deleting a trail nulls the trail_id on any linked POIs — the POIs themselves survive as standalone. There's no network_id column on POIs; network scoping is transitive through the linked trail. So a POI attached to a trail that belongs to Networks A and B is discoverable from both networks' filtered views.

Visibility — POIs are private

POIs are not published to the public. The public trail pages (/t/{slug}) and public network pages (/n/{slug}) do not surface POIs. There is no is_public toggle in the create or edit form, and no per-POI visibility setting.

If you want the outside world to know about a viewpoint or a trailhead, put the information in the trail's description (which does render on public pages) or in a dedicated marketing page on your website. The POI stays in the field-app + dashboard as an internal reference.

This is a deliberate design choice — POIs often contain data your organization doesn't want to publish (hazard locations, unstaffed water sources with liability implications, campsites that require permits). The private-by-default model errs on the safe side; publishing would need to be a per-POI opt-in, and that hasn't been built yet.

Deleting a POI

The Delete button lives on the slide panel edit form. Owner and manager only. Confirmation reads "Remove "{POI name}"?".

What happens on delete:

  • The POI row is removed.
  • No cascading rows to worry about — POIs have no children (no maintenance items linked to them, no inspection log, no code re-use policy).
  • Photos are not auto-purged from storage on POI delete. Orphaned photos linger unless you delete each one first via the photo controls in the slide panel.

If you want to move a POI out of active use without deleting it, drop its trail linkage and let it sit as standalone. There's no soft-delete for POIs.

Common gotchas

  • There is no dashboard "Create POI" form. All POIs are filed via the field-app wizard. The dashboard + New point button opens the field app in a new tab.
  • The "+ New point" button is visible to everyone — unlike the Infrastructure equivalent, which is manager-gated on the client side. Server-side, any active member of the organization can create a POI, so the visible button is honest.
  • POIs are private. They don't show on the public trail or network pages. Don't rely on them for outward-facing information.
  • A point belongs to a network through its trail. Attach it to a trail and it appears under whichever network that trail is in; move the trail and the point moves with it.
  • No condition or inspection tracking. POIs don't age like structures — a viewpoint doesn't need a re-inspection. If you need to track the state of something, it's probably a structure.
  • The name is required. The wizard blocks a submit with a blank name.
  • Deleting a point deletes its photos. They stop counting against your storage at the same moment the point goes.
  • Category is mutable. A mis-picked category on creation can be fixed by editing the POI — the map marker's color + icon update automatically.

What's next

  • Set up your organization's POI types at Settings → POI types. Add the ones you'll actually use, delete the ones you won't, and configure attribute schemas where they help.
  • Read the How to create and edit infrastructure article if you're looking at trailhead kiosks or bridges — those are structures, not POIs.
  • Bulk-import POIs from a KML or GPX file isn't supported yet — every POI is filed one at a time through the wizard. Group work is easier with two phones in the field than one browser tab on the desk.