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
- Feature gates that flash 'upgrade' before the real UI loadsA plan check that defaults to locked produces a paywall flash even when the account is allowed. The fix is not prettier loading — it is not rendering the gate until the entitlement is known.
- Scheduled posts are a query filter, not a redeployA future publishedAt keeps a note out of every public read until the clock passes. No cron publish job, no CMS 'go live' click — just GROQ and a short ISR window.
- A hosted CMS studio does not see your app's environment variablesNEXT_PUBLIC_ vars that work in Next.js are invisible to a separately deployed Sanity Studio. The studio only inlines SANITY_STUDIO_* — and an empty projectId fails silently in the browser.
- What a CMS handover should actually includeA training call is not a handover. The person who attends it is usually not the person editing the site a year later.
- Every fix ships with the test that would have caught itA bug report is a gift: it's a real-world input that broke your assumptions. Throwing that away after the fix is the actual waste.