Dossier
Freelance Cloud Platform & AI Security Engineer, base a Casale Monferrato. Aiuto team e aziende a rendere la loro infrastruttura cloud affidabile e sicura: automazione, pipeline, hardening, tooling interno. Lavoro fianco a fianco con il team del cliente, in pair programming invece che con consegne a scatola chiusa, così alla fine resta autonomo. Python è lo strumento principale per automazione, tooling interno e sicurezza applicativa.
La sicurezza non è una rifinitura finale: gestione dei segreti, gate automatici in CI e threat model scritto fanno parte della consegna, non di un intervento successivo. Quando in mezzo c'è un modello la lista si allunga: prompt injection sui contenuti che arrivano da fuori, trasparenza AI Act, catena di fornitura del software. Alla fine di un lavoro restano test che girano, documentazione che si legge e un team in grado di rimetterci mano senza di me.
Servizi
Sei modi di lavorare insieme. Qui sotto trovi cosa comprende ciascuno; se il tuo problema non rientra in nessuno, scrivimi lo stesso.
Security Audit
Ispezione ripetibile dello stack, dall'AI al sistema operativo: trovare i token esposti e le config deboli prima che li trovi qualcun altro.
AI & Agent Security
Mettere agenti AI in produzione senza aprire falle: la supervisione umana si progetta, l'autonomia si guadagna con tetti e guardrail, non si concede di default.
Automazione AI
Soluzioni AI su misura che tolgono lavoro ripetitivo: agenti, RAG e pipeline che girano da soli, con supervisione umana dove conta.
Cloud & Automazione
Infrastruttura che regge il peso, e la fiducia, di chi la usa. Provisioning, pipeline e container, con l'affidabilità come requisito.
Pair & Advisory
Il metodo di lavoro principale: hands-on, al tuo fianco. Non consegno una scatola nera: costruiamo insieme e il tuo team resta autonomo.
Siti Web
Siti veloci e curati, come per Vetreria Monferrina: Astro + CMS, Lighthouse 100, sicurezza e accessibilità di serie, con un agente IA per SEO/AEO se serve.
Non è un carrello: è un punto di partenza. Seleziona cosa ti serve, come e per quanto: genero una bozza di brief che puoi copiare o mandarmi via email in un clic.
Nessuna tariffa pubblicata: ogni intervento è dimensionato sul problema reale, non su un listino a taglia unica. Il primo confronto è sempre gratuito e senza impegno. Pair programming, non prompt-e-vai.
Field Notes
Un caso alla volta da un sistema che gira in produzione: problema, approccio, risultato, lezione appresa. Niente teoria, solo cose successe davvero.
L'indice TTL che non poteva scadere niente
RabbitWatch, il mio stack di monitoraggio, dichiara una retention di sette giorni sulle metriche: un indice TTL su MongoDB, creato da uno script apposta, che dovrebbe cancellare da solo i documenti più vecchi. Rileggendo il codice prima di toccarlo, quella retention non poteva avere mai funzionato. Il consumer scrive il campo timestamp come intero Unix, alla riga 67 di consumer/metrics_consumer_mongo.py, e l'indice TTL è creato su quello stesso campo, alla riga 23 di consumer/setup_ttl_indexes.py.
La documentazione MongoDB è esplicita, e l'ho letta invece di dedurla: il campo indicizzato deve contenere valori di tipo data BSON, e se non li contiene il documento non scade. Il nome del campo diceva la cosa giusta, il tipo no. Ho cercato le due cose una accanto all'altra, il punto di scrittura e il punto di creazione dell'indice, perché sono in file diversi e nessuno dei due da solo sembra sbagliato.
L'indice esiste, il thread TTL gira ogni sessanta secondi, legge quel campo, trova un numero e passa oltre. Non un errore, non un'eccezione, non una riga di log: il numero di documenti che quell'indice può far scadere è zero per costruzione. Nello stesso giro è saltato fuori che i due script non sono d'accordo su come si chiama la configurazione, config_consumer.yaml contro consumer_config.yaml, e che nel repository non è versionato nessun file YAML da cui partire. Il progetto non è mai andato in produzione, quindi finora non l'ha pagato nessuno.
Una garanzia dichiarata e mai misurata resta un'ipotesi. Questo difetto non fa rumore: non c'era niente da notare, nessun allarme da ignorare, solo una collection che sarebbe cresciuta per sempre mentre il codice diceva il contrario. E la forma è sempre la stessa, il nome di un parametro non è la sua semantica, per cui la fonte da leggere era quella del fornitore e non il campo.
Magazine
Ogni mese un caso vero su IA, sicurezza e governance sul lavoro: il problema, la scelta fatta, cosa è cambiato. Lo scrive una pipeline, controllato sulle fonti. Il primo è il punto zero: le idee migliorano strada facendo.
N.03SETTEMBRE 2026 · insuranceSinistri gestiti senza intervento umano: il caso Singapore
LEGGI
Sinistri gestiti senza intervento umano: il caso Singapore
LEGGII sinistri restano il processo più manuale della catena assicurativa e il punto di massimo attrito con il cliente: troppe verifiche a mano prima di arrivare a un pagamento, con tempi lunghi e costi operativi crescenti. Su questo sfondo KPMG registra il passaggio dai progetti pilota isolati a trasformazioni strutturate lungo l'intera catena del valore, dalla sottoscrizione alla distribuzione.
La risposta è l'automazione end-to-end: sistemi che valutano, decidono ed eseguono senza intervento umano nella maggior parte dei casi. A Singapore è stato applicato un modello di elaborazione touchless, in cui gli algoritmi analizzano dati e documentazione della richiesta e l'intervento umano resta riservato ai casi che richiedono verifiche aggiuntive. Il sistema copre l'intero ciclo, dalla ricezione della richiesta alla liquidazione.
Il 98% dei sinistri a Singapore è valutato automaticamente e circa il 60% viene gestito e pagato entro 24 ore senza alcun intervento umano: sono le cifre del report KPMG «AI in Insurance Sector» (Singapore, maggio 2026). Il confronto è con processi manuali e verifiche sequenziali che in molti mercati richiedono ancora giorni.
La lezione è che l'automazione dei sinistri funziona quando è pensata come processo completo e non come singola funzionalità isolata: il valore nasce dal collegare intake, validazione, decisione ed esecuzione in un'unica catena automatizzata. Allo stesso tempo, più aumenta l'autonomia del sistema, più cresce la necessità di tracciabilità e controlli proporzionati, perché la fiducia dei clienti dipende dalla capacità di spiegare ogni esito contestato.
Numeri arretrati · la pila di quelli usciti prima
Edicola · dove la firma esce anche fuoridev.to/mk023
Progetti
Tre modelli di provider diversi messi a contraddirsi a vicenda, perché un LLM da solo tende a darti ragione. Rispondono separati, poi si valutano alla cieca, poi un presidente esterno tira le somme. Lo uso davvero, prima delle decisioni che pesano.
La compiacenza di un modello non si toglie col prompt: sta nei pesi, ci finisce durante l’addestramento. Un LLM usato come supporto alle decisioni conferma la direzione che gli segnali, anche quando è sbagliata.
Python solo libreria standard, zero dipendenze a runtime, e gli strumenti di sviluppo bloccati per hash invece che per numero di versione: la catena di fornitura è ridotta al minimo e verificata a ogni build. Tre voter indipendenti via OpenRouter con risposte anonimizzate, valutazione incrociata alla cieca, presidente scelto fuori dal gruppo dei voter così non può votarsi. Anthropic è escluso per principio: chi orchestra il council non vota nel council.
Repo pubblico con licenza MIT, coverage al 100% su tre versioni di Python, più un mutation testing settimanale che verifica se quei test possono davvero fallire. Mappatura completa della OWASP LLM Top 10 in SECURITY.md, con i punti fuori perimetro dichiarati e motivati.
Torino, ora di punta: dove la lasci la macchina? Un'API che risponde in tempo reale, costruita security-first come se fosse in produzione da anni: FastAPI async, PostGIS per il geospaziale, Redis con ETag. Prossima fermata: App Store.
Sapere in tempo reale dove c'è posto a Torino significava saltare tra fonti diverse, senza un'unica API pulita e veloce da interrogare.
API security-first: FastAPI async su Python 3.12, PostgreSQL 16 + PostGIS per il geospaziale, Redis 7 con compressione e richieste condizionali ETag, HMAC-SHA256 sulle API key (zero plaintext), rate limiting sliding-window multi-tier.
51 test tra unit, integration ed e2e con testcontainer, CI/CD e threat model documentato in SECURITY.md. Prossimo traguardo: portarla su Apple App Store come app nativa.
Quanto lavoro faccio davvero con l’AI, misurato invece che raccontato. Claude Code manda la sua telemetria a un hub mio, cinque servizi dietro un tunnel, e in questa pagina tre numeri veri si aggiornano da soli.
Del lavoro assistito dall’AI si parla per aneddoti. Non sapevo quanto ne facessi, con quali modelli, a che costo, e nessuno strumento me lo diceva senza spedire le mie sessioni a qualcun altro.
OpenTelemetry da Claude Code verso un Collector che autentica l’ingest e applica una allow-list sulle label: ciò che non è dichiarato sicuro non diventa mai una metrica. Prometheus conserva, Grafana mostra dietro Cloudflare Access, e una status API espone esattamente tre numeri aggregati: nessuna query libera, nessun contenuto di sessione.
In produzione su Railway dietro un Cloudflare Tunnel, con nessun servizio esposto su un dominio pubblico della piattaforma. La allow-list è nata da una misura, non da una lettura: la mia email vera arrivava come label di Prometheus, e la correzione ovvia perdeva dati in silenzio.
L'esperimento filosofico del lotto: un knowledge graph su Obsidian che si chiede come si costruiscono memoria e identità. Accantonato come prodotto, insostituibile come strumento di pensiero, e la versione SaaS con RAG è ancora sul tavolo.
Le note sparse non si parlavano tra loro: idee, letture, progetti finivano isolati invece di connettersi.
Un grafo di conoscenza personale su Obsidian, pensato non solo come archivio ma come domanda aperta su come memoria e identità si costruiscono nel tempo.
Deprioritizzato come prodotto rispetto a ciò che stava spedendo, ma resta lo strumento di pensiero più usato, e l'idea di una versione SaaS con RAG resta sul tavolo.
Percorso
Full Stack & AI Engineer
Sito di produzione (Astro + Sanity) e un agente IA per SEO/AEO con RAG su Supabase e governance secondo l'AI Act.
Full Stack Engineer
Piattaforma enterprise per il recupero crediti, full-stack: backend Python (Clean/DDD) su AWS serverless e SPA React/TypeScript multi-ruolo.
Software Engineer
Software per infrastrutture critiche: supervisione video 24/7 della Metropolitana C di Roma e diagnostica di rete enterprise per Etihad Airways (Scapy).
Stack
Python & Backend
La lingua di casa: backend e API con Clean Architecture e DDD (FastAPI, Flask, Falcon). Frontend: Astro e Vite, questo sito incluso; React e TypeScript quando serve una SPA.
Security
OWASP hardening, crittografia PII (AES-256), threat modeling e audit scritto nel repo; security gate in CI: Bandit, CodeQL, Gitleaks.
AI Security
OWASP LLM Top 10 su un RAG che sta in produzione: difesa dalla prompt injection sui contenuti che arrivano da fuori, LLM-as-a-judge come gate in CI, trasparenza AI Act (art. 50), MITRE ATLAS come mappa delle minacce.
AI & Agenti
RAG con citazioni (embedding Voyage), guardrail e revisione umana dentro il flusso, evals: su Claude API e Model Context Protocol (MCP).
Supply Chain
SBOM CycloneDX e attestation di provenance firmata (OIDC keyless) a ogni deploy, dipendenze pinnate per SHA, zizmor sui workflow, gitleaks su tutta la storia.
Cloud & IaC
AWS (Lambda, SQS, S3, IAM, VPC), Kubernetes / K3s, Terraform, Cloudflare Tunnel.
Database
PostgreSQL + PostGIS, Redis, MongoDB, SQLite FTS5, per il geospaziale e il caching ad alte prestazioni.
Deploy & Observability
Docker e K3s, CI/CD su GitHub Actions; Sentry, Langfuse, Prometheus e Grafana.
Certificazioni · ognuna verificabile alla fonte
Security
Questa pagina fa l’audit di sé stessa. La tabella qui sotto non è una dichiarazione: è letta dal vivo dagli header di risposta che il tuo browser ha appena ricevuto.
$ header di sicurezza serviti da questa pagina
FONTE: HEAD SELF · LIVElettura degli header di risposta…
Gli header sono applicati all’edge (Cloudflare) e letti live dalla risposta di questa pagina, quindi in locale possono risultare assenti.
Il terminale di questa pagina stampa testo scritto da un modello. Perché quel testo non diventi codice non basta fidarsi del modello: serve che la pagina si rifiuti di eseguire qualunque cosa inline. Le ultime due righe sono quel rifiuto, letto dalla policy che il tuo browser ha appena applicato.
Appuntamenti
Trenta minuti, gratis, nessun impegno. Fuso orario gestito in automatico, conferma via email, senza scambi di messaggi per trovare un orario. Se poi lavoriamo insieme, la prima giornata la paghi solo se ti convince.
CAL.EU — CARICATO SU RICHIESTA
Il calendario è servito da Cal.eu, una terza parte. Finché non clicchi non viene caricato nulla, e nulla lascia il tuo browser.