Scout — Full Product Context → feature documentation

Trips (unified): Plan my day, Just drive, Collect nearby

Trips asks one question, "What kind of trip?", and answers it three ways: plan my day, just drive, or collect nearby.

Written from code on develop, 2026-10-06. Mobile paths are relative to mobile/, backend paths to backend/. Design source: mobile/research/trip-planner-lab.html (round 3) and docs/superpowers/specs/2026-10-06-unified-trips-design.md.

Summary

Trips replaces the separate Day Trip and Road Trip entry points with one screen and one question: "What kind of trip?". There are three answers, always the same three, and each opens a map:

Starting any of them makes it the live trip. Trips then opens on that trip: On the day for a planned trip, or the drive itself. Every live screen has Route in Maps, which opens the remaining stops, in order, as one route in your maps app. A planned trip also sends a leave-by reminder 10 minutes before it is time to leave each stop.

Status

Shipped behind trips_v2, default ON in both registries (mobile/src/config/feature-flags.ts:57, backend/src/admin/feature-flag-definitions.ts:32).

User-facing surfaces

Surface Route / deep link File
The question /trips (scout://trips) with no live v2 trip src/components/trips-v2/TripsHome.tsx:115
Plan my day /trip-plan (scout://trip-plan) src/components/trips-v2/TripPlanScreen.tsx:390
Just drive /trip-drive (scout://trip-drive); also /trips while a drive is live src/components/trips-v2/TripDriveScreen.tsx:238
Collect nearby /trip-collect (scout://trip-collect) src/components/trips-v2/TripCollectScreen.tsx:117
On the day /trips while a planned or Collect nearby trip is live src/components/trips-v2/TripLive.tsx:204
Trip Calendar /trip-calendar (scout://trip-calendar), from the Calendar pill on the question (Calendar · N with N upcoming planned days) src/components/trips-v2/TripCalendarScreen.tsx:262, pill at TripsHome.tsx:183
A day's sheet ("Sunday, what kind of day?") /trip-day?date=YYYY-MM-DD, a sheet over the calendar src/components/trips-v2/TripDayScreen.tsx:541
Plan my day, date mode /trip-plan?date=…&leave=… (+ From, kind, tripId): Save to <Day>, and Delete / Re-plan on a saved day src/components/trips-v2/TripPlanScreen.tsx:13
Trip reminders switch Settings → Notifications → On this device app/notification-settings.tsx:305
Notification taps Leave-by and patch ahead are plain alerts with no buttons: a tap opens the trip in the app (On the day, or the drive), where Stay longer and Add live src/trips-v2/notificationActions.ts

Every screen is a map with a panel under it (TripScreen, src/components/trips-v2/parts.tsx). The panel is not a bottom sheet:

The map always frames above whatever height the panel has. Patches on every Trips map use the compass screen's pin (PatchPinMedallion, src/components/compass/PatchPinMedallion.tsx), with the stop number or a collected tick on its corner. Each stop's unlock area is drawn under the route the way the compass draws one: a brass fill with a dashed edge, fetched per stop with useStopGeofences. This covers Plan my day, On the day, Collect nearby, and the saved and upcoming patches on Just drive. A stop with no boundary simply has none drawn.

The drawer shows a single Trips row while the flag is on.

Every older "plan a day trip" entry point opens Plan my day while the flag is on. /trip-planner redirects to /trip-plan (mobile/app/trip-planner.tsx, default export). That covers the Home card, My Trips, the old trip home's builder and the Build a day trip mission (deep link scout://trip-planner).

How it works

One plan object. Every screen reads a TripPlan built by schedule() (src/trips-v2/plan.ts:108): ordered stops, the leg into each one (walk or drive), minutes at each stop, and an arrival and leave time for each, starting from a start time. The rest follows from it:

Choosing stops (Plan my day).

Legs.

Starting.

On the day.

Just drive.

Collect nearby.

The question.

Route in Maps and the maps app.

Trip Calendar

Trips plans today; the Trip Calendar plans any upcoming day at a time you choose, with the same planner. Ships with the app release after this doc's date; it is under trips_v2 like the rest of Trips (no flag of its own).

Data model

API surface

POST /api/trips/route (existing, authenticated as before) now also returns legs: { miles, driveMin }[] | null, one per waypoint pair. No new endpoints.

Key files

Configuration and flags

Setting Where Default
trips_v2 both flag registries on
Trip reminders Settings → Notifications (tripRemindersEnabled) on
Lengths PLAN_LENGTHS, plan.ts:20 3 hr / 5 mi, Half day / 10 mi, Full day / 25 mi
Detour DETOUR_OPTIONS, ahead.ts:16 15 min (5, 15, 30, 45)
Reminder lead LEAVE_LEAD_MIN, reminders.ts:22 10 min

Edge cases and known limits

What this feature does NOT do

Tests that cover it

Open questions