MolinoPro

README

Master Codebase Guidebook
Markdown + HTML Dev-Docs Renderer - Frontend Client Module

Default Index
Open README.md
Root: README.mdexperiences
Milestones
H1Experiences

version: 2026.05 status: supporting commercial unit owner: Molino scope: app/experiences, app/trips featured-experiences lane last_updated: 2026-05-06

H2Focus Strip
NowLockDo Not BreakNext Closure
Twin public landing + direct booking lanecity-linked experiencesTrips stays execution rootfinish public booking bridge and keep editor lanes secondary
StateMeaning
built/lockedExperience schema, CRUD, starter save, Trips projection
built/partialcapture/test surfaces and FareHarbor data quality
docs-aheadricher TripCityExperience authoring path
H2Session Note - 2026-05-06
  • /experiences already reused TripHeroSection, but the page was not wrapped in the same trips-landing-page shell as /trips.
  • Updated app/experiences/page.tsx to use the same landing wrapper and section-anchor structure as the Trips homepage.
  • Result: Experiences now shares both the Trips hero component and the Trips landing CSS scope, keeping the header style aligned while preserving Experiences-specific copy, CTAs, and downstream section flow.
  • Follow-up alignment: reverted the wrapper experiment back to main.trips-landing-page and kept the correction in the Experiences layout offset instead. Experiences now uses marginTop: -163px to match the Trips top-edge behavior while compensating for its manual page shell.
H2Session Note - 2026-05-06 - Travel Symbol Header
  • Added the shared TravelSymbolHeader to /experiences.
  • The header provides a subtle symbolic bridge between Studio (), Trips (🛬), and Experiences (🚩) without turning the page top into a heavy navigation bar.
  • Matched the /trips layout compensation and tuned Experiences slightly higher with marginTop: -163px so the twin hero covers the remaining top-strip gap.
H10. Implementation Snapshot
H2Current state
H3`/experiences` is now the twin public commercial page to Trips

Keep it focused on direct city-tour booking, featured experiences, and the bridge upward into bundled Trips.

H3`/experiences/test` remains the fuller intake and mapping surface

Keep the capture flow regular and explicit.

H3Trips already renders featured experiences as a visible commercial lane

Preserve Trips as the main discovery surface.

H3Project-scoped CRUD exists in `app/experiences/actions/projectExperiences.ts`

Keep the CRUD surface narrow.

H3Experiences are reusable, city-linked commercial units

Use them as supporting inventory.

H3The entity is structurally correct but remains lighter than Trips in execution authority

Do not promote it to a separate commercial root.

H3`/experiences` also carries the collaborator and partner-extension lane

Keep space for local collaborators, guides, onboarding interest, partner resources, and territorial expansion signals.

H2Next build steps
H3Keep the landing surface conventional, editorial, and commercially clear

Use hero-led sections, FareHarbor booking cards, trip-bridge sections, and collaborator entry cues.

H3Keep the intake surface regular and readable

Let the full editor feel like a normal product page rather than a test harness.

H3Preserve Trips as the main consumer of experience inventory

Keep the supporting inventory aligned with Trips.

H3Extend pricing and mapping only where it feeds `Trip -> LineItem -> Offer -> Order`

Keep the bridge explicit.

H3Do not turn Experiences into a separate commercial root

Leave commercial authority in Trips.

H2Prompt starter summary
H3Keep Experiences as a reusable city-linked commercial unit

Use a twin public landing page, a fuller intake page under /experiences/test, a Trips featured-experiences lane, and a narrow bridge into trip execution.

H2Prompt starter
Update the Experiences PRD slice using _PRD/experiences/README.md as the source of truth. Keep Experiences as a supporting commercial ingredient layer, not a canonical business root. Preserve `/experiences` as the twin public landing page, keep `/experiences/test` as the fuller intake and mapping route, preserve the featured-experiences lane inside `/trips`, and keep the existing project-scoped CRUD. Keep the next steps tied to Trip composition, LineItems, and Offers. Do not expand scope into a separate booking system or replace Trip execution authority.

Functional note:

  • /experiences is now a public commercial landing page, not the starter capture surface.
  • /experiences/test remains the fuller capture and mapping route.
  • app/experiences/actions/projectExperiences.ts covers the direct project-scoped CRUD, while Trips remains the main commercial consumer of experience inventory.
  • The mapping and test surfaces should stay thin so they do not become a parallel execution root.

Prompt starter companion:

Audit Experiences as a support unit. Keep `/experiences` as the twin public landing page, keep `/experiences/test` as the fuller mapping route, keep project-scoped CRUD, and preserve the Trips featured-experiences lane as the main discovery surface. Do not promote Experiences to canonical business truth or separate booking authority. If you touch pricing or mapping, keep the bridge explicit to TripCityExperience, LineItems, and Offers.
H21. Product Identity
H3Name

Experiences

H3One-line Definition

Experiences are reusable city-linked commercial units that support Trips, LineItems, and future booking flows.

H3User-facing Purpose

This feature exists so users can:

  • capture a reusable experience record
  • associate the experience with a city and product type
  • surface the experience inside Trips
  • keep a lightweight editor separate from full trip execution
H3Internal Platform Purpose

Inside Molino App, this feature exists to:

  • preserve reusable experience data
  • keep capture and mapping thin
  • feed the Trips featured-experiences lane
  • provide a support layer for LineItems, Offers, and Orders
H22. Current Status
H3Core Complete
  • schema entity exists
  • /experiences starter capture route exists
  • project-scoped CRUD actions exist
  • Trips already surfaces featured experiences
  • city-linking is part of the domain model
H3Code Audit - 2026-04-26

Built / locked

  • Prisma Experience has slug, basePrice, currency, externalId, active, featured, cityId, productTypeId, and relation support for line items and trip-city composition.
  • saveExperienceDraft() persists starter/mapped experience bundles and revalidates /experiences plus /experiences/test.
  • getProjectExperiences(), createExperience(), updateExperience(), and deleteExperience() provide project-scoped CRUD.
  • Trips consumes active experiences through getTripsPublicData() and maps externalId into FareHarbor booking hrefs.

Built / partial

  • The starter capture and test/editor surfaces exist, but are still lighter than Trips.
  • Experience pricing can feed line-item calculations through support code, but Experiences does not own the canonical booking path.

Docs-ahead / pending

  • Richer experience-to-trip composition through TripCityExperience is schema-supported but not yet the main production authoring path.
  • Duplicate/variant handling for city tours and FareHarbor-linked experiences remains a pending data hygiene concern.

Critical next step

Keep Experiences as supporting inventory: improve city/FareHarbor data quality only where it improves Trips lane projection or the eventual LineItem/Offer path.

H3Partial
  • pricing authority is still lighter than Trips
  • richer LineItem generation is not the primary home of this feature
  • booking authority is not centered here
  • action maturity is adequate for capture, not for a full commerce engine
H3Not Built
  • Experiences is not a canonical commercial pipeline root
  • it does not replace Trip execution
  • it does not own order authority
  • it should not become a parallel booking system
H23. Architectural Position

Experiences are a supporting commercial ingredient layer.

  • They are not Trip
  • They are not Offer
  • They are not Order
  • They are not LineItem

They sit before or alongside intent and feed the execution pipeline through Trips and downstream commerce layers.

H24. Relationship to Trips
  • Trips is the primary execution surface
  • Experiences are supporting discovery and ingredient units
  • the featured-experiences lane in Trips is already the correct integration point
  • TripCityExperience remains the composition bridge
H24.1 Naming Alignment

Treat these as the same commercial family in the docs and UI:

  • city tours
  • city highlight tours
  • featured experiences
  • experience records

They all describe the reusable city-linked ingredient layer that Trips surfaces.

Treat these as the same planning family:

  • trip plan
  • flexible trip planning
  • trip planner
  • plans

They describe the intent / planning surface that consumes or orchestrates experiences, not the experience entity itself.

H25. Scope
H3In Scope
  • routes: /experiences, /experiences/[id]
  • app folder: app/experiences/
  • actions: create, update, list, delete, capture, mapping
  • integration points: Trips featured-experiences lane, Trip composition, LineItems, Offers
  • models: Experience, TripCityExperience, supporting product-type mapping
H3Out of Scope
  • a separate commercial booking engine
  • replacing Trips as the primary execution surface
  • duplicating pricing authority outside the established pipeline
H26. Next Steps
H3Priority 1
  • keep /experiences as a thin capture and mapping route
  • keep Trips as the main consumer of experience inventory
  • preserve the featured-experiences lane as the primary surface for discovery
  • keep /experiences/[id] simple and booking-first, using existing content/fallback layers rather than inventing a separate execution model
H3Priority 2
  • extend pricing only where it feeds Trip -> LineItem -> Offer -> Order
  • keep the execution bridge explicit and deterministic
  • avoid introducing a second commerce model
H3Priority 3
  • add filtering or list views only if they help Trips or Offers
  • keep the editor and capture flow simple
  • defer richer automation until the core pipeline needs it
H27. Hard Rules
  • experiences never mutate Trips directly
  • experiences never replace the canonical trip pipeline
  • experiences never become the commercial truth source
  • experiences remain derived or user-edited support data
H28. Final Positioning

Experiences are a lightweight reusable commercial ingredient layer that supports Molino’s trip execution pipeline, but they are not the canonical commercial domain root.

H2Session Note - 2026-05-06
  • Added simple public /experiences/[experienceId] detail pages as a booking-first layer.
  • These pages reuse existing DB content when available and fall back to a small core public catalog for the main city experiences.
  • Featured experience cards now point to /experiences/[experienceId] instead of placeholder plan paths or Studio travel detail pages.
  • This keeps Experiences commercially useful without promoting it into a separate booking authority.
  • /experiences now reuses the locked Trips hero component with Experiences-specific copy and routes, keeping the twin-page family resemblance tighter without introducing a second hero system.