Marketing site, dashboard, mobile app - all of it wired to the same components, so nothing drifts out of sync as you grow.
4.9
Avg. rating
12k
Teams
99.98%
Uptime
Drop in a film, a product loop or a screen recording. The frame fades into the page instead of sitting on top of it.
Now playing
How Meridian rebuilt checkout in 6 weeks
-42%
Faster time to first paint
+2.7x
More demo requests
0
Layout shifts shipped
A snap gallery keeps six projects inside one screen height instead of six scrolls.
Drag or scroll →
Full-bleed cards break the grid so a long page still has a rhythm.
01 - 04
Each card pins under the header as the next one arrives, so the list stays short however much there is to say.
Pick a section, drop it in, edit the copy. The preview is the page - there is no second build step waiting to surprise you.
Headers, footers and buttons live in globals, so a change lands everywhere at once instead of in forty places.
Contrast, focus states and reduced-motion behaviour ship with the components. Your audit gets shorter, not longer.
A scroll-linked scale is CSS-only, so it costs no JavaScript and stops the moment a visitor asks for less motion.
Frame by frame
Every component is checked at four breakpoints before release
A great homepage answers three questions before the visitor scrolls once: what is this, who is it for, and what happens if I click.
Everything else on the page exists to support those three answers. Sections that do not earn their place get cut, which is why our own landing pages run to six blocks and not twenty.
An animated conic border marks a card as interactive without adding noise to the copy.
01
Spacing, colour and type set once, then applied by every block on the site.
02
One header, one footer, edited once and merged into every page.
03
Every save is a restore point, so a bad afternoon stays reversible.
Hotspots turn one styled photograph into a shop. Hover or tab to each pin for the detail.
One decorative layer, one slow sweep. It reads as depth rather than decoration, and it stops for reduced-motion visitors.
Use this backgroundThe grid fades at the edges, the spotlight breathes above the fold, and the grain stops everything looking too clean.
Two lanes, opposite directions, paused the instant anyone hits the button.
"Two weeks from kickoff to a site our sales team actually links to." - Dana W.
"The blocks look like an agency built them. Nobody believes it was us." - Marcus L.
"Our audit went from 200 issues to 6. That paid for the year." - Priya R.
"Two weeks from kickoff to a site our sales team actually links to." - Dana W.
"The blocks look like an agency built them. Nobody believes it was us." - Marcus L.
"Our audit went from 200 issues to 6. That paid for the year." - Priya R.
"+31% completed orders after the checkout rebuild." - Sofia A.
"Support answered with a working example in the same thread." - Tom B.
"We finally stopped maintaining two design languages." - Amara O.
"+31% completed orders after the checkout rebuild." - Sofia A.
"Support answered with a working example in the same thread." - Tom B.
"We finally stopped maintaining two design languages." - Amara O.
Start free today. No credit card, no setup calls, no waiting for a sales rep.
Trusted by 48,000+ teams worldwide
The same request in four languages. Pick the one your team actually runs.
curl https://api.buildhub.co/v1/pages -H "Authorization: Bearer $BUILDHUB_TOKEN" -H "Accept: application/json"
const res = await fetch('https://api.buildhub.co/v1/pages', {
headers: { Authorization: 'Bearer ' + process.env.BUILDHUB_TOKEN }
});
const pages = await res.json();
$pages = Http::withToken(env('BUILDHUB_TOKEN'))
->get('https://api.buildhub.co/v1/pages')
->json();
import os, requests
pages = requests.get(
"https://api.buildhub.co/v1/pages",
headers={"Authorization": f"Bearer {os.environ['BUILDHUB_TOKEN']}"},
).json()
Rate limits
600 requests per minute per token, with a 429 and a Retry-After header when you exceed it.