Travel Simulator
Travel Simulator is a world model-powered simulation that lets you explore any city on Earth as if you were actually there.
Core trick
Renders real locations as Gaussian splats in three.js and conditions character dialogue on profile fields passed in the URL.
Description
Travel Simulator is a world model-powered simulation that lets you explore any city on Earth as if you were actually there. Travel to real locations, walk the streets, and interact with AI-powered characters who hold personalized, context-aware conversations tailored to your interests, background, and goals.
README excerpt
# Travel Simulator
An immersive travel simulator: build a player profile, spin a 3D globe, click a
country, and walk a character around a real-feeling town built from photos.
This is a **monorepo** of two apps that connect at one well-defined seam:
```
┌─────────────────────────────┐ enterCountry("italy") ┌──────────────────────────┐
│ onboarding/ │ ───────────────────────────────▶ │ world/ │
│ React + r3f │ (handoff seam, profile in URL) │ three.js + Spark │
│ • onboarding form │ │ • Gaussian-splat town │
│ • 3D globe + markers │ mounted in-page via <iframe> │ • walkable character │
└─────────────────────────────┘ └──────────────────────────┘
```
| App | Stack | Owns |
| --- | --- | --- |
| [`onboarding/`](./onboarding) | Vite + React + TypeScript, `@react-three/fiber` + `drei` | onboarding form, 3D globe, country selection, the handoff seam |
| [`world/`](./world) | Vite + vanilla three.js + `@sparkjsdev/spark` | the 3D town (Gaussian splats), character movement, collisions |
## Run the full experience
The two apps run as separate dev servers (different origins, for now), but the
root scripts boot both at once so you can't forget one:
```bash
npm run install:all # installs root + onboarding + world (one time)
npm run dev # boots BOTH servers: onboarding :5173 + world :5174
```