Skip to Content
ArchitectureOverview

Primitive · Composition

The Aodann editor and the public renderer share one model: named compositions (CTA, Frame, Feature Grid) built from reusable primitives (Stack, Heading, Body, Action, …), driven by a declarative recipe stored as data.

This section is the durable reference for that model. It complements the working code in packages/page-renderer and apps/editor, and it grows as understanding does.

Where to start

  • Learning Log — running discussion of questions about the model, with answers. The page evolves as new questions land.
  • Interactive map — clickable diagram of clusters and files. Hover anything to add a comment; the map writes answers back via the doc itself.

The shape, in one paragraph

A composition (CTA, Frame, Feature Grid) is described once as a recipe — a tree of layout nodes (Stack, Cluster, Grid) with slot leaves that bind to fields on saved data (node.props). One runtime walks that recipe and renders it twice: once with editable controls for the editor, once with read-only output for the public renderer. The recipe is the single source of truth for both surfaces.

Status as of 2026-05-29

  • Frame, CTA, and Feature Grid migrated to the shared recipe runtime.
  • Hero, ProsePanel, MediaShowcase still bespoke, by design.
  • repeaterNode.tsx shrank from 2,023 → 592 lines as Feature Grid migrated.
  • Scope (topLevel vs frameChild) propagates via React context on the editor side and explicit arg on the public side (Next server components can’t use context).
  • Tokens layer is still hardcoded to Aretetic; formalization is deferred until site #2.
Last updated on