PLATE 06
Three client platforms where the engineering was integration and data work — scheduled synchronisation, feed normalisation and editorial tooling

PLATE 06

Selected client platforms

ROLE
Sole developer, agency delivery
STACK
PHP · JavaScript · MySQL · Scheduled REST, SOAP and XML feeds · WordPress
Tourism RichmondScheduled CRM syncgenerating contentrecordsSummit CreativeAward, Bronzewww.visitrichmondbc.comVictoria Airport AuthorityScheduled and livefeeds, normalisedinto one schemaAirports CouncilInternational, BestMedium-AirportWebsite, 2025www.victoriaairport.comButchart GardensCustom blocklibrary,multilingual, edgecachingwww.butchartgardens.com

BRIEF

A decade of client and agency delivery. Shipping to deadline, against stakeholder complexity, at real traffic, for organisations whose sites are operationally load-bearing rather than promotional. Three are drawn here. The engineering in them is integration and data work — scheduled synchronisation, feed ingestion, editorial tooling — and the platform underneath is incidental to what the problems were.

DECISION LOG

  1. One source of truth, and it is not the website

    Stakeholders maintain their own business listings in the Tempest CRM. Scheduled synchronisation regenerates the corresponding content records, and the site has no local override.

    The obvious feature request is an editorial override in WordPress — a way to fix a listing that comes back wrong or badly written. It was not built. The team elected to monitor and correct at the CRM level instead, which keeps a single authoritative record rather than creating a second one that drifts. An override layer solves today's bad listing and guarantees a permanent reconciliation problem: every subsequent sync has to decide whether the local edit or the upstream record wins, and there is no answer to that question that is right every time.

  2. A constrained palette

    Each custom post type exposes a block set carrying only the fields relevant to it, rather than the full editor palette.

    This was a client requirement rather than a call of mine, and it is recorded as one. What it produces structurally is a block library per content type: editors working on a garden page cannot reach fields belonging to an event, and the content model is enforced by what the interface offers rather than by convention or training.

  3. Two clocks, one board

    The scheduled flight list arrives once a day, as an XML file over FTP. Gate, status and delay changes arrive separately on a live feed, polled frequently. Both had to resolve into a single arrivals and departures board.

    The two sources disagree by design. The daily file says what is supposed to happen; the live feed says what is happening. Normalising them into one schema means deciding, field by field, which source is authoritative — and deciding what the board shows for a flight the schedule lists and the live feed has not yet mentioned, which is not the same as a flight that is on time.

    Caching sits directly against that. It has to be aggressive enough to survive an airport's traffic and shallow enough that a delay reaches the traveller while it still matters. That tension, rather than either feed on its own, is the engineering in this project.

DETAIL PLATES

Tourism Richmond
Stakeholder listings regenerated from the CRM. Nothing on this screen can be edited here; corrections are made upstream and arrive on the next sync.
DETAIL A · Tourism RichmondStakeholder listings regenerated from the CRM. Nothing on this screen can be edited here; corrections are made upstream and arrive on the next sync.
Victoria Airport Authority
Lot occupancy, security wait and flight lookup on one surface. Three feeds arriving on three schedules, normalised before the page renders any of them.
DETAIL B · Victoria Airport AuthorityLot occupancy, security wait and flight lookup on one surface. Three feeds arriving on three schedules, normalised before the page renders any of them.
Butchart Gardens
A page assembled from the custom block set rather than a bespoke template: the mapped route and the categories beside it are configured blocks an editor places.
DETAIL C · Butchart GardensA page assembled from the custom block set rather than a bespoke template: the mapped route and the categories beside it are configured blocks an editor places.

CONSTRAINT

On client work you own almost nothing. Not the data, not the brand, not the content model, and frequently not the decision.

What you own is whether it holds up afterwards — and the method that came out of a decade of that is to ask yourself every question and answer it before it surprises you later. Not a process, and not something a client ever asks for. It is the difference between a build that survives its first real season and one that has to be explained.

AgenticWPPLATE 01