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
- An array index is not a stable edit pathVisual Editing overlays follow Content Source Map paths. Index selectors point at a slot; _key selectors point at the block. Reorder the array and only one of those still opens the right field.
- A Slack thread is not a decision recordDiscovery chat settles a choice in the moment. Months later the thread is unsearchable, the people have rotated, and nobody can say what was rejected. Write the decision where the work lives.
- A reprint is not a voidWhen a florist ticket is already on the bench, reprint means lost paper. Void means the instructions changed. Mixing them prints a second arrangement from stale truth.
- A restock is not an inspectionApproving a return and ticking restock puts units back on the shelf before anyone opens the box. Disposition belongs after a real look — especially on partials.
- A decision log is not a museumDiscovery ends with named decisions. Weeks later the code has moved and the log still says Accepted. Hygiene is status, revisit triggers, and supersession — not a prettier archive.
- A field error is not a focus planServer Actions that return field errors still leave keyboard focus on Submit. Render the errors, then move focus — or the recovery never happened for half your users.
- A gift message is not an order noteCheckout can collect a card message in one field. Stuffing it into the freeform order note is how it collides with staff updates, delivery instructions, and the ticket on the bench.
- A Link in view is not a prefetch planNext.js Partial Prefetching lets a Link pull a shell instead of a whole route. That only helps if category grids and related-product rails stop treating every card in the viewport as an automatic download.