DanpLab.com: come ho costruito il mio sito con AI, chatbot e pubblicazione automatica

2026-05-31T10:00:00.000Z

L'architettura del progetto

Questo sito è molto più di un semplice portfolio. È un sistema integrato che combina:

danplab.com (Next.js)
    ├── Blog con pubblicazione automatica
    │       ↑
    │   Hermes Agent (Jarvis su Discord)
    │       ├── Analizza trend (SearXNG)
    │       ├── Controlla analytics (Matomo)
    │       └── Genera e pubblica articoli via SSH
    │
    ├── Chatbot AI self-hosted
    │       └── Ollama (glm-5:cloud) su GPU NVIDIA A10
    │
    ├── Analytics privacy-first
    │       └── Matomo self-hosted
    │
    └── Form contatto → Discord DM

Stack tecnologico

| Componente | Tecnologia | Server | |-----------|-----------|--------| | Frontend | Next.js 14 (App Router) | LAN-IP | | Chatbot AI | Ollama + glm-5:cloud | LAN-IP (GPU) | | Agent AI | Hermes Agent (Nous Research) | LAN-IP | | Analytics | Matomo self-hosted | Docker su LAN-IP | | Ricerca trend | SearXNG self-hosted | LAN-IP | | Tunnel pubblico | Cloudflare Tunnel | Cloudflare Edge | | OS | Debian 12 / Ubuntu 22.04 | Proxmox VE |


Hermes Agent: il cervello del sistema

Hermes (by Nous Research) è un agente AI autonomo che gira 24/7 sul server homelab-server. È configurato su Discord dove posso interagire con lui in linguaggio naturale.

Cosa fa Hermes automaticamente

Ogni lunedì alle 08:00:

  1. Interroga SearXNG per i topic IT più cercati in Italia e nel mondo
  2. Controlla Matomo per vedere quali articoli hanno più traffico
  3. Sceglie 1-2 topic ad alto potenziale SEO
  4. Genera un articolo tecnico completo (800+ parole)
  5. Lo pubblica via SSH su danplab.com
  6. Triggera il rebuild di Next.js
  7. Mi notifica su Discord con il link

Comandi Discord

# Pubblica articolo su topic specifico
Jarvis, scrivi una guida su "Proxmox Backup Server"

# Analizza trend della settimana
Jarvis, quali sono i topic IT più cercati questa settimana?

# Aggiorna il sito
Jarvis, rebuilda il sito

Chatbot AI: privacy-first

Il chatbot in basso a destra risponde solo a domande tecniche IT usando un modello AI che gira completamente sul mio hardware. Nessun dato esce dall'infrastruttura.

Come funziona

Visitatore scrive domanda
    ↓
API Next.js /api/chat
    ↓ (sanitizzazione input, rate limiting)
Ollama API (LAN-IP:11434)
    ↓ (glm-5:cloud via GPU NVIDIA A10)
Risposta sanitizzata
    ↓
Visitatore riceve risposta

Sicurezza implementata

  • Input sanitization — blocca prompt injection, XSS, IP interni
  • Output filtering — filtra password, token, path di sistema
  • Rate limiting — max 10 messaggi/ora per IP
  • Timeout 30s — evita richieste pendenti infinite
  • System prompt blindato — risponde solo su topic IT

Pubblicazione automatica

Il workflow di pubblicazione usa un semplice webhook HTTP:

# Webhook sul server (porta 9876)
# POST /rebuild con header X-Webhook-Token

# Hermes chiama:
curl -X POST http://LAN-IP:9876/rebuild \
  -H "X-Webhook-Token: <token>" \
  && next build \
  && systemctl restart danplab-site

Script di rebuild

#!/bin/bash
# /usr/local/bin/danplab-rebuild.sh
cd /var/www/danplab-site
sudo -u admin node_modules/.bin/next build >> /var/log/danplab-rebuild.log 2>&1
systemctl restart danplab-site
echo "$(date): rebuild completato" >> /var/log/danplab-rebuild.log

Matomo Analytics

Uso Matomo self-hosted invece di Google Analytics perché:

  • GDPR compliant senza banner cookie invasivi
  • Dati sul mio server — non li vende nessuno
  • Funzionalità complete — heatmap, funnel, segmenti

Matomo è accessibile su matomo.danplab.com via Cloudflare Tunnel.

Tracking su Next.js

// app/layout.tsx
<Script id="matomo" strategy="afterInteractive" dangerouslySetInnerHTML={{ __html: `
  var _paq = window._paq = window._paq || [];
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u='//matomo.danplab.com/';
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '1']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })();
`}} />

Internazionalizzazione (i18n)

Il sito è disponibile in italiano (default) e inglese con rilevamento automatico dalla geolocalizzazione:

  • Visitatori italiani → danplab.com (IT)
  • Visitatori internazionali → danplab.com/en (EN)

Tecnologia: next-intl con middleware Cloudflare per geo-detection tramite header CF-IPCountry.


Cosa ho imparato

Costruire questo progetto mi ha insegnato che l'AI self-hosted non è solo un hobby — è un vantaggio competitivo concreto:

  1. Controllo totale sui dati e sul comportamento del sistema
  2. Costo marginalissimo — solo elettricità e hardware già posseduto
  3. Personalizzazione — il chatbot conosce il mio profilo e i miei articoli
  4. Automazione reale — Hermes pubblica contenuti mentre dormo

Il codice sorgente e la configurazione sono disponibili su richiesta per chi vuole replicare il setup.


Prossimi sviluppi

  • [ ] Newsletter con lead generation dal chatbot
  • [ ] Prenotazione consulenze via Calendly integrato
  • [ ] RAG — chatbot che risponde citando i miei articoli
  • [ ] Multi-lingua completa anche per gli articoli del blog
  • [ ] Dashboard admin per pubblicazione articoli senza Discord