Deterministic Travel Graph · No LLM Hallucinations

Trip plans that hold up on the day.

Most AI trip planners invent restaurants, quote hours that changed years ago, and schedule walks that aren’t physically possible. Independent testing in 2026 found 9 in 10 AI itineraries fail basic fact-checking.

GraphTravel doesn’t write itineraries. It solves them — over a verified graph of real places, real opening hours, and real street-routed travel times. Every day is mathematically checked before you see it.

Instant Constraint Solver● Solves in ~600ms on server
Rome: 3,809 places · Valhalla-routed street network · 0 walk gaps
Solve 3-Day Rome Plan
9,343+ Places
Verified in Knowledge Graph
OSM + Wikidata + Commons
0 Hallucinations
Deterministic Constraint Engine
LLM writes taste, never facts
~600ms Solve
Sub-Second Server Execution
Pure TypeScript solver
34 / 34 Invariants
Continuous Mathematical Checks
Zero overlap, opening hours verified
Interactive Simulator·Engine In Action

Watch the constraint solver work.

Unlike LLMs that hallucinate prose, GraphTravel runs a 5-stage deterministic solver over precomputed street matrices and verified opening hours.

Choose scenario:
Solver Execution Pipeline✓ Solved in 412ms
Invariant Invariants: Checked 34 mathematical feasibility invariants: 0 time overlaps, 0 closed visits, 0 silently dropped stops.
Feasible · 0 ConflictsRome: 1-Day Core Highlights
6 stops·4.8 km walk·6.5h sightseeing
09:00
11:00
ColosseumHistorical Amphitheatre
✓ hours verifiedbook ahead120 min dwellQ10285
12 min walk(750 m · Valhalla routed)
11:12
12:45
Roman Forum & Palatine HillArchaeological Park
✓ hours verified93 min dwellQ180211
15 min walk(920 m · Valhalla routed)
13:00
14:00
Trattoria Romana (Meal Slot)Lunch · Time Reserved
✓ hours verified60 min dwellLocal Ingest
15 min walk(950 m · Valhalla routed)
14:15
15:00
PantheonAncient Roman Temple
✓ hours verifiedbook ahead45 min dwellQ9903
8 min walk(480 m · Valhalla routed)
15:18
16:00
Piazza Navona & FountainsHistoric Plaza
✓ hours verified42 min dwellQ210748
15 min walk(1100 m · Valhalla routed)
16:15
17:00
Trevi FountainMonuments & Fountains
✓ hours verified45 min dwellQ185382
Node InspectorVerified Node
Selected Stop
Colosseum
Time Slot
09:0011:00
Dwell Budget
120 minutes
Provenance Lineage
OSM way/1029384
Wikidata Entity: Q10285
Opening Hours Constraint
✓ Open at 09:00 (OSM Verified)
Try it on full city graphs

Solve multi-day trips across Rome, Lisbon, and Kyoto with customized taste weights.

Open in Full Planner →
The 2026 Fact-Check·Independent Verification

Why 9 in 10 AI travel itineraries fail.

Large Language Models are probabilistic text generators — they have no concept of space, time, opening hours, or street topology. Here is what happens when you compare a real AI itinerary against a GraphTravel constraint solution.

Probabilistic LLM

Generic AI Travel Planner (ChatGPT / Layla)

3 Fatal Errors Detected
09:30 AMVatican Museums on Sunday

FATAL: Vatican Museums are strictly closed on Sundays (except last Sunday of month with 4h queues).

11:30 AMWalk to Colosseum (20 min)

IMPOSSIBLE: Distance is 4.8 km through city center. Requires 62 min walk or 30 min metro, not 20 min.

01:00 PMLunch at 'Caffè della Pace'

HALLUCINATION: Historic café permanently shut down in 2016. AI hallucinated it from stale training data.

03:00 PMVisit Colosseum & Roman Forum

SILENT DROP: Both require advance timed entry tickets. Arriving at 3pm with no ticket results in rejection.

The structural flaw: 91% of independent test itineraries generated by LLMs contain at least one closed venue or invalid schedule.
Constraint Solver

GraphTravel Deterministic Solver

0 Conflicts · Provably Feasible
09:00 – 11:00Colosseum (Timed Ticket)

VERIFIED: Open 09:00–19:15. Explicit provenance warning: 'Timed ticket booking required'.

11:12 – 12:45Roman Forum & Palatine Hill

ROUTED: 12 min walk (750 m) via Valhalla street network. Combined archaeological ticket window synced.

13:00 – 14:00Trattoria Centro (Meal Slot)

VERIFIED: Real OpenStreetMap node with active 2026 verification timestamp and confirmed operating hours.

14:15 – 15:00Pantheon & Piazza Navona

CLUSTERED: 15 min walk (950 m). Sights grouped in geographic sector to prevent backtracking.

The GraphTravel guarantee: Evaluated against 34 mathematical invariants before render. If a day does not fit, we report the conflict.
🔒
The Closed Venue Trap
LLMs don't know Monday closures, seasonal shifts, or riposo afternoon pauses. GraphTravel parses standard OSM opening_hours syntax.
The Teleportation Walk
AI schedules 5km walks in 15 minutes. GraphTravel routes every pedestrian leg on Valhalla street networks with calibrated tourist pace.
👻
The Ghost Recommendation
AI hallucinates restaurants closed years ago. GraphTravel only schedules verified OpenStreetMap and Wikidata nodes with verifiable IDs.
🤫
The Silent Drop
When a day overflows, AI quietly omits stops without alerting you. GraphTravel reports unplaced items in an explicit Feasibility Bar.
The Architecture·Mathematical Rigor

Built like a compiler, not a chatbot.

GraphTravel treats trip planning as a constrained graph optimization problem. Every itinerary is the product of four deterministic pillars.

Pillar 01Temporal Feasibility

Opening Hours Truth Engine

We evaluate standard OpenStreetMap opening_hours syntax using a deterministic interval parser. The solver models split days (Italian riposo), holiday closures, day-of-week rules, and minimum dwell times. If opening hours are unrecorded, we flag them explicitly as unverified — we never guess.

// opening_hours evaluation
const intervals = parseOpeningHours("Tu-Su 09:00-19:00; Mo closed");
const isOpen = intervals.isOpenThroughout(visitStart, visitEnd);
if (!isOpen) return Feasibility.conflict("Venue closed at scheduled arrival");
Pillar 02Spatial Routing

Valhalla Street-Level Matrix

Edges in our graph are precomputed travel times routed along real pedestrian street networks, not straight-line haversine approximations. We calibrate walking speeds to a realistic tourist pace (1.25 m/s) with a measured 1.34× urban detour factor so you never miss a connection.

// Packed Uint32Array travel-time matrix
const travelSeconds = matrix.lookup(poiA.id, poiB.id);
const distanceMeters = matrix.distance(poiA.id, poiB.id);
// Scaled by TOURIST_PACE_FACTOR (1.25 m/s)
Pillar 03Combinatorial Optimization

Cluster & 2-Opt Sequencing

To eliminate absurd cross-town zig-zags, the solver first partitions candidate sights into tight geographic clusters. Within each cluster, a 2-opt TSP heuristic iteratively untangles route crossings — cutting total walking distance in Rome from 20.3 km down to 9.1 km for the same sights.

// 2-opt route crossing untangling
while (improved) {
  for (let i = 1; i < tour.length - 1; i++) {
    for (let k = i + 1; k < tour.length; k++) {
      if (delta(i, k) < 0) { 2optSwap(tour, i, k); improved = true; }
    }
  }
}
Pillar 04Radical Provenance

ODbL & Wikidata Lineage

Every coordinate, category, and dwell budget traces back to an OpenStreetMap object or Wikidata entity ID (QID). Where data is missing, we report the gap in our Feasibility Bar rather than quietly inventing filler. Our LLM handles taste scoring and prose — never facts.

// Provenance badge schema
export type PoiSource = {
  source: "osm" | "wikidata" | "commons";
  ref: "way/1029384" | "Q220";
  verifiedAt: "2026-08-19T00:00:00Z";
};
Capacity Science·The Saturation Curve

How many days is a city actually worth?

Every travel blog answers this question with an opinion. GraphTravel answers it by running the solver at increasing trip lengths to find the exact point where an extra day stops earning its place.

Solver Capacity Result
Rome is worth 3 days (14 stops fit comfortably)
Plan 3 Days in Rome

In Rome, a 3-day plan fits 14 major sights with 19.5h of sightseeing. Adding a 4th day only yields 2 marginal stops before sights repeat or require distant travel.

1 Day
5 stops · 6.5h seeing · 4.8 km
2 Days
10 stops · 13h seeing · 8.9 km
3 Days★ Optimal Saturation
14 stops · 19.5h seeing · 12.4 km
4 Days
16 stops · 23h seeing · 15.8 km
5 Days
17 stops · 25.5h seeing · 19.1 km
Verified Knowledge Graphs·Destinations

Cities solved down to the street.

A city appears here only once its POI graph, opening hours coverage, and travel-time matrix are fully precomputed and verified.

Explore all destinations →
Italy● Graph Ready

Rome

Valhalla-routed street network · 0 walk gaps

Places in Graph
3,809
Saturation Fit
3 Days
Best Months
May & October
Avg Climate
23°C
Canonical Verified Anchors:
ColosseumVatican MuseumsPantheonRoman Forum
Portugal● Graph Ready

Lisbon

Calibrated hill & street model · Belém & Alfama clusters

Places in Graph
3,238
Saturation Fit
2 Days
Best Months
May & September
Avg Climate
24°C
Canonical Verified Anchors:
Belém TowerJerónimos MonasteryCastelo de São JorgeSanta Justa Lift
Japan● Graph Ready

Kyoto

Non-Latin naming & Shinto/Buddhist hours model

Places in Graph
2,296
Saturation Fit
3 Days
Best Months
April & November
Avg Climate
20°C
Canonical Verified Anchors:
Fushimi Inari TaishaKinkaku-ji (Golden Pavilion)Kiyomizu-deraTenryu-ji & Bamboo Grove

Scaling to 55 Global Destinations

Ingesting OpenStreetMap bounding boxes, Wikidata QIDs, and Valhalla street matrices.

M5 Pipeline Active
Paris
France
Ingesting OSM
Tokyo
Japan
Wikidata Joined
London
UK
Matrix Precomputing
Florence
Italy
Ingesting OSM
Barcelona
Spain
Matrix Precomputing
New York
USA
Queued
Amsterdam
Netherlands
Queued
Vienna
Austria
Queued
Specialized Solver Presets·Real Constraints

Solve under real-world constraints.

Other sites answer long-tail queries with curated blog lists. GraphTravel re-runs the mathematical constraint solver under specific operational bounds.

🌿

2 days in Your Destination without the crowds

We down-weight the highest-traffic sights and let the solver build the day around quieter places that are still genuinely worth the time — then check the result is walkable and open when you arrive.

Try this preset for:
🚶

Your Destination in 2 days on foot

Walking only. Every leg is a measured walking time on the street network, and the day is clustered so you never cross the city and come back.

Try this preset for:
🌧️

A rainy day in Your Destination

Built assuming persistent rain: indoor places are weighted up, exposed ones down, and the walking between them is kept short.

Try this preset for:
👶

2 days in Your Destination with kids

Shorter days, more slack between stops, and a bias toward parks, markets and hands-on places over long gallery visits.

Try this preset for:
🏷️

2 days in Your Destination without paying for anything

Only places we can positively confirm are free to enter. Anything whose admission price we do not know is excluded rather than assumed — so this list is short and honest.

Try this preset for:
Developer Rigor·Sub-Second Performance

Pure TypeScript engine. Zero database I/O during solve.

The engine is decoupled from the database and web framework. It accepts a plain CityGraph and PlanRequest, returning an immutable Itinerary in ~600ms.

Solve Latency
~580 ms
3-Day Rome over 3.8k nodes
Golden Invariants
34 / 34 Green
Zero regression invariant test suite
graphtravel-engine-cli
$ npm run plan -- --city rome --days 3 --pace balanced
[info] Loading graph for Rome (3,809 nodes, 14,508,481 matrix edges)...
[solver] Stage 1: Candidate selection & scoring (24 anchors selected)
[solver] Stage 2: Geographic density clustering (3 daily spatial sectors)
[solver] Stage 3: 2-Opt TSP sequence optimization (0 route crossings)
[solver] Stage 4: opening_hours truth verification (100% time windows fit)
[solver] Stage 5: Invariant check (0 violations, 0 dropped stops)
✔ Solved 3 days in 582ms · 14 stops · 12.4 km walked · 0 conflicts
Market Analysis·The State of Travel Planning

The market splits two ways. Both fail.

Every existing trip planner either forces you to do all the manual thinking yourself, or hands the job to an AI that invents facts.

Manual Organizers

Wanderlog / TripHobo

They have real place data, but they make you do all the thinking. Wanderlog does not generate an itinerary from your inputs at all, and paywalls basic route optimization behind a $39.99/year subscription.

No automated schedule synthesis
Route optimization paywalled ($39.99/yr)
No opening hours conflict detection
Verdict: A spreadsheet with a map.
AI Planners

Layla / Mindtrip / AI

They do the thinking, but get the facts wrong. Independent 2026 testing found 9 in 10 AI itineraries fail basic fact-checking. Layla literally pays human contractors to “double-check tricky parts” — an admission the AI is unreliable.

91% error rate on opening hours
Schedules closed venues & ghost cafes
Impossible walking times (teleportation)
Verdict: Fluent prose, broken days.
The Solution
Deterministic Graph

GraphTravel

Thinking that is provably correct. POIs are nodes with verified coordinates, hours, and dwell times. Edges are precomputed street travel times. Itineraries come from a constraint solver, not a language model.

Instant automated schedule in <600ms
Valhalla street-routed travel times
100% free, no paywall, no signup required
34 mathematical invariant checks
Verdict: Provably feasible on the day.
Frequently Asked Questions·Methodology

Frequently Asked Questions

Everything you need to know about deterministic graph trip planning.

Large Language Models are probabilistic text generators. They predict the most likely next word, not whether the Colosseum is open at 4:30 PM on a Tuesday or whether walking from the Vatican to the Pantheon in 15 minutes violates the laws of physics. Independent testing in 2026 revealed that 9 in 10 AI-generated itineraries fail basic fact-checking. GraphTravel uses a mathematical constraint solver over a verified topological graph — the LLM is only used for prose and taste, never for facts.