M12 — Mark bookings confirmed
Status: agreed · Last session: 2026-10-02
Who and the job
- NepWalk team (today: the admin who built the trip): books each vendor on WhatsApp, outside the app, then marks that service confirmed.
- Group leader: wants one answer — "is everything booked?" — without reading a list of bookings.
Value
Without it the team keeps the booking state in its head or in a chat, and the leader asks "is the hotel booked?" for every service. One line gives the leader peace of mind (P21) while bookings still happen on WhatsApp (A6).
Placement
- The line sits on the trip page, under the trip title and above the day plan, on mobile, tablet and web. It is about the whole trip, so it does not belong inside a day.
- Tap the line → the right-side drawer (P38) on web, a bottom sheet on phones: the list of services, each confirmed or waiting.
- Marking happens on the Services page (
/trips/[id]/services), on the same row where the vendor is chosen: choose, book on WhatsApp, confirm — one place, in order. - Never on the shared page
/s/[token]: travellers never see booking status (P28, S4).
Wireframe
PHONE — trip page (team) PHONE — tap the line
┌──────────────────────────────┐ ┌──────────────────────────────┐
│ ← Church group · New Year ⋯ │ │ 2 things still being │
│ ┌──────────────────────────┐ │ │ confirmed Close│
│ │ (2) 2 things still being │ │ │ Only the NepWalk team sees │
│ │ confirmed › │ │ │ this. │
│ └──────────────────────────┘ │ │ ✓ Hotel · Kathmandu · 3 nights│
│ [Day 1][Day 2][Day 3] … │ │ ✓ Vehicle · 29 Dec – 1 Jan │
│ Day plan … │ │ … Hotel · Pokhara · 3 nights │
└──────────────────────────────┘ │ … Flight · Pokhara → KTM │
│ [Copy for the leader] │
All confirmed: │ [Open services] │
┌──────────────────────────┐ └──────────────────────────────┘
│ ✓ All set › │
└──────────────────────────┘
WEB — Services page row
┌────────────────────────────────────────────────────────────────┐
│ HOTEL · Tue 29 Dec │
│ Hotel in Kathmandu · 3 nights · 7 rooms │
│ Vendor [ Sample Hotel — NepWalk pick v] │
│ [ Mark confirmed ] → ✓ Confirmed 2 Oct [Undo] │
└────────────────────────────────────────────────────────────────┘
Web trip page: the same line, full width of the day-plan column; the list opens in the right drawer.
States
- No services (trip made from scratch, no slots yet): no line at all. Never a false "All set".
- Loading: no line until the count is known (no flash of "All set").
- Error: the line is left out; the Services page shows its own error.
- Not signed in / not the team: no line, no request made.
- Long list (10-day trip, 8+ services): the list scrolls inside the drawer or sheet; waiting items first.
- No vendor chosen: the row shows "Choose a vendor first"; the confirm button is off.
Rules and edge cases
- What is counted: every service slot of the trip — hotel, vehicle, flight, guide. Meals and activities have no slot (P34), so they are never counted.
- A slot is confirmed only when the team marks it. A slot with no vendor counts as still being confirmed.
- A vendor must be chosen first. Confirming "nobody" means nothing. Reason: the confirmation is about a real booking with a real vendor.
- Changing or clearing the vendor removes the confirmation. So does blocking that vendor. Reason: the booking was with the old vendor.
- Undo is allowed: a vendor can cancel after confirming.
- Who and when are stored with each confirmation (admin id, time).
- Wording (P21): "All set ✓" · "1 thing still being confirmed" · "N things still being confirmed".
- Access: admin only, like the other service-slot routes. Unknown slot → 404. The share view and public trip reads never carry the status (S3, S4, S7).
Decided
- One line per trip, not a badge per stop (P21).
- Travellers never see it (P28); it is not in the share view (M5 card).
- The leader gets it as text (2 Oct). The leader opens the same link as the travellers, so the line shows on the trip page for the team only. "Copy for the leader" in the list copies a short text — the line, then what is confirmed and what is waiting — and the team sends it on WhatsApp (A6). No leader-only link at launch.
- A vendor is required before a service can be confirmed (2 Oct).
- ~~Marking happens on the Services page only~~ → the drawer on the trip page holds the same rows as the Services page (founder, 2 Oct, same day; P38): the creator chooses a vendor there, the team confirms or undoes there. Rows stay in date order so none jumps while it is changed. The Services page stays as the step after creating a trip and as the full page.
- The trip creator sees the line and the list too (P46, 2 Oct, same day): read-only, with "Open services" to choose vendors. Only admins confirm or undo; a confirmed service is locked for the creator. "Copy for the leader" stays an admin action.
- Choices under tabs, pre-selected, one OK (P47, founder, 2 Oct evening): the drawer and the Services page show four tabs — Hotels · Vehicle · Flights · Guide, always all four, no counts. Each tab lists its choices (hotel per town, vehicle per town, one airline, one guide for the whole trip) with every vendor as a tappable row. The NepWalk pick is pre-selected everywhere; "OK" saves all of it at once and nothing is saved before. Tapping another vendor changes the selection; tapping the selected one takes it off. A first version without tabs (a "Use NepWalk picks" button) was rejected the same day: the tabs are needed to look through the vendors. The line counts choices. The creator sees the choices that have a vendor to choose, then "NepWalk arranges the other N for you."
- Final shape (founder, 2 Oct, 6:30 pm): an All tab first, open by default — each choice in brief ("Hotel in Kathmandu · Arya Tara"), tap a line to open its tab. In the other tabs the vendor is a dropdown, already holding the NepWalk pick. The button is "Save selection" (not "OK"), outlined; it is on while something is unsaved. Rule added to
nepwalk-fe/design-system.md: action buttons inside a drawer or bottom sheet are outline buttons. - Earlier the same day (per slot, with counts; kept for history): Hotels · Vehicle · Flights · Guide, in the drawer and on the Services page, each with its count still being confirmed. All four tabs are always there; a tab with nothing to choose says why ("No guide on this trip."). The trip creator sees only the services with a vendor to choose; the rest is one line, "NepWalk arranges the other N for you." Admins see every row. The line on the trip page keeps counting the whole trip, so it never says "All set" while something is unarranged. The drawer opens on the first tab with something left to do.
- Wording as in P21 (2 Oct): "All set ✓" / "N things still being confirmed".
TBD
- None for launch.
Backlog (after launch)
- A booking reference or note per confirmation.
- A leader-only view (needs leader accounts or join requests, P40).
- Re-planning slots when days or people change (build day 16) must keep confirmations where the slot survives.
- Vendor confirmation link (vendor confirms without the team typing it).
Tasks
[be]Slot confirmation:confirmedAt+confirmedById(additive migration);PUT /service-slots/:id/confirmationandDELETE; a vendor is required; changing, clearing or blocking the vendor removes it; the slot list carries the status; the share view does not.[fe]Services page: "Mark confirmed" / "Confirmed· Undo" on each row; off until a vendor is chosen. [fe]The line on the trip page + the list in the drawer / sheet + "Copy for the leader"; wording and copied text as a pure module with tests.