David Novella

Una web estàtica feta amb Swift

Existint Hugo, Eleventy, Astro i una dotzena més de generadors de webs estàtiques ben mantinguts, he muntat esta web amb Publish, de John Sundell. És una decisió discutible, així que l’explique.

El motiu, a més de no voler fer res amb Wordpress

Publish em deixa definir la web com 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 }
}

I el tema com a funcions que tornen HTML, amb el compilador vigilant:

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 hi ha plantilles amb claus dobles ni errors que apareguen en generar. Si m’invente un camp de metadades, no compila. És la mateixa sensació que treballar amb SwiftUI, aplicada a l’HTML.

Els inconvenients

Convé dir-los:

  • Publish porta temps sense actualitzar-se. L’última versió etiquetada és la 0.9.0. Compila sense problemes amb Swift 6.4, però no esperes correccions.
  • La comunitat és xicoteta. Comparat amb Hugo, ací hi ha poc escrit i pocs temes per a copiar.
  • L’ecosistema de connectors és mínim. El que necessites, probablement l’hauràs d’escriure tu, encara que escriure un PublishingStep és sorprenentment poc codi.

Conclusió

Com a exercici per a crear una web que em resulte mantenible amb poc esforç crec que és un bon començament. Més endavant veuré si em toca canviar a una altra ferramenta de generació o si faig un fork de Publish i canvie alguna cosa.