Personalization
Server-side targeting on attributes you declare.
Attributes
Personalization runs on attributes your app already knows: plan, region, account age, whatever you pass. Declare them once in workspace settings, with example values, and they become pickable in the editor's rule builder rather than free-form strings authors have to spell correctly.
Rules
A block can carry a rule: show when plan is pro, hide when region is EU. Rules are evaluated at delivery, server-side, before the HTML is cached. The visitor never receives content meant for someone else, and there is no client-side flicker.
Previewing
The editor's Preview as a visitor control sets attributes for the canvas. With none set, personalized blocks stay visible but dimmed and labelled, so authoring a page does not mean hunting for blocks that vanished. With attributes set, the canvas shows exactly what that visitor gets.
Passing attributes
const entry = await fetchOneEntry({
model: 'page',
publicKey: KEY,
url,
attributes: { plan: user.plan, region: geo.country },
})Every distinct combination is a distinct cache key. The editor tracks the total and warns before it multiplies past the point where the cache stops helping.
All documentation · llms.txt · llms-full.txt · contentbind.com