The whole estate on one foundation. Three product arms, the operational spine that joins them, and every third party they touch. An orientation brief for the team.
One foundation under everything. Every arm runs on the same four tools — Netlify (hosting/deploys), Supabase (data, auth, storage), Claude (the AI), Resend (email) — and the same security pattern. Learn it once and it applies across the whole estate.
A client moves left to right through the business. Each stage is owned by one arm. Safari Portal is the operational spine they all write to and read from. Underneath sits one shared foundation and one shared supplier core.
The page builder, now a self-serve product WRLD. Branded Stay & Journey pages, AI auto-fill, lead capture, cross-sell. Top of funnel.
The client-facing quote engine. Assembles flights, hotels, transfers, touring, cruise into a costed, on-brand itinerary. Quotes, doesn't book.
The AI concierge. A traveller PWA plus a staff Studio. Romy holds the whole trip and helps proactively while the client travels.
System of record for the agency: deals, pipeline, invoicing, financials, the guest portal for passports and PII, itineraries and lookbooks. Rapid Book writes quotes and invoices here; booking documents from here feed Hello Romy. Not a thing we're rebuilding.
Netlify · Supabase · Claude · Resend. Hosting and git-push deploys, Postgres with auth/storage/RLS, the Claude API for extraction, and branded email.
HotelBeds · Stuba · Room-Res · Mozio. Hotels and rate-compare (Otto), transfers and experiences (York). Drawn on by Rapid Book and Hello Romy alike.
The one-line version · Arm 1 finds and captures the client. Arm 2 quotes the trip. A human books it. Arm 3 looks after them while they travel. Safari Portal sits in the middle holding the truth, and one shared toolchain runs the lot.
An internal web app — now a self-serve SaaS product, WRLD — to build, save and publish branded landing pages for travel offers, capture leads, and cross-sell across pages. The builder is login-gated; published pages are public static HTML served from storage.
tp-page-buildersend.travelproject.au)
Builder / product wrld.au · published pages stays. / journeys.travelproject.au · collection hub collection.travelproject.au (per-agent /m/, /c/ …).
The multi-tenant tracking & attribution layer, packaged as WRLD — a standalone commercial product. Enquiry + funnel events done; page-view tracking, Stripe Connect bookings and reporting views next.
A client-facing engine that turns a destination, dates and a party into a fully costed, on-brand itinerary in minutes. It assembles and prices — the agent books. Its own landing page / product, distinct from Hello Romy. Brief written; recommended to live in the same stack.
A white-label AI travel concierge. Two surfaces over one shared backend. Romy — the voice & chat concierge — holds each traveller's whole trip and helps proactively. Core live; proactive engine in progress.
Installable PWA, offline service worker, web push, auto-updating. Renders the trip: itinerary, docs, weather, SOS, checklist, Romy.
Staff dashboard. Onboards clients, runs Otto & York, deploys the traveller app. Multi-tenant per agency.
One project, single source of truth. Postgres, magic-link auth, private storage, RLS. Two Netlify sites, one monorepo.
| Piece | Service | Status | Notes |
|---|---|---|---|
| Concierge | ElevenLabs | Wiring keys | Romy voice/chat, signed URL per session. Turning on: keys on the app site + publish the agent. |
| Onboarding | Claude parse | Live | Drop many booking PDFs → one structured itinerary + editable review panel |
| Hotels | Otto | Live | Search by hotel name (via hotel_xref) → room types & rates → compare vs Stuba. Room-Res booking engine wired, parked behind its token. Multi-room occupancy. |
| Ground / exp. | York | Live | Mozio transfers + HotelBeds experiences |
| Visa & safety | Smartraveller | Live | Free Australian-Gov feed → visa/entry + safety level + official apply link. Powers SOS (per-country + Australian embassy). Tool check_entry_requirements. |
| Romy memory | Supabase | Ready | remember_about_guest → profiles.memory, surfaced next session. Plus interests. |
| Escalation | Resend | Ready | notify_designer emails the creating designer (resolved server-side). Also the branded welcome email. |
| Insurance | nib Travel | Parked | get_insurance_quote (OAuth → Quotes API). Awaiting partner API access. Presents quote + PDS, never advises. |
| Experiences | Viator | Parked | suggest_experiences (freetext). Awaiting API key. Booking + Stripe to come. |
| Weather | open-meteo | Live | Weather + geocoding from the city name, free, no key |
| Welcome | HeyGen | In progress | AI-avatar welcome video, async render |
| Flight + data | RapidAPI | In progress | AeroDataBox flight status (push) + FX. |
| Payments | Stripe | Planned | In-app checkout: prebook → pay → book, plus Viator/nib purchase + proactive offers |
Romy's tools (ElevenLabs server tools): check_entry_requirements, remember_about_guest, notify_designer, get_insurance_quote, suggest_experiences. All secured by a shared X-Romy-Secret header + client_ref dynamic variable.
Badges show which arm uses each service. MK Marketing & Lead · RB Rapid Book · HR Hello Romy.
| Service | Role | Auth | Used by | Status |
|---|---|---|---|---|
| Netlify | Hosting + serverless functions, git-push deploy | Platform creds | MK RB HR | Live |
| Supabase | Postgres, Auth, Storage, RLS | publishable + service-role | MK RB HR | Live |
| Anthropic Claude | PDF/brief → structured data | API key (env) | MK RB HR | Live |
| Resend | Branded email (per-arm verified domain) | API key + domain | MK HR | Live |
| HotelBeds Apitude | Hotels (Otto), activities (York) | API key + X-Signature | RB HR | Live |
| Stuba (Yanolja HAPI) | Hotel rate compare vs HotelBeds | AuthApiKey, IP-whitelisted | RB HR | Live · proxy |
| Room-Res | Hotel booking engine (search / prebook / book / cancel) | Bearer JWT (env) | RB HR | Awaiting token |
| Mozio | Ground transfers (York) | API-KEY header | RB HR | Live |
| QuotaGuard Static | Static-egress proxy → fixed IPs for IP-locked suppliers (Stuba) | proxy URL (env) | RB HR | Live |
| Smartraveller | Visa/entry + safety advisories + apply links (SOS) | None, free | HR | Live |
| nib Travel | Travel insurance quote/purchase | OAuth2 password grant | RB HR | Awaiting API |
| Viator Partner API | Bookable tours/experiences (merchant) | API key (exp-api-key) | HR | Awaiting key |
| ElevenLabs | Romy voice/chat | API key → signed URL | HR | Wiring keys |
| HeyGen | AI-avatar welcome video | API key | HR | In progress |
| RapidAPI | AeroDataBox flight status, FX, OTA price benchmark (Otto) | X-RapidAPI-Key | HR | In progress |
| open-meteo | Weather + geocoding | None, free | HR | Live |
| Google Maps (Places New) | Hotel name → exact map pin (OSM fallback) | API key (env) | MK | Live |
| Stripe | WRLD subscription; in-app checkout for offers; Connect for Arm 1 attribution | API key (env) | MK HR | Planned |
| Sabre · Cruise HQ · Tour Atlas · Design Hotels/LTC/Signature | Rapid Book sources | various (confirm) | RB | Planned |
| MapLibre + OpenFreeMap · sharp · Elfsight | Maps · images · reviews | none / embed | MK | Live |
| Google Drive | Media import (optional — direct upload added) | service-account key | MK | Off |
| Safari Portal | Operational spine — deals, invoicing, PII, itineraries, lookbooks | API key (env) | RB HR | Live |
client_ref dynamic variable; the designer's email is resolved server-side and never exposed.Hello Romy — passwordless magic-link for staff & travellers (same provider, different authorization). Page builder / WRLD — Supabase Auth + Google OAuth, builder fully gated.
The model is sound and consistent: secrets in functions, RLS for isolation, signed URLs for private docs. The Stuba IP watch-item is resolved — calls egress through a static-IP proxy (QuotaGuard), fixed IPs whitelisted with Stuba, so it no longer breaks on Netlify IP rotation.
hotel_xref).Three arms, one foundation. Marketing & Lead (WRLD) is a live Next.js page builder that finds and captures clients. Rapid Book is a quote engine to be built that prices a trip and hands it to Safari Portal. Hello Romy is a live concierge — a traveller PWA and a staff Studio over Supabase, with Romy on ElevenLabs looking after the client as they travel. Everything runs on Netlify, Supabase, Claude and Resend; secrets stay in serverless functions; and Postgres RLS keeps tenants and travellers apart. Learn that pattern first and the rest follows.