Skip to content
All work

Accounting & financial advisory · 2026

Dynasty Advisory

A WordPress marketing site rebuilt as an application, with the client portal already designed into it.

An accounting firm's site was a WordPress install doing a brochure's job slowly. The rebuild kept the brand exactly — colours and type lifted from the live stylesheet rather than reinterpreted — and made the next two phases, client login and document exchange, an extension rather than a second rewrite.

Engagement
Phased — marketing site live first
Phase 1
Full rebuild on the real domain
Phases 2–3
Client auth, then document storage
Lighthouse on mobile, all four categories
≥ 95Lighthouse on mobile, all four categories
validated identically on client and server
9 fieldsvalidated identically on client and server
URLs lost — every old path redirected
0URLs lost — every old path redirected

A faithful rebuild, not a redesign

The firm liked its brand. So the palette, the type scale and the spacing came off the live site's computed styles before a single component was written — not approximated from a screenshot. The rebuild is meant to be indistinguishable to a returning client except that it loads immediately.

Copy lives in typed content modules, never inline in components. That is the one decision that makes moving to a CMS later a swap of one module instead of a rewrite of every page — and in the meantime it means the firm can correct a service description without anyone reading JSX.

The form is the one public write path

Everything else on the site is read-only, so the contact form gets the attention: a shared schema validating on both sides, a spam check, and delivery to the firm with the sender set as reply-to, so hitting Reply reaches the lead rather than the website.

When sending fails it surfaces the phone number and the email address instead of a false success state. A lead who thinks they've been in touch and hasn't is worse than one who is told to call.

Building phase one so phase two isn't a rewrite

The portal — client login, document exchange — isn't built yet. But every phase-one decision was checked against it: the hosting, the database that will exist, the auth library that will slot in, the file storage. Phase one persists nothing and needs no database, and that's a choice, not an omission. What matters is that adding one later doesn't disturb anything already shipped.

Launch had a checklist with hard gates: keyboard-navigable and axe-clean, per-page metadata, structured data, sitemap, and a crawl of the old site so every URL already in the world lands somewhere.

Next case study

Delfini Adventures

There is probably one task in your week that shouldn't be yours.

Tell me what it is and roughly how often it happens. If it's a fit I'll say what I'd build and what it costs. If it isn't, I'll say that too.