AI Docs8 min read

Multi-Destination Trip Planning: AI Decision Framework

Framework for helping users plan surf trips spanning multiple destinations based on forecast optimization.

When Multi-Destination Makes Sense

Good candidates for multi-destination:

  • Trips longer than 7-10 days
  • Regions with clustered but distinct breaks (Indo, Pacific Islands)
  • Variable forecasts where different spots will fire on different days
  • Budget flexibility allowing for inter-destination transport

Better as single-destination:

  • Trips under 7 days (transit costs time and money)
  • Destinations with diverse breaks nearby (no need to move)
  • Strong, consistent forecast at one location

The Decision Framework

Step 1: Define the Trip Window

Establish fixed dates the user can travel. This bounds all recommendations.

Step 2: Map Forecast Conditions

Query Strike Mission API for all relevant spots across the trip window. Identify peak score days for each potential destination.

Step 3: Identify Logical Groupings

Some destinations naturally cluster:
  • Bali corridor: Canggu → Uluwatu → Padang in one trip with short drives
  • Mentawais: Requires boat, all spots accessed from same vessel

Step 4: Calculate Transit Costs

For each potential destination change, assess:
  • Time cost: Hours in transit (flights, drives, ferries)
  • Financial cost: Additional transport, accommodation changes
  • Opportunity cost: Missing surf during transit

Step 5: Optimize the Sequence

  • Start where conditions are best earliest
  • Move as conditions shift
  • End where conditions are best latest
  • Minimize backtracking

Transit Decision Heuristics

Move when:

  • Current location score drops below 60 AND another destination shows 75+
  • Transit time is less than duration of forecast improvement

Stay when:

  • Conditions are "Good" or better (60+) at current location
  • Transit would cause missing a peak day anywhere
  • Forecast uncertainty is high

Never move when:

  • Current conditions are "Firing" or "Epic" (75+)
  • User is exhausted or injured