implementazione webmentions self-hosted

AUTORE: Tiziano Gasparet DATA: 05 febbraio 2026

Origine

Ho scoperto le Webmention leggendo la specifica IndieWeb.

Nessun API key. Nessun OAuth. Nessun account su piattaforme terze. Solo due URL:

  • Source: chi mi ha linkato
  • Target: la mia pagina

Il server source invia una richiesta POST al mio endpoint /webmention. Il mio server verifica che il link esista davvero. Se esiste, salvo la menzione. Se non esiste, la scarto.

Tutto qui.

Niente intermediari. Niente algoritmi. Niente platform lock-in.

Il nesso

Perché il Monolito archivia questo? Perché le Webmention sono sovranità pura.

Quando qualcuno linka un mio articolo su un altro sito IndieWeb, io lo so. Non perché Facebook me lo dice. Non perché Twitter mi notifica. Ma perché il protocollo stesso me lo consegna.

È il web decentralizzato che funziona come dovrebbe:

  • Tu pubblichi sul tuo dominio.
  • Io pubblico sul mio dominio.
  • Se tu mi linki, io lo so.
  • Nessuno di noi dipende da una piattaforma centrale.

La sfida

La sfida tecnica è stata implementare il server su OpenBSD.

Non esiste un plugin “installa e dimenticati”. Ho dovuto:

  1. Configurare relayd per forwardare /webmention a Node.js (porta 3000)
  2. Scrivere lo script Node che verifica i link
  3. Salvare le menzioni in un JSON locale
  4. Esporre un’API /api/mentions per leggerle
  5. Mostrare le menzioni nel frontend Astro

La sfida psicologica è stata accettare che non tutte le menzioni arrivano.

Se un sito non supporta Webmention, non lo so. Se qualcuno mi linka su Medium o LinkedIn, non ricevo nulla.

Ma è un limite che accetto volentieri. Preferisco 10 menzioni su siti sovrani che 1000 like su piattaforme che mi possiedono.

Pace Mentale

Ora che ho scritto questo, ho chiarito il valore delle Webmention:

  • Sono notifiche dirette, senza intermediari.
  • Sono verificate, non spoofabili.
  • Sono sotto il mio controllo (il mio server, il mio database).
  • Sono interoperabili (chiunque può implementarle).

La Pace Mentale viene dal sapere che ogni menzione che ricevo è un atto di rispetto. Qualcuno ha dedicato tempo a linkarmi sul proprio dominio, non a cliccare “condividi” su un pulsante di una piattaforma.

Il Monolito non è un’isola. È un nodo nella rete.

Nota tecnica:

  • Endpoint: POST /webmention (source + target)
  • Verifica: GET source → cerca target nel contenuto
  • Storage: /var/www/webmention/data/mentions.json
  • API: GET /api/mentions?target=URL
  • Frontend: componente Astro Webmentions.astro (client-side fetch)
  • Cache: 5 minuti in localStorage per performance
  • Zero dipendenze: tutto self-hosted su OpenBSD
TG

Chi sono

Architetto di sistemi sovrani. Scrivo di tecnologia, pasticceria, scacchi e disciplina.

Ti è piaciuto questo articolo? Parliamone.

Scrivimi via email: tiziano@tizianogasparet.com Contattami su Signal: @tizianogasparet.06 (Signal) BIOGRAFIA

Il Monolito è un invito alla conversazione, non un monologo.