- Add park detail pages and ride status to description - Replace flat park list with regional table - Add debug command documentation - Remove CI/CD section (Gitea Actions config docs) - Clean up deployment section Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Six Flags Super Calendar
A week-by-week calendar showing operating hours for all Six Flags Entertainment Group theme parks — including the former Cedar Fair parks. Data is scraped from the Six Flags internal API and stored locally in SQLite. Click any park to see its full month calendar and today's ride status.
Parks
24 theme parks across the US, Canada, and Mexico, grouped by region:
| Region | Parks |
|---|---|
| Northeast | Great Adventure (NJ), New England (MA), Great Escape (NY), Darien Lake (NY), Dorney Park (PA), Canada's Wonderland (ON) |
| Southeast | Over Georgia, Carowinds (NC), Kings Dominion (VA) |
| Midwest | Great America (IL), St. Louis (MO), Cedar Point (OH), Kings Island (OH), Valleyfair (MN), Worlds of Fun (MO), Michigan's Adventure (MI) |
| Texas & South | Over Texas, Fiesta Texas (TX), Frontier City (OK) |
| West & International | Magic Mountain (CA), Discovery Kingdom (CA), Knott's Berry Farm (CA), California's Great America (CA), Mexico |
Tech Stack
- Next.js 15 — App Router, Server Components, standalone output
- Tailwind CSS v4 —
@theme {}CSS variables, no config file - SQLite via
better-sqlite3— persisted in/app/data/parks.db - Playwright — one-time headless browser run to discover each park's internal API ID
- Six Flags CloudFront API —
https://d18car1k0ff81h.cloudfront.net/operating-hours/park/{id}?date=YYYYMM
Local Development
Prerequisites: Node.js 22+, npm
npm install
npx playwright install chromium
Seed the database
Run once to discover each park's internal API ID (opens a headless browser per park):
npm run discover
Scrape operating hours for the full year:
npm run scrape
Force a full re-scrape (ignores the 7-day staleness window):
npm run scrape:force
Debug a specific park + date
Inspect raw API data and parsed output for any park and date:
npm run debug -- --park kingsisland --date 2026-06-15
Output is printed to the terminal and saved to debug/{parkId}_{date}.txt.
Run the dev server
npm run dev
Open http://localhost:3000. Navigate weeks with the ← / → buttons, or pass ?week=YYYY-MM-DD directly. Click any park name to open its detail page.
Deployment
The app uses Next.js standalone output. The SQLite database is stored in a Docker volume at /app/data.
docker compose up -d
Seed the database inside the container
The production image includes Playwright and Chromium, so discovery and scraping run directly against the container's volume:
docker compose exec web npm run discover
docker compose exec web npm run scrape
Or as a one-off against the named volume:
docker run --rm -v sixflagssupercalendar_park_data:/app/data \
gitea.thewrightserver.net/josh/sixflagssupercalendar:latest \
npm run scrape
Data Refresh
The scraper skips any park + month combination scraped within the last 7 days. Run npm run scrape on a weekly schedule to keep data current. Parks or months not yet in the database show a — placeholder; parks with no open days in the displayed week are hidden from the calendar automatically.