Imported from mkw432/bevobday (
AGENTS.md). Install upstream withnpx skills add mkw432/bevobday. Copyright stays with the author.
AGENTS.md — bevobday (Hank's 3rd Birthday Party Hub)
Project overview
A React SPA for Hank's 3rd birthday party planning, deployed to Cloudflare Workers. UT Longhorns football theme. Includes party schedule, food & recipes, decorations, kid activities, hosting tips, grocery list, party favors, and a printable day-of cheat sheet.
Party crew: Mom, dad, Hank (turning 3), brother (1.5), Susu (grandma), Lorenzo + Barkley (dog), family dogs Bird & Blue, ~12 adult friends/neighbors, kids ages 1-5
Party details:
- Date: Saturday, September 5, 2026
- Location: Our house
- Theme: UT Longhorns Football — burnt orange and white
- Game: Texas vs Texas State, 1:30pm MT / 2:30pm CT kickoff on ESPN (during Hank's nap)
- Nap: Hank naps ~1:15-3:00pm
- Main festivities: ~4:00pm onward (cake, presents, activities)
- Dietary: No peanuts (allergies) — all food clearly labeled
Stack
| Layer | Choice |
|---|---|
| Framework | React 19 + TypeScript |
| Bundler | Vite 8 |
| Styling | Tailwind CSS 4 (@tailwindcss/vite plugin) |
| Routing | React Router 7 (client-side, BrowserRouter) |
| Icons | Heroicons (@heroicons/react) |
| PWA | vite-plugin-pwa |
| Deploy | Cloudflare Workers (npm run deploy via Wrangler) |
Commands
| Command | Action |
|---|---|
| npm run dev | Start local dev server with HMR |
| npm run build | TypeScript check + Vite production build to dist/ |
| npm run preview | Build + preview locally via Wrangler |
| npm run deploy | Build + deploy to Cloudflare Workers |
| npm run lint | ESLint check |
Project structure
bevobday/
├── public/ # Static assets (icons, OG image, manifest)
│ └── videos/ # GIF-style mp4 clips + poster jpgs (Game Day Vibes)
├── research/ # Web research on UT parties, recipes, activities
├── scripts/ # Utility scripts (OG image generation)
├── src/
│ ├── components/ # Reusable UI components
│ │ ├── Layout.tsx # Header, nav, bottom tab bar, footer
│ │ ├── ThemeToggle.tsx # Dark/light mode toggle
│ │ ├── TimelineItem.tsx # Schedule timeline entries
│ │ ├── ActivityCard.tsx # Activity cards (ages, materials, mess level)
│ │ ├── FoodCard.tsx # Food item cards with themed header band
│ │ ├── DecorationCard.tsx # Decoration ideas with themed header band
│ │ ├── FavorCard.tsx # Party favor cards
│ │ ├── VideoClip.tsx # GIF-style muted loop video with poster + reduced-motion fallback
│ │ └── VideoCarousel.tsx # Spotlight carousel: active clip front-center, neighbors peeking behind
│ ├── hooks/
│ │ └── usePrefetchRoute.ts # Route prefetching on hover/focus
│ ├── lib/
│ │ └── api.ts # Client-side API wrappers (unused — vestigial)
│ ├── data/ # Typed data arrays (no CMS, no backend)
│ │ ├── schedule.ts # Party day timeline
│ │ ├── food.ts # Game day snacks + birthday treats
│ │ ├── decorations.ts # Decoration ideas by category
│ │ ├── activities.ts # ~20 activities with age ranges
│ │ ├── tips.ts # ~10-15 hosting tips
│ │ ├── favors.ts # Party favor ideas
│ │ └── guests.ts # Party crew info
│ ├── pages/ # Route-level page components
│ │ ├── HomePage.tsx # Hero with countdown + game details
│ │ ├── SchedulePage.tsx # Party day timeline
│ │ ├── FoodPage.tsx # Game day snacks + birthday treats
│ │ ├── DecorationsPage.tsx # Theme ideas + party favors
│ │ ├── ActivitiesPage.tsx # Kid activities + dog games + adult hangout
│ │ ├── TipsPage.tsx # Nap, pets, food safety, toddler-proofing
│ │ ├── GroceryPage.tsx # Auto-generated grocery list
│ │ ├── CheatSheetPage.tsx # One-page printable day-of cheat sheet
│ │ └── NotFoundPage.tsx # 404 page
│ ├── worker/
│ │ └── index.ts # Cloudflare Worker (static serving + /api routes)
│ ├── App.tsx # Router setup with lazy loading
│ ├── main.tsx # Entry point with scroll-reveal fallback
│ └── index.css # Tailwind + design tokens + print styles
├── index.html
├── package.json
├── vite.config.ts # Vite + PWA + Cloudflare plugin
├── wrangler.jsonc # Cloudflare Workers config
├── AGENTS.md
└── README.md
Routes
| Path | Page | Description |
|---|---|---|
| / | HomePage | Hero: "Hank is turning 3! Hook 'em Horns!" Party date, time, location |
| /schedule | SchedulePage | Party day timeline: game, nap, festivities |
| /food | FoodPage | Game day snacks + birthday treats, categorized |
| /decorations | DecorationsPage | UT burnt orange & white theme ideas |
| /activities | ActivitiesPage | Kid activities + adult hangout + dog activities |
| /tips | TipsPage | Nap coordination, pet management, guest flow |
| /grocery | GroceryPage | Auto-generated from food data |
| /cheatsheet | CheatSheetPage | One-page printable day-of cheat sheet |
| * | NotFoundPage | "This party doesn't exist" |
Design system
Color palette
- Primary: UT Burnt Orange #BF5700
- Secondary: White #FFFFFF
- Accent: Deep Orange #9C4100
- Neutrals: Warm grays, charcoal #2D2D2D
- Dark mode support
Typography
- Fontshare: Satoshi (body) + Boska (display)
Theme
- data-theme attribute on html (light/dark)
- System preference detection + manual toggle
UT Branding
- Text-only spirit phrases ("Hook 'em Horns", "Go Texas") — fine for personal use
- Logos/symbols require UT licensing — NOT used on this site
- Burnt orange color #BF5700 used throughout
Data pattern
Trip data in src/data/*.ts files as typed arrays. No CMS, no backend for content.
Key features
- PWA (installable, offline)
- Dark/light mode
- Print-friendly
- Auto-generated grocery list from food data
- Peanut-free food labeling throughout
- Countdown widget (days to kickoff)
- Game Day Vibes video clips (muted loop mp4s in public/videos/, autoplay on view, reduced-motion fallback)
- Printable day-of cheat sheet
- Party favor ideas
Deployment
- Cloudflare Workers via @cloudflare/vite-plugin and Wrangler
- SPA routing via not_found_handling: "single-page-application"
- Push to main triggers auto-deploy
Research folder
The research/ folder contains web research on UT-themed parties, recipes, activities, decorations, and hosting tips.