Ashton Marine
A tug and barge operator working the Great Lakes, the inland rivers and the Gulf, with a dedicated heavy-lift and project cargo division. Nine pages from the outgoing agency, rebuilt from nothing as a custom WordPress theme with a page for every tug and barge, now on staging and launching in place of the old site.

Nine pages, zero words in the editor
Ashton Marine's previous site was custom work by an outside agency on a 2018 starter theme. Every published page held zero words in the WordPress editor; the copy lived in the agency's own field layouts and totalled about 1,400 words across nine pages. Project cargo, the division the new site had to lead with, was a single paragraph. Nothing could be migrated as content, so the rebuild started from the client's own documents instead.


A theme from an empty folder
I wrote a custom classic WordPress theme from an empty folder: brand tokens in theme.json, seven ACF blocks, vessel and person post types, and custom colours and font sizes switched off so editors stay on brand. Vessel pages take their spec tables from Ashton's own spec sheet, section for section, and sit at /vessels/ where the old URLs already carried links. A Tools page seeds every page, vessel, person and image alt text from the content blueprint, and it runs the same on a local WordPress Playground as on the host. Two companies read as one brand: both logos in the header and one combined fleet.


A palette that arrived after the build
The brand guide landed after the first theme build. Because version 0.1.0 had been built from the logo sheets with every colour as a token, applying the final palette was mechanical and every contrast pairing held. The guide's typefaces are not licensed for the web as specified, so headers use Inter Black and subheads a licensed web face, both approved by the brand designer. The logos were pulled from the guide as clean vectors before the official package existed, then swapped for the official files.


Seventeen URLs at three widths
Every theme version runs on a local WordPress Playground first, then goes onto the password-protected staging environment, where I check seventeen URLs logged out at 1440, 390 and 320 pixels: one H1, no PHP errors, no broken images, no sideways scroll, no console errors. That caught real things: an email address breaking mid-word at 390, a spec label overflowing its column at 320, and a scroll-driven ink fill that jumped from empty to full because one background layer had no explicit size. The navigation follows the WAI-ARIA disclosure pattern, verified with real key presses, and everything that moves switches off under prefers-reduced-motion. As of October the rebuild is at theme 0.7.0 with all fifteen news posts and thirteen spec-sheet PDFs imported at their original URLs; launch is a single DNS change.


Brand system
their letters, my numbersInter 900
Colours and the display face are the Ashton Marine brand guide as applied in the theme. The licensed subhead face is not shipped here.