1 ---
2 name: travel-assistant
3 description: Plan trips, build itineraries, find flights and hotels, and estimate travel budgets.
4 ---
5
6 # Travel Assistant
7
8 Build comprehensive travel planners tailored to the user's needs. This skill ensures the agent gathers all necessary information before building, chooses the right output format, and includes essential features from the start. It also covers practical travel knowledge — flights, entry requirements, pacing, and budgeting.
9
10 ## When to Use
11
12 - Itinerary building, flight/accommodation strategy, budget estimation
13 - "What do I need to enter [country]?" — visa/vaccine/ETIAS checks
14
15 - Building interactive trip planning web apps
16
17 ## When NOT to Use
18
19 - Booking (can't transact); travel insurance (insurance-optimizer)
20
21 ## Step 1: Ask Output Format First
22
23 Before building anything, ask the user what format they want:
24
25 - **Interactive website** — Best for browsing, exploring options, and sharing with travel companions. Can include maps, filters, and selection tools.
26 - **PDF report** — Best for offline use, printing, and taking on the trip. Clean, formatted document.
27
28 - **Excel/spreadsheet** — Best for budget-focused planning, collaborative editing, and people who prefer tabular data.
29 - **Combination** — e.g., a website with PDF export (most common for serious trip planning).
30
31 ## Step 2: Gather Trip Details
32
33 Collect these essentials before generating any content:
34
35 - **Where are you traveling from?** (origin city/airport — required for flight search)
36 - **Dates and duration** — When and how long (or flexible?)
37
38 - **Destinations / regions** — Specific cities, or open to suggestions?
39 - **Group size and composition** — Number of adults, children, babies, elderly. This directly affects activity recommendations, restaurant choices, and accessibility needs (stroller-friendly, wheelchair access, etc.)
40
41 - **Travel style** — Budget, mid-range, luxury, or mixed
42 - **Priorities** — Food-focused, adventure, culture, relaxation, nightlife, nature, family fun
43
44 - **Must-dos and must-avoids** — Any specific places, activities, or experiences they want or want to skip
45 - **Pace preference** — Packed schedule vs. slow and relaxed
46
47 - **Dietary needs** — Allergies, vegetarian, etc. (affects restaurant recommendations)
48
49 Do NOT search for flights without knowing the origin city — you will get it wrong.
50
51 ## Step 3: Content Depth
52
53 Ask how detailed they want the plan:
54
55 - **High-level outline** — Day-by-day overview with main activities
56 - **Detailed recommendations** — Specific restaurants, activities, alternatives, prices, links, and booking info
57
58 - **Full concierge** — Everything above plus rain plans, backup options, and curated picks
59
60 ## Entry Requirements — Check Before Anything Else
61
62 Getting this wrong ends the trip at the airport. webSearch every time — rules change.
63
64 | Check | Source | Notes |
65
66 |-------|--------|-------|
67
68 | Visa requirements | `travel.state.gov`(US citizens) or`[passport country] [destination] visa requirements` | |
69
70 | Schengen 90/180 (Europe) | `ec.europa.eu`calculator or`schengenvisainfo.com/visa-calculator` | 90 days in any rolling 180-day window. Does NOT reset on exit. Count days not months. Entry + exit days both count as full days. Schengen ≠ EU (UK, Ireland out; Switzerland, Norway in) |
71
72 | ETIAS (Europe) | `etias.com` | Pre-authorization now required even for visa-free travelers |
73
74 | Passport validity | — | Many countries require 6 months validity beyond your departure date. Check blank pages too (some need 2+) |
75
76 | Vaccines | `cdc.gov/travel` | Yellow fever is mandatory (with certificate) for some countries if arriving from an endemic zone |
77
78 | Onward ticket proof | — | Some countries (Thailand, Philippines, Indonesia, Costa Rica, Peru) won't let you board without proof you're leaving |
79
80 | Safety advisories | `travel.state.gov/content/travel/en/traveladvisories` | |
81
82 ## Itinerary Pacing — The \#1 Mistake Is Overplanning
83
84 ### Hard limits
85
86 - **Max 1 anchor activity per half-day.** One museum in the morning, one neighborhood in the afternoon. Hour-by-hour schedules fall apart by day 2.
87 - **Transit tax:** every change of location costs 30-60 min more than Google Maps says (finding the entrance, ticketing, getting lost once). Budget it.
88
89 - **Day 1 after a long-haul flight is dead.** Plan a walk and an early dinner, nothing with a timed entry.
90 - **3-night minimum per city** for multi-city trips. 2 nights = 1 real day. Fewer cities, done well, beats a checklist.
91
92 - **One unplanned afternoon per 3 days.** The best travel moments are unscheduled.
93 - **Cluster by geography** — plot everything on a map first, then group by neighborhood. Never cross the city twice in a day.
94
95 #### Known closure patterns
96
97 - Europe: many museums closed Mondays (Louvre, Prado) or Tuesdays (Italy). Always verify.
98 - Japan: many restaurants/shops closed one weekday (often Mon or Wed). Golden Week (late Apr-early May) = everything packed.
99
100 - Middle East: Friday is the weekend day; expect closures.
101 - Siesta countries (Spain, Greece, parts of Italy): 2-5pm dead zone outside tourist cores.
102
103 ## Step 4: Build with These Standards
104
105 ### Flights
106
107 Search for flights using `webSearch`with queries like`"Google Flights [origin] to [destination] [dates]"`,`"Skyscanner [origin] to [destination] [month]"`.
108
109 Present options with **direct links** to booking/search pages:
110
111 ```text
112
113 **Option 1: [Airline] — $XXX roundtrip**
114
115 - Outbound: [date], [time] [origin] → [time] [dest] (Xh Xm, nonstop/1 stop)
116 - Return: [date], [time] [dest] → [time] [origin] (Xh Xm, nonstop/1 stop)
117
118 - [Google Flights link](URL) | [Book direct with airline](URL)
119
120 **Option 2: [Airline] — $XXX roundtrip**
121
122 ...
123
124 ```
125
126 Include at least 3 options when possible: cheapest, best schedule, best airline. Note open-jaw options if doing a multi-city trip.
127
128 #### Flight search tools — use multiple, they surface different fares
129
130 | Tool | What it's best at |
131
132 |------|-------------------|
133
134 | Google Flights | Speed; calendar price grid; search up to 7 origin + 7 destination airports at once; price-history graph shows if "now" is cheap |
135
136 | Skyscanner | "Everywhere" destination (cheapest places from your airport, sorted by price); "Whole month" date view; surfaces budget carriers Google misses |
137
138 | Skiplagged | Hidden-city fares — flight A→C with layover at B is cheaper than A→B, so you get off at B. Savings up to 60%. **Constraints:** carry-on only (checked bags go to C), one-way only (skipping a leg cancels the rest), don't do it repeatedly on the same airline (they ban accounts) |
139
140 | Going.com / Secret Flying | Error fares, mistake prices — time-sensitive |
141
142 ##### Booking rules
143
144 - Find the fare on an aggregator → **book direct with the airline.** OTAs (Expedia etc.) are useless when flights get cancelled — airline agents will say "call Expedia"
145 - Domestic sweet spot: 1-3 months out. International: 2-6 months. Last-minute is almost always worse except on empty routes
146
147 - Tuesday/Wednesday/Saturday departures are typically cheapest
148 - Open-jaw (fly into city A, out of city B) via multi-city search — often cheaper than round-trip + ground transport
149
150 ### Hotels / Accommodations
151
152 Search using `webSearch`for hotels in the destination area with queries like`"best hotels [neighborhood] [city] [budget level]"`,`"[city] hotels [dates] site:booking.com"`,`"[city] airbnb [neighborhood]"`.
153
154 Present options with **direct links**:
155
156 ```text
157
158 **[Hotel Name]** — $XXX/night | [neighborhood] | [rating] stars
159
160 - [Key feature 1], [key feature 2] (e.g., rooftop pool, walkable to old town, free breakfast)
161 - [Booking.com link](URL) | [Hotel website](URL)
162
163 **[Hotel/Airbnb Name]** — $XXX/night | [neighborhood] | [rating]
164
165 ...
166
167 ```
168
169 Include 3-5 options spanning the user's budget range. Note the neighborhood and why it's a good base. For multi-city trips, list accommodations per city.
170
171 | Platform | Best for |
172
173 |----------|----------|
174
175 | Booking.com | Widest hotel inventory, free cancellation options, price match |
176
177 | Airbnb | Apartments, longer stays, groups, kitchens |
178
179 | Hostelworld | Budget/social travelers |
180
181 | Hotel direct sites | Loyalty perks, best-rate guarantees |
182
183 ### Day-by-Day Itinerary
184
185 Structure each day with anchor activities and restaurant recommendations with links:
186
187 ```text
188
189 ## Day X — [Neighborhood/Theme]
190
191 **Anchor (AM):** [Activity] — book ahead? y/n — ~$XX — nearest metro: [station]
192
193 **Lunch:** [Restaurant name](URL) — [cuisine, 1-line description] — ~$XX/person
194
195 **Anchor (PM):** [Activity]
196
197 **Dinner:** [Restaurant name](URL) — [cuisine, 1-line description] — ~$XX/person
198
199 **Alt dinner:** [Restaurant name](URL) — [backup option]
200
201 **Transit:** [A→B method, ~time, ~cost]
202
203 **If it rains / you're tired:** [one swap]
204
205 **Day est:** $XX
206
207 ```
208
209 For restaurant links, search with `webSearch`for`"best [cuisine] restaurant [neighborhood] [city]"`or`"[city] [neighborhood] restaurants site:google.com/maps"`. Link to Google Maps, Yelp, or the restaurant's website.
210
211 ### Always Include from the Start
212
213 1. **Links for every venue** — Every restaurant, activity, and accommodation must have:
214
215 - A Google Maps link (`mapLink`)
216 - A website URL (`websiteLink`) — use the venue's official site when possible
217
218 - These should be in the data model from day one, not added later
219
220 1. **PDF/Excel export** — If building a website, always include export functionality. Users will want to take their itinerary offline while traveling. Use `jspdf` for PDF generation on the client side.
221 2. **Booking and availability context** — The app should connect to travel platforms for live data where possible, and fall back to deep links when direct integration isn't available:
222
223 #### Target platforms and their capabilities
224
225 - **Accommodations**: Booking.com, Airbnb, Expedia, Hotels.com — search availability by dates/location/group size, show prices, ratings, reviews, photos, amenities, cancellation policies
226 - **Restaurants**: OpenTable, TheFork, Resy — search availability by date/time/party size, show ratings, reviews, cuisine type, price tier, reservation slots
227
228 - **Activities/Experiences**: GetYourGuide, Viator, Fever, Klook — search by destination/dates, show availability, prices, ratings, reviews, duration, cancellation policy
229 - **Transportation**: Trainline, Rome2Rio, FlixBus, local transit APIs — search routes, schedules, prices, duration between destinations
230
231 - **Car Rental**: Rentalcars.com, AutoEurope — search by pickup/dropoff location and dates, show vehicle options, prices, insurance
232
233 ##### Integration approach (in priority order)
234
235 1. **Replit integrations** — Check if a Replit integration exists for any of these platforms. If so, use it for direct API access (availability search, reviews, pricing). This is the preferred method.
236 2. **Direct APIs** — If no Replit integration exists but the platform offers a public or partner API (e.g., Booking.com Affiliate API, GetYourGuide Partner API), use it with appropriate API keys stored as secrets.
237
238 3. **Web search enrichment** — Use web search to find current reviews, ratings, prices, and availability for venues. Parse and display relevant data.
239 4. **Deep links as fallback** — When no API access is available, generate deep links that pre-fill search parameters on the platform:
240
241 - Booking.com: `https://www.booking.com/searchresults.html?ss={destination}&checkin={date}&checkout={date}&group_adults={n}&group_children={n}`
242 - Airbnb: `https://www.airbnb.com/s/{destination}/homes?checkin={date}&checkout={date}&adults={n}&children={n}&infants={n}`
243
244 - OpenTable: `https://www.opentable.com/s?term={restaurant}&covers={n}&dateTime={datetime}`
245 - GetYourGuide: `https://www.getyourguide.com/s/?q={activity}&date_from={date}&date_to={date}`
246
247 - Expedia: `https://www.expedia.com/Hotel-Search?destination={destination}&startDate={date}&endDate={date}&rooms=1&adults={n}`
248
249 ###### Data to surface from these platforms when available
250
251 - Availability status (available / sold out / limited)
252 - Price range and specific pricing
253
254 - User ratings and review count
255 - Photos
256
257 - Cancellation/refund policy
258 - Key amenities or highlights
259
260 - Booking confirmation status
261
262 **Important:** Always check for new Replit integrations before falling back to deep links. The integration landscape evolves — what isn't available today may be available tomorrow.
263
264 1. **Persistent state** — Selection state (which items the user picks) should survive page refresh. Use localStorage at minimum, or a lightweight backend for sharing.
265 2. **Mobile-first design** — Trip planners are most useful on phones while traveling. Design mobile-first with responsive breakpoints. Consider PWA features for offline access.
266
267 3. **Collaborative features** — For group trips, consider:
268
269 - Shareable links
270 - Voting/favoriting on options
271
272 - Comments on activities
273 - At minimum, make the plan easy to share (PDF export, copy link)
274
275 ### Web App — Map + Itinerary
276
277 **Always build a web app** that combines two views the user can switch between:
278
279 1. **Map view** — all locations plotted on an interactive map with color-coded markers by type (airports, hotels, activities, restaurants). Each marker has a popup with name, time, and links. Connect same-day stops with route lines so the user can see the flow.
280 2. **Itinerary view** — a beautiful, card-based day-by-day layout. Each day is a card with the day number, neighborhood/theme, and a timeline of activities, meals, and transit. Include photos or icons for each stop, estimated costs, and direct links to book or learn more.
281
282 Use the **Nominatim API** (OpenStreetMap) for geocoding addresses to lat/lng — no API key required.
283
284 The user should be able to toggle between map and itinerary views. Clicking a day in the itinerary should highlight that day's markers on the map.
285
286 ### AI-Powered Recommendations
287
288 Use AI integrations to generate smarter, personalized content rather than relying solely on hardcoded data:
289
290 - **Destination research** — Use an AI model to research destinations based on the user's preferences (travel style, group composition, interests) and generate tailored restaurant, activity, and accommodation suggestions.
291 - **Seasonality awareness** — Factor in the time of year when recommending activities. Suggest outdoor markets and harvest festivals in fall, ski resorts in winter, beaches and hiking in summer, cherry blossoms in spring. Flag activities that may be closed or less enjoyable in the chosen season.
292
293 - **Personalization** — Adjust recommendations based on group composition. A trip with babies should emphasize stroller-friendly paths, early dinner reservations, and nap-friendly schedules. A trip with adventurous adults should prioritize hikes, wine tours, and late-night dining.
294 - **Local events** — Research festivals, concerts, exhibitions, and seasonal markets happening during the travel dates and suggest them as bonus activities.
295
296 ### Real-Time Data Integration
297
298 Where possible, enrich the planner with live information:
299
300 - **Weather forecasts** — Pull weather data for the travel dates and destination. Show expected conditions on each day card. Use this to inform rain plan recommendations.
301 - **Exchange rates** — For international trips, show current exchange rates and convert budget estimates to the traveler's home currency.
302
303 - **Event calendars** — Check for local holidays, festivals, and closures that affect the itinerary.
304 - **Venue hours and closures** — Verify opening hours and seasonal closures. Flag restaurants closed on specific days (e.g., many Italian restaurants close Mondays). Alert if a suggested venue is likely to be closed on the planned visit day.
305
306 - **Implementation** — Use web search or external APIs to fetch this data. Cache results to avoid repeated lookups. Display weather/events as supplementary info on day cards, not as blocking requirements.
307
308 ### Transportation Planning
309
310 Include travel logistics between stops:
311
312 - **Driving/transit times** — Show estimated travel time between each day's activities. This helps users judge whether a day plan is realistic. Use Google Maps distance estimates or similar.
313 - **Optimal routing** — If a day has multiple stops, suggest the best order to minimize driving. Group nearby activities together.
314
315 - **Transfer days** — For multi-region trips, explicitly plan transfer days with:
316 - Departure and arrival times
317
318 - Recommended routes (scenic vs. fastest)
319 - Luggage logistics (hotel checkout times, car rental pickups/dropoffs)
320
321 - Suggested stops along the way (rest stops, scenic viewpoints, lunch spots)
322 - **Transport modes** — Note whether each leg is best done by car, train, bus, ferry, cable car, or walking. Include ticket booking links where applicable.
323
324 - **Data model** — Add transport-related fields to the day itinerary:
325
326 ```typescript
327
328 interface TransportLeg {
329
330 from: string;
331
332 to: string;
333
334 mode: 'car' | 'train' | 'bus' | 'ferry' | 'cable-car' | 'walking' | 'flight';
335
336 durationMinutes: number;
337
338 distance?: string;
339
340 notes?: string;
341
342 bookingLink?: string;
343
344 }
345
346 interface DayItinerary {
347
348 // ...existing fields...
349
350 transport?: TransportLeg[];
351
352 }
353
354 ```
355
356 ### Packing List Generator
357
358 Based on trip parameters, generate a suggested packing list:
359
360 - **Weather-based** — Pull expected weather for the destinations and dates. Suggest layers for variable weather, rain gear if rain is likely, sun protection for warm destinations.
361 - **Activity-based** — Add items based on planned activities (hiking boots for mountain trails, swimsuit for lake/beach, smart casual for fine dining, comfortable shoes for city walking).
362
363 - **Baby/child-specific** — If traveling with babies or young children, suggest: portable high chair, stroller rain cover, baby carrier for trails, snacks, entertainment for transit, travel crib if not provided by accommodation.
364 - **Destination-specific** — Note cultural requirements (modest dress for religious sites, specific adapter types for power outlets, local SIM card recommendations).
365
366 - **Duration-based** — Scale quantities to trip length. Suggest laundry considerations for trips over a week.
367 - **Categorize the list** — Group items by: Clothing, Toiletries, Electronics, Documents, Baby/Kids, Activity Gear, Miscellaneous.
368
369 ### Cost Estimation and Budget Tracking
370
371 Go beyond static price estimates:
372
373 - **Currency conversion** — For international trips, detect the traveler's home currency and show prices in both local and home currency. Use current exchange rates.
374 - **Dynamic pricing** — Where possible, link to actual pricing sources rather than static estimates. Note that prices vary by season and should be verified.
375
376 - **Budget categories** — Break costs down by: Accommodation, Dining, Activities, Transportation, Shopping/Souvenirs, Miscellaneous.
377 - **Daily budget view** — Show estimated spend per day alongside the itinerary, so users can see which days are expensive and where to cut back.
378
379 - **Running total** — Show cumulative spend as the user assigns restaurants and activities to days, so they can track against their overall budget.
380 - **Group cost splitting** — For group trips, show per-person costs alongside total costs. Account for different pricing (e.g., children free, adult tickets).
381
382 #### Budget estimation reference (per person)
383
384 | Category | Budget | Mid | High | Notes |
385
386 |----------|--------|-----|------|-------|
387
388 | Sleep /night | $25-50 | $80-180 | $250+ | Hostels/guesthouses → 3-star → boutique |
389
390 | Food /day | $15-30 | $40-80 | $120+ | Street + one sit-down → restaurants → tasting menus |
391
392 | Local transit /day | $5-15 | $15-30 | $50+ | Metro pass → occasional taxi → car+driver |
393
394 | Activities /day | $0-20 | $30-60 | $100+ | Free walking tours → paid entries → private guides |
395
396 Southeast Asia / Central America / Eastern Europe: use the low end. Western Europe / Japan / Australia: mid-to-high. Switzerland / Norway / Iceland: add 30% to whatever you estimated.
397
398 **Always add:** intercity transport (trains/flights between cities — often the hidden budget killer), travel insurance (~4-8% of trip cost), SIM/eSIM (~$20-40), visa fees, 10-15% buffer.
399
400 ### Budget Summary
401
402 | Category | Est. Total |
403
404 |----------|-----------|
405
406 | Flights | $XXX |
407
408 | Accommodation (X nights) | $XXX |
409
410 | Food | $XXX |
411
412 | Activities/Entries | $XXX |
413
414 | Local Transport | $XXX |
415
416 | **Trip Total**|**$X,XXX** |
417
418 ### Trip Templates
419
420 Save and reuse trip structures:
421
422 - **Save as template** — Allow completed trip plans to be saved as reusable templates. Strip personal details but keep the structure, venue recommendations, and day flow.
423 - **Template library** — Maintain a collection of proven itineraries that can serve as starting points. Tag templates by destination, duration, travel style, and group type.
424
425 - **Customizable templates** — When loading a template, let users adjust dates, swap venues, and modify the pace while keeping the overall structure.
426 - **Implementation** — Store templates as JSON files with the full itinerary structure. Include metadata (destination, duration, style, best season, group type) for search and filtering.
427
428 ### Multi-Region Trip Logic
429
430 Handle trips that span multiple destinations or regions:
431
432 - **Region segmentation** — Clearly separate the itinerary into region blocks (e.g., "Lake Garda — Days 1-7" and "Dolomites — Days 8-14"). Use visual badges and color coding to distinguish regions.
433 - **Transfer planning** — Automatically identify transfer days between regions. Suggest departure times, scenic routes, and midway lunch stops.
434
435 - **Region-specific recommendations** — Tailor restaurant and activity suggestions to each region. Don't suggest a Lake Garda restaurant for a Dolomites day.
436 - **Luggage logistics** — Note when hotel changes require packing up. Suggest leaving heavy luggage at a storage point if doing a day trip before checking into the next region's accommodation.
437
438 - **Suggested day allocation** — Based on the number of attractions and the pace preference, suggest how many days to allocate to each region. Flag if a region is over-packed or under-utilized.
439
440 ### Data Architecture
441
442 Structure venue data with these fields from the start:
443
444 ```typescript
445
446 interface BookingInfo {
447
448 platform: string;
449
450 deepLink: string;
451
452 rating?: number;
453
454 reviewCount?: number;
455
456 price?: string;
457
458 availability?: 'available' | 'limited' | 'sold-out' | 'unknown';
459
460 cancellationPolicy?: string;
461
462 lastChecked?: string;
463
464 }
465
466 interface Restaurant {
467
468 id: string;
469
470 name: string;
471
472 city: string;
473
474 region: string;
475
476 cuisine: string;
477
478 priceRange: string;
479
480 description: string;
481
482 mustTry: string;
483
484 familyFriendly: boolean;
485
486 mapLink: string;
487
488 websiteLink?: string;
489
490 bookingInfo?: BookingInfo[];
491
492 michelinStatus?: string;
493
494 closedOn?: string[];
495
496 suggestedMeal: 'lunch' | 'dinner' | 'either';
497
498 suggestedDays?: number[];
499
500 }
501
502 interface Activity {
503
504 id: string;
505
506 name: string;
507
508 city: string;
509
510 region: string;
511
512 category: string;
513
514 duration: string;
515
516 priceRange: string;
517
518 description: string;
519
520 highlights: string[];
521
522 familyFriendly: boolean;
523
524 strollerAccessible: boolean;
525
526 mapLink: string;
527
528 websiteLink?: string;
529
530 bookingInfo?: BookingInfo[];
531
532 seasonalAvailability?: string[];
533
534 suggestedDays?: number[];
535
536 }
537
538 interface Accommodation {
539
540 id: string;
541
542 name: string;
543
544 region: string;
545
546 stars: number;
547
548 priceRange: string;
549
550 features: string[];
551
552 familyFriendly: boolean;
553
554 babyFriendly: boolean;
555
556 mapLink: string;
557
558 websiteLink: string;
559
560 bookingInfo?: BookingInfo[];
561
562 checkInTime?: string;
563
564 checkOutTime?: string;
565
566 why: string;
567
568 }
569
570 ```
571
572 ### Feature Checklist
573
574 For a full-featured web-based travel planner, include:
575
576 - [ ] Day-by-day itinerary (timeline view)
577 - [ ] Board/Kanban view for visual overview
578
579 - [ ] Restaurant catalog with filters and "Add to Day" picker
580 - [ ] Activity catalog with category filters and "Add to Day" picker
581
582 - [ ] Selection system (context/state) for assigning items to days
583 - [ ] "Your Picks" section on each day showing assigned restaurants/activities
584
585 - [ ] Interactive map with color-coded markers
586 - [ ] Accommodation recommendations
587
588 - [ ] Budget breakdown with per-day and per-person views
589 - [ ] PDF export of full itinerary (including picks, alternatives, rain plans)
590
591 - [ ] Map, website, and booking links on every venue card
592 - [ ] Dining and activity alternatives per day
593
594 - [ ] Rain/bad weather backup plans
595 - [ ] Region badges on day cards
596
597 - [ ] Transportation time estimates between stops
598 - [ ] Packing list generator
599
600 - [ ] Weather forecast integration
601 - [ ] Currency conversion for international trips
602
603 - [ ] Persistent state (localStorage or backend)
604 - [ ] Mobile-responsive design
605
606 ### Design Defaults
607
608 For travel planners, warm and inviting palettes work well:
609
610 - Use destination-inspired colors (e.g., terracotta/olive/amber for Italy, blue/white for Greece, red/gold for Japan, sage/slate for Scandinavia)
611 - Serif headings (Playfair Display, Cormorant) + clean sans-serif body (DM Sans, Inter)
612
613 - Subtle animations for expanding sections (Framer Motion)
614 - Card-based layouts for restaurants and activities
615
616 - Cream/warm backgrounds rather than pure white
617 - Region-specific accent colors for multi-destination trips
618
619 ### PDF Export Implementation
620
621 When generating PDFs with jspdf:
622
623 - Paint page backgrounds only on new pages (in `addPage` callback), never re-paint over existing content in loops
624 - Use a `checkPageBreak` helper that handles both page breaks and background painting
625
626 - Include: header with trip title/dates, day sections with activities, selected picks, alternatives, rain plans, page numbers
627 - Style consistently with the web app's color palette
628
629 - Include packing list as a final section if generated
630 - Add a budget summary page at the end
631
632 ## Useful Lookups (webSearch)
633
634 - `"[city] 3 day itinerary reddit"` — real traveler pacing, not SEO content
635 - `"rome2rio [city A] to [city B]"` — compares train/bus/flight/ferry with rough prices
636
637 - `"numbeo cost of living [city]"` — meal/taxi/beer price baselines
638 - `"seat61 [country]"` — train travel bible, especially Europe/Asia
639
640 - `"[attraction] skip the line"` — whether advance booking is actually necessary
641
642 ## Common Pitfalls to Avoid
643
644 1. Don't hardcode venues without links — always include mapLink and websiteLink
645 2. Don't skip export functionality — users always want to take plans offline
646
647 3. Don't forget group composition affects recommendations — babies need stroller access, elderly need less walking
648 4. Don't build desktop-first — travelers use their phones
649
650 5. Don't lose selection state on refresh — persist with localStorage or backend
651 6. Don't try to build booking into the app — link to booking platforms instead
652
653 7. Don't ignore travel times — a day with 4 activities spread across a region may not be realistic
654 8. Don't recommend venues without checking seasonal availability — a summer beach activity shouldn't appear in a winter itinerary
655
656 9. Don't show prices only in local currency — international travelers need conversion
657 10. Don't treat multi-region trips as a flat list — segment by region with clear transfer days
658
659 11. Don't forget packing needs change with activities — hiking gear, swimming gear, and fine dining outfits are all different
660 12. Don't search for flights without knowing the origin city
661
662 ## Limitations
663
664 - Can't see live prices/availability — user must verify before booking
665 - Visa rules change — always confirm on official government sites
666
667 - Can't book anything