H1Next Steps
- Keep
TripPlannerContextandnormalizeStopsas the core planner base. - Move to inline TripDetail editing.
- Derive hotel policy from trip start date.
- Introduce
BookingBundle. - Add Apps Script export endpoints.
- Keep FareHarbor manual until validation is solid.
H1Trips Next Steps
Status: locked execution plan
This note captures the shortest safe implementation path for the current Trips stage.
Unblock the UX.
- Keep the current sidebar temporarily
- Build an inline editor inside TripDetail
- Reuse
TripPlannerContextandnormalizeStops - Add an edit mode toggle
Result:
- same logic
- better UX
- no regression risk
Lock the hotel rule.
Derived field:
hotelPolicy =
| "managed_blocked_inventory"
| "estimate_only"
| "external_links_only"
Logic:
if (daysUntilStart > 40) {
hotelPolicy = "managed_blocked_inventory";
} else {
hotelPolicy = "external_links_only";
}
UI:
- show room allocation only when managed
- show booking links only when external
Create the booking layer.
- Add
BookingBundle - Add a
Request Bookingaction - Create the bundle before execution
- Move status to pending after the request
Ship Apps Script highway endpoints.
/export/pdf/export/email/export/calendar/export/booking-doc
Flow:
Next.js action -> API route -> Apps Script -> Google output -> metadata -> Prisma
Use FareHarbor manual execution by default.
- Treat FareHarbor as an execution tool, not the backbone
- Confirm bookings in the dashboard
- Update status in the app after confirmation
Add FareHarbor calendar validation later.
- Check availability
- Validate schedulability
- Do not automate booking yet
H1Trips Plan - Guidebook
Status: merged guide for the Trips area
Scope:
dev-spec-docs/tripsonly- canonical merge of the current trips notes
- organized by concern and implementation order
H11. Canonical identity
Trips is the public and commercial travel surface of Molino.
Externally:
- Al-Andalus Experience
- trips
- city experiences
- shared departures
- local sessions
- travel planning
- partner network
Internally:
- Trip is the bundle
- SessionCard / Experience / GroupSession are the underlying commercial units
- Planner is the deterministic authoring surface
- Booking is execution, not trip truth
H12. Canonical domain order
The merged domain model is:
ConceptCard -> Experience -> GroupSession -> Trip -> LineItems -> Offer -> Order -> Projection
Rules:
- ConceptCards define how it is understood.
- Experiences define what is sold.
- GroupSessions define when it happens.
- Trips define how it is bundled.
- Trip truth must not be overwritten by execution systems.
H13. Development order by concern
H2Concern A. Semantic model
This is already established in the older Trips & Itineraries note.
Keep:
- Sessions are primary
- Trips are composed
- A trip reuses existing sessions
- Trip and non-trip participants may share the same sessions
Keep also:
- timeline normalization
- public language simplification
- channel-manager-safe mapping
H2Concern B. Planner UX
The planner notes converge on one result:
- current pattern = deterministic form, normalized stops, pricing engine, persisted trip
- refactor target = inline builder, single surface editing, no step fragmentation
Canonical planner shape:
/trips/newis the real builder- the sidebar is temporary
- the final UI is inline sections
- stops are the single source of truth
Inline sections:
- Basics
- Route
- Services
- Hotels
- Options
H2Concern C. Execution
The execution notes add the missing boundary:
- Trip is planning
- BookingBundle is fulfillment
- execution modes are derived, not user promises
Canonical execution model:
BookingBundleis separate from TriphotelPolicyis derived fromdaysUntilStart- FareHarbor is manual-first or validation-first, not system backbone
- Apps Script handles exports and office outputs
H2Concern D. Public product surface
The guidebook plan remains valid as the external Trips surface:
- landing page
- featured/shared trips
- custom planner
- trip detail
- schedule
- partners
- cities and experiences discovery
The landing page section map is still canonical:
- trip_hero
- trip_pathways
- trip_how_it_works
- trip_featured_group_trips
- trip_featured_cities
- trip_featured_experiences
- trip_plan_your_trip
- trip_for_partners
- trip_updates
- trip_final_cta
H2Concern E. Next steps
The locked execution path is:
- Fix planner UX
- Lock hotel policy
- Add BookingBundle
- Ship Apps Script highway
- Use manual FareHarbor execution by default
- Add FareHarbor calendar validation later
H14. Merged canonical rules
- SessionCard stays atomic for access, pricing, printing, and export.
- Trip does not define session existence.
- Planner normalization is pure and deterministic.
- UI steps are abstraction only, not domain truth.
- Hotel logic is pluggable and optional.
- Booking is separate from trip truth.
- External projections never define internal model boundaries.
- Public surface and internal model remain separate concerns.
H15. Conflict notes
H2Conflict 1: sessions-first vs trips-first
Resolution:
- sessions remain the operational primitive
- trips remain the bundled commercial product
- the merged guides and trip group costs, keeps both without collapsing them into one model
H2Conflict 2: sidebar planner vs inline planner
Resolution:
- current pattern documents the existing sidebar flow
- refactor target defines the future inline builder
- the unified guide treats the inline builder as the destination
H2Conflict 3: hotel policy variants
Resolution:
- keep one derived
hotelPolicy - use
managed_blocked_inventory,estimate_only, andexternal_links_only - derive behavior from trip timing, not manual promises
H2Conflict 4: FareHarbor role
Resolution:
- FareHarbor is a projection / execution bridge
- it is not truth
- it stays manual-first until calendar validation is stable
H2Conflict 5: planner vs booking
Resolution:
- planner produces intent
- booking bundle captures fulfillment
- do not mix them in the same surface
H16. Source notes merged
These notes were consolidated into this guide:
archive/20260220_trips-sessions-MLV.mdarchive/20260419_trip.specs.mdarchive/20260420_trip-planner.current-pattern.mdarchive/20260420_trip-planner.refactor-target.mdarchive/20260420_trips-plan.mdarchive/20260420_trips-guidebook-plan.mdarchive/20260421_trip-execution-bundle.mdarchive/20260421_trips-next-steps.locked.md