Un agente AI legge le fonti tech ogni giorno, seleziona, scrive e pubblica. Il chatbot risponde ai visitatori e prenota appuntamenti. Zero CMS, zero piattaforme, zero intervento umano a regime.
Ho costruito questo sito per rispondere a una domanda concreta: un agente AI può davvero gestire un sito editoriale, dalla raccolta delle notizie alla pubblicazione, senza che io debba intervenire ogni giorno? La risposta, dopo qualche settimana di rodaggio, è sì.
Non ho usato WordPress, Ghost o qualunque altro CMS. Non ho usato piattaforme no-code. Ho scritto il backend in Python con FastAPI, ho collegato un modello LLM via API, ho configurato un paio di cron job e ho lasciato girare. Quello che segue è una descrizione tecnica di come funziona ogni parte del sistema.
Non è perfetto. Ma funziona, è in produzione, e mi ha insegnato più di qualsiasi tutorial.
Il sistema si divide in tre layer principali: le fonti dati in input, il backend Python che le elabora, e il frontend statico che mostra il risultato. Il tutto gira su un VPS Contabo con Nginx come reverse proxy e Let’s Encrypt per SSL.
Ogni sera alle 21:00 un job automatico legge i feed RSS, chiede al modello di selezionare gli argomenti migliori e genera cinque articoli completi in HTML. Nessuna fase manuale.
agent.py all’avvio di FastAPI. Nessun crontab di sistema: APScheduler gira in-process e si integra nel lifecycle dell’app.article_agent.py chiama get_active_rss_feeds() da sources_config.py — il registro centrale che contiene tutte le 14 fonti attive: TechCrunch AI, The Verge, Ars Technica, MIT Tech Review, OpenAI Blog, Anthropic Blog, Google AI, Nvidia, Meta AI, HuggingFace, The Batch, Wired Italia e altre.components-guide.txt con i componenti HTML disponibili nel design system.content_orchestrator.py salva ogni articolo generato nel database SQLite con stato draft. Da qui è possibile revisionare o bloccare la pubblicazione via Telegram prima che vada live.<!-- AGENT: ARTICLES_START --> e <!-- AGENT: ARTICLES_END -->. Nessun rebuild, nessun framework: il file HTML viene riscritto sul server e Nginx lo serve immediatamente.Quattro volte al giorno il sistema raccoglie notizie da fonti eterogenee — RSS, repository GitHub emergenti, paper Arxiv, HuggingFace Daily Papers e Hacker News — e le processa per la sezione /news/.
sources_extra.py interroga GitHub (3 query configurabili: repos nuovissimi, emergenti, tool MCP), Arxiv (categorie cs.AI, cs.LG, cs.CL, cs.CV, cs.MA), HuggingFace Daily Papers e Hacker News via Algolia API. I risultati finiscono in sources_cache.json./api/news/brief e visualizzato come sezione collassabile nella pagina news./api/news?limit=N&category=X e /api/news/brief, con polling automatico ogni 5 minuti.Oliver è il chatbot integrato nel sito. Non è un wrapper diretto al modello: c’è una state machine che gestisce la conversazione, un layer RAG che legge i documenti su Nicola, e un’integrazione Telegram per il booking degli appuntamenti.
.md nella cartella backend/docs/: chi è Nicola, cosa fa, i suoi progetti, i valori, come prenotare. Gli embedding vengono generati con all-MiniLM-L6-v2 di HuggingFace e salvati in ChromaDB. A ogni messaggio, recupera i chunk più rilevanti e li inietta nel contesto prima di chiamare DeepSeek./conferma [id] o /rifiuta [id]. Il chatbot aggiorna il visitatore in tempo reale._sanitize_input() (limite 600 caratteri) e _is_injection_attempt() (15 pattern IT+EN). Se viene rilevato un tentativo di injection, Oliver risponde con un messaggio fisso senza passare il testo al modello. Il pattern matching avviene pre-LLM, lato Python.| Layer | Tecnologia |
|---|---|
| Frontend | HTML / CSS / JS statico — nessun framework, nessun build step |
| Backend | Python 3.11, FastAPI, uvicorn su porta 8000 |
| LLM | DeepSeek deepseek-chat via API OpenAI-compatibile |
| RAG | LangChain LCEL 1.x, ChromaDB, HuggingFace all-MiniLM-L6-v2 |
| Scheduler | APScheduler in-process, 5 job configurati |
| Database | SQLite — articoli, news, brief, chat, prenotazioni |
| Bot | python-telegram-bot, long-polling async nel lifespan FastAPI |
| Rate limiting | slowapi — 10 req/min per IP sull’endpoint /chat |
| Server | Contabo VPS, Ubuntu 22.04 LTS, Nginx reverse proxy, Let’s Encrypt SSL |
.md su un VPS da 6 euro al mese funzionano benissimo./status dal telefono mi dice tutto quello che succede sul server in tre secondi.Vuoi capire come funziona Oliver? Puoi leggere il dettaglio tecnico o provarlo direttamente.