Content Types

Define your own structured collections — no database required.

Structured content, no database

Content Types let you define your own collections — team members, FAQs, product specs, anything with repeating structure — without a SQL database anywhere in the picture. Each entry is stored as an Astro content-collection item, compiled into your site the same way pages are.

Ten field types

Every field on a content type is one of:

TextTextareaRich textNumberBooleanDateURLImageSelectTags

Reserved slugs

A content type's slug can't shadow anything Zitegen already uses: blog, api, admin, media, assets, public, _astro are all off-limits, and slugs and field keys both follow a strict, URL-safe pattern.

Draft & published status

A content type itself — not just its individual entries — can be set to draft or published. A draft type's entire URL section, and every one of its entries regardless of that entry's own status, is hidden from your live site until you publish the type. Handy for building out a whole new section (Recipes, Team Members, whatever) behind the scenes before it's ready to launch.

Finding a type or an entry

Both the content types list and each type's entries list are searchable, filterable by draft/published status, and paginated at 25 per page in the dashboard. These are editing controls for you while you work — separate from the sort and filter controls you can give visitors on a published page, described below.

Displaying entries

Add a filterable collection to any page to list entries as a grid or list, with sort and filter controls your visitors can use. Very large collections get a row-count warning so a page doesn't quietly balloon.

Detail-page templates

Every content type — including the built-in blog — has its own detail-page template: a real, canvas-editable layout that every entry of that type renders through. Bind text to a field with {{fieldKey}} placeholders (title, a custom field, whatever the type has), and mark where the entry's body and table of contents render — style it once in the visual editor and every entry picks it up automatically.

A content type can have several saved template variants with exactly one active at a time, and a locale can have its own variant entirely — a genuinely different layout for a translated audience, not just translated text, falling back to the default template when no locale-specific one exists. Templates are editable from the dashboard, from an MCP-connected AI agent, or by asking the AI chat panel directly.

While you're editing a template, the canvas picker lets you preview it against any real published entry — {{fieldKey}} placeholders and the body/table-of-contents markers resolve to that entry's actual content instead of showing empty tokens, so you can see exactly what the layout will look like. You're always editing the shared template, never that one entry — double-clicking a bound field still edits its underlying {{fieldKey}} token, and the canvas snaps back to showing the live entry's data as soon as you commit the change.