A two-person studio
Stilling is the design studio my wife and I run, designing and building marketing websites for B2B SaaS startups.

Outside of our 9 to 5's, my wife Kerry and I run Stilling, a two-person design studio working with B2B SaaS startups. On these projects, I act, in part, as the business owner, strategist, designer, and developer; essentially a one-stop shop for all things web.
Usually, I help sell projects, define the creative direction, and land the initial homepage design. I also wire up the surrounding systems: CMS, forms, and marketing automations.
Running an entire engagement, from pitch and pricing to DNS and documentation, is a different muscle than in-house work. There's no one else to hand things to, which is exactly why I like it.

How we work
Every Stilling engagement runs on a shared foundation and a repeatable process. That's what makes a two-person shop viable against agencies many times our size.
One boilerplate, many brands
Early on, I wrote boilerplate code that every one of our web projects starts from. Eleventy compiles WebC components into plain HTML, CSS, and JavaScript, with flavored Tailwind for styling. The result is a self-contained, single-file architecture per page that most any developer can read without learning our abstractions.
That one codebase has scaled to meet the demands of 5+ production sites that vary wildly in shape and visual design.
Because each page keeps all of its context in one place, the codebase is unusually LLM-friendly. Editors can build new pages section-by-section or make edits with limited follow-up prompts. No digging through layers of components to find where a style lives.

The unglamorous parts
I also own the plumbing. Contact sales forms flow into CRMs and post to Slack so teams hear about leads in real-time. Repeated content types runs through Decap, a self-hosted, git-based CMS that writes every entry to a markdown file in the repo.
No vendor lock-in, no monthly CMS bill, and the content stays portable. It can be edited through the CMS or directly in the codebase, whichever the client's team prefers.
A repeatable process
Full redesigns follow the same phased arc: align on goals, establish a design and messaging baseline on the homepage, stress-test that baseline across a few key pages, then implement site-wide and finish with training and documentation.
Most full website redesigns take ~3 months, end-to-end.
- 5+ sites shipped on one shared boilerplate
- ~3 months end-to-end for a full redesign
- 2 people, zero subcontractors
Example: Atomic
Atomic wanted to be seen as the platform unlocking the "action layer" of connected banking, but their marketing site still presented them as a direct deposit switching tool. We were brought in to redesign and rebuild the site around that bigger vision.

It's a classic enterprise B2B SaaS site with loads of content: solutions pages, industry pages, an insights hub, and a full legal section. I landed the direction and homepage, Kerry built out the bulk of the remaining pages, and we handled the integrations underneath.
Programmatic everything
Nearly all of the visuals on Atomic's site (product mockups, phone frames, animated flows) are created programmatically with HTML, CSS, and JavaScript rather than exported images.
This approach makes additions via LLMs extremely efficient and high quality. Every product visual is just markup sitting next to the section it lives in, so even complex UI snippets tend to be vibe-codeable.
<!--- Example code for iPhone mock --->
<div class="relative w-full rounded-[17.5%/8.75%] shadow-[0_2rem_4rem_0_oklch(var(--lch-shadow)/0.5)] z-10" webc:root="override">
<!--- Frame --->
<div class="relative w-full rounded-[17.5%/8.75%] bg-shadow">
<div class="relative w-full flex flex-col items-center justify-center aspect-1/2 p-[2%] bg-headline/50 rounded-[17.5%/8.75%] inset-shadow-[0_0_0.1875rem_0.1875rem_oklch(var(--lch-shadow)/1)] overflow-hidden">
<!--- Screen --->
<div class="relative w-full h-full bg-background rounded-[16.5%/7.75%] shadow-[0_0_0.1875rem_0.1875rem_oklch(var(--lch-shadow)/1)] overflow-hidden">
<div class="relative w-full h-full p-[2%] bg-shadow rounded-[16.5%/7.75%] overflow-hidden">
<div class="relative w-full h-full bg-background rounded-[15.5%/6.75%] overflow-hidden">
<!--- Screen contents --->
<slot></slot>
<!--- Time and Dynamic island --->
<div class="absolute top-[1.75%] px-[11%] flex items-center justify-between w-full font-semibold text-[0.75em]">
<!--- Time --->
<div data-phone-time class="relative shrink-0 w-[4em]">9:41</div>
<!--- Island --->
<div class="relative w-[43.5%] h-[2.5em] px-[0.875em] bg-black rounded-full flex justify-end items-center">
...
</div>
<!--- Icons --->
<div class="relative flex items-center justify-end w-[4em] gap-[0.75em] shrink-0">
...
</div>
</div>
</div>
</div>
</div>
</div>
<!--- Device buttons and details --->
<div class="absolute top-0 left-0 w-full h-full pointer-events-none">
<!--- Etchings --->
...
<!--- Buttons --->
...
</div>
</div>
</div>
A smarter contact sales form
Optimizing the site for inbound lead-generation meant sweating the contact sales flow, not just the pages leading to it.
The form intelligently routes submissions (sales, support, general) on the back-end, keeping it dead simple for visitors to submit while keeping the noise down for Atomic's sales team.

Content without the CMS tax
Rather than defaulting to a headless CMS, I made the unconventional recommendation of managing content with markdown, Git, and GitHub, with self-hosted Decap layered on top for non-technical editors.
Every post the CMS creates is just a markdown file in the repo. The content is fully portable and version controlled. And since the entire insights hub sits grouped together in LLM-friendly markdown, it lends itself to vibe-writing, too.

Example: Uplink
Uplink lets agents and apps act on real user accounts by running automation directly on the user's own device. No cloud browsers, no credential risk. Unlike Atomic, I built this site mostly on my own.

Demoing the un-demoable
On-device automation is a hard concept to explain with static screenshots. Instead of trying, we let visitors run it themselves.
While the hero animation was a good first step, working directly with Uplink's founder and principal engineer, I built an interactive demo that pairs a visitor's phone to their desktop web session, letting them watch on-device automation run live, on their own device, right from the marketing page.
Scan a QR code, pair your phone, and pull your own Amazon order history onto the page in front of you. It's the product, working, before anyone has talked to sales.

Key takeaways
A few things I keep re-learning:
Boilerplate compounds
The time I invested in one solid foundation has paid for itself on every project since. Each site ships faster than the last, and improvements made for one client flow back into the next.
Build for the machines, too
Programmatic visuals and markdown content started as a quality and portability play. Now they also make sites dramatically easier for LLMs to work on, which has quietly become a feature clients can feel every time they ship a new page without us.
Working with your spouse works
Genuinely 😅. Clear handoffs make it easy: I land the direction and the homepage, Kerry lands the site. Having a partner whose skills overlap just enough to hand off, but differ enough to cover more ground, is the reason a two-person shop can deliver like a full team.