Pages, Blocks & Posts
Content is managed in Payload via Pages, Posts, and Categories. Pages compose 19 blocks via the page builder; posts are a traditional title/slug/content blog model. Both are tenant-scoped — each site has its own pages, posts, and categories.
Pages
Pages are the primary way to build a tenant’s frontend. Each page has a slug, SEO metadata, and a layout field that holds an ordered list of blocks.
The block library (19 blocks)
All blocks live in src/domains/cms/payload/blocks/. Every block shares a Section tab (variant, padding, content header).
Layout
| Block | Slug | What it does |
|---|---|---|
| Hero Section | hero-section-block | Full-width hero with optional media |
| Logocloud Section | logocloud-section-block | Grid or row of logos |
| Feature Section | feature-section-block | 2- or 3-column feature grid (Lucide icons) |
| Feature Showcase | feature-showcase-section-block | Alternating media + text sections |
| Bento Section | bento-section-block | Fixed bento grid layout |
Content
| Block | Slug | What it does |
|---|---|---|
| Content Block | content-block | Lexical rich text |
| Content Section | content-section-block | Rich text body with sticky image |
| Media Block | media-block | Single image/video with optional caption |
Commerce — blocks with brains (Stripe-connected)
| Block | Slug | What it does |
|---|---|---|
| Pricing Section | pricing-section-block | Pulls live Stripe products, monthly/annual toggle, real checkout |
| Product Grid | product-grid-block | Live Stripe prices, checkout |
Browse — driven by the data layer
| Block | Slug | What it does |
|---|---|---|
| Explore Section | explore-section-block | Per-tenant search and faceted browse over your records — cards (grid or list), table, or map. See Data → Search & Explore. |
| Records Section | records-section-block | Curated archive of records — latest or by taxonomy term, grid or list layout. |
| Taxonomy Section | taxonomy-section-block | Renders a taxonomy’s terms as chips, each linking to its term page. |
Generate — blocks with brains (paywall-connected)
| Block | Slug | What it does |
|---|---|---|
| Generation Section | generation-section-block | User-facing AI generator form behind the credit paywall. See AI Generation. |
Social proof
| Block | Slug | What it does |
|---|---|---|
| Testimonial Section | testimonial-section-block | Quote, author, role, avatar |
| Blog Section | blog-section-block | Live posts query, grid or list |
Engagement
| Block | Slug | What it does |
|---|---|---|
| FAQ Section | faq-section-block | Accordion |
| CTA Section | cta-section-block | Title + description + buttons |
| Newsletter Section | newsletter-section-block | Lead capture + UTM tracking + welcome email |
Shared section controls
Every section block has a Section tab:
- Full width — stretch to the viewport edges
- Variant —
background,muted,primary,secondary - Padding — top/bottom toggles
- Separators — top/bottom divider lines
- Content header — optional eyebrow, title, description, buttons above the block’s main content
Drafts and autosave
Pages have drafts with autosave and scheduled publishing. Up to 50 versions per page. Live preview is wired via @payloadcms/plugin-live-preview.
SEO
The SEO tab (via @payloadcms/plugin-seo) overrides meta title, description, and preview image. If empty, the tenant’s defaults are used. JSON-LD is auto-emitted on detail pages and per record (see Data → Search & Explore).
Composing pages
Two paths:
- Admin — drag blocks in the page builder UI.
- CLI / agent —
shipmore page block-schema [type]discovers a block’s shape (omit[type]to list all blocks), thenshipmore page buildcomposes the page from a JSON spec — the same path the admin page builder writes to:
shipmore page block-schema explore-section-block
shipmore page build --tenant ramen.example.com --slug home --title "Browse Ramen Shops" \
--blocks '[{"type":"explore-section-block","content":{"title":"Browse","pageSize":20}}]'Pass blocks inline via --blocks or from a file via --blocks-file. Pages build as drafts by default; pass --no-draft to publish immediately. page build returns the correct tenant-scoped URL — use response.url verbatim, don’t reconstruct it.
Posts
Posts are a blog content type:
- Title + slug (auto or manual)
- Lexical rich text
- Hero image
- Category (relationship)
- SEO tab (same as pages)
- Drafts with autosave + scheduled publishing
Posts are listed at /posts and rendered at /posts/[slug]. Editorial search across posts is separate from the per-tenant search over your data records.
Categories
Tenant-scoped labels for organizing posts. Each category has a title and a slug. Assign to posts to enable filtered views.
Revalidation
When a page, post, tenant, or category is created or updated in the admin, the app automatically revalidates affected frontend routes. Changes appear without a manual redeploy or cache purge.