Some checks failed
Build and Deploy / Build & Push (push) Failing after 22s
Visual overhaul: - Warmer color system with amber accent for Today, better text hierarchy - Row hover highlighting, sticky column shadow on horizontal scroll - Closed cells replaced with dot (·) instead of "Closed" text - Regional grouping (Northeast/Southeast/Midwest/Texas & South/West) - Two-row header with park count badge and WeekNav on separate lines - Amber "Today" button in WeekNav when off current week - Mobile card layout (< 1024px) with 7-day grid per park; table on desktop - Skeleton loading state via app/loading.tsx Park detail pages (/park/[id]): - Month calendar view with ← → navigation via ?month= param - Live ride status fetched from Six Flags API (cached 1h) - Ride hours only shown when they differ from park operating hours - Fallback to nearest upcoming open day when today is dropped by API, including cross-month fallback for end-of-month edge case Data layer: - Park type gains region field; parks.ts exports groupByRegion() - db.ts gains getParkMonthData() for single-park month queries - sixflags.ts gains scrapeRidesForDay() returning RidesFetchResult with rides, dataDate, isExact, and parkHoursLabel Removed: CalendarGrid.tsx, MonthNav.tsx (dead code) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
39 lines
705 B
TypeScript
39 lines
705 B
TypeScript
export interface Park {
|
|
id: string;
|
|
name: string;
|
|
shortName: string;
|
|
chain: "sixflags" | string;
|
|
slug: string;
|
|
region: "Northeast" | "Southeast" | "Midwest" | "Texas & South" | "West & International";
|
|
location: {
|
|
lat: number;
|
|
lng: number;
|
|
city: string;
|
|
state: string;
|
|
};
|
|
timezone: string;
|
|
website: string;
|
|
}
|
|
|
|
export interface DayStatus {
|
|
day: number;
|
|
isOpen: boolean;
|
|
hoursLabel?: string;
|
|
}
|
|
|
|
export interface MonthCalendar {
|
|
parkId: string;
|
|
year: number;
|
|
month: number;
|
|
days: DayStatus[];
|
|
}
|
|
|
|
export interface ScraperAdapter {
|
|
readonly chain: string;
|
|
getMonthCalendar(
|
|
park: Park,
|
|
year: number,
|
|
month: number
|
|
): Promise<MonthCalendar>;
|
|
}
|