Case study · AI search · CMS migration
Visit Naples
Naples' independent visitor guide, written by full-time residents. Rebuilt in 2026 on our own platform, with "Ask Visit Naples," an AI assistant that answers from our own listings.
- AI assistant grounded in our own listings
- One codebase, two destination guides
- From Craft to AI-first in under a month

The problem
Visit Naples ran on a Craft CMS multi-site alongside Visit Marco Island, and Craft served it well for years. What changed was how visitors search. They type “waterfront seafood, a house for 8, happy hour downtown.”
Generic AI chat answers those questions with confident guesses, including places that closed years ago. For a publisher whose whole value is trust, that’s a non-starter.
What I built
A platform we own end to end: a pnpm and Turborepo monorepo running Next.js 16 on Cloudflare Workers, with Supabase Postgres underneath. One app serves both Visit Naples and Visit Marco Island and picks the brand from the hostname. A shared admin CMS, a partner portal and Naples Resident live in the same repo.

Ask Visit Naples
The assistant sits in the hero and on every page. The main design choice: search our database first, then let the model pick from what it found.
- Search runs in Postgres. Full-text search covers our own listings, guides, events, deals and rentals.
- The model picks listings by ID. IDs are checked against the database, and the result cards render from Postgres, so recommendations point to places in our guide.
- Different models for different steps. Claude Haiku 5.5 routes the question, Sonnet 5.5 writes the answer, and Opus 5.5 builds day and weekend plans. Past a daily budget, the router’s model takes over writing too, at about a tenth of the cost.
- Nine search tools. Places, tours, local guides, venues, rentals, events, deals, beach conditions and lookup by name.
- Monitored. Bot checks, edge rate limits, every answer logged with its cost, an eval suite, and a daily health check.
The data behind it
- Vacation rentals sync daily from two local agencies’ booking systems, with photos moved to Cloudflare Images.
- Events stream live from Events Naples, the events platform I run.
- Opening hours refresh monthly.
- Listing copy is drafted with Claude, then a separate verification pass checks it.


How it was built
I built it with Claude Code. Through October 20, 2026, the repo had 117 commits, and 101 of them are co-authored with Claude. It has 100 database migrations, and it moved from Craft to the new platform in under a month, from first commit on September 23 to live on October 16, 2026.
Why it matters for clients
Any business with a catalog can have this: inventory, providers, properties, menus. Customers ask in plain English and get answers drawn from your own data.