Blank · Start blank. Finish shipped.
Describe a site. Get one you own.
Real React, written into a real project. Read every file, connect your own database, point your own domain, and clone the repository whenever you want it elsewhere. Nothing here is a preview you cannot take with you.
100 credits free · no card
Before
A blank page.
No template to fight, no theme to override, no starting point somebody else chose for you. This is the part every other builder skips past.
Phase one
You describe it once.
One sentence, in plain language. No wireframe, no component picker, no brief. What it does not ask for is as much the point as what it does.
Phase two
It writes real files.
React and TypeScript into a real folder structure, against mock data through a seam that later talks to a real database. Open any file and read exactly what was written.
Phase three
Then it stops and asks.
The moment it needs to store something it halts and submits the routes and the tables for approval. There is no tool that can approve this — only a person. A frontend built against a schema nobody agreed to has to be rewritten when the real one arrives.
Phase four
And it ships.
Row Level Security on every table, metadata and a sitemap from the route table, and an accessibility audit measured inside the running page. Then a live URL, your domain, and the whole project pushed to your own repository.
Builder
Skill · design-system
Wrote app/layout.tsx
Wrote app/page.tsx
Saved assets/hero.jpg
propose_architecture
Applied 3 tables · RLS
Wrote seo.json · sitemap
Audit · 0 issues
Kissa
A room built around a pair of Altec horns and four thousand records. Bandra West, from six.
Reserve a seatWaiting for you
3 tables — sessions, bookings, records. Row Level Security on each.
01What you keep
Most builders hand you a preview. This hands you a project.
Every file, readable
React and TypeScript in a real folder structure. Open the Code tab and read exactly what was written — no compiled bundle, no black box, and the editor saves back.
Your database
Connect your own Supabase account. Tables land in your organisation with Row Level Security on every one, and you keep the data when you leave.
Your domain
Publish to a subdomain, or point a domain you already own. Hosted on our servers, or deployed to your own Cloudflare account for nothing.
Your repository
Push the whole project to GitHub in one commit, assets included. Nothing here is a preview you cannot take with you.
02Phase three of five
Then it stops and asks you.
The moment it needs to store something it halts and submits the routes and the tables for approval. There is no tool that can approve this. Only a person. A frontend built against a schema nobody agreed to has to be rewritten the moment the real one arrives — which is why so much generated software feels like a demo that cannot be finished.
The order is fixed in code rather than requested in a prompt, and the gate is not automatable: the build engine has no tool that can approve a schema.
Waiting for you
3 tables proposed, each with Row Level Security and a policy in the same statement.
- sessions
- bookings
- records
Anything not in the approved plan is refused rather than warned about.
03For the reader who will check
It writes code you would have written.
No compiled bundle, no proprietary component format, no black box. Typed React in a conventional folder structure, with the design and accessibility rules enforced by skills the build engine reads before it writes anything.
- 01Frontend — Routes, components, real copy, motion.
- 02Plan — It stops and asks before it stores anything.
- 03Backend — Only the tables you approved, each with Row Level Security.
- 04SEO — Metadata and a sitemap from the route table.
- 05Audit — Contrast, labels and tap targets, measured in the page.
import { useCollection } from "@foundation/data";
import { revealOnScroll } from "@foundation/motion";
type Session = {
id: string;
artist: string;
startsAt: string;
};
export default function Sessions() {
const { data, loading } = useCollection<Session>("sessions");
if (loading) return <SessionsSkeleton />;
return (
<ul className="grid gap-4">
{data.map((session) => (
<li key={session.id} className="reveal">
<h3>{session.artist}</h3>
<time dateTime={session.startsAt}>
{formatDate(session.startsAt)}
</time>
</li>
))}
</ul>
);
}And it is safe to run
Every generated site is served from its own hostname, and this application is unreachable there. So nothing a generated page contains can read your session — or anybody else’s. How the isolation works.
04Hosting and price
We host it, or you do.
Hosting is included on every plan, not sold separately. Paid plans add your own domain, and the top two give you a dedicated instance nobody else’s traffic can affect — or deploy to your own Cloudflare account and pay us nothing for it.
Shared hosting
Served from a blank.build subdomain on shared infrastructure.
Included free
Shared hosting, your domain
Your own domain on our shared infrastructure. Fast, and it shares capacity with other sites.
From ₹499 a month
Private hosting
A dedicated instance for your sites. Predictable performance that nobody else's traffic can affect.
From ₹1,999 a month
Start on 100 free credits.
One credit is one build on a fast model. No card, and paid plans from ₹499 a month when you need more.
Start with a blank page.
100 credits and 3 projects, hosted on a subdomain. Enough to finish one real site and decide for yourself.