Skip to content
Scott Carr Web Design

Case study · Visit Naples & Visit Marco Island

Destination websites.
Every layer, built here.

Two destination guides on one AI-first platform: AI search on our own listings, a homepage that runs itself, deep directories and listing pages that sell. Here's how it's built, one layer at a time.

visitnaplesfl.com
Visit Naples homepage
Visit Naples homepage on a phone, with the AI search bar and quick questions
23
days from first commit to live
2
destinations on one codebase
9
search tools behind the AI assistant
53
purpose-built database tables

Layer 01 · AI search

Ask anything. Get real places.

"Waterfront seafood, a house for 8, happy hour downtown." That's how visitors search now. Ask Visit Naples sits in the homepage hero, behind quick questions like "Tonight" and "Date night", and in a launcher on every page.

The design rule: search our database first, then let the model choose from what it found. A general chatbot guesses, and recommends places that closed years ago. This one can only recommend listings that are in the guide today.

  • Filters for cuisine, occasion, setting, price, area, distance, open now, and "skip the famous ones"
  • Editor-written guides checked first: an editor's list beats a search
  • Human check, per-visitor limits and a daily spend ceiling that switches to a cheaper model before it pauses
  • Every answer logged with its cost and time to first card
  • Eval suite: every guide findable by its own title, plus jailbreak, fake-staff and made-up-fact attacks
  1. 01 · Claude Haiku

    Route

    Reads the question and picks which searches to run. Most of the work happens before a bigger model is involved.

  2. 02 · Postgres

    Search

    Places, tours, editor guides, venues, rentals, events, deals, beach conditions and lookup by name. Real rows, not model memory.

  3. 03 · Streamed

    Show

    Listing cards appear the moment a search returns, before a word is written. Visitors read while the answer finishes.

  4. 04 · Claude Sonnet · Opus

    Write

    Sonnet writes the reply; Opus takes multi-stop plans. Every pick must be a listing the searches returned, or it is dropped.

How an answer is built. The model returns listing IDs, never facts; cards render from the database.

Layer 02 · The homepage

A homepage that runs itself.

It refreshes every 15 minutes, and most of it updates without anyone touching it. The hero changes with the time of day, from morning to midday to sunset. The events row is live. Every category row pairs editor-picked guides with a ranked grid of listings.

visitnaplesfl.com
Visit Naples homepage events row and Things to Do section
“What’s on” pulls live from the events platform: paid featured events first, then one per series and one per venue, so a single busy venue can't flood the row.

Category rows

Things to Do, Restaurants, Places to Stay and Shopping, each with editor-picked guides in its own layout and a filterable grid ranked by partner tier, with a live “View all” count.

Live feeds

Events from Events Naples, a deals carousel, and featured theater shows pulled straight from The Naples Players and TheatreZone.

Local voice

Areas to explore, Faces of Tourism, and an intro the editors change in the CMS. Marco gets its own top 10 FAQs, marked up for search.

Layer 03 · The content model

One record. Every site. Every list.

Everything that makes the sites smart lives in the content model. One Postgres database holds every business, guide, event and deal for seven sites in the network, with editorial judgment stored as data the AI and the pages can use.

10 content types

  • Listings
  • Areas
  • Articles
  • Pages
  • Experiences
  • Deals
  • Events
  • Rentals
  • Shows
  • People

One record, published per site. A restaurant exists once, then appears on Visit Naples, Naples Day or Naples Resident with its own path, rank, tier and SEO copy on each, and exactly one canonical page.

Editorial judgment, stored as data

  • Cuisine
  • Occasion & vibe
  • Dining experience
  • Price
  • Meal
  • Activity
  • Experience type
  • Stay type
  • Shop type
  • Venue type
  • Beach amenities
  • Beach parking
  • Days

Curated lists with per-item framing. "Best waterfront restaurants" is ranked by an editor, and each pick carries its own heading, blurb and tip, falling back to the listing's own copy.

Images with focal points

A media library in Postgres: focal point, alt text and credit for every photo, served from Cloudflare Images.

Membership in one place

Four partner tiers unlock video, booking buttons, website links and ranking. One function decides what each tier shows.

Analytics per placement

Impressions, views and clicks for website, phone, map, booking and more, per listing and per page, list item and placement.

Layer 04 · Directories

Lists that do the filtering.

  • Filters with live counts and name search, all in the URL, so a filtered view can be shared
  • Page one is server-rendered for search engines; later pages come from an edge-cached API
  • A map explorer that loads only when opened, with linked pins and cards and “Search this area”
  • Partner tier, then rank, then name: the order partners pay for, kept exactly
  • Area lists paginate on real URLs, each page canonical to itself
  • Rental pages write their own titles and summaries from live inventory
visitnaplesfl.com/things-to-do/tours
Visit Naples tours directory with activity filters and counts

Layer 05 · Listing pages

Every business gets a page that sells.

Open now or closed, worked out live. Reserve, call, website, directions, save and share up top, with a sticky call and booking bar on phones. And a “Featured in” panel that shows where the editors ranked it: #2 of 8 for brunch, #3 of 10 for the best restaurants right now.

visitnaplesfl.com/listing/tigress-restaurant-rooftop-bar
Visit Naples listing page for Tigress Restaurant & Rooftop Bar
The same listing on a phone, with the sticky Call and Reserve bar
Tier-gated features in action: booking button, website link, rating and video unlock with membership. The sponsored unit on the right is a native ad, built and measured in-house.
visitnaplesfl.com/listing/…
A listing's At a glance block, description and What's Nearby panel
  • At a glance: hours (with an editor's note that overrides Google's), address, highlights and tags
  • Tours and deals attached, then related guides, nearby places and more like it
  • Structured data for businesses, attractions, tours, offers and lists
  • Every outbound link tagged by placement, so partners see exactly where their clicks came from
  • Beaches add their rank, essentials and today's conditions

Layer 06 · Live local data

Is it a good beach day? We score it.

A 0–100 beach score built from the National Weather Service surf forecast, NOAA tides, weather alerts, Florida's Healthy Beaches water tests and hourly weather, with the best time to go and a seven-day outlook. Red tide comes from Mote Marine Laboratory's daily beach reports beside FWC's water samples.

visitnaplesfl.com/beaches/beach-conditions
Visit Naples beach score of 75 with the weighted reasons behind it and an hour-by-hour forecast
Every score shows its working: storms, wind, surf, comfort, sunshine and water temperature, each weighted and explained.

Events

Streamed from Events Naples, which reads venue calendars in a dozen formats and filters to what visitors care about.

Rentals

Synced daily from two local agencies’ booking systems, with photos moved to Cloudflare Images.

Hours and ratings

Refreshed monthly from Google, with editor overrides that survive every sync.

Layer 07 · A second destination

Marco Island. Same code, its own island.

No fork and no second build. The same app reads the hostname and becomes Visit Marco Island: its own brand, guides and listings, an assistant tuned for the island, and its own events network that never mixes with Naples.

govisitmarcoisland.com
Visit Marco Island homepage with Ask Visit Marco search and island-specific quick questions
Ask Visit Marco suggests “shelling near Tigertail Beach,” not “happy hour downtown.”
  • A shelling score, built from tide and onshore wind
  • Its own NOAA tide station and red tide sampling area
  • Its own events edition, Events Marco: island venues, the city and the chamber
  • Its own analytics, deals and FAQ, from the same deploy
govisitmarcoisland.com/beaches
Visit Marco Island beaches guide with tomorrow's beach score and sunset time

Layer 08 · Behind the scenes

The business runs on it too.

One CMS

Curation, listings, events, media, memberships, campaigns, inquiries and reports for every site in one admin.

Partner portal

Self-serve signup through Stripe. Partners see their own results per site, update their details and manage billing.

Native campaigns

Branded ad units built in the CMS, labelled sponsored, and measured on viewable impressions.

Fast by design

Every page server-rendered and cached at the edge, refreshed by tag the moment an editor publishes.

Built with an AI-first workflow. Next.js on Cloudflare Workers, Supabase Postgres and the Claude API, moved from Craft CMS with every live URL inventoried and key pages compared side by side before cutover. First commit September 23, 2026. Live October 16.

Read the case studies

Bring it to your destination

Take the whole platform or the layers your site is missing: AI search on your listings, an events feed, deeper directories, live local data, or several towns on one codebase.

One focused call

Not weeks of discovery. I've built every layer on this page, so we get to what your site needs quickly.

A working prototype early

Your team reacts to something real, on your own data, before the full build.

The engineer is your contact

No account layers. The person you talk to is the person building it.

Questions, answered

Who are destination websites for?

Tourism boards, visitor bureaus, chambers, destination publishers, and the agencies and contractors that build and run their sites. The work is the same: hundreds of listings, a constant flow of events, and visitors with very specific questions.

Can an AI assistant be trusted on a destination site?

Only if it is grounded in your own content. Ask Visit Naples searches the guide’s database first, can only recommend listings those searches returned, and renders every card from the database. Answers are logged with their cost and speed, rate-limited, and tested with an eval suite that includes jailbreak and made-up-fact attempts.

Can you work with our existing CMS and data?

Yes. Projects start from what you already have. Visit Naples and Visit Marco Island moved from a Craft CMS multi-site with every live URL inventoried; rentals sync from the booking systems agencies already use, and events come from venue calendars in a dozen formats.

How long does a rebuild take?

It depends on the size of the site and your review process, so the plan comes after a call. For reference, Visit Naples and Visit Marco Island went from first commit to live in 23 days.

Ready when you are

Let's build your destination.

Describe your site in the project planner and get a plan in about a minute, or email me and I'll reply within one business day.