> ## Documentation Index
> Fetch the complete documentation index at: https://firespark.cloud/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# CMS

> Structured content templates you attach to brands, stores, menus, and catalog items.

**CMS** in Fire spark is not a website builder. It is a way to define **reusable content templates** — the fields marketing needs (headlines, images, short copy) — and attach them to commercial objects like a brand or a store. Operations data (menus, prices, hours) still comes from your POS or RMS; CMS handles **presentation and storytelling** on top.

## Templates and entities

Every CMS template belongs to exactly one **entity type**. That type tells you where the template can be assigned and where the content will appear in customer-facing channels.

| Entity type  | What it represents         | Typical marketing use                                                          |
| ------------ | -------------------------- | ------------------------------------------------------------------------------ |
| `BRANDS`     | A customer-facing brand    | Tagline, brand story, logo treatments, tone for multi-brand groups             |
| `STORES`     | A physical location        | Store hero, local promotions, pickup instructions with personality             |
| `MENUS`      | A menu as customers see it | Menu intro, seasonal campaign banner, legal or allergen disclaimers            |
| `CATEGORIES` | A menu section             | Section header, category image, “chef’s picks” copy                            |
| `PRODUCTS`   | A sellable item            | Long description, lifestyle photo, badges (“new”, “spicy”) beyond catalog sync |

You create the **template** once (which fields exist and their type). Your team fills **values** per brand, store, menu, category, or product in the dashboard. Channels read that content through the API when a template is linked.

## Field types (what marketers actually edit)

| Type     | What you use it for                                                                                   |
| -------- | ----------------------------------------------------------------------------------------------------- |
| `TEXT`   | Short copy — titles, subtitles, taglines, one-line promos                                             |
| `SELECT` | Controlled choices — layout variant, campaign theme, yes/no toggles presented as options              |
| `IMAGE`  | Hero banners, logos, category art, product photography for the channel (not the kitchen ticket image) |
| `LIST`   | Bullet lists — features, ingredients highlights, “why order here” points                              |

Fields can be required or optional and support localized labels so the same template works in more than one language.

## How assignment works

1. **Define a template** for an entity type (for example “Store landing — summer”).
2. **Link it** to a record by setting `cms_template_id` on that brand, store, menu, category, or product.
3. **Fill field values** in the dashboard for each record.
4. **Channels consume `cms`** — when `cms_template_id` is set, APIs return a resolved `cms` object with the template structure and current values. When it is `null`, `cms` is also `null`.

Today, **brands** and **stores** expose this in the Storefront and Integrations APIs. Templates for menus, categories, and products follow the same model as those surfaces gain richer merchandising.

<Note>
  CMS does not replace menu sync from your POS. Use it for content your POS
  does not own: brand voice, campaign creative, and channel-specific merchandising.
</Note>

## When CMS helps commercial teams

| Situation                 | Why templates help                                                                                  |
| ------------------------- | --------------------------------------------------------------------------------------------------- |
| Multi-brand operator      | Each brand gets its own story and visuals without duplicating store or menu setup                   |
| Seasonal campaigns        | Swap or update hero copy and images on stores or categories without engineering                     |
| Aggregator vs owned app   | Same kitchen, different headline and imagery on your app versus a marketplace listing               |
| Local marketing           | Store managers or regional teams customize location pages within a fixed template                   |
| Future loyalty and promos | Campaign and offer pages can reuse the same field types (text, image, list) for consistent creative |

## When you can start without CMS

If one brand, one look, and minimal copy on channels is enough, you can run on menus, stores, and channels alone. Add CMS when **non-operational content** becomes a bottleneck — when marketing asks for frequent copy or image changes that should not go through menu or POS updates.

## Related concepts

<CardGroup cols={2}>
  <Card title="Brands" icon="ribbon" href="/docs/concepts/brands">
    Brand-level templates and identity
  </Card>

  <Card title="Stores" icon="store" href="/docs/concepts/stores">
    Location pages and local content
  </Card>

  <Card title="Menus" icon="utensils" href="/docs/concepts/menus">
    Catalog structure from your POS
  </Card>

  <Card title="Channels" icon="monitor-smartphone" href="/docs/concepts/channels">
    Where filled CMS content is shown
  </Card>
</CardGroup>
