Live Demo »
A FastAPI web app that computes optimized Walt Disney World transit itineraries using Dijkstra + Held-Karp TSP.
Explore the repo »
View Demo Flow
·
Report Bug
·
Request Feature
WDW Wayfinder helps plan Disney transit routes between resorts, parks, and hubs.
It combines:
- Mode-aware shortest paths (Dijkstra)
- Optimal stop ordering (Held-Karp TSP)
- Interactive graph visualization (vis-network)
- Search-driven UX (HTMX + server-side templates)
Core implementation lives in:
- FastAPI
- Jinja2 Templates
- HTMX
- vis-network
- Docker
- Python 3.11
This project is one of my first attempts at partially using AI-assisted development while building an application.
AI tools such as GitHub Copilot were used to help brainstorm, prototype, and refactor parts of the code - especially the frontend design and JavaScript, with final design and validation decisions made manually.
- Python 3.11+
- pip
- (Optional) Docker Desktop
-
Clone the repo
git clone https://github.com/lefkovitzj/WDW-Wayfinder.git cd WDW-Wayfinder -
Create and activate a virtual environment
python -m venv .venv # Windows .venv\Scripts\activate # macOS/Linux source .venv/bin/activate
-
Install dependencies
pip install -r requirements.txt
-
Configure environment
- Copy .env.example to
.env - Ensure
GRAPH_DATA_PATHpoints to your graph JSON (default:data/wdw_graph.json)
- Copy .env.example to
-
(Optional) Regenerate graph data
python data_converter.py
-
Run the app
python -m app.main
Or:
uvicorn app.main:app --reload
Use:
docker compose up --build- Open the app at
http://127.0.0.1:8000 - Choose:
- Starting point
- Optional intermediate stops
- Final destination
- Submit to receive:
- Optimized stop order
- Full stitched itinerary with transit modes
- Estimated total travel time
Relevant UI templates:
Graph visualization:
WDW_Transit_Optimizer/
├── app/
│ ├── core/
│ │ ├── config.py # Configuration & environment variables
│ │ └── graph.py # Graph construction, Dijkstra, Held-Karp TSP
│ ├── static/
│ │ └── js/
│ │ └── graph.js # Interactive vis-network graph rendering
│ ├── templates/
│ │ ├── base.html # Base template with layout
│ │ ├── index.html # Main search & results interface
│ │ ├── graph.html # Graph visualization page
│ │ └── components/
│ │ ├── itinerary.html # Rendered trip itinerary display
│ │ └── search_results.html # Search result snippets
│ ├── main.py # FastAPI app initialization
│ └── routes.py # API endpoints & request handlers
├── data/
│ └── wdw_graph.json # Preprocessed graph data (nodes & edges)
├── data_converter.py # Script to regenerate graph from source
├── Dockerfile # Container image definition
├── docker-compose.yml # Multi-container orchestration
├── requirements.txt # Python dependencies
├── .env.example # Environment variables template
└── README.md # Project documentation
- Add automated tests for route-planning endpoints
- Add graph validation checks in CI
- Add transit-time profiles by day/time
- Improve disconnected-node diagnostics in graph view
Contributions are welcome.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/YourFeature) - Commit your Changes (
git commit -m "feat: add YourFeature") - Push to the Branch (
git push origin feature/YourFeature) - Open a Pull Request
Joseph Lefkovitz
GitHub: @lefkovitzj
Project Link: https://github.com/lefkovitzj/WDW-Wayfinder
This project is not affiliated with, authorized, or endorsed by The Walt Disney Company. All Disney-related names and trademarks are property of their respective owners.
- Best-README-Template
- Allears.net for articles on Disney transit options and approximate times
- FastAPI + HTMX ecosystem