尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证A personal Disney Parks planning tool that combines custom itineraries with live attraction wait times to suggest smarter day-of decisions.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A mobile-first Disney park planning app focused on fast decisions, low cognitive load, and clean UX. Disney Wait Planner pairs live attraction wait times with a local-first, multi-day trip planner — and Tom, a built-in assistant that can answer Disney questions and read-only questions about what you've planned.查看完整 README ↗A mobile-first Disney park planning app focused on fast decisions, low cognitive load, and clean UX. Disney Wait Planner pairs live attraction wait times with a local-first, multi-day trip planner — and Tom, a built-in assistant that can answer Disney questions and read-only questions about what you've planned.
Disney Wait Planner supports Disneyland Resort (DLR) and Walt Disney World (WDW). It combines live attraction wait times, a multi-day trip planner (attractions, dining, entertainment, and custom entries), Lightning Lane tracking, and a built-in assistant (Ask Tom) into a single mobile-first interface.
The system enforces a strict boundary between live data and local planner state, and all attraction/plan matching is canonical and deterministic — there is no fuzzy logic.
Tom is Disney Wait Planner's built-in assistant. Tom can:
GET /api/tom/showtimes, authenticated with DWP_CATALOG_API_KEY) that Tom calls with a structured park (and optionally a show name). Like all showtimes in the app, this is today-only and covers only curated, ThemeParks-mapped EntertainmentWhen an answer uses ThemeParks.wiki schedule data, the Tom page shows a linked "Powered by ThemeParks.wiki" attribution; planner-only answers show none.
Tom does not edit your plans, generate or optimize itineraries, reason about transportation or travel time, or make predictions/recommendations it isn't designed to support. Planner data shared with Tom is a compact, read-only summary — Tom cannot write back to your planner. See the in-app Tom Help Guide (/tom/help, linked from the Ask Tom Help modal) for the full, current list of what Tom can do.
Live attraction wait times are powered by the Queue-Times API, accessed through a server-side proxy rather than called directly from the browser. All wait data flows through a single unified path (liveWaitApi.ts), which returns the same shape regardless of source and falls back to a mock dataset if live data is disabled or unavailable — so the UI never breaks on a live-data outage.
Park hours and Entertainment showtimes come from the ThemeParks.wiki (Free API), accessed only server-side (themeParksApi.ts; the browser never calls the provider) and normalized before use (parkHours.ts, parkHoursService.ts, entertainmentShowtimes.ts). It is used for:
/api/park-hours)/api/entertainment/showtimes)ThemeParks.wiki does not replace Queue-Times for attraction waits, and it does not decide which attractions or Entertainment exist: the curated DWP catalog stays the canonical identity authority, and Entertainment is matched to the provider only through an explicit mapping. It needs no environment variables. Surfaces that display ThemeParks.wiki data show the linked attribution via components/ThemeParksAttribution.tsx ("Powered by ThemeParks.wiki").
apps/*, packages/*)localStorage is the source of truth, and cloud sync mirrors it when signed in/api/tom/ask) to the Tom Railway API — Tom credentials are never exposed to the browserFor implementation-level invariants, data flow details, and correctness constraints, see AGENTS.md.
This is a pnpm workspace:
apps/web — the Next.js frontend apppackages/shared — shared types and mock dataThe Next.js App Router lives at apps/web/src/app (not apps/web/app).
Development happens on feature branches; main is the production branch, and Vercel builds a preview deployment for every branch.
# Install dependencies
pnpm install
# Run the web app locally (http://localhost:3000)
pnpm --filter web dev
# Production build
pnpm --filter web build
# Run a production build
pnpm --filter web start
# Type-check the shared package
pnpm --filter @disney-wait-planner/shared typecheck
# Apply/migrate the Postgres schema (see apps/web/src/lib/db-schema.sql)
DATABASE_URL=... pnpm --filter web run db:migrate
Never run dev/build at the repo root without --filter web — the monorepo root has no app of its own to run.
db:migrate is safe to run repeatedly against a fresh or already-migrated
database (it's a no-op the second time) — see AGENTS.md's Deployment
section for the required production ordering (migrate schema, then deploy
app code) whenever db-schema.sql changes.
Live wait data
NEXT_PUBLIC_WAIT_API_ENABLED — true to enable live wait data; unset or false runs the app mock-onlyNEXT_PUBLIC_WAIT_API_BASE_URL — optional override for the wait API base URL; defaults to the same-origin proxyAuthentication & sync (optional; required for sign-in and cloud sync)
NEXTAUTH_URL — canonical app URL (e.g. https://your-app.vercel.app)NEXTAUTH_SECRET — random secret (openssl rand -base64 32)DATABASE_URL — Postgres connection string used by the auth adapter and syncEMAIL_SERVER, EMAIL_FROM — email provider settings for magic-link sign-inDaily park-hours refresh (server-only)
CRON_SECRET — required by /api/cron/park-hours (Vercel Cron, 02:00 UTC daily via apps/web/vercel.json); the route fails closed (500) when unset. Vercel sends it as Authorization: Bearer.Ask Tom (server-only — never expose these as NEXT_PUBLIC_*)
TOM_API_URL — Tom Railway API base URLTOM_API_KEY — Tom Railway API keyDWP_TOM_PROXY_KEY — shared secret used by the server-side Tom proxyDWP_CATALOG_API_KEY — shared secret Tom presents (via the
x-dwp-catalog-api-key header) to call the read-only
GET /api/catalog/query catalog lookup endpointSee AGENTS.md for repository conventions, scope discipline, and the correctness invariants (local-first/profile safety, canonical attraction identity, planned-closure enforcement, and Tom's read-only planner integration) that must be preserved when touching those areas.