Gleam.br Wiki

ADR-0019: Motor de Blog Estático e Ordenação Cronológica de Posts | Wiki

Documentação de engenharia e especificações técnicas da Gleam-BR.

ADR-0019: Motor de Blog Estático e Ordenação Cronológica de Posts

Este documento especifica a decisão de arquitetura para a implementação do motor de Blog no gerador estático gbr_ssg e no pacote gbr_ssg_core.

1. Contexto e Motivação

Além das landing pages do layout Site e da base de conhecimento do layout Wiki, o ecossistema Gleam-BR necessita de um canal de publicação editorial em formato de Blog para divulgar artigos técnicos, anúncios de lançamentos e reflexões funcionais.

O motor do Blog deve operar inteiramente de forma estática (Zero-JS SSR), com suporte a ordenação cronológica decrescente por data de publicação (date), categorização por tags e autoria (author).


2. Decisão Arquitetural

  1. **Extensão de Metadados no Frontmatter TOML (gbr_ssg_core):** O record PageMetadata será estendido com campos específicos para publicações: gleam pub type PageMetadata { PageMetadata( title: String, description: String, path: String, category: String, order: Int, layout: String, visibility: String, date: Option(String), author: Option(String), tags: List(String), sections: Option(List(dict.Dict(String, String))), ) }

  2. *Ordenação Cronológica e Fallback:* Artigos com a chave date informada (formato ISO YYYY-MM-DD) serão ordenados do mais recente para o mais antigo. Artigos sem data definida receberão ordenação posterior ao final da listagem.

  3. **Layout Dedicado (layout_blog.gleam):** Páginas com layout = "blog" serão renderizadas através de um componente visual dedicado em Lustre, apresentando cabeçalho estruturado (Título, Data formatada, Autor, Badges de Tags) e corpo tipográfico escuro estilizado (prose prose-invert prose-pink).


3. Requisitos EARS

*Requisitos Ubíquos (Ubiquitous Requirements)* - *UBQ-01 (Extração de Metadados de Blog):* O parser do Frontmatter TOML DEVE extrair com segurança os campos date: Option(String), author: Option(String) e tags: List(String), atribuindo None ou lista vazia [] caso as chaves estejam ausentes no arquivo .djot. - *UBQ-02 (Ordenação Cronológica Decrescente):* A listagem e o índice do blog DEVEM ordenar as páginas por data em ordem decrescente (date), posicionando publicações sem data no final da lista.