A real-time theme park wait time dashboard that tracks ride wait times across Walt Disney World parks. The app polls live data from the Queue-Times API, stores historical wait time records, and displays current ride statuses in a clean, auto-refreshing interface.
- NestJS — A structured Node.js framework that provides dependency injection, modular architecture, and built-in support for scheduling. Chosen for its opinionated project structure that keeps the codebase organized as it grows.
- Prisma — Type-safe ORM for PostgreSQL. Generates a fully typed database client from the schema, so queries are validated at compile time and migrations are handled declaratively.
- PostgreSQL — Relational database for storing parks, lands, rides, and wait time history. The structured relationships between parks, lands, and rides map naturally to a relational model.
- Angular — Component-based frontend framework. Chosen for its strong typing, built-in routing, and reactive patterns with Observables that pair well with the polling-based data model.
- RxJS — Handles asynchronous data streams throughout the frontend. The
asyncpipe in templates automatically subscribes to Observables and cleans up on component destruction, preventing memory leaks. - Tailwind CSS — Utility-first CSS framework for styling without writing custom CSS files. Speeds up UI development by composing styles directly in templates.
- TypeScript — Used across both frontend and backend for type safety and better developer experience.
The app is split into two independent halves:
- Data ingestion (
backend/src/queue-times/) — A scheduler polls the Queue-Times API every 2 minutes for each park, upserting lands and rides into the database and recording wait time history. - Data serving (
backend/src/parks/) — A REST API reads from the database and serves park/ride data to the frontend.
The database acts as the intermediary — the two sides are fully decoupled.
- Node.js
- PostgreSQL
cd backend
npm install
npx prisma migrate dev
npx prisma db seed
npm run start:devcd frontend
npm install
npm startThe frontend runs at http://localhost:4200 and the backend at http://localhost:3000.