Websites
Marketing sites built to the design — motion, CMS, and the boring parts that keep it editable.
Portfolio and brand sites for studios and businesses who already know how they want to look. The job is to ship that intent without losing the timing, the type, or the editor's ability to change it next month.
A Clarity Studio design built as a WordPress portfolio — residential work shown at the pace the practice deserves.
Case studies
Long-form writeups of how the work actually went.
2018–Jeffrey Dungan Architects
An architecture portfolio that had to feel as considered as the houses.
2022–Redmont Talent Partners
A calm front for an executive search practice that couldn't look like a job board.
2023–Lunaroya
A Hill Country land story that had to feel like the place, not a listing site.
2023–Shipogre
Explain a freight product without pretending the marketing site is the ops stack.
Selected work
- Jeffrey Dungan ArchitectsArchitecture portfolio for Jeffrey Dungan — residential work shown at the pace the practice deserves.Case study →
- ShipogreFreight booking marketing site — explain the product and capture shippers without touching the ops stack.Case study →
- Redmont Talent PartnersExecutive search site for a Birmingham talent practice — practice areas and a calm professional front.Case study →
- LunaroyaHomesite community site for a luxury Hill Country development — the land, the story, and a path to inquire.Case study →
- WAIVProperty valuation site for lenders and appraisers — human review plus automated classification, built before WAIV joined Opteon.View →
- ArchwayResidential real estate team site — agents and brand under one Archway roof.View →
- Fixprop12.comProp 12 compliance site for California pork rules — plain-language guidance and a path to talk to the team.View →
- SanavetVeterinary clinic site for a Birmingham practice — care approach and an easy path to get in touch.View →
- Trinity Prairie Co.Brand site for a Texas spirits company — product story with a commerce-ready front.View →
- CRECChurch network site for CREC — congregations, resources, and a shared home for the communion.View →
- Alys BeachDestination site for Alys Beach — the town, the homes, and the Florida Panhandle brand in one place.View →
- Thorny OysterRestaurant site for a coastal seafood spot — menu, place, and reservations without a bloated template.View →
- Cahaba BrewingBrewery site for Cahaba — beers, taproom, and the Birmingham brand.View →
- Novo IntegrativeClinic site for an integrative medicine practice — services and practitioners without the EHR clutter.View →
- Harold C. Smith FoundationPhilanthropic foundation site — mission, giving story, and a quiet public face for the Harold C. Smith Foundation.View →
- Watkins ElectricTrade contractor site for a Tennessee electrician — services, service area, and a clear call to hire.View →
- WDGCommercial real estate site for WDG — brokerage front end with property storytelling at the center.View →
- Connor+GaskinsArchitecture studio site — project archive and practice presence for Connor+Gaskins.View →
Field notes
- A quote is not a cart with a PDFWholesale buyers negotiate a price and a window. Treating that as a mutable cart with an export button is how accepted quotes drift before they become orders.
- Stega is for overlays, not for parsersVisual Editing embeds invisible source-map characters into draft strings so editors can click text to open a field. Those same characters break URLs, IDs, colors, and metadata if you treat the string as data.
- Don't run the image through two optimizersSanity's CDN already resizes, crops, and picks a format. Routing that URL through next/image again adds a hop without adding a decision — unless you know why the second pass exists.
- Available is not sellableShopify's inventory webhook speaks for available and on_hand. The states that take units off the shelf can stay silent — so a sync that only listens drifts by design.
- Preview drafts belong on the request, not the shared clientBaking previewDrafts into a shared Sanity client either leaks drafts to public traffic or forces every visitor off the CDN. Perspective has to be chosen per request from draftMode().
- A feature matrix is not a bake-offVendor comparisons stall on checklists and polished demos. We run a short bake-off on the client's real content and write down what we rejected the same day.
- Page transitions are not a reason to become an SPACross-document view transitions give multi-page sites the motion SPA teams used to justify a client router for. Treat them as enhancement, not as a rewrite brief.
- Your theme is not a product APIShopify's Catalog API makes the failure mode obvious: if an agent has to scrape your product page, you modeled presentation and called it a catalog.