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

tsx
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