logo hsb.horse

Registro de Decisão de Arquitetura

Design da coleção de conteúdo do blog

Definir esquema e regras operacionais para gerenciar posts de blog em Markdown/MDX.

Aceito #blog #content #architecture

Design da coleção de conteúdo do blog

Decisão

  • Gerenciar posts do blog como arquivos Markdown/MDX em /blog.
  • Usar o seguinte esquema de frontmatter:
    • title (obrigatório, string)
    • description (opcional, string)
    • publishedAt (obrigatório, date)
    • updatedAt (opcional, date)
    • draft (opcional, boolean, padrão false)
    • tags (opcional, string[])
    • image (opcional, string)
    • noindex (opcional, boolean, padrão false)
    • lang (opcional, string, padrão ja)
    • slug (opcional, string, derivado do nome do arquivo quando omitido)
    • prev (opcional, true | false | string, controle explícito do link anterior)
    • next (opcional, true | false | string, controle explícito do link seguinte)
  • Seguir a estratégia de URL i18n derivando URLs da combinação lang + slug. Usar o mesmo slug entre traduções.
  • Ordenar listas por publishedAt e usar updatedAt para exibir “última atualização”.
  • Tratar draft como flag para excluir posts de listagens/feeds/alvos de build.
  • Tratar noindex como metadado que indica exclusão da indexação por mecanismos de busca.

Contexto

É necessário um esquema consistente para gerar com confiabilidade listagens, páginas de detalhe e metadados de SEO em operação de longo prazo do blog. O design precisa se alinhar à abordagem i18n (japonês como padrão, idiomas adicionais em subdiretórios).

Opções

  • Markdown/MDX com Content Collection
  • CMS headless externo
  • Gestão manual em JSON/TS

Justificativa

  • Markdown/MDX mantém autoria e revisão leves.
  • Esquemas de Content Collection fornecem validação em build.
  • Campos explícitos lang e slug mantêm URLs consistentes e alinhadas à estratégia i18n.

Consequências

  • Todos os posts do blog devem seguir o esquema acima.
  • Regras operacionais de draft e noindex precisam ser compartilhadas como critérios de publicação.
  • Adicionar idiomas exige criar traduções com valores slug correspondentes.