What I Learned Building a Website Builder (It's Harder Than It Looks)
Before I built Chavica, I thought website builders were a solved problem. Wix exists. Squarespace exists. How hard could it be?
Very hard, as it turns out. Building a visual editor is one of the most technically and UX-complex things I've ever done.
The editor is the whole product
Everything else in a website builder — templates, publishing, billing — is support infrastructure. The editor is what users actually experience. If it's slow, buggy, or confusing, nothing else matters.
I spent six weeks on the editor before building anything else. Drag handles. Drop zones. Block settings panels. Undo/redo. Keyboard navigation. Each of these sounds simple. None of them are.
JSON as the source of truth
Every page in Chavica is a JSON tree. A block is an object with a type, settings, and children. The editor renders this tree. Publishing converts it to static HTML. Templates are just pre-filled JSON.
This decision paid off massively. Undo/redo is just JSON snapshots. Version history is a list of JSON diffs. Duplicating a block is a JSON clone. When your data model is right, features become easy.
Get the data model right first. Everything else follows from it.
Publishing is harder than editing
You'd think the hard part is the visual editor. It's not. Publishing is. Converting a JSON tree to a fast, SEO-ready, mobile-responsive HTML page — consistently, for every combination of blocks a user might create — is genuinely tricky.
I have a rendering pipeline that takes the JSON, applies the user's theme, injects content, and outputs HTML + CSS. Then that gets deployed to Vercel via their API. The whole thing needs to complete in under 5 seconds or users think something broke.
What I'd do differently
- —Start with 5 blocks, not 20. Users don't need infinite options — they need good defaults.
- —Build the admin dashboard earlier. Seeing what users are actually building told me more than any user interview.
- —Price higher from day one. Freemium attracts users who never convert. Charge something, even if it's small.
Chavica taught me that product complexity compounds. Every feature you add touches the editor, the publisher, and the billing. Scope ruthlessly.