Notes
Notes from the studio.
Short pieces on web development, pricing, and the business of a small studio.
4/22/2026
Why we don't do retainers
Retainers smooth agency revenue at clients' expense. Here's how we structure ongoing work without them — quarterly scoped engagements and pay-only-for-hours-used hourly support.
4/25/2026
Fixed-price quotes are a conviction, not a marketing tactic
Hourly billing and fixed-price billing pull the studio and the client in different directions. Why we put the constraint on ourselves and what we lose by doing so.
4/29/2026
When not to hire us
Most agency sites are written like every prospect is a fit. They aren't. Seven categories of project where we'd tell you on the kickoff call to hire someone else.
5/2/2026
Day-one ownership: why your accounts shouldn't live in our agency dashboard
On every project, the client owns the domain, hosting, database, and third-party accounts on day one. Why this matters more than it sounds, and what it costs us operationally.
5/4/2026
Headless Shopify on Next.js: when it's worth it
Three signals that point at headless, four signals that point at staying on a Liquid theme, and an honest accounting of what the build actually costs.
5/5/2026
The cart-in-a-cookie pattern: less state, fewer bugs
Most headless Shopify storefronts reach for Zustand or Redux on day one. We don't — the cart is a single ID in an HTTP-only cookie, set by middleware, with the server as source of truth.
5/6/2026
MDX is a better CMS than your CMS (for sites that change quarterly)
The default of "reach for the headless CMS first" is wrong for most small-business marketing sites. When MDX in the repo wins, when it doesn't, and the TypeScript-objects variant.
5/7/2026
Stripe Connect for multi-tenant SaaS: why we picked Standard
Three flavors of Connect, three different regulatory profiles. Why CombatScore runs on Standard, what it costs us in onboarding polish, and the application-fee detail nobody documents clearly.
5/8/2026
Multi-tenant subdomains on Vercel without losing your weekend
Hundreds of branded tenant subdomains from a single Next.js deployment. The four pieces that make it work, and the two mistakes we made the first time.
5/8/2026
What "Coram Deo" looks like inside a Stripe invoice
The number on the quote is the number on the invoice — even when scope creep would let us bill more invisibly. The mechanism that makes the rule livable, and why it's a conviction rather than a policy.
5/9/2026
Working with a Reformed Christian studio: the FAQ
Do you only work with Christians? Will you turn down work? What does "Reformed" actually mean in practical terms? Honest answers to the questions we get asked privately.