David Novella

Um site estático feito com Swift

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 PublishingStep seja 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.