A web studio of one

Custom websites for small businesses, built and cared for by one person.

Muntin Digital is a fully-remote studio for restaurants, local businesses, and growing brands. You work with me directly — not a dashboard, not a project manager — and I design, build, and maintain your site end-to-end.

You'll be working with Don, not a ticket queue.
Typical reply time: under 4 hours, Mon–Fri.
mun·tin / noun the connective tissue of a window
Trusted by kitchens, counters, and corner shops
Olive & Ash Fulton Kitchen North Line Coffee Maison Rue Six & Vine
The gap Muntin fills

There are two ways to get a website.
Neither works for most small businesses.

DIY builders trade quality for convenience. Traditional agencies are priced for enterprises and treat small clients as an afterthought. Muntin is the third option — real engineering, real relationships, built for the way small businesses actually run.

DIY Builders

Wix, Squarespace, GoDaddy
  • Template-limited, generic by design
  • Slower on mobile, worse for SEO
  • You do the work — and the troubleshooting
  • Help center articles instead of a human

Traditional Agencies

$15k–$100k+ builds
  • Priced for enterprise, not main street
  • Project managers, contractors, handoffs
  • Hourly retainers after launch
  • You're a small fish in their pipeline

Muntin Digital

$2.5k–$15k build · from $125/mo care
  • Custom-coded, fast, mobile-first
  • One developer-manager, end-to-end
  • Monthly care plan — a real person, every time
  • You own your site. No lock-in, ever.
What you get

Three ways to build. One relationship.

Pick the build that fits today. Every project ends with a launch — and the option to stay on a Care Plan so it keeps getting better, not worse.

Marketing Site

Starter

$2,500–$4,000

A custom 3–6 page site, launched in 2–3 weeks. Perfect for owners who need to stop apologizing for their website.

  • Custom design, mobile-first
  • SEO-ready on day one
  • Contact & newsletter forms
  • Google Analytics & search console
  • Domain & launch support
Full Build

Signature

$5,000–$9,000

Everything in Starter, plus a lightweight CMS, integrations, and polish. The package most restaurants and local brands need.

  • Editable CMS for menus, posts, hours
  • Reservations, ordering & booking integrations
  • Copy polish & photo curation
  • Launch plan & training session
  • 30 days post-launch support
Online Store

Commerce

$8,000–$15,000+

For boutique brands outgrowing a drag-and-drop store. Shopify or headless, built around your actual products and flow.

  • Custom Shopify or headless build
  • Product data, variants, shipping rules
  • Email capture & abandoned cart
  • Analytics & conversion tracking
  • 60 days post-launch support
How we work

Four steps.
No mystery, no middle layer.

01

Conversation

A 20-minute call. I ask about your business, your goals, and your frustrations with your current site. You ask anything.

02

Proposal

Within 48 hours, a written plan. Scope, timeline, price, and exactly what we'll launch — in plain English.

03

Build

I design and build. You see progress weekly. Feedback happens in shared previews, not in meetings you don't have time for.

04

Launch & care

We launch together. If you stay on a Care Plan, I keep your site fast, secure, and up to date — indefinitely.

Care Plans

Launching a site is easy.
Keeping it good is the hard part.

Most small business sites rot because nobody owns them after launch. A Care Plan means someone always does — the same person who built it.

Essentials

$125/mo
  • Fast, monitored hosting
  • Daily backups
  • Security & dependency updates
  • Uptime alerts
  • Email support (48h)

Concierge

$350/mo
  • Everything in Standard Care
  • Up to 5 hours of content & feature work
  • Monthly strategy call
  • SEO & local search tuning
  • Direct phone & text access
About

A muntin is the slender strip that holds a window together.

Small, quiet, and the reason the whole thing stands up.

I'm Don. I started Muntin Digital because I kept watching small business owners get stuck between two bad options — DIY builders that trade quality for convenience, and agencies priced for enterprises that treat them as an afterthought.

I build custom websites end-to-end, one client at a time, and then I stick around. That's the whole idea. No ticket queues, no handoffs, no dashboards you have to learn. Just a real person holding the pieces together.

— Don

Selected work

A few recent builds.

Placeholder case studies — swap in your real projects as you launch them. Each card will link to a full write-up.

Restaurant · 2026

Olive & Ash

A neighborhood bistro site with live menus, reservations, and a lunch-rush-proof mobile experience.

Coffee · 2026

North Line Coffee

A roastery relaunch with wholesale ordering, subscriptions, and a new brand identity.

Wellness · 2026

Fulton & Ivy

An herbalist studio with class booking, ingredient library, and a waitlist that doesn't leak.

Boutique D2C · 2026

Maison Rue

A custom Shopify store for a Brooklyn perfumery — built around story, not templates.

Questions I get

Straight answers.

Why not just use Wix or Squarespace?

You can — and for some businesses, it's fine. But when your template starts limiting how customers find you, how fast pages load, or how your brand feels, you're stuck. Muntin gives you a real, custom-coded site without the DIY ceiling.

Isn't a real developer expensive?

Agencies are. A single developer-manager isn't. Muntin builds on modern tools that cut the cost of custom work without cutting quality — starting at $2.5k for a launch-ready site.

What happens after launch?

Every client is offered a Care Plan. For a flat monthly fee you get hosting, backups, monitoring, security updates, content edits, and priority response — all from the same person who built your site.

Do I own my site?

Yes, completely. Your code, your domain, your content. No proprietary lock-in, no multi-year contracts. If we ever part ways, you keep everything.

How long does a build take?

Starter builds launch in 2–3 weeks. Signature builds, 4–6 weeks. Commerce builds, 6–10. I only take on as many projects as I can fully commit to — usually two active builds at a time.

Can you handle something more complex later?

Yes. Muntin starts with marketing sites and restaurant builds, but the stack scales up to e-commerce, integrations, and more complex applications as you grow. You don't outgrow your web partner six months in.

Let's build something

Tell me about your business. I'll tell you what your site could do.

A 20-minute call, no pitch deck, no pressure. You'll leave with a clear sense of what's possible and what it would cost — whether you hire me or not.

--max: 1200px; --pad-x: clamp(20px, 4vw, 64px); --ease: cubic-bezier(.22,.61,.36,1); --ease-out: cubic-bezier(.16,1,.3,1); --t-fast: 180ms; --t-med: 420ms; --t-slow: 900ms; --r-sm: 8px; --r-md: 14px; --r-lg: 22px; } *, *::before, *::after { box-sizing: border-box; } html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; } body { margin: 0; font-family: var(--font-body); font-size: 17px; line-height: 1.6; color: var(--ink); background: var(--cream); -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; } img, svg { display: block; max-width: 100%; } a { color: inherit; text-decoration: none; } button { font: inherit; cursor: pointer; border: 0; background: none; color: inherit; } ::selection { background: var(--teal); color: var(--cream); } h1, h2, h3, h4 { font-family: var(--font-display); font-weight: 500; line-height: 1.05; letter-spacing: -0.02em; color: var(--ink); margin: 0; } h1 { font-size: clamp(42px, 6.4vw, 84px); font-weight: 500; } h2 { font-size: clamp(32px, 4.2vw, 54px); } h3 { font-size: clamp(22px, 2.2vw, 30px); } p { margin: 0; } .eyebrow { font-family: var(--font-body); font-size: 13px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--teal); display: inline-flex; align-items: center; gap: 10px; } .eyebrow::before { content: ''; width: 28px; height: 1px; background: var(--teal); } .container { max-width: var(--max); margin: 0 auto; padding-inline: var(--pad-x); } /* ---------------- Buttons ---------------- */ .btn { display: inline-flex; align-items: center; gap: 10px; padding: 15px 26px; border-radius: 999px; font-weight: 500; font-size: 15px; letter-spacing: -0.005em; transition: transform var(--t-fast) var(--ease), background var(--t-fast) var(--ease), color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease); white-space: nowrap; } .btn svg { width: 16px; height: 16px; transition: transform var(--t-med) var(--ease-out); } .btn:hover svg { transform: translateX(4px); } .btn-primary { background: var(--ink); color: var(--cream); } .btn-primary:hover { background: var(--teal); transform: translateY(-1px); box-shadow: 0 12px 30px -12px rgba(20,22,26,0.35); } .btn-ghost { background: transparent; color: var(--ink); border: 1px solid var(--line-dark); } .btn-ghost:hover { background: var(--white); border-color: var(--ink); } /* ---------------- Nav ---------------- */ .nav { position: fixed; inset: 0 0 auto 0; z-index: 50; padding: 18px 0; transition: background var(--t-med) var(--ease), border-color var(--t-med) var(--ease), padding var(--t-med) var(--ease); border-bottom: 1px solid transparent; } .nav.scrolled { background: rgba(250, 247, 242, 0.88); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border-bottom-color: var(--line); padding: 12px 0; } .nav-inner { display: flex; align-items: center; justify-content: space-between; gap: 24px; } .logo { display: flex; align-items: center; gap: 10px; font-family: var(--font-display); font-size: 22px; font-weight: 600; letter-spacing: -0.02em; } .logo-mark { width: 28px; height: 28px; flex: 0 0 28px; } .nav-links { display: flex; gap: 36px; font-size: 15px; color: var(--ink-soft); } .nav-links a { position: relative; transition: color var(--t-fast) var(--ease); } .nav-links a::after { content: ''; position: absolute; left: 0; right: 0; bottom: -6px; height: 1px; background: var(--teal); transform: scaleX(0); transform-origin: left; transition: transform var(--t-med) var(--ease-out); } .nav-links a:hover { color: var(--teal); } .nav-links a:hover::after { transform: scaleX(1); } @media (max-width: 820px) { .nav-links { display: none; } } /* ---------------- Hero ---------------- */ .hero { padding: 160px 0 100px; position: relative; overflow: hidden; } .hero-grid { display: grid; grid-template-columns: 1.1fr 0.9fr; gap: 60px; align-items: center; } @media (max-width: 960px) { .hero { padding: 130px 0 60px; } .hero-grid { grid-template-columns: 1fr; gap: 48px; } } .hero h1 { margin-top: 24px; } .hero h1 .serif-italic { font-style: italic; font-weight: 400; color: var(--teal); } .hero-sub { margin-top: 28px; max-width: 520px; font-size: clamp(17px, 1.35vw, 20px); line-height: 1.55; color: var(--ink-soft); } .hero-ctas { margin-top: 40px; display: flex; gap: 14px; flex-wrap: wrap; } .hero-meta { margin-top: 44px; display: flex; align-items: center; gap: 16px; color: var(--ink-soft); font-size: 14px; } .hero-meta-sub { color: var(--stone); } .hero-meta .avatar { width: 44px; height: 44px; border-radius: 999px; background: linear-gradient(135deg, var(--teal) 0%, var(--teal-dark) 100%); color: var(--cream); display: grid; place-items: center; font-family: var(--font-display); font-weight: 600; font-size: 18px; letter-spacing: -0.02em; flex: 0 0 44px; box-shadow: 0 8px 20px -8px rgba(20, 22, 26, 0.25); } /* Signature muntin window */ .window { position: relative; width: 100%; aspect-ratio: 5 / 6; background: var(--cream); border: 1px solid var(--line-dark); border-radius: 6px; box-shadow: 0 50px 90px -40px rgba(20, 22, 26, 0.25), 0 20px 40px -20px rgba(31, 78, 91, 0.15); display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(4, 1fr); overflow: hidden; transform-style: preserve-3d; perspective: 1200px; } .pane { position: relative; background: radial-gradient( 120% 120% at 20% 10%, rgba(255, 255, 255, 0.9) 0%, rgba(232, 241, 243, 0.85) 35%, rgba(201, 102, 45, 0.12) 100% ); overflow: hidden; transition: transform var(--t-med) var(--ease); } .pane::after { content: ''; position: absolute; inset: 0; background: linear-gradient( 135deg, rgba(255,255,255,0.35) 0%, rgba(255,255,255,0) 35%, rgba(31, 78, 91, 0.07) 100% ); pointer-events: none; } .pane:nth-child(odd) { background: radial-gradient(130% 100% at 80% 20%, #FFF 0%, var(--teal-tint) 55%, rgba(31,78,91,0.18) 100%); } .pane:nth-child(3n) { background: radial-gradient(120% 120% at 30% 80%, #FFF 0%, #FBEFE3 45%, rgba(201,102,45,0.18) 100%); } .pane:nth-child(4) { background: radial-gradient(110% 110% at 50% 50%, #FFF 0%, #F3EEE3 50%, rgba(20,54,64,0.15) 100%); } /* Muntin bars — drawn over the grid */ .muntins { position: absolute; inset: 0; pointer-events: none; z-index: 2; } .muntins .bar { position: absolute; background: var(--ink); } .muntins .v1 { left: 33.333%; top: 0; bottom: 0; width: 3px; transform-origin: top; } .muntins .v2 { left: 66.666%; top: 0; bottom: 0; width: 3px; transform-origin: top; } .muntins .h1 { top: 25%; left: 0; right: 0; height: 3px; transform-origin: left; } .muntins .h2 { top: 50%; left: 0; right: 0; height: 3px; transform-origin: left; } .muntins .h3 { top: 75%; left: 0; right: 0; height: 3px; transform-origin: left; } .muntins .frame { position: absolute; inset: 0; border: 3px solid var(--ink); border-radius: 6px; } /* Draw-in animation */ .window .v1, .window .v2 { transform: scaleY(0); animation: draw-v 900ms var(--ease-out) 200ms forwards; } .window .v2 { animation-delay: 340ms; } .window .h1, .window .h2, .window .h3 { transform: scaleX(0); animation: draw-h 900ms var(--ease-out) 480ms forwards; } .window .h2 { animation-delay: 620ms; } .window .h3 { animation-delay: 760ms; } .window .pane { opacity: 0; animation: fade-pane 700ms var(--ease-out) forwards; } .window .pane:nth-child(1) { animation-delay: 900ms; } .window .pane:nth-child(2) { animation-delay: 960ms; } .window .pane:nth-child(3) { animation-delay: 1020ms; } .window .pane:nth-child(4) { animation-delay: 1080ms; } .window .pane:nth-child(5) { animation-delay: 1140ms; } .window .pane:nth-child(6) { animation-delay: 1200ms; } .window .pane:nth-child(7) { animation-delay: 1260ms; } .window .pane:nth-child(8) { animation-delay: 1320ms; } .window .pane:nth-child(9) { animation-delay: 1380ms; } .window .pane:nth-child(10) { animation-delay: 1440ms; } .window .pane:nth-child(11) { animation-delay: 1500ms; } .window .pane:nth-child(12) { animation-delay: 1560ms; } @keyframes draw-v { to { transform: scaleY(1); } } @keyframes draw-h { to { transform: scaleX(1); } } @keyframes fade-pane { from { opacity: 0; transform: translateZ(-10px); } to { opacity: 1; transform: translateZ(0); } } .window:hover .pane { transform: translateY(-1px); } .window-caption { margin-top: 18px; display: flex; justify-content: space-between; font-size: 13px; color: var(--stone); font-variant-numeric: tabular-nums; } /* ---------------- Proof strip ---------------- */ .proof { border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); padding: 28px 0; background: var(--cream); } .proof-inner { display: flex; align-items: center; gap: 40px; flex-wrap: wrap; justify-content: space-between; } .proof-label { font-size: 13px; color: var(--stone); letter-spacing: 0.04em; } .proof-logos { display: flex; gap: 44px; flex-wrap: wrap; font-family: var(--font-display); font-weight: 500; font-size: 18px; color: var(--stone); letter-spacing: -0.01em; align-items: center; } .proof-logos span { /* contrast safe — uses --stone #6B6B6B on cream */ } .proof-logos span:nth-child(even) { font-style: italic; } /* ---------------- Sections ---------------- */ section.block { padding: clamp(80px, 10vw, 140px) 0; } .section-header { max-width: 760px; margin-bottom: 64px; } .section-header h2 { margin-top: 16px; } .section-header p { margin-top: 20px; font-size: 19px; line-height: 1.55; color: var(--ink-soft); max-width: 640px; } /* Problem comparison */ .bg-cream2 { background: var(--cream-2); } .compare { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } @media (max-width: 900px) { .compare { grid-template-columns: 1fr; } } .compare .card { background: var(--white); border: 1px solid var(--line); border-radius: var(--r-md); padding: 36px; transition: transform var(--t-med) var(--ease), box-shadow var(--t-med) var(--ease); } .compare .card.muntin { background: var(--ink); color: var(--cream); border-color: var(--ink); position: relative; overflow: hidden; } .compare .card.muntin::before { content: ''; position: absolute; inset: 0; background: radial-gradient(600px 300px at 20% 0%, rgba(31, 78, 91, 0.55) 0%, rgba(20, 22, 26, 0) 70%); pointer-events: none; } .compare .card:hover { transform: translateY(-4px); box-shadow: 0 30px 60px -30px rgba(20, 22, 26, 0.2); } .compare .card h3 { font-size: 22px; margin-bottom: 8px; } .compare .card .price-tag { font-family: var(--font-body); font-size: 13px; color: var(--stone); font-weight: 500; } .compare .card.muntin .price-tag { color: var(--stone-2); } .compare .card ul { list-style: none; padding: 0; margin: 24px 0 0 0; } .compare .card li { position: relative; padding-left: 26px; margin-bottom: 12px; font-size: 15px; line-height: 1.55; color: var(--ink-soft); } .compare .card.muntin li { color: rgba(250, 247, 242, 0.85); } .compare .card li::before { content: ''; position: absolute; left: 0; top: 9px; width: 14px; height: 1px; background: currentColor; opacity: 0.5; } /* Services */ .services { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } @media (max-width: 900px) { .services { grid-template-columns: 1fr; } } .service { background: var(--white); border: 1px solid var(--line); border-radius: var(--r-md); padding: 38px 34px; position: relative; transition: transform var(--t-med) var(--ease), border-color var(--t-med) var(--ease), box-shadow var(--t-med) var(--ease); display: flex; flex-direction: column; } .service:hover { transform: translateY(-4px); border-color: var(--teal); box-shadow: 0 30px 60px -30px rgba(31, 78, 91, 0.25); } .service .label { font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--teal); font-weight: 600; } .service h3 { margin-top: 10px; font-size: 30px; } .service .price { margin-top: 18px; font-family: var(--font-display); font-size: 42px; font-weight: 500; color: var(--ink); letter-spacing: -0.02em; } .service .price small { font-family: var(--font-body); font-size: 13px; color: var(--stone); font-weight: 500; margin-left: 4px; letter-spacing: 0; } .service .desc { margin-top: 14px; color: var(--ink-soft); font-size: 15px; line-height: 1.55; } .service ul { list-style: none; padding: 0; margin: 22px 0 0; flex: 1; } .service li { padding: 10px 0; border-bottom: 1px solid var(--line); font-size: 14.5px; color: var(--ink-soft); display: flex; align-items: flex-start; gap: 10px; } .service li:last-child { border-bottom: 0; } .service li svg { width: 14px; height: 14px; color: var(--teal); flex: 0 0 14px; margin-top: 5px; } /* Process */ .process { background: var(--ink); color: var(--cream); } .process h2, .process .eyebrow { color: var(--cream); } .process .eyebrow::before { background: var(--cream); } .process .section-header p { color: rgba(250, 247, 242, 0.78); } .steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1px; background: rgba(250, 247, 242, 0.12); border-top: 1px solid rgba(250, 247, 242, 0.12); border-bottom: 1px solid rgba(250, 247, 242, 0.12); } @media (max-width: 900px) { .steps { grid-template-columns: 1fr; } } .step { background: var(--ink); padding: 40px 28px 44px; position: relative; } .step .num { font-family: var(--font-display); font-size: 58px; font-weight: 400; font-style: italic; color: var(--teal); line-height: 1; } .step h3 { margin-top: 18px; color: var(--cream); font-size: 22px; } .step p { margin-top: 12px; color: rgba(250, 247, 242, 0.72); font-size: 14.5px; line-height: 1.55; } /* Care plans */ .care { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } @media (max-width: 900px) { .care { grid-template-columns: 1fr; } } .plan { background: var(--white); border: 1px solid var(--line); border-radius: var(--r-md); padding: 36px 32px; position: relative; transition: transform var(--t-med) var(--ease), box-shadow var(--t-med) var(--ease), border-color var(--t-med) var(--ease); } .plan.featured { background: var(--teal-tint); border-color: var(--teal); } .plan.featured .badge { position: absolute; top: -12px; right: 24px; background: var(--rust); color: var(--cream); padding: 6px 14px; border-radius: 999px; font-size: 12px; letter-spacing: 0.06em; font-weight: 600; text-transform: uppercase; } .plan:hover { transform: translateY(-3px); box-shadow: 0 30px 60px -30px rgba(20, 22, 26, 0.18); } .plan h3 { font-size: 26px; } .plan .p-price { margin-top: 14px; font-family: var(--font-display); font-size: 32px; font-weight: 500; letter-spacing: -0.02em; } .plan .p-price small { font-family: var(--font-body); font-size: 14px; font-weight: 500; color: var(--stone); margin-left: 2px; } .plan ul { list-style: none; padding: 0; margin: 22px 0 0; font-size: 14.5px; color: var(--ink-soft); } .plan li { padding: 9px 0; border-bottom: 1px solid var(--line); } .plan li:last-child { border: 0; } /* About */ .about-grid { display: grid; grid-template-columns: 0.9fr 1.1fr; gap: 80px; align-items: center; } @media (max-width: 900px) { .about-grid { grid-template-columns: 1fr; gap: 48px; } } .portrait { width: 100%; aspect-ratio: 4/5; background: linear-gradient(135deg, rgba(31,78,91,0.55) 0%, rgba(20,54,64,0.35) 100%), radial-gradient(100% 80% at 30% 20%, #FBEFE3 0%, var(--cream-2) 40%, var(--teal-tint) 100%); border-radius: var(--r-lg); border: 1px solid var(--line-dark); position: relative; overflow: hidden; display: grid; place-items: center; color: var(--cream); font-family: var(--font-display); font-size: 120px; font-weight: 500; font-style: italic; letter-spacing: -0.03em; } .portrait::after { content: ''; position: absolute; inset: 0; background: linear-gradient(to right, transparent 33%, rgba(20,22,26,0.15) 33%, rgba(20,22,26,0.15) calc(33% + 2px), transparent calc(33% + 2px)), linear-gradient(to right, transparent 66%, rgba(20,22,26,0.15) 66%, rgba(20,22,26,0.15) calc(66% + 2px), transparent calc(66% + 2px)), linear-gradient(to bottom, transparent 50%, rgba(20,22,26,0.15) 50%, rgba(20,22,26,0.15) calc(50% + 2px), transparent calc(50% + 2px)); pointer-events: none; } .about-copy p { font-size: 19px; line-height: 1.65; color: var(--ink-soft); margin-top: 24px; } .about-copy p:first-of-type { margin-top: 28px; } .signature { margin-top: 32px; font-family: var(--font-display); font-style: italic; font-size: 28px; color: var(--teal); } /* Work */ .work { display: grid; grid-template-columns: repeat(12, 1fr); gap: 24px; } .work-item { background: var(--white); border: 1px solid var(--line); border-radius: var(--r-md); overflow: hidden; transition: transform var(--t-med) var(--ease), box-shadow var(--t-med) var(--ease); cursor: pointer; } .work-item:nth-child(1) { grid-column: span 7; } .work-item:nth-child(2) { grid-column: span 5; } .work-item:nth-child(3) { grid-column: span 5; } .work-item:nth-child(4) { grid-column: span 7; } @media (max-width: 900px) { .work-item { grid-column: span 12 !important; } } .work-item:hover { transform: translateY(-4px); box-shadow: 0 40px 80px -40px rgba(20, 22, 26, 0.25); } .work-thumb { aspect-ratio: 16/10; position: relative; overflow: hidden; } .work-thumb.a { background: linear-gradient(135deg, #8C2F1A 0%, #C9662D 70%, #E8A87C 100%); } .work-thumb.b { background: linear-gradient(135deg, #1F4E5B 0%, #2A7A8C 70%, #7EBAC5 100%); } .work-thumb.c { background: linear-gradient(135deg, #2E4A2E 0%, #5A7A4A 70%, #A8C49A 100%); } .work-thumb.d { background: linear-gradient(135deg, #3D2E52 0%, #6B4E8C 70%, #B29FD8 100%); } .work-thumb::after { content: ''; position: absolute; inset: 0; background: linear-gradient(to right, transparent 33%, rgba(255,255,255,0.18) 33%, rgba(255,255,255,0.18) calc(33% + 1.5px), transparent calc(33% + 1.5px)), linear-gradient(to right, transparent 66%, rgba(255,255,255,0.18) 66%, rgba(255,255,255,0.18) calc(66% + 1.5px), transparent calc(66% + 1.5px)), linear-gradient(to bottom, transparent 50%, rgba(255,255,255,0.18) 50%, rgba(255,255,255,0.18) calc(50% + 1.5px), transparent calc(50% + 1.5px)); } .work-meta { padding: 26px 28px 30px; } .work-meta .tag { font-size: 12px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--teal); font-weight: 600; } .work-meta h3 { margin-top: 8px; font-size: 26px; } .work-meta p { margin-top: 8px; font-size: 15px; color: var(--ink-soft); } /* FAQ */ .faq-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 60px; border-top: 1px solid var(--line); } @media (max-width: 900px) { .faq-grid { grid-template-columns: 1fr; gap: 0; } } .faq-item { padding: 30px 0; border-bottom: 1px solid var(--line); } .faq-item h3 { font-size: 20px; font-weight: 500; font-family: var(--font-display); } .faq-item p { margin-top: 12px; color: var(--ink-soft); font-size: 15px; line-height: 1.6; } /* Final CTA */ .final { background: var(--ink); color: var(--cream); position: relative; overflow: hidden; } .final::before { content: ''; position: absolute; inset: 0; background: radial-gradient(900px 500px at 80% 0%, rgba(31, 78, 91, 0.6) 0%, rgba(20, 22, 26, 0) 60%), radial-gradient(700px 400px at 10% 100%, rgba(201, 102, 45, 0.28) 0%, rgba(20, 22, 26, 0) 55%); } .final .container { position: relative; } .final .eyebrow { color: var(--cream); } .final .eyebrow::before { background: var(--cream); } .final h2 { color: var(--cream); margin-top: 16px; font-size: clamp(38px, 5vw, 72px); max-width: 900px; } .final h2 em { font-style: italic; color: #E8A87C; font-weight: 400; } .final .final-sub { margin-top: 28px; max-width: 580px; font-size: 18px; color: rgba(250, 247, 242, 0.78); } .final .hero-ctas { margin-top: 44px; } .final .btn-primary { background: var(--cream); color: var(--ink); } .final .btn-primary:hover { background: var(--white); } .final .btn-ghost { color: var(--cream); border-color: rgba(250, 247, 242, 0.3); } .final .btn-ghost:hover { background: rgba(250, 247, 242, 0.08); border-color: var(--cream); } /* Footer */ footer { background: var(--ink); color: rgba(250, 247, 242, 0.7); padding: 50px 0 40px; border-top: 1px solid rgba(250, 247, 242, 0.08); font-size: 14px; } .foot { display: flex; justify-content: space-between; gap: 24px; flex-wrap: wrap; } .foot a:hover { color: var(--cream); } .foot-logo { color: var(--cream); font-family: var(--font-display); font-size: 18px; font-weight: 600; letter-spacing: -0.02em; } /* Scroll reveal */ .reveal { opacity: 0; transform: translateY(24px); transition: opacity 800ms var(--ease-out), transform 800ms var(--ease-out); } .reveal.in { opacity: 1; transform: translateY(0); } @media (prefers-reduced-motion: reduce) { * { animation: none !important; transition: none !important; } .reveal { opacity: 1; transform: none; } } /* ---------------- Focus-visible (keyboard accessibility) ---------------- */ :focus { outline: none; } a:focus-visible, button:focus-visible, .btn:focus-visible { outline: 2px solid var(--teal); outline-offset: 3px; border-radius: 4px; } .btn:focus-visible { outline-offset: 4px; border-radius: 999px; } .final a:focus-visible, .process a:focus-visible, footer a:focus-visible { outline-color: var(--cream); } /* ---------------- Skip to content ---------------- */ .skip-link { position: absolute; left: -9999px; top: 0; background: var(--ink); color: var(--cream); padding: 12px 20px; border-radius: 0 0 8px 0; font-size: 14px; font-weight: 500; z-index: 100; } .skip-link:focus { left: 0; outline: 2px solid var(--cream); outline-offset: 2px; } /* ---------------- Mobile nav hamburger ---------------- */ .nav-toggle { display: none; width: 44px; height: 44px; flex-direction: column; justify-content: center; align-items: center; gap: 5px; border-radius: 8px; padding: 0; margin-left: 8px; } .nav-toggle span { display: block; width: 22px; height: 2px; background: var(--ink); transition: transform var(--t-med) var(--ease), opacity var(--t-fast) var(--ease); } .nav.menu-open .nav-toggle span:nth-child(1) { transform: translateY(7px) rotate(45deg); } .nav.menu-open .nav-toggle span:nth-child(2) { opacity: 0; } .nav.menu-open .nav-toggle span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); } .mobile-menu { display: none; flex-direction: column; gap: 6px; padding: 20px var(--pad-x) 28px; background: var(--cream); border-top: 1px solid var(--line); } .mobile-menu a { padding: 14px 2px; font-size: 18px; font-family: var(--font-display); font-weight: 500; color: var(--ink); border-bottom: 1px solid var(--line); } .mobile-menu a:last-child { margin-top: 14px; border-bottom: 0; justify-content: center; padding: 15px 26px; font-family: var(--font-body); font-size: 15px; } .mobile-menu[hidden] { display: none; } @media (max-width: 820px) { .nav-inner .btn-primary { display: none; } .nav-toggle { display: flex; } .mobile-menu:not([hidden]) { display: flex; } .nav.menu-open { background: var(--cream); border-bottom-color: var(--line); } } /* ---------------- Hero headline: natural wrapping ---------------- */ .hero h1 { text-wrap: balance; max-width: 14ch; } /* ---------------- Normalized card hover ---------------- */ .compare .card:hover, .service:hover, .plan:hover, .work-item:hover { transform: translateY(-4px); }
A web studio of one

Custom websites for small businesses, built and cared for by one person.

Muntin Digital is a fully-remote studio for restaurants, local businesses, and growing brands. You work with me directly — not a dashboard, not a project manager — and I design, build, and maintain your site end-to-end.

You'll be working with Don, not a ticket queue.
Typical reply time: under 4 hours, Mon–Fri.
mun·tin / noun the connective tissue of a window
Trusted by kitchens, counters, and corner shops
Olive & Ash Fulton Kitchen North Line Coffee Maison Rue Six & Vine
The gap Muntin fills

There are two ways to get a website.
Neither works for most small businesses.

DIY builders trade quality for convenience. Traditional agencies are priced for enterprises and treat small clients as an afterthought. Muntin is the third option — real engineering, real relationships, built for the way small businesses actually run.

DIY Builders

Wix, Squarespace, GoDaddy
  • Template-limited, generic by design
  • Slower on mobile, worse for SEO
  • You do the work — and the troubleshooting
  • Help center articles instead of a human

Traditional Agencies

$15k–$100k+ builds
  • Priced for enterprise, not main street
  • Project managers, contractors, handoffs
  • Hourly retainers after launch
  • You're a small fish in their pipeline

Muntin Digital

$2.5k–$15k build · from $125/mo care
  • Custom-coded, fast, mobile-first
  • One developer-manager, end-to-end
  • Monthly care plan — a real person, every time
  • You own your site. No lock-in, ever.
What you get

Three ways to build. One relationship.

Pick the build that fits today. Every project ends with a launch — and the option to stay on a Care Plan so it keeps getting better, not worse.

Marketing Site

Starter

$2,500–$4,000

A custom 3–6 page site, launched in 2–3 weeks. Perfect for owners who need to stop apologizing for their website.

  • Custom design, mobile-first
  • SEO-ready on day one
  • Contact & newsletter forms
  • Google Analytics & search console
  • Domain & launch support
Full Build

Signature

$5,000–$9,000

Everything in Starter, plus a lightweight CMS, integrations, and polish. The package most restaurants and local brands need.

  • Editable CMS for menus, posts, hours
  • Reservations, ordering & booking integrations
  • Copy polish & photo curation
  • Launch plan & training session
  • 30 days post-launch support
Online Store

Commerce

$8,000–$15,000+

For boutique brands outgrowing a drag-and-drop store. Shopify or headless, built around your actual products and flow.

  • Custom Shopify or headless build
  • Product data, variants, shipping rules
  • Email capture & abandoned cart
  • Analytics & conversion tracking
  • 60 days post-launch support
How we work

Four steps.
No mystery, no middle layer.

01

Conversation

A 20-minute call. I ask about your business, your goals, and your frustrations with your current site. You ask anything.

02

Proposal

Within 48 hours, a written plan. Scope, timeline, price, and exactly what we'll launch — in plain English.

03

Build

I design and build. You see progress weekly. Feedback happens in shared previews, not in meetings you don't have time for.

04

Launch & care

We launch together. If you stay on a Care Plan, I keep your site fast, secure, and up to date — indefinitely.

Care Plans

Launching a site is easy.
Keeping it good is the hard part.

Most small business sites rot because nobody owns them after launch. A Care Plan means someone always does — the same person who built it.

Essentials

$125/mo
  • Fast, monitored hosting
  • Daily backups
  • Security & dependency updates
  • Uptime alerts
  • Email support (48h)

Concierge

$350/mo
  • Everything in Standard Care
  • Up to 5 hours of content & feature work
  • Monthly strategy call
  • SEO & local search tuning
  • Direct phone & text access
About

A muntin is the slender strip that holds a window together.

Small, quiet, and the reason the whole thing stands up.

I'm Don. I started Muntin Digital because I kept watching small business owners get stuck between two bad options — DIY builders that trade quality for convenience, and agencies priced for enterprises that treat them as an afterthought.

I build custom websites end-to-end, one client at a time, and then I stick around. That's the whole idea. No ticket queues, no handoffs, no dashboards you have to learn. Just a real person holding the pieces together.

— Don

Selected work

A few recent builds.

Placeholder case studies — swap in your real projects as you launch them. Each card will link to a full write-up.

Restaurant · 2026

Olive & Ash

A neighborhood bistro site with live menus, reservations, and a lunch-rush-proof mobile experience.

Coffee · 2026

North Line Coffee

A roastery relaunch with wholesale ordering, subscriptions, and a new brand identity.

Wellness · 2026

Fulton & Ivy

An herbalist studio with class booking, ingredient library, and a waitlist that doesn't leak.

Boutique D2C · 2026

Maison Rue

A custom Shopify store for a Brooklyn perfumery — built around story, not templates.

Questions I get

Straight answers.

Why not just use Wix or Squarespace?

You can — and for some businesses, it's fine. But when your template starts limiting how customers find you, how fast pages load, or how your brand feels, you're stuck. Muntin gives you a real, custom-coded site without the DIY ceiling.

Isn't a real developer expensive?

Agencies are. A single developer-manager isn't. Muntin builds on modern tools that cut the cost of custom work without cutting quality — starting at $2.5k for a launch-ready site.

What happens after launch?

Every client is offered a Care Plan. For a flat monthly fee you get hosting, backups, monitoring, security updates, content edits, and priority response — all from the same person who built your site.

Do I own my site?

Yes, completely. Your code, your domain, your content. No proprietary lock-in, no multi-year contracts. If we ever part ways, you keep everything.

How long does a build take?

Starter builds launch in 2–3 weeks. Signature builds, 4–6 weeks. Commerce builds, 6–10. I only take on as many projects as I can fully commit to — usually two active builds at a time.

Can you handle something more complex later?

Yes. Muntin starts with marketing sites and restaurant builds, but the stack scales up to e-commerce, integrations, and more complex applications as you grow. You don't outgrow your web partner six months in.

Let's build something

Tell me about your business. I'll tell you what your site could do.

A 20-minute call, no pitch deck, no pressure. You'll leave with a clear sense of what's possible and what it would cost — whether you hire me or not.

A web studio of one

Custom websites for small businesses, built and cared for by one person.

Muntin Digital is a fully-remote studio for restaurants, local businesses, and growing brands. You work with me directly — not a dashboard, not a project manager — and I design, build, and maintain your site end-to-end.

You'll be working with Don, not a ticket queue.
Typical reply time: under 4 hours, Mon–Fri.
mun·tin / noun the connective tissue of a window
Trusted by kitchens, counters, and corner shops
Olive & Ash Fulton Kitchen North Line Coffee Maison Rue Six & Vine
The gap Muntin fills

There are two ways to get a website.
Neither works for most small businesses.

DIY builders trade quality for convenience. Traditional agencies are priced for enterprises and treat small clients as an afterthought. Muntin is the third option — real engineering, real relationships, built for the way small businesses actually run.

DIY Builders

Wix, Squarespace, GoDaddy
  • Template-limited, generic by design
  • Slower on mobile, worse for SEO
  • You do the work — and the troubleshooting
  • Help center articles instead of a human

Traditional Agencies

$15k–$100k+ builds
  • Priced for enterprise, not main street
  • Project managers, contractors, handoffs
  • Hourly retainers after launch
  • You're a small fish in their pipeline

Muntin Digital

$2.5k–$15k build · from $125/mo care
  • Custom-coded, fast, mobile-first
  • One developer-manager, end-to-end
  • Monthly care plan — a real person, every time
  • You own your site. No lock-in, ever.
What you get

Three ways to build. One relationship.

Pick the build that fits today. Every project ends with a launch — and the option to stay on a Care Plan so it keeps getting better, not worse.

Marketing Site

Starter

$2,500–$4,000

A custom 3–6 page site, launched in 2–3 weeks. Perfect for owners who need to stop apologizing for their website.

  • Custom design, mobile-first
  • SEO-ready on day one
  • Contact & newsletter forms
  • Google Analytics & search console
  • Domain & launch support
Full Build

Signature

$5,000–$9,000

Everything in Starter, plus a lightweight CMS, integrations, and polish. The package most restaurants and local brands need.

  • Editable CMS for menus, posts, hours
  • Reservations, ordering & booking integrations
  • Copy polish & photo curation
  • Launch plan & training session
  • 30 days post-launch support
Online Store

Commerce

$8,000–$15,000+

For boutique brands outgrowing a drag-and-drop store. Shopify or headless, built around your actual products and flow.

  • Custom Shopify or headless build
  • Product data, variants, shipping rules
  • Email capture & abandoned cart
  • Analytics & conversion tracking
  • 60 days post-launch support
How we work

Four steps.
No mystery, no middle layer.

01

Conversation

A 20-minute call. I ask about your business, your goals, and your frustrations with your current site. You ask anything.

02

Proposal

Within 48 hours, a written plan. Scope, timeline, price, and exactly what we'll launch — in plain English.

03

Build

I design and build. You see progress weekly. Feedback happens in shared previews, not in meetings you don't have time for.

04

Launch & care

We launch together. If you stay on a Care Plan, I keep your site fast, secure, and up to date — indefinitely.

Care Plans

Launching a site is easy.
Keeping it good is the hard part.

Most small business sites rot because nobody owns them after launch. A Care Plan means someone always does — the same person who built it.

Essentials

$125/mo
  • Fast, monitored hosting
  • Daily backups
  • Security & dependency updates
  • Uptime alerts
  • Email support (48h)

Concierge

$350/mo
  • Everything in Standard Care
  • Up to 5 hours of content & feature work
  • Monthly strategy call
  • SEO & local search tuning
  • Direct phone & text access
About

A muntin is the slender strip that holds a window together.

Small, quiet, and the reason the whole thing stands up.

I'm Don. I started Muntin Digital because I kept watching small business owners get stuck between two bad options — DIY builders that trade quality for convenience, and agencies priced for enterprises that treat them as an afterthought.

I build custom websites end-to-end, one client at a time, and then I stick around. That's the whole idea. No ticket queues, no handoffs, no dashboards you have to learn. Just a real person holding the pieces together.

— Don

Selected work

A few recent builds.

Placeholder case studies — swap in your real projects as you launch them. Each card will link to a full write-up.

Restaurant · 2026

Olive & Ash

A neighborhood bistro site with live menus, reservations, and a lunch-rush-proof mobile experience.

Coffee · 2026

North Line Coffee

A roastery relaunch with wholesale ordering, subscriptions, and a new brand identity.

Wellness · 2026

Fulton & Ivy

An herbalist studio with class booking, ingredient library, and a waitlist that doesn't leak.

Boutique D2C · 2026

Maison Rue

A custom Shopify store for a Brooklyn perfumery — built around story, not templates.

Questions I get

Straight answers.

Why not just use Wix or Squarespace?

You can — and for some businesses, it's fine. But when your template starts limiting how customers find you, how fast pages load, or how your brand feels, you're stuck. Muntin gives you a real, custom-coded site without the DIY ceiling.

Isn't a real developer expensive?

Agencies are. A single developer-manager isn't. Muntin builds on modern tools that cut the cost of custom work without cutting quality — starting at $2.5k for a launch-ready site.

What happens after launch?

Every client is offered a Care Plan. For a flat monthly fee you get hosting, backups, monitoring, security updates, content edits, and priority response — all from the same person who built your site.

Do I own my site?

Yes, completely. Your code, your domain, your content. No proprietary lock-in, no multi-year contracts. If we ever part ways, you keep everything.

How long does a build take?

Starter builds launch in 2–3 weeks. Signature builds, 4–6 weeks. Commerce builds, 6–10. I only take on as many projects as I can fully commit to — usually two active builds at a time.

Can you handle something more complex later?

Yes. Muntin starts with marketing sites and restaurant builds, but the stack scales up to e-commerce, integrations, and more complex applications as you grow. You don't outgrow your web partner six months in.

Let's build something

Tell me about your business. I'll tell you what your site could do.

A 20-minute call, no pitch deck, no pressure. You'll leave with a clear sense of what's possible and what it would cost — whether you hire me or not.