Existindo o Hugo, o Eleventy, o Astro e mais uma dúzia de geradores de sites estáticos bem mantidos, montei este site com Publish, de John Sundell. É uma decisão discutível, por isso explico-a.
O motivo, além de não querer fazer nada com o WordPress
O Publish deixa-me definir o site como uma struct:
struct DavidNovella: Website {
enum SectionID: String, WebsiteSectionID {
case apps
case blog
}
var url = URL(string: "https://davidnovella.es")!
var name = "David Novella"
var language: Language { .spanish }
}
E o tema como funções que devolvem HTML, com o compilador a vigiar:
func makeItemHTML(for item: Item<Site>,
context: PublishingContext<Site>) throws -> HTML {
HTML(
.lang(context.site.language),
.head(for: item, on: context.site),
.body {
SiteHeader(currentPath: item.path)
Wrapper {
H1(item.title)
Div(item.body).class("content")
}
}
)
}
Não há templates com chavetas duplas nem erros que apareçam ao gerar. Se inventar um campo de metadados, não compila. É a mesma sensação de trabalhar com SwiftUI, aplicada ao HTML.
Os inconvenientes
Convém dizê-los:
- O Publish está há algum tempo sem ser atualizado. A última versão etiquetada é a 0.9.0. Compila sem problemas com o Swift 6.4, mas não esperes correções.
- A comunidade é pequena. Comparado com o Hugo, aqui há pouco escrito e poucos temas para copiar.
- O ecossistema de plugins é mínimo. O que precisares, provavelmente terás de o escrever tu — embora escrever um
PublishingStepseja surpreendentemente pouco código.
Conclusão
Como exercício para criar um site que consiga manter com pouco esforço, acho que é um bom começo. Mais adiante verei se me calha mudar para outra ferramenta de geração ou se faço um fork do Publish e mudo alguma coisa.