Skip to content
Scott Carr Web Design
← All work

Case study · Data pipelines · Multi-site

Events Naples

The events engine for Southwest Florida. It reads venue calendars in a dozen formats, normalizes and dedupes them, and publishes one clean feed across four city sites and the rest of the network.

  • One codebase, four city sites
  • Reads calendars in a dozen formats, even flyers
  • Feeds every publication in the network
RoleOwner & engineerRegionNaplesNext.jsSupabaseClaude APICloudflare Workerseventsnaples.com ↗
eventsnaples.com
Events Naples homepage

The problem

Event listings in Southwest Florida are scattered across venue sites, ticketing platforms, chambers and social posts. Every visitor guide either ignores events or shows a stale, hand-entered list.

What I built

A single events platform that reads dozens of venue calendars, normalizes everything into one schema, and publishes it across a family of regional sites: Events Naples, Events Bonita, Events Fort Myers and Events Marco.

  • Ingestion that meets venues where they are. Adapters cover iCal feeds, ticketing and booking APIs, website builders like Wix and Squarespace, and plain HTML. When a brewery only posts its monthly calendar as an image, Claude Sonnet reads the image and turns it into events.
  • Dedupe in layers. Admin edits always win. After that, events are matched by exact hash, by a seen-before marker, by fuzzy title at the same venue and date, and by recurrence rule.
  • AI-assisted sorting. Claude Haiku sorts every event into nine fixed categories, from Live Music to Family & Kids, and scores quality before publish. Trusted sources skip the check.
  • One codebase, four domains. The hostname picks the market. Naples, Bonita and Fort Myers share events with each other, but Marco is its own network and never mixes.
eventsmarco.com
Events Marco homepage
Events Naples on a phone
Same engine, different market. Events Marco runs on the Events Naples codebase with its own sources and brand.

Distribution

The feed earns its keep downstream:

  • Newsletters go out Thursday (“This Weekend”) and Monday (“This Week”).
  • Daily social posts go to Facebook and Instagram: a branded image of the top events, with captions written by Claude.
  • Featured spots are either paid through Stripe or filled by AI picks for each market each day.
  • The same feed powers the events sections of Visit Naples, Visit Marco Island and Naples Day.

Why it matters for clients

This is the kind of system most organizations eventually need: many messy inputs, one clean model, and many outputs. It applies to directories, listings, inventory and calendars.