M3 — Place page
Status: agreed · Last session: 2026-09-28
Sources: requirements.md M3, M9, M2 · decisions.md A10 (place content drafted, then founder-approved; Wikimedia photos with credit), P34 · M1 day plan card · M13 maps card.
Who and the job
- Traveller: "What is this place, why does it matter, and what should I know before I go?" — the depth behind a stop card.
- Group leader: reads it to decide whether a stop is worth the time for their group.
- Editor (P36): checks the story and tip that travellers will read.
Value
A stop card has room for 3 lines. The place page is where NepWalk's culture shows — the story, why it matters, a tip from someone who knows. It is also the start of NepWalk's own place data (M9), which later feeds matching and vendor areas.
Placement — and why
| Element | Mobile | Tablet / web | Why |
|---|---|---|---|
| Entry | Tap a linked stop's photo or title on the day plan | Same | Natural "tell me more" |
| Page | Full page, back arrow returns to the same day and card | Same, centred reading column (~720 px) | Reading, not scanning |
| Content order | Photo (with credit) → name + type + town → typical duration → story → "Why it matters" → tip → location | Same | Picture first, then what you need to decide, then detail |
| Location | "Open in Google Maps" link now; a small map pin when M13's map component exists | Same | Maps are built on day 13, after this page |
Wireframe
Mobile / web (reading column)
┌──────────────────────────────┐
│ ← Back to Day 2 │
│ ┌──────────────────────────┐ │
│ │ PHOTO │ │
│ └──────────────────────────┘ │
│ Photo: Name, Wikimedia CC BY │
│ │
│ Boudhanath Stupa │
│ Temple · Kathmandu · ~1.5 h │
│ │
│ STORY │
│ One of the largest stupas … │
│ │
│ 💡 TIP │
│ Walk clockwise, like the … │
│ │
│ 📍 Open in Google Maps │
│ (M13: small map pin here) │
└──────────────────────────────┘
States
- Place not found / removed: "This place is no longer in the library" + back link.
- No photo: same placeholder as the stop card, same height.
- No story or tip yet: the section is left out (never "Lorem" or "coming soon").
- Loading: grey blocks of the same shape.
Rules and edge cases
- Content is founder-approved before it shows (A10). Unapproved drafts are not published.
- Photo credit is always shown when there is a photo (Wikimedia licence).
- Read-only for everyone; editing place content is an admin task (later).
- Only library places have a page; custom stops without a place link have none (their card is not tappable).
Decided
- Entry from a linked stop's photo / title; back returns to the same day.
- Content order as above; photo credit always shown.
- Location: Google Maps link now, map pin when M13 lands.
- Access has three tiers (P37): anyone with the link sees the public page — name, type, photo + credit, one-sentence teaser, and a line "Open NepWalk trip to see the full story" (no story, tip, duration or coordinates); trip insiders see the full page (story, tip, duration, location); system admin sees everything. No public list or search; the public route is rate-limited. (28 Sep)
- URL:
/places/<slug>. Places are independent; trips only use them. The back link comes from?from=<tripId>/<dayNumber>when opened from a trip. (28 Sep) - "Why it matters" stays inside the story for launch; a separate field is backlog. (28 Sep)
TBD
- None open.
Backlog (after launch)
- "Trips that visit this place" / "Often combined with".
- Opening hours, entry fee, dress code (content work per place).
- Several photos (gallery).
- "Why it matters" as its own field, with content for ~30 places.
Tasks
Build day 12 (Tue 29 Sep), agreed 28 Sep:
[be]GET /places/:slug— public, rate-limited (e.g. 30 requests / minute per IP): tier by viewer — outsider →publicPlaceView(name, type, photo, credit, teaser); a signed-in viewer who is an insider of any trip that uses the place → full summary (story, tip, duration, coordinates);SystemRole.ADMIN→ full. 404 for an unknown slug. e2e tests for all three tiers, the 404 and the rate limit.[fe]Page/places/[slug]: content order, states (not found, no photo, no story, loading), photo credit, "Open in Google Maps" when coordinates are present; public tier shows the teaser + "Open your NepWalk trip to see the full story"; back link from?from=.[fe]Day plan: a linked stop's photo and title open/places/<slug>?from=<tripId>/<dayNumber>; unlinked stops stay plain.