A Disneyland trip companion: live wait times, weather, favorite rides with
threshold-based alerts, and a per-trip diary (photos, ride/character/snack
logs, fireworks, outfits, merch). Talks to the
disneyapp-backend
Spring Boot service for live data and notifications; uses on-device
AsyncStorage for the diary.
Built with Expo (React Native), TypeScript, and Expo Router (file-based routing).
| Tab | What it does |
|---|---|
| At the Park | Live wait times for both parks, sorted by length; current Anaheim weather. |
| Favorites | Pick rides from a curated land/ride picker; set an optional wait-time threshold to be notified at. |
| Alerts | Shows favorites currently under their threshold. Bell-icon dot indicates new alerts. |
| My Trip | Per-day diary: date, park, photos, ride/character/snack tracking, hotel, fireworks, outfit, merch. |
Live data comes from two free public APIs, both of which require attribution. This is rendered in-app as small "Powered by..." footers under the relevant data on the At-the-Park screen, and credited again here:
- Wait times — Powered by Queue-Times.com, per their Real Time API terms.
- Weather — Powered by Open-Meteo.com, licensed under CC-BY 4.0.
App code itself is independent of and not endorsed by The Walt Disney Company.
-
Install dependencies:
npm install
-
Make sure the backend is running on
http://localhost:8080(see the disneyapp-backend repo). -
Start the app:
npx expo start
In the output you'll find options to open the app in:
- iOS simulator
- Android emulator
- Expo Go on a physical device
You can start developing by editing the files inside the app directory.
The Expo app reads its backend base URL from expo.extra.apiBaseUrl in
app.json (defaults to http://localhost:8080).
- iOS Simulator:
localhostworks as-is. - Android Emulator: handled automatically —
lib/api.tsrewriteslocalhostto10.0.2.2(the emulator's alias for the host machine). - Physical device: set
EXPO_PUBLIC_API_BASE_URL=http://<your-mac-lan-ip>:8080before runningexpo start, and make sure the device is on the same Wi-Fi.
app/
├── _layout.tsx # root layout, AlertsProvider, theme
├── (tabs)/
│ ├── _layout.tsx # tab bar config, AlertsTabIcon (notification dot)
│ ├── live.tsx # At the Park: wait times + weather
│ ├── favorites.tsx # Favorites list + add/edit modal
│ ├── alerts.tsx # Current alerts, sorted with new ones pinned
│ └── index.tsx # My Trip
components/ # Reusable UI (modals, gradient background, etc.)
hooks/ # use-wait-times, use-weather, use-favorites,
# use-alerts, use-pickable-rides
lib/ # api client, storage, wait-time color helpers
constants/ # theme, parks, curated ride lists