/ recent work / vegas-kiddos
Vegas Kiddos
Free family event finder for Las Vegas — filter by age, price, neighborhood; map, favorites, reminders, scraped + enriched listings.
A bright, playful resource for Las Vegas parents — kid-safe events you can actually filter instead of scrolling a Facebook group until your eyes glaze over. Built under Threesided Studios with Michelle Aragon on content and curation.
What we built
- Airtable as the database — approved events only hit the public site; scrape pipeline fills the base, enrichment adds geocoding and age inference.
- Map + list with marker clustering, “Near me” locate, combined quick-pick search bar, calendar hover bubbles.
- Favorites with heart (not star) everywhere — web push + email reminders, “Send a test” for parents wiring notifications.
- Three.js hero on a desert-sunset palette (coral / sunny / teal / grape) — Fredoka + Nunito, no react-leaflet (React 19 peer drama avoided with plain Leaflet).
- New sources on the scrape cron — Henderson Libraries and others wired into the daily job.
Recent shipping
- GA4 + cookie consent — analytics with the same geo-aware consent gating as our other sites: the EEA, UK, and Switzerland opt in by IP, everyone else is on by default with no banner.
- Hero polish — mood-tinted weather washes, animated sun rays, a chunkier dino outline, and warm rim-lighting for cool-weather moods.
- WCAG AA contrast site-wide — Lighthouse accessibility back to 100 after darkening white-on-pastel buttons and badges.
- Scrape hardening — daily cron runs the fetch scraper automatically; core sources that return zero events fail the run loud instead of silently shipping an empty week. Already-approved events never get un-approved on a bad scrape.
- Nevada Moms fix — switched from a dead RSS feed to the MEC list API so listings actually land in Airtable.
- Map pins — venue addresses backfilled on scraped rows so markers aren’t guessing from titles alone.
/esrouting — crawlable Spanish surface with hreflang; same filter UX, translated shell.
Ops reality
Deploy is gated: the site runs on Cloudflare Workers (OpenNext), so a push to main doesn’t auto-deploy. We commit locally, preview on port 3100, and ship with cf:deploy when Adam says go. Hourly sitemap revalidation keeps search surfaces fresh without rebuilding the world.
Why it matters
It’s the opposite of a venture-scale events app — a narrow geography, a narrow audience, and a editorial bar (“is this actually good for kids in this heat?”). The engineering is mostly data hygiene and UX clarity, not growth hacks.
Recent shipping
- 2026-06-22 · Fix FB schedule batch for Facebook’s 30-day cap
- 2026-06-22 · Harden FB auto-poster against token expiry