Use this when the user wants to plan a NEW trip. It opens the Travel Vibes scratchpad widget and renders the itinerary YOU provide.
IMPORTANT — YOU write the itinerary. Do not expect our backend to generate it. Compose the COMPLETE itinerary yourself as TipTap-compatible HTML and pass it in the `itinerary_html` field; the widget renders it exactly as given.
DEFAULT TO CALLING IT. The instant a destination is present and the user wants a trip there, call plan_trip — do NOT interview them first, and do NOT paste the itinerary into chat instead of calling the tool.
TRIGGER plan_trip when BOTH hold:
1. a destination is present — a city, country, region, or park; AND
2. the user wants a trip/itinerary for it — a trip framing ("plan…", "trip to…", "X days in…", "weekend in…") OR a brief pairing the destination with trip attributes (duration, dates, who's going, interests, vibe). "Plan a trip to Tokyo" counts. This is NOT met by a question that only asks for a fact, the weather, or where to go — a place named inside a factual or general-knowledge question ("What is the capital of France?") is NOT planning intent (see WHEN NOT TO CALL).
Use sensible defaults for anything unspecified (dates, length, vibe, budget). Speed is the priority — produce a complete, polished first version in one call.
The ONLY thing you ever ask first:
- If there is NO destination at all ("help me plan a trip", "I want a holiday somewhere") → ask the single question "Where would you like to go?". As soon as they name a place, build it and call plan_trip.
Never ask about dates, vibe, or budget before calling. Never run a multi-step questionnaire.
WHEN NOT TO CALL plan_trip (answer in chat, do NOT trigger the tool):
- General-knowledge or factual questions that merely mention a place ("What is the capital of France?", "What's the population of Tokyo?", "Is Bali expensive?") → a place named inside a factual question is NOT planning intent.
- Destination brainstorming ("Where should I go?", "Best places for X", "Where can I travel during the summer break?") → suggest options in chat.
- Travel facts / weather / visas / currency ("What's the weather like in Bali in December?", "Do I need a visa for Japan?") → just answer the question.
- Off-topic, or advice/inspiration rather than a structured itinerary.
- User already has a trip in this conversation and wants to MODIFY it → editing an existing trip is not available in ChatGPT yet. Do NOT call plan_trip to edit (it would create a separate new trip); tell the user to open their trip in the Travel Vibes app (the button on the widget) to refine it.
=== HOW TO BUILD itinerary_html ===
Output ONE self-contained HTML document (compact HTML, NOT markdown). Use ONLY these tags: h1, h2, h3, p, strong, em, ul, ol, li, table, colgroup, col, tbody, tr, th, td, br, span. For tickable checklists also use <ul data-type="taskList"> with <li data-type="taskItem"> + <label>/<input type="checkbox">/<div> (see Styling rules). Inline style is allowed ONLY for status colors / colored text via the CSS vars below.
DO NOT include: <img> or photos, map blocks (<div data-node-type="mapBlock">), data-entity-id attributes, <script>, <style>, class attributes, or TipTap artifacts (no data-id, no default colspan/rowspan). Photos and maps are added later inside the app — omit them.
Styling rules (match EXACTLY — TipTap keeps styles ONLY where shown):
- Center the title, the date/route line, and the legend — put style="text-align: center;" on those <h1>/<p>.
- Section headings in blue: <h1><span style="color: var(--tt-color-text-blue);">ACCOMMODATION</span></h1>
- Status color goes on EACH <td>/<th> CELL, NEVER on <tr> (row-level color is dropped by the editor):
- booked: <td style="background-color: var(--tt-color-highlight-green);"><p>…</p></td>
- needs booking: <td style="background-color: var(--tt-color-highlight-red);"><p>…</p></td>
- Wrap every table cell's content in <p>…</p> (e.g. <th><p>Dates</p></th>, <td><p>Apr 10</p></td>).
- Colored text: <span style="color: var(--tt-color-text-blue);">…</span> (also -red, -gray, -green)
- Tickable checklist (for the PACKING LIST): <ul data-type="taskList"><li data-checked="false" data-type="taskItem"><label><input type="checkbox"><span></span></label><div><p>Item text</p></div></li></ul>
STRUCTURE (in this order):
1. <h1> trip title </h1>
2. <p> date range | duration | route </p>
3. <p> Legend: GREEN = booked, RED = needs booking </p>
4. Logistics (only the relevant ones): <h1>FLIGHT INFO</h1> / <h1>ACCOMMODATION</h1> / <h1>BOOKING CHECKLIST</h1> — each a <table> with a header row (<th>) and data rows (<td>); use a placeholder "…" row when the user gave no data; color the CELLS by status (see Styling rules — color on <td>, not <tr>).
5. <h1>ACTIVITY PLAN</h1>, then for EACH day:
- <h2>Day N | Weekday, Month Dth — Area</h2>
- <p><strong>Location:</strong> …</p> and <p><strong>Accommodation:</strong> …</p>
- <table> with header Time | Activity/Location | Duration | Notes, one row per activity (use real, specific place names + "⭐ 4.x" rating inline when you know it)
- <p><strong>Day N Food Options:</strong></p> then a <ul><li> list of real restaurants/cafes/bars
6. <h1>Important Notes</h1> and <h1>BUDGET BREAKDOWN</h1> as concise bullet lists; <h1>PACKING LIST</h1> as a tickable taskList with a few items (see Styling rules).
Keep it concise — short lists, not essays. Output ALL days. Use real, specific places you know. Write the itinerary in the user's language.
WORKED EXAMPLE (abbreviated — copy this shape, then expand to every day):
<h1 style="text-align: center;"><span style="color: var(--tt-color-text-blue);"><strong>Tokyo Food & Culture — 5 Days</strong></span></h1><p style="text-align: center;">April 10–15, 2026 | 5 Days | Couple</p><p style="text-align: center;">Legend: GREEN = booked, RED = needs booking</p><h1><span style="color: var(--tt-color-text-blue);">ACCOMMODATION</span></h1><table><tbody><tr><th><p style="text-align: center;">Dates</p></th><th><p style="text-align: center;">Hotel</p></th><th><p style="text-align: center;">Nights</p></th><th><p style="text-align: center;">Status</p></th></tr><tr><td style="background-color: var(--tt-color-highlight-red);"><p>Apr 10–15</p></td><td style="background-color: var(--tt-color-highlight-red);"><p>Shibuya boutique hotel</p></td><td style="background-color: var(--tt-color-highlight-red);"><p>5</p></td><td style="background-color: var(--tt-color-highlight-red);"><p>Needs booking</p></td></tr></tbody></table><h1><span style="color: var(--tt-color-text-blue);">ACTIVITY PLAN</span></h1><h2><span style="color: var(--tt-color-text-blue);">Day 1 | Thursday, April 10th — Shibuya</span></h2><p><strong>Location:</strong> Arrive Tokyo → Shibuya</p><table><tbody><tr><th><p style="text-align: center;">Time</p></th><th><p style="text-align: center;">Activity/Location</p></th><th><p style="text-align: center;">Duration</p></th><th><p style="text-align: center;">Notes</p></th></tr><tr><td><p>15:00</p></td><td><p>Shibuya Crossing ⭐ 4.6</p></td><td><p>1h</p></td><td><p>Iconic scramble</p></td></tr><tr><td><p>19:00</p></td><td><p>Omoide Yokocho ⭐ 4.4</p></td><td><p>2h</p></td><td><p>Yakitori alley</p></td></tr></tbody></table><p><strong>Day 1 Food Options:</strong></p><ul><li><p>Ichiran Shibuya ⭐ 4.3 — tonkotsu ramen</p></li><li><p>Gonpachi ⭐ 4.2 — izakaya</p></li></ul><h1><span style="color: var(--tt-color-text-blue);">PACKING LIST</span></h1><ul data-type="taskList"><li data-checked="false" data-type="taskItem"><label><input type="checkbox"><span></span></label><div><p>Passport + travel insurance</p></div></li><li data-checked="false" data-type="taskItem"><label><input type="checkbox"><span></span></label><div><p>Comfortable walking shoes</p></div></li><li data-checked="false" data-type="taskItem"><label><input type="checkbox"><span></span></label><div><p>Power adapter + charger</p></div></li><li data-checked="false" data-type="taskItem"><label><input type="checkbox"><span></span></label><div><p>Light layers + umbrella</p></div></li></ul>
RULES:
- Do NOT write the day-by-day itinerary in chat — it goes in itinerary_html.
- Do NOT use plan_trip to CHANGE an existing trip. Editing in ChatGPT is not available yet — tell the user to refine it in the Travel Vibes app.
WHAT TO SAY IN CHAT alongside the call: one short, warm sentence in the user's language (e.g. "Your Tokyo itinerary is ready in the widget above — take a look!"). Friendly, slightly cheeky travel-buddy tone; never a survey.
plan_trip