§ 01 / The page-builder paradigm

The page-builder
is the wrong layer.

A page-builder runtime — Elementor, and the wider drag-and-drop tradition — paints layout into a database and ships it as opaque HTML. The block-native paradigm renders deterministic JSON manifests, in Gutenberg, server-side. The difference is structural — and it shows up everywhere.

On the left · the incumbent

The page-builder
paradigm.

Elementor and the page-builder tradition: a drag-and-drop canvas layered on top of WordPress, with its own widget runtime, its own serialisation, and its own competing notion of what a page is.

On the right · what Atlas does

The block-native
paradigm.

One Gutenberg block. Deterministic JSON manifests, rendered server-side. Static chrome ships zero JS; islands hydrate only where marked.

Build time

Authoring happens in a builder canvas — Elementor, or any of its peers — by dragging widgets and tweaking panels. Configuration sprawls into nested option tabs. Two pages with similar layouts diverge silently because the structure underneath is unreadable.

Visual, opaque, unrepeatable

Author edits one block inside Gutenberg. The block reads a structured manifest. The same layout, applied twice, is the same bytes twice — because it is the same JSON twice.

Structured, legible, repeatable
Output

Page-builder markup is generated at render time by a third-party runtime — wrapper divs, helper classes, and inline styles the author never wrote. The builder owns the HTML; the theme is just where it lands.

Runtime-coupled HTML

Markup is rendered server-side from the manifest, as native Gutenberg block output. Static chrome ships as plain HTML with no hydration cost. JavaScript only loads for islands the manifest explicitly marks.

Deterministic, hydration-light
Portability

Page-builder layouts live in post meta as a proprietary serialisation — tied to the builder's widget versions, the theme builder, and the add-on plugins layered on top. Template export is partial. A site built this way is, in practice, married to its builder.

Locked to the builder

Manifests are plain JSON, version-controlled in git. Diff them in pull requests. Move them between sites. Read them in any editor. Layout is no longer trapped in the database.

Git-native, diff-able
Source of truth

The builder canvas is the source of truth. To know what a page renders, you open it in the builder. There is no document upstream of the rendered page that a developer can read end-to-end.

The canvas, only the canvas

The manifest is the source of truth. It lives in your repository alongside the rest of the codebase. The Gutenberg editor is a view onto it, not the only place it exists.

JSON in the repo
Failure mode

Deactivate the builder plugin and pages collapse into shortcodes, raw markup, or a blank canvas. The site is hostage to the runtime; migrating away from a page builder is a project, not a checkbox.

Hostage to the runtime

Deactivate Atlas and the block degrades to plain HTML. No theme rewrite required. The page does not vanish; it simply loses the dynamic shell around its content.

Graceful, reversible
Cost over time

Every page accumulates one-off CSS overrides, nested section wrappers, and bespoke widget settings under the builder's panel system. Two years in, no one can confidently change a heading style across the site without breaking a template somewhere.

Entropy compounds

Manifests compose, diff, and refactor like the rest of your codebase. A change to the schema is a pull request. Site-wide edits are a find-and-replace across JSON, reviewable before they ship.

Refactorable like code

One block. Manifests in git. Server-rendered HTML. The page builder was the wrong layer all along.

Install Atlas