DanpLab · Lab NoteArchitettura operativa

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

Come ho costruito danplab.com con Next.js, un chatbot AI self-hosted, Hermes Agent su Discord, pubblicazione automatica degli articoli basata su trend e analytics con Matomo.

4 min di letturaNota basata su utilizzo operativo reale
homelabaiautomazionenextjshermes

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


Jarvis, scrivi una guida su "Proxmox Backup Server"


Jarvis, quali sono i topic IT più cercati questa settimana?


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:





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

Script di rebuild

#!/bin/bash

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