Existiendo Hugo, Eleventy, Astro y una docena más de generadores de sitios estáticos bien mantenidos, he montado esta web con Publish, de John Sundell. Es una decisión discutible, así que la explico.
El motivo, además de no querer hacer nada con Wordpress
Publish me deja definir la web como un 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 }
}
Y el tema como funciones que devuelven HTML, con el compilador vigilando:
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")
}
}
)
}
No hay plantillas con llaves dobles ni errores que aparezcan al generar. Si me invento un campo de metadatos, no compila. Es la misma sensación que trabajar con SwiftUI, aplicada a HTML.
Los inconvenientes
Conviene decirlos:
- Publish lleva tiempo sin actualizarse. La última versión etiquetada es la 0.9.0. Compila sin problemas con Swift 6.4, pero no esperes correcciones.
- La comunidad es pequeña. Comparado con Hugo, aquí hay poco escrito y pocos temas que copiar.
- El ecosistema de plugins es mínimo. Lo que necesites, probablemente tengas que escribirlo tú, aunque escribir un
PublishingStepes sorprendentemente poco código.
Conclusión
Como ejercicio para crear una web que me resulte mantenible con poco esfuerzo creo que es un buen comienzo. Más adelante veré si me toca cambiar a otra herramienta de generación o si hago un fork de Publish y cambio alguna cosa.