The centred hero
One sentence, two buttons, dead centre. Forty times out of forty.
Nine pages, one system and zero cleanup, in a single file you edit rather than rebuild.
One-time payment, no subscription. Figma file included. $189 covers every site you will ever build with it.
Everything a studio site needs, bound in one book: a grid, a type scale, a palette and one easing curve.
Open it and the system lifts off the page. Buttons, fields, navigation and pricing, every state already drawn.
Each part flies to the page it belongs on, so nothing on the site is designed twice.
Not one page duplicated nine times. Nine layouts, each drawn for the job it actually has to do.
Open forty independent agency sites in a row and you start to see one site.
One sentence, two buttons, dead centre. Forty times out of forty.
Thin outlined icons, equal widths, and not one decision about hierarchy.
A violet haze near the top, doing no work at all.
Ten studios, ten price points, and a client who cannot tell them apart until the invoice arrives.
Nine pages, drawn as one system. Five of them run live below, each a finished layout with real copy in it, so the first thing you do after buying is edit, not build.
Unlimited licenceOn
The download is plain HTML with custom properties, the Figma file it was drawn in, and working Astro and Next ports. Nothing here is generated, and nothing needs a build step to open.
Point at a tile to nudge it, or pick one up and drag it out of the comb.Tap a tile to nudge it.
Every one of them is the same nine pages, drawn once.
It opens in a browser, edits in whatever you write code in, versions in Git as plain text, and deploys anywhere that serves static files.
One system.
Everywhere you work.
<!doctype html><html lang="en"><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Halden Row</title> <link rel="stylesheet" href="assets/umbra-site.css"></head><body> <h1 class="hero">We build the thing, not the deck.</h1></body></html>
We build the thing, not the deck.
The parts the nine pages are made from, designed as one system: one set of tokens, every state drawn, and the same thing in the drawing as in the code.
Radius, space and surface are values at the top of one file. Move them and the parts re-form with them, with nothing to rebuild.
Every family draws on the same tokens, so a button, a field and a pricing table stay related on every page. Hover the map to look closer.
Hover, focus, pressed, filled, error and disabled are designed rather than left to the browser, so a part behaves the same on every page.
Buttons, fields, navigation, cards, tables, accordions, marquee and pricing, all on one grid, one type scale and one set of tokens.
Six values, one grotesque, one spacing scale, one easing curve. If you have opened a design system before, this is the part that tells you whether one was actually made.
Colour — six values, a rule for each, and strokes drawn as white at 9%
Ink
The page, and true black rather than a dark grey. Everything else is a surface lifted off it.
Type — one grotesque, six sizes, set at what you will actually ship
Display 1
120 / 0.95 / −0.042em / 600
Carved once
Display 2
64 / 1.0 / −0.042em / 600
Nine finished pages
Display 3
40 / 1.06 / −0.035em / 600
A grid and a type scale
Body large
24 / 1.5
Used once per section, at most
Body
17 / 1.6 / 68ch
The measure is capped so paragraphs stay readable at any width
Small
13 / 1.5
Captions, fine print, field labels, licence notes
Spacing — ten steps, and nothing between them
Sections are 160 on desktop and 88 on mobile. Everything else is a step on this staircase. The dashed ones are the values people reach for and this scale leaves out: there is no 30, no 45, and no 100.
The layout, the motion and the WebGL sequence on this page are authored, not bolted on. They are the slowest parts of a build to get right, and they are the reason this is a file rather than a stack of screenshots.
Click a volume to open it and read what is inside.Tap a volume to open it and read what is inside.
Twelve columns, one gutter, one type scale. Every section is measured against the same lines, so a block you move still lands where the last one did.
GSAP and Lenis on one clock. One easing curve and one duration scale, with a reduced-motion path that was written first rather than patched on at the end.
A WebGL sequence that hands back to the DOM. A book opens under a lamp and nine pages, measured to the pixel, land on the real markup that was underneath them the whole time.
Designing a nine-page system from nothing is about forty hours of design and thirty of build, and that assumes you do not restart it twice, which you will. Put your own rate in and look at the number.
$6,650
to draw and build it yourself
Seventy hours at $95. Umbra is $79, which is fifty minutes of your time.
Founders who put Umbra live, in their own words, and the number that moved once they had.

Callum Reid
Founder, Halden Row
“We shipped it over a weekend and raised our project minimum from twelve to twenty-five thousand the same month. Nobody pushed back.”

Daniel Osei
Partner, Corvid & Sons
“Our proposal-to-close rate went from about one in five to one in three. Same deck, same people. The only thing that changed was where the deck was linked from.”

Ilse Brandt
Founder, Northsight
“I had been quoted eleven thousand for a site like this. It took two evenings, and the case study template is better than the one I was quoted for.”
The files are identical. The only difference is how many live sites you are allowed to put them on. Pull a tab to switch between them.
One live site. Your studio's, or one client's. Yours to keep, with updates for the life of this version.
Buy single licenceEvery site you build with it, for as long as you build them. Client work included. Reselling the template itself is not.
Buy unlimited licenceBoth are one-time payments. There is no subscription, no seat count, and nothing that stops working if you stop paying, because there is nothing to stop paying.
The six things people ask before they buy, filed where you can reach them. Pull a tab to read one.
Put it on one live domain, and that domain can be a client's. Client work on the single licence is fine as long as it stays one site. If you already know you will use it twice, the unlimited licence costs less than buying twice.
Yes, in both licences, and it is the file the site was drawn in rather than a redraw made afterwards. Colours and type are Figma variables mapped one to one onto the CSS custom properties, and the components are components, with their states as variants.
The markup is plain HTML with no framework assumptions and the CSS is custom properties, so porting is mechanical rather than interpretive. Working Astro and Next ports are in the download. It is not a Webflow template and it will not import into Webflow cleanly, so do not buy it for that.
Fixes and new components for this version are free for as long as the version exists, and arrive as a download link by email. If there is ever a version two it will be a paid upgrade at half price, and it will be a genuinely different system rather than this one with the spacing changed.
Within fourteen days, without explaining yourself, even though you have already downloaded it. The one thing to know is that if you have shipped a client site on it, take the unlimited licence rather than the refund, because a refund cancels the licence that site is running under.
Email, answered by the person who made it, usually inside a working day. It covers the template — the files, the ports, the Figma. It does not formally cover your build, though in practice that line has never once been the end of a conversation.
Volume 1
Twelve columns and one gutter inside a 1200 shell. The margins open from 20 to 64 with the viewport, the gutter from 16 to 24, and nothing else on the page is measured any other way.
Volume 2
One curve, cubic-bezier(0.16, 1, 0.3, 1): fast out of the gate and long into the stop, so nothing on the page ever lands with a bump.
const lenis = new Lenis({ duration: 1.0 });
lenis.on('scroll', ScrollTrigger.update);
gsap.ticker.add(t => lenis.raf(t * 1000));Reduced motion was written first. Every scrubbed sequence on the page sits on a static layout that works without it.
Volume 3
One book in one three.js scene, told in four acts: it lies closed under a lamp, opens, lets its parts lift off the title page, and gives up nine pages that land on the grid before the DOM takes over.