Architectural
We draw the grid before we draw anything else. Angles are 45° or 90°. Measures are multiples of 8.
Built for SaaS designs and ships websites, product UI and brands for SaaS companies that just raised. Our mark is a solid square with two 45° cuts. This guide is the rest of the system, built the same way.
01
We sell to people who use Linear, Vercel and Stripe before lunch. They notice kerning, they distrust adjectives, and they've raised money on a deadline. The brand talks to them like a senior colleague would.
We design and build 3D and isometric websites for SaaS companies that just raised. Live in 21 days, built to convert.
We draw the grid before we draw anything else. Angles are 45° or 90°. Measures are multiples of 8.
Solid shapes, no hairlines. If a detail disappears at 16px, it was never structural.
Shipped like software: versioned, measured, on a sprint clock. Our guarantee is a date, not an adjective.
Founders, heads of marketing and design leads at Seed to Series B SaaS companies: AI, devtools, fintech, data infrastructure. Ten to 150 people, in the US, UK and EU, usually a few weeks after a round closes.
What they want from us is short: a site that looks like the company they're becoming, shipped before the launch post goes out.
−We're a passionate team of creative experts crafting stunning digital experiences.
+We design and build SaaS websites. Live in 21 days.
−Unleash your brand's full potential 🚀
+Your Series A site shouldn't look like your seed deck.
−Our cutting-edge, AI-powered process delivers amazing results.
+A senior designer leads. An AI production pipeline handles the repetitive parts. You get both speeds.
−Don't hesitate to reach out!
+Book a 20-minute sprint call.
02
Three pieces cut from one square: a top block, a base block and a launch arrow. The full-height left side is a stem, so the mark reads as a letter, not a shape. Select a piece to inspect it.
The artboard is the clearspace. Keep x free on every side, where x is 24 units on the 160 artboard, or 15% of the mark's outer size. Nothing enters it: not text, not edges, not other logos.
UI, avatars and app icons.
16px on screen, 6mm in print. The cuts hold at 16px because they sit on whole pixels at that size. Below 16px, use nothing at all rather than a blurred mark.
Concrete on carbonDefault dark
Carbon on concreteDefault light
Carbon on signalLaunch moments only
Signal on carbonApp icon, social
Signal on concreteNot allowed:
no-rotateThe arrow points one way. Never rotate or mirror the mark.
no-stretchScale proportionally. The 45° angles are the identity.
no-split-colourOne colour per mark. Signal pieces live in motion and patterns only.
no-gap-changeEvery gap is 8√2. Tighter gaps fill in at small sizes.
no-outlineThe mark is solid. Outlines are hairlines, and we don't do hairlines.
no-effectsNo gradients, glows, bevels or drop shadows.
no-roundCorners stay sharp. Rounding belongs to the app-icon container, never the pieces.
min-contrast3:1 against the background or more. Signal on concrete fails.
03
Two neutrals do the work. Signal is the 2%: one action, one highlight or one moving piece per view. Click any value to copy it.
Ratios are computed live from the token values (WCAG 2.2). AA body text needs 4.5:1; the mark and large text need 3:1.
Rule that falls out of the numbers: text on signal is always white, never carbon. White on signal is ; carbon on signal is . On carbon, signal text steps up to Signal 400 .
04
The geometry is the loud part, so the type stays quiet. One grown-up sans for everything people read, and a mono that only appears where something is measured.
Headlines, interface, body. Variable: weight 400–700, width 75–100. Open source (OFL).
Measurements, token names, code, version numbers. Never paragraphs, never headings. Open source (OFL).
Your Series A site, live in 21 days.
displayBuilt to convert
64 / 1.04 / −0.035em / 600h1Live in 21 days
48 / 1.08 / −0.03em / 600h2Sprint scope and pricing
32 / 1.15 / −0.02em / 600h3What you get in week one
22 / 1.3 / −0.01em / 600body-lA senior designer leads every sprint. You see work on day three.
19 / 1.55 / 0 / 400bodyWe plan the page on an 8-unit grid, then cut away everything that does not help someone decide.
16 / 1.6 / 0 / 400captionFigure 4. Homepage hero at 1440 and 390.
13 / 1.45 / 0.005em / 500monov1.0.0 · 160 × 160 · 8√2
12 / 1.5 / 0 / 40005
The square the mark is cut from splits into six parts: the three pieces we keep and the three offcuts we remove. Every pattern is laid from those six parts on the same grid, with the same 8√2 gap. Move across the field; the pieces separate along their cuts.
Kept pieces, rotated in 90° steps, like cut stone on a yard. Our default texture for covers and banners.
Every tile keeps everything except the diagonal cut, so the cuts run unbroken across the field. Quiet enough to sit behind a headline in tonal.
A sparse field of arrows, all pointing the same way. For launches, release notes and anything that ships.
Top and base blocks turned against each other on a checkerboard. Dense and architectural; best as a border or a crop.
06
Icons are drawn on a 24 grid as solid shapes with a 2-unit gap, the mark's cut at icon size. No strokes, no rounded joins. Select one to see it on its grid.
07
We make 3D and isometric websites, so our own imagery is built the same way: real geometry, extruded and lit, never stock. This is the mark itself, the exact three pieces, extruded on a true isometric grid.
#F7F7F5#BFC1C1#5E6369#2863FB#113EBC08
Things move like heavy, well-made objects: they start from wherever they are, carry their speed, and settle without a bounce. Press a button twice and the piece turns around mid-flight.
spring.defaultresponse 0.5s, damping 1.0Anything that moves position: pieces, panels, the progress bar.
spring.quickresponse 0.35s, damping 1.0Small, frequent things: selection, toggles.
scroll.ramp40% of viewport heightScroll-linked moves finish over 40vh, so they follow the reader's speed.
fade.reduced160ms ease-out, opacity onlyWith reduced motion on, nothing travels. States cross-fade.
09
The mark sits on an 8-unit grid, and so does everything around it. Press G anywhere on this page to see the grid it's laid out on.
Desktop 144012 col · 24 gutter · 48 margin · 1360 max
Tablet 7688 col · 24 gutter · 32 margin
Phone 3904 col · 16 gutter · 20 margin
Every value is a multiple of 8, with 4 allowed inside components. Sections breathe at 128 on desktop and 80 on phones.
10
Clients meet us in small places: a browser tab, an avatar in a DM, the corner of a Loom. Every frame below is the real spec for that surface. Client names are fictional samples.
Taking 2 sprints for November
Websites for SaaS companies that just raised.
3D and isometric sites, live in 21 days, built to convert.
X@builtforsaas
LinkedInCompany page
Dribbble, ContraRounded square
Mark at 56% of the avatar, centred on the square, so circle crops never touch it.
Your Series A site still looks like your seed deck.
| Item | Amount |
|---|---|
| Website Sprint, 21 daysHomepage, pricing, 3 feature pages | $14,000 |
| Isometric illustration set6 scenes, source files | $2,400 |
| Total | $16,400 |
Live in 21 days or the next partnership month is free.
Halcyon AI
Website Sprint, handoff v3
Built for SaaSInbox
My issues
Halcyon sprint
Northwind sprint
Ship Halcyon homepage
Day 19 of 21Isometric hero, final render
DonePricing page copy review
DoneHi Priya, the staging link is up. Pricing and the isometric hero are in; we'll walk through both on Thursday's call.
11
Every file is generated from the same three paths you inspected in chapter 02. SVG for everything; tokens for code.
$ npx bfs-brand pull --all
Resolved 13 files from @builtforsaas/identity@1.0.0
Done. Patterns export from the generator in chapter 05.
First stable release. R1 3-Piece Arrow locked. Signal moves from orange to Electric Cobalt #2863FB, a sharper, cooler take on the classic SaaS blue that carries white CTA text. Type moves from Geist to Instrument Sans so we stop borrowing a client's typeface. Cut patterns, motion tokens and the application specs added.
R1 chosen from the logo exploration. Gaps cleaned to exactly 8√2; the arrow tip lands on the baseline.