// Build log · Jun 20, 2026

How we built this entire website with AI

A behind-the-scenes look at building our whole site with AI doing the engineering and a senior person owning the calls. What worked, what broke, and how fast it really went.

By Waqas Muhammad · Founder & CEO

Modular blocks assembling into a web page through a pipeline, with one coral node marking human ownership

Everyone’s talking about AI building software right now, so I’ll skip the hype. The most honest thing I can do is show you how we built our own site this way, and what actually happened along the way.

We started with an empty repo. The AI did the building. Someone senior on our team owned every decision that mattered. A few days later, this is what we had.

And it wasn’t a one-page brochure. It’s a full site. A design system with its own components, a dozen-plus pages, working contact and careers forms, a job board that pulls from a spreadsheet, custom illustrations, and the blog you’re reading this on. Roughly two dozen pages, across about thirty small pull requests.

Honestly, the speed still surprises me. The calendar said a few days, but most of that was waiting between work sessions, not the work itself.

How it actually worked

The setup never really changed. The AI wrote the components, the pages, the styles, the data layer. It read our design rules, followed them, built the thing, ran the build, and checked its own output. My job, and the job of whoever was reviewing, was the judgment. What to build, what to skip, what “good” actually meant, and catching the things the AI got confidently wrong.

That second part is the whole point. The speed is the AI. The trust is having a person who knows what they’re doing stay in the loop. You really do need both.

Here’s a small example of the standard we held. Every post on this blog has to name a real author and ship with a real image, or the build just fails. We wired that into the code so it can’t slip.

content.config.ts
author: z.object({
name: z.string(),          // every post is personalized
role: z.string().optional(),
url: z.string().url().optional(),
}),
cover: z.string(),           // every post ships with on-brand media

Where a person earned their keep

The interesting bits weren’t where everything went smoothly. They were where the AI got something wrong and someone had to catch it.

Our contact form kept rejecting submissions with an error saying we were trying to use a paid feature we weren’t using. Total red herring. The real problem was a setting in the captcha script that quietly added a field the form backend misread. The fix was one line. Finding it meant ignoring the error message and reading what was actually being sent.

FormHandler.astro
<!-- load the free hCaptcha widget -->src="https://js.hcaptcha.com/1/api.js"src="https://js.hcaptcha.com/1/api.js?recaptchacompat=off"

Wiring up the forms turned up another one. The service we picked charged for domain-locking and file uploads, and an AI can’t decide whether that’s worth paying for. That’s a business call about cost and risk, so we made it ourselves and stayed on the free tier with a couple of free anti-spam tricks instead.

There were taste calls too. When we added a “book a consultation” button, the easy move was a second bright button fighting the first one for attention. We have a rule against that, so we kept one and quietly made the other a text link. A model won’t make that call for you.

The boring stack, on purpose

We kept the technology deliberately unexciting. Astro for a fast static site, Tailwind for styling against our own tokens, data resolved when the site builds instead of a live backend, and our own illustrations and code snippets for visuals rather than stock photos. Boring, durable, cheap to run. That’s a feature, not an apology.

Built to actually get found

One thing I care about more than most people expect. A site nobody can find isn’t worth much, so this one is built for search and for the AI assistants people increasingly ask instead of Googling. Every page carries structured data so machines know what it is. The HTML is clean and quick. There’s a sitemap and an RSS feed. And we write in plain, direct answers, because that’s what an AI tends to quote back to whoever asked. None of that was bolted on at the end. It’s baked into how every page gets written.

So that’s the honest version. AI for the heavy lifting, a person for the judgment, shipped fast. If you ever want the full walkthrough of how to do this yourself, design system and all, we wrote it down and we’re happy to share it.

Written by Waqas Muhammad · Founder & CEO. Connect →

← All insights

Building something where this matters?

Get a structured estimate in two business days.

Get a quote