The brief
A destination marketing site for a community known regionally for its dining, shopping, and event programming — sitting inside a top-15 US metropolitan area of nearly five million people, with the destination itself drawing millions of annual visitors. The brief was to build a single hub doing three jobs at once: market the destination as a whole, surface a searchable directory of local businesses with faceted filters, and feature events from an external calendar without taking on the burden of running the event-management surface.
I built the WordPress theme from Adobe XD designs in 2025. The work was about getting all three jobs done well in one cohesive editorial experience — a non-technical content team has to be able to add listings, swap homepage features, and update marketing pages without needing engineering for any of it.
What I built
A faceted listings engine. The core is a listings custom post
type with two taxonomies — a hierarchical category tree
(listing_category) and a flat district taxonomy (listing_district)
— plus a dining-type facet for the food-and-drink subset. Search is
powered by FacetWP, with three faceted filters composing across
category, district, and dining type. The card grid refreshes via
AJAX on every facet interaction; each card surfaces title, formatted
contact info, an outbound website CTA, and a Google Maps link
generated from ACF-stored address fields.
An events surface that doesn’t own the events. Event programming
in a community like this comes from outside the marketing site — a
calendar / ticketing system the venue owners and event organizers
already run. So the theme renders events through a curated set of
HTML-embed sections, with a show_event_details toggle on
content-and-video sections that pulls when / location data alongside
narrative content. The marketing site features events; it doesn’t
manage them.
A design system, not a template kit. The section library follows
a deliberate prefix taxonomy carried over from the source designs —
HERO_, FEAT_, EAT_, CARD_, GAL_, LOGOS_, BODY_, SUB_,
TEST_ — each one mapping to a specific composition pattern. Brand
colors and text-color pairings live in a single colors.json source
file, and a build-time script propagates them into both the Tailwind
config and the WordPress block editor’s theme.json — a change in
one place lands everywhere. Custom Tailwind breakpoints (xxxs,
xxs, xs, plus mdlg and lgxl between the standard sizes)
follow the design’s mobile-first granularity rather than Tailwind’s
defaults.
What’s notable about it
The interesting decision wasn’t any single feature — it was the scope boundary. The theme does the listings work itself (full CPT, taxonomies, faceted search, custom card rendering) because that’s the content the marketing team owns and updates often. It doesn’t do events because someone else does, and pretending otherwise would have created a maintenance burden the marketing team didn’t sign up for. Knowing what to build and what to embed is the kind of judgment call that makes a destination site sustainable past the launch window.