Custom records

A page designed once, as many pages as records.

Projects, articles, recipes, team members, properties to let: you declare the fields, you design the page in the editor, and each completed record becomes a full page, with its own address and search listing.

1. The model: which fields

A record model declares the common shape: a title and a main image for all, then the fields you choose. Five field types cover almost everything.

text short text → a duration, a city, a displayed price
rich_text rich text → a formatted description
image image → a photo from the media library
video video (address) → YouTube, Vimeo
button button or link → to a page, an address, a questionnaire

Example: a « Project » model

POST /api/agent/v1/modeles/creer/
{ "nom": "Project", "slug": "project",
"champs": [
{ "code": "place", "libelle": "Place", "type": "text" },
{ "code": "year", "libelle": "Year", "type": "text" },
{ "code": "description", "libelle": "Description", "type": "rich_text" },
{ "code": "photo", "libelle": "Photo", "type": "image" }
] }

2. The template: what it looks like

The template is an ordinary page, built in the editor with the same sections, rows and blocks as the rest of the site. Wherever a field's value should appear, you write its code in brackets: [%place%], [%description%]. At render time, each record pours its values in.

<h1>[%title%]</h1>
<p class="place">[%place%] — [%year%]</p>
[%description%]

  1. Changing the template changes every record at once: a new layout applies to a hundred projects without reopening a single one.
  2. A field left empty disappears cleanly: its slot renders an empty string.
  3. The template has no address of its own: opened directly, it answers 404. The records are what is public.

3. The record: the content

A record fills in the model's fields. It has its own address, under /co/<model>/<slug>/, and its own search metadata: each project appears in Google with its own title and description, not the template's.

POST /api/agent/v1/objets/creer/
{ "modele": "project",
"titre": "Solid oak kitchen",
"valeurs": { "place": "Rennes", "year": "2026",
"description": "<p>…</p>", "photo": 12 } }

PATCH /api/agent/v1/objets/42/
{ "metadonnees": { "titre": "…", "description": "…" },
"publie": true }

  1. A record is born as a draft; publishing it is a separate step.
  2. Correcting one field leaves the others alone: what you don't mention doesn't change.
  3. One version per language, if the site is multilingual: a button on the record's screen creates its English version.

Displaying them, selling them

  1. A grid or a carousel placed on any page shows a model's published records. Publishing a new record makes it appear, without touching the page.
  2. A product attaches to a record: price, VAT, stock, reference. The record stays the content, the product carries the sale. The product type says what the purchase entails — a parcel to ship, a course to open, a questionnaire to give.
  3. Search listing included: published records go into the sitemap and llms.txt.

The order to follow

product type → record model → template page → record → product
↳ metadata

The online storeThe page editor