Skip to content

Greenfield rebuild (draft) ​

Status: under review on /next. v1 winners stay live until a row is promoted.

Rebuild pack from the Convex monorepo → Marketplace · MelonQ · Middleware · Core. Use live explorers + sibling repos, not Convex, as “what exists today.”

Keep from v1 ​

  • Amenity ticks are a local slug catalog — v1 tick list. APIs store which slugs a property has (amenity_{slug}). Do not fetch the picker list from Core.
  • Middleware wins over Core. IDOR on Core path-settings + Middleware only.
  • Core stays generic entities. No Resend, PSP, or GuestTraction in Laravel.

Proposed surfaces ​

SurfaceHost (draft)v1 today
Marketplacebookdirect.ngsame app
Booking Engine{HotelName}.com-bookdirect.compath slug on Marketplace (Direct Booking)
Partner platformplatform.melonq.com/extranet
Partner onboardingonboarding.bookdirect.melonq.com/extranet/onboarding
Partner authmelonq.com/signinCore login in the same Next app

Playbooks in this draft ​

GuideDecision vs v1
Email (Resend) + template matrixPromote live POST .../emails/send. Matrix of keys + CTAs — no full TSX dump
Booking ID format6-digit lodging ref; seed 010000 only if live max < 10000
API-based contentGalleries/CMS via API. Amenities = local slugs
Placeholder photosFour API slots
Google MapsFetch once, store, serve from property API
ARI SSOTProposed inventory rows. Live winner stays availability/check
MelonQ separationPartner hosts. v1 /extranet until redirects
Booking EngineSubdomain-only. Path links become 301s
AI Rate MatchNew Middleware + worker. After rates + ARI
MigrationCutover order. Rooms stay a rooms folder (live)

Path remount (draft winner) ​

Sibling config/routes.json and the live explorer already mount lodging folders at /api/v1/bookdirect/* (properties, rooms, rates-packages, bookings, reservations, emails). File-manager stays /api/v1/nellalink/file-manager.

v1 playbooks still document /api/v1/nellalink/properties. Promote remount in one iterate — do not mix it into MelonQ or ARI.

Proposed changelog.

API-first. Middleware Backend wins over Core Backend when both exist.