// featured case study · original product · 2026

The right event for the right little human.
Without the Facebook scroll.

A family event finder for Las Vegas, built so parents can filter by age, price, and neighborhood instead of hunting through groups until the weekend is already over. Editorial judgment sits in front of the scrape.

Vegas Kiddos homepage hero with age filters and this-week event cards
Product problem
Kid events hide in dead feeds and Facebook groups.
Editorial model
Scrape fills Airtable. Only approved rows go public.
Discovery
List, calendar, and clustered map. Same filters everywhere.
Delivery
Next.js on Cloudflare Workers. Spanish surface included.

// the product problem

Vegas has the events. Parents do not have a trustworthy list.

Library storytimes, museum days, splash pads, and free weekends live across Facebook groups, casino calendars, and RSS feeds that die without a funeral. Age range, neighborhood, heat, and price actually matter. Generic event apps do not apply that bar. We wanted a narrow geography, a narrow audience, and a public calendar that stays honest when a source breaks.

// product decision

Airtable is the newsroom. The site is the printed edition.

The scrape is allowed to be messy. The public page is not. Listings land in Airtable, get geocoded and age-inferred, then wait for approval. Parents only ever see the approved slice. When a core source returns zero events, the job fails loud instead of shipping a quiet empty week.

01Filters that match how parents actually choose

Age, price, neighborhood, free-this-weekend, near me. List, calendar, and map share the same query instead of becoming three products.

02A map that points at venues, not titles

Clustered Leaflet markers, locate, and address backfill so pins are not guessing from event names. Three hundred seventy listings still have to remain readable.

03Pipeline hygiene over growth hacks

Zero-row core sources fail the run. Bad scrapes never un-approve yesterday. Nevada Moms moved off a dead RSS feed onto the MEC list API.

// the system

A city-scale board with a human gate.

The engineering is mostly data hygiene and UX clarity. Deploy is gated on purpose: Cloudflare Workers via OpenNext, preview locally, ship when the calendar is actually ready.

  1. 01
    Collect

    Daily cron pulls libraries, museums, city calendars, and the MEC list API into Airtable.

  2. 02
    Enrich

    Geocoding, age inference, venue addresses, and images land before a listing can go public.

  3. 03
    Approve

    Editorial review keeps the kid-safe bar. Already-approved events survive a bad scrape.

  4. 04
    Publish

    Next.js 15 reads the approved slice. Hourly sitemap revalidation keeps search surfaces fresh.

// the product, in frames

Screens from the shipped surface.

// what it holds

Proof, not adjectives.

The useful bits: what changed for the people using it, and what the stack actually is.

A calendar parents can trust

Approved listings only. Loud failures when a core source goes quiet. No silent empty weeks.

Accessible in the desert sun

WCAG AA contrast site-wide after white-on-pastel buttons were darkened. Lighthouse accessibility back at 100.

Spanish without a second product

Crawlable /es routing with hreflang. Same filters, translated shell, one editorial queue.

  • Next.js 15
  • React 19
  • Leaflet
  • Airtable
  • Cloudflare Workers
  • OpenNext
  • Sentry
  • GA4