
The brief
Dundee had several city websites that shared a lot of the same information: places, events, businesses, travel. Each one needed its own identity and audience, but keeping the same facts correct in several places by hand does not work for long.
What we built
One Laravel application, one database and one set of scheduled jobs serving five public sites, each with its own design and purpose:
- visitdundee.com, the visitor guide
- dundeebusiness.com, business profiles, and Dundee Connect, the people side of the business community
- dundeebusinessdirectory.com, the business directory
- dundeemusic.co.uk, gigs and venues
- BuyDundee, for local procurement, added in September 2026
A venue updated once is correct everywhere it appears. The platform runs Laravel 13 on PHP 8.5 with MySQL 8.4, behind the Bunny CDN. When we counted in September 2026 it had 623 routes and 4,426 automated tests, and continuous integration gates every deploy.
DeeDee, the city assistant
DeeDee is an AI assistant that answers questions about Dundee from the platform's own listings. It was designed around one rule: the model never writes a recommendation of its own. It proposes one action and names a place, and anything that the platform's own search did not return is refused. By September 2026 it could reach all 1,243 listings.
The page shows the grounded answer first and lets the conversational version arrive after. That took the page from 3.7 seconds to 0.31 seconds, and it still works with JavaScript switched off. Ask DeeDee.
A trip planner that only suggests what is open
The day planner builds a plan from experiences that are actually available, and fills the evening with the next event starting within 14 days. It is deliberately rule-based rather than AI: a plan has to be right, and rules are easier to check.
Live data from the city
The platform pulls in and joins up a long list of sources:
- Events from Data Thistle and Skiddle, with duplicates across the two feeds merged
- Buses from Xplore Dundee's timetable (772 stops and 24 routes when imported), so listings can show how to get there by bus
- Trains from National Rail's live departures, so a gig page can show how to get home afterwards
- Parking, with car parks and EV charging on the parking page, and a getting around page with weather, trains, buses and taxis
- Places from OpenStreetMap, coordinates checked against the Food Standards Agency register, and company details from Companies House
- Maps served from our own map tiles rather than a paid tile service
Search is built in: it understands plurals, ignores accents and knows that a visitor typing one word for a thing usually means another.
Accessibility and speed
In October 2026 an automated WCAG 2.2 AA audit across 35 pages on all five sites went from 837 failing elements to none. Directory caching that serves the cached page while it refreshes in the background brought the home page's time to first byte down from 2.2 to 2.8 seconds to between 0.46 and 0.55.
Apps
The same platform is wrapped as phone apps, so the apps and the websites can never disagree. The Visit Dundee and Dundee Connect apps are on the App Store.
Moving it home
The platform moved onto our own servers in September 2026. When we checked on 12 September, all 580 addresses in its sitemap answered correctly.