← Back to home Work

Selected work

Each engagement is scoped, built, verified, and handed off. What follows describes what we built and why — and, where a build is far enough along to measure, what the measurements say.

Brand Presence

A custom home builder with a long portfolio and a site that showed almost none of it

The builder works in several distinct construction types, each one appealing to a different buyer. The old site presented them as a single undifferentiated gallery, said nothing about how a build actually proceeds, and gave a prospect no particular reason to call. The problem was structural rather than cosmetic.

Challenge

A custom home is a decision most people make once, usually without having commissioned a building before, and largely on trust. Three questions settle it: is there work here that resembles what I want, what will this process ask of me, and who would I be dealing with. The old site answered none of the three, so all three arrived by telephone or not at all.

Approach

  • Gave every build its own page, named, with its construction type stated on it, so someone drawn to one type does not have to scroll past three others to find it.
  • Wrote a process page running from the first conversation to move-in — design, contracts, milestones, and what happens at each one — because the thing that makes a custom build frightening is not knowing what comes next.
  • Kept the proof first-hand: photographs of finished houses, and of cleared land before and after, with the photographer credited and the copyright noted on the pictures themselves. No stock photography anywhere on the site.
  • Built it as static files with the security headers written into the source, so the site can be handed over without also handing over an account.

Result

  • Twenty pages, each with its own title, description and canonical address — twenty distinct values, none duplicated and none missing
  • 808 images across those pages, not one missing an alt attribute. The 211 that are deliberately empty sit inside links that already name the picture, so a screen reader does not read it twice
  • One first-level heading per page, and no skipped heading levels anywhere on the site
  • Fifty-six photographs carry the photographer's credit and copyright notice in the page's own structured data, so the attribution travels with the work instead of living in an email
  • A policy sent with every page naming what that page is allowed to load, alongside frame refusal, referrer restriction, and camera, microphone and location switched off
  • An address that does not exist returns a real 404 and a page written for the person who reached it, rather than a 200 dressed as an error
  • The photographs and the words arrive in the HTML the server sends. With JavaScript turned off, the pages still read
AstroGSAPCloudflare PagesCloudinary
Legacy Modernization

Our own site ran on an aging CMS — so we rebuilt it the way we rebuild everyone else's

A web practice with a dated website has a credibility problem it cannot argue its way out of. Ours was template-driven, slow to change, and tied to a hosting arrangement we did not control. We put it through the same process we sell.

Challenge

The awkward part of modernization work is that the argument only lands if you have made it yourself. A CMS-driven site accumulates the same problems for us as for any client: changes require the platform's cooperation, the hosting arrangement is not portable, and the request path depends on software that has to be kept current. We wanted the site to be a set of files we own, deployable anywhere, with nothing running in front of it.

Approach

  • Rebuilt as a static site — no CMS runtime in the request path on any page. What the visitor requests is a file, not the output of software executing on a server.
  • Moved DNS and hosting to a single provider, with deployment as a plain upload of the build output. The whole site is portable: the same files would serve from any static host without modification.
  • Self-hosted the fonts and removed third-party analytics, so nothing is collected from someone who is only reading. Where that stops is stated on the page it stops on: the contact form says what a message carries and how long it is kept.
  • Wrote the security headers and content security policy into the source, so they ship with the build and are regenerated on every deploy rather than configured by hand in a dashboard.

Result

  • No CMS in the request path — the site is static files, images and video included, and it can be moved to another host without a rebuild
  • Every deploy is reproducible from source, and the headers travel with it rather than living in a control panel
  • Two clean builds from the same source produce 172 files with identical SHA-256 hashes — every file compared, not a sample
  • Every page prints what it cost you to load, in its own footer, measured at render rather than typed in
AstroCloudflare Pages
Next step

Have a project in mind?

We scope every engagement before committing to it. Send us your situation and we'll tell you what we see.