Skip to content
Sean Swanson_
All work

Web / 2026 / Live

Brainerd Web Design

A web design practice for one town, on its own domain, with the price arithmetic printed on the page. I built it to find out whether a site aimed at a single market beats a site that lists thirty of them.

Screenshot of Brainerd Web Design

The bet

My studio site talks to small businesses across Minnesota. That is the right scope for it and the wrong scope for somebody in Brainerd typing the name of their own town into Google, because a page that lists forty service areas reads to a local as a company that is not really here.

So this is a separate practice on a separate domain, aimed at one market, with the town in the name. If it works it is the cheapest lead source I have. If it does not, I have lost a domain registration and learned something specific.

Pricing on the page, with the arithmetic shown

The pricing page is the reason the site exists. My hourly rate is on it, the hours each kind of build actually takes are on it, and the multiplication is written out rather than summarised into a package.

That is not a design flourish. The most common reason a small business owner never calls a designer is that they cannot tell whether the answer is four hundred dollars or four thousand, and nobody wants to make that phone call to find out. Publishing the sum removes the only real barrier to the first contact.

A separate design system, not a themed template

It shares no stylesheet, no class names and no component shapes with my studio site. Pine green and lake aqua rather than bone and navy, Bricolage Grotesque rather than Instrument Serif, a topographic contour motif rather than flat panels, and its own light and dark themes.

That cost real hours and it was the correct spend. A group of local sites running one template with the town name swapped is obvious to anybody who opens two of them, and the whole proposition here is that a local business gets a site built for it rather than stamped out. I could not sell that from a template farm.

The build, and the mail bug behind it

Six source fragments go through a Python script with no dependencies at all and come out as six static pages plus a sitemap. There is no framework, no npm install, and nothing at runtime to exploit or to keep patched. A push deploys it.

The contact form carries a fix that came out of a genuine failure on another site. Enquiry notifications there were landing in Spam, and the DNS was fine. The cause was the notification itself: it was sent from my domain but carried the enquirer's address as the reply-to and quoted their raw text, which is precisely the shape of a phishing message. This form sends a fixed subject tag and its own header instead, so a rule can whitelist it regardless of what somebody types into the box.

What I will not claim

That it works. It went live in August 2026, local rankings take months to settle, and any traffic number I put here would be a number I made up. The honest status is built, live, and waiting for evidence.