🌱 Seed

seed.yaml

O arquivo seed.yaml na raiz do projeto é o ponto central de configuração. Ele define o tema ativo e controla como os assets são entregues no build.

Referência completa

```yaml
theme: seed-theme      # tema instalado em themes/seed-theme/
js: file            # inline | file  (padrão: file)
css: file           # inline | file  (padrão: file)
minify: false       # true | false   (padrão: false)
optimize-css: true    # roda `npx @tailwindcss/cli` no build (padrão: true)
optimize-images: true # gera srcset/webp responsivo no build (padrão: true)
url: https://meusite.com  # URL base — ativa sitemap, canonical, OG, JSON-LD
lang: pt-BR          # idioma padrão do <html> e og:locale (padrão: en)
timezone: America/Sao_Paulo # timezone IANA para todos os campos de data
image: /static/og.png # imagem social padrão do site (og:image/twitter:image)
ga: G-XXXXXXXXXX    # Google Analytics 4 — Measurement ID (build)
ga-dev: G-DEV000    # GA4 — Measurement ID (dev)
gtm: GTM-XXXXXXX    # Google Tag Manager — Container ID (build)
gtm-dev: GTM-DEV    # GTM — Container ID (dev)
head: |             # HTML custom injetado no <head>
  <meta name="custom" content="value">
person:              # dono do site — author: true e JSON-LD Person/publisher
  name: Jane Doe
  url: https://meusite.com
  sameAs:
    - https://x.com/jane   # twitter:site é derivado daqui
breadcrumbs:          # JSON-LD BreadcrumbList (padrão: habilitado)
  enabled: true
  labels:
    blog: Blog         # rótulo customizado por segmento de URL
collections:        # coleções genéricas (opcional)
  team:
    dir: team
    sort: name
    order: asc
    per_page: 0     # 0 = sem paginação
blog:               # atalho para coleção blog (opcional)
  dir: blog         # diretório dos posts (padrão: blog)
  sort: publish_date # campo de ordenação por data editorial
  order: desc       # asc ou desc (padrão: desc)
  drafts: false     # incluir drafts no build (padrão: false)
  per_page: 0       # itens por página — 0 = sem paginação (padrão: 0)
  list_layout: list # nome do layout de listagem (padrão: list)
  item_layout: item # nome do layout por post (padrão: item)
  tags: false       # true → gera páginas de arquivo /blog/tags/<tag>/
  dates: off        # off | day | month → arquivos /blog/<data>/
  author:            # autor padrão de todo item da coleção (JSON-LD + template)
    name: Jane Doe
```

theme

Nome do tema instalado em themes/. O Seed vai carregar componentes de themes/<nome>/components/ e assets de themes/<nome>/assets/.

```yaml
theme: seed-theme
```

Se omitido, nenhum tema é carregado — apenas componentes em src/components/ ficam disponíveis.

js e css

Controlam como os assets do tema (meu-tema.js, meu-tema.css) são entregues ao browser:

ModoComportamentoQuando usar
fileGera <script src="static/..."> e <link rel="stylesheet" href="static/...">Padrão. Permite cache do browser, ideal para produção
inlineInjeta o conteúdo do arquivo diretamente no HTMLSites que precisam de HTML completamente auto-contido (email, embed)

Os dois modos são independentes — é válido ter js: inline com css: file ou qualquer combinação.

ℹ️

Scripts de componentes individuais (arquivo .js ao lado do .yaml) são sempre injetados inline, independentemente do modo configurado.

minify

Quando true, o HTML gerado pelo seed build é minificado via minify-html — remove espaços desnecessários, comentários HTML e atributos redundantes.

```yaml
minify: true
```

url

URL base do site. Quando definida, o seed build gera automaticamente um sitemap.xml em dist/:

```yaml
url: https://meusite.com.br
```

Se omitido, o sitemap não é gerado. Para detalhes, veja Sitemap.

llms

Gera arquivos em markdown do conteúdo do site para consumo por LLMs. Aceita um valor simples (modo) ou um dicionário com opções adicionais:

```yaml
# forma simples
llms: both   # index | full | both | true

# forma dicionário
llms:
  mode: both
  nav: _sidebar.seed   # arquivo .seed usado para ordenar o índice
  orphans: skip        # skip | include
  skip: [meu-componente]  # nomes extras a descartar (estende o padrão)
```

index gera dist/llms.txt (índice: título + URL + descrição de cada página); full gera dist/llms-full.txt (markdown completo concatenado); both/true geram os dois. Sem llms definido, nenhum arquivo é gerado. Esta documentação usa llms: both. Detalhes completos em llms.txt.

collections e blog

Configura coleções de conteúdo (equipe, portfólio, blog etc.). O blog pode ser configurado com a chave blog: como atalho, ou dentro de collections:. Se omitido, o Seed detecta automaticamente a presença de src/blog/ e usa os valores padrão.

```yaml
# Coleções genéricas
collections:
  team:
    dir: team
    sort: name
    order: asc
    per_page: 0       # 0 = sem paginação
    list_layout: list
    item_layout: item

# Atalho para o blog
blog:
  dir: blog           # diretório dos posts (padrão: blog)
  sort: publish_date  # campo de ordenação por data editorial
  order: desc         # asc ou desc (padrão: desc)
  drafts: false       # incluir drafts no build (padrão: false)
  per_page: 10        # itens por página — 0 = sem paginação
  list_layout: list   # nome do layout de listagem (padrão: list)
  item_layout: item   # nome do layout por post (padrão: item)
```

tags: true gera páginas de arquivo por tag (/blog/tags/<slug>/); dates: day ou dates: month geram arquivos cronológicos (/blog/<YYYY-MM-DD>/ ou /blog/<YYYY-MM>/). Ambos exigem publish_date em todo item — o build falha apontando o arquivo se faltar. author: define o autor padrão (JSON-LD e variável {author_name} no template) para todo item da coleção; uma página pode sobrescrever com author_name próprio ou remover com author: false.

Para detalhes completos, veja Coleções e @each e Blog.

lang e timezone

lang define o idioma padrão do documento (<html lang="...">) e a base do og:locale — cada página pode sobrescrever com seu próprio lang no front matter. timezone define o fuso horário IANA usado para normalizar todos os campos de data (publish_date, update_date, expire_date, creation_date); um valor inválido gera erro de build.

```yaml
lang: pt-BR
timezone: America/Sao_Paulo
```

Para o modelo completo de datas e publicação, veja Coleções e @each. Para lang/hreflang/Open Graph/JSON-LD, veja SEO & Metadados.

person e breadcrumbs

person descreve o dono do site — usado quando uma página tem author: true e para o JSON-LD Person/publisher na home. breadcrumbs controla a geração automática de BreadcrumbList (JSON-LD, não visual):

```yaml
person:
  name: Jane Doe
  url: https://meusite.com
  sameAs:
    - https://x.com/jane

breadcrumbs:
  enabled: true
  labels:
    blog: Blog
```

Detalhes completos em SEO & Metadados.

ga e ga-dev

Injeta automaticamente o snippet do Google Analytics 4. Use ga para produção e ga-dev para o dev server:

```yaml
ga: G-PROD000000
ga-dev: G-DEV0000000
```

Para detalhes completos, veja Google Analytics.

gtm e gtm-dev

Injeta os snippets do Google Tag Manager (head + body). Use gtm para produção e gtm-dev para o dev server:

```yaml
gtm: GTM-PROD000
gtm-dev: GTM-DEV0000
```

Para detalhes completos, veja Google Tag Manager.

Injeta HTML arbitrário no <head> de todas as páginas — fontes, meta tags, scripts de terceiros:

```yaml
head: |
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <meta property="og:image" content="https://meusite.com/og.png">
```

Diferente de ga/gtm, o head é injetado tanto no dev quanto no build. Para detalhes completos, veja Conteúdo Custom no Head.

Sem seed.yaml

O arquivo é opcional. Se não existir, o Seed roda sem tema, sem minificação e com assets em modo file. Útil para projetos simples com componentes apenas em src/components/.

Feito com ❤️ e Seed