<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Note dal lavoro — Nicola Vitrani</title>
    <link>https://www.nicolavitrani.it/articoli/</link>
    <atom:link href="https://www.nicolavitrani.it/feed.xml" rel="self" type="application/rss+xml" />
    <description>Appunti tecnici su frontend, backend, vibe coding e agenti AI.</description>
    <language>it</language>
    <item>
      <title>API sicure da ripetere: idempotenza e retry</title>
      <link>https://www.nicolavitrani.it/articoli/api-idempotenza-retry-sicuri/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/api-idempotenza-retry-sicuri/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>Backend</category>
      <description>Cosa succede quando una richiesta riesce ma la risposta si perde: Idempotency-Key, vincoli univoci e come evitare ordini duplicati.</description>
    </item>
    <item>
      <title>Leggere EXPLAIN in MySQL senza paura (e scegliere l’indice giusto)</title>
      <link>https://www.nicolavitrani.it/articoli/mysql-explain-indici/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/mysql-explain-indici/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>Backend</category>
      <description>Le quattro colonne di EXPLAIN che contano, i motivi per cui un indice non viene usato e come costruire un indice composto per una query reale.</description>
    </item>
    <item>
      <title>Code e job in Laravel: spostare il lavoro lento fuori dalla richiesta</title>
      <link>https://www.nicolavitrani.it/articoli/laravel-code-job/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/laravel-code-job/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>Backend</category>
      <description>Dispatch, tentativi, backoff e job falliti: come usare le code di Laravel in modo affidabile e cosa controllare dopo ogni deploy.</description>
    </item>
    <item>
      <title>Prompt per agenti di coding: criteri di accettazione, non desideri</title>
      <link>https://www.nicolavitrani.it/articoli/prompt-criteri-di-accettazione/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/prompt-criteri-di-accettazione/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>AI</category>
      <description>Un prompt efficace descrive come verificare il risultato. Una struttura semplice con contesto, vincoli e controlli concreti.</description>
    </item>
    <item>
      <title>Git con gli agenti AI: branch, commit piccoli e come tornare indietro</title>
      <link>https://www.nicolavitrani.it/articoli/git-con-agenti-ai/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/git-con-agenti-ai/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>AI</category>
      <description>Come usare Git per lavorare in fretta con un agente senza paura di rompere qualcosa: branch dedicati, diff letto e comandi da non delegare.</description>
    </item>
    <item>
      <title>Vibe coding con criterio: dalla scintilla al codice che puoi mantenere</title>
      <link>https://www.nicolavitrani.it/articoli/vibe-coding-con-criterio/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/vibe-coding-con-criterio/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>AI</category>
      <description>Come lavoro con un agente AI senza perdere il controllo: vincoli prima del codice, passi piccoli, diff letto per intero e un commit solo quando sono io a dirlo.</description>
    </item>
    <item>
      <title>Scrivere istruzioni per un agente: CLAUDE.md, AGENTS.md e regole di Cursor</title>
      <link>https://www.nicolavitrani.it/articoli/istruzioni-per-agenti-claude-agents-cursor/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/istruzioni-per-agenti-claude-agents-cursor/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>AI</category>
      <description>Cosa mettere nel file di istruzioni che l’agente legge a ogni sessione, come tenerlo corto e come far diventare ogni errore ripetuto una riga utile.</description>
    </item>
    <item>
      <title>Verificare il lavoro di un agente: se non l’hai misurato, non è finito</title>
      <link>https://www.nicolavitrani.it/articoli/verificare-il-lavoro-di-un-agente/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/verificare-il-lavoro-di-un-agente/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>AI</category>
      <description>Tre errori reali capitati lavorando con un agente AI su questo sito e le verifiche che li avrebbero intercettati prima: build, ambiente di sviluppo, screenshot e metriche.</description>
    </item>
    <item>
      <title>Cursor, Claude Code o Codex: come scegliere lo strumento giusto</title>
      <link>https://www.nicolavitrani.it/articoli/cursor-claude-code-codex-come-scegliere/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/cursor-claude-code-codex-come-scegliere/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>AI</category>
      <description>Un criterio per scegliere tra editor con AI integrata e agenti da terminale o cloud: dove lavori, quanto controllo vuoi, quanto dura il compito e cosa puoi condividere.</description>
    </item>
    <item>
      <title>Query N+1 in Laravel: come riconoscerle e toglierle</title>
      <link>https://www.nicolavitrani.it/articoli/laravel-query-n-piu-1/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/laravel-query-n-piu-1/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>Backend</category>
      <description>Il problema più comune delle pagine lente in Laravel: come individuarlo, come risolverlo con l’eager loading e come far fallire i lazy load accidentali in sviluppo.</description>
    </item>
    <item>
      <title>Paginazione in Laravel: offset o cursore?</title>
      <link>https://www.nicolavitrani.it/articoli/paginazione-offset-o-cursore-laravel/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/paginazione-offset-o-cursore-laravel/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>Backend</category>
      <description>paginate, simplePaginate e cursorPaginate a confronto: costo reale, comportamento quando i dati cambiano e quale scegliere per una tabella, un feed o un’API.</description>
    </item>
    <item>
      <title>Quando togliere un effetto: da three.js a una griglia di punti in CSS</title>
      <link>https://www.nicolavitrani.it/articoli/dal-3d-alla-griglia-di-punti/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/dal-3d-alla-griglia-di-punti/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>Frontend</category>
      <description>Perché ho sostituito un reticolo 3D in three.js con una griglia di punti in CSS nella hero del mio portfolio, e cosa ho imparato sul peso visivo e tecnico di un effetto.</description>
    </item>
    <item>
      <title>Testo che si illumina allo scroll: come non rompere il contrasto</title>
      <link>https://www.nicolavitrani.it/articoli/testo-che-si-illumina-contrasto/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/testo-che-si-illumina-contrasto/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>Frontend</category>
      <description>Un effetto di lettura progressiva parte da parole quasi invisibili: cosa chiede WCAG sul contrasto, come l’ho misurato con Lighthouse e quale opacità minima ho scelto.</description>
    </item>
    <item>
      <title>Rendere indicizzabile una SPA React con Vite: prerender, lingue e sitemap</title>
      <link>https://www.nicolavitrani.it/articoli/spa-react-prerender-lingue-sitemap/</link>
      <guid isPermaLink="true">https://www.nicolavitrani.it/articoli/spa-react-prerender-lingue-sitemap/</guid>
      <pubDate>Sat, 24 Oct 2026 07:00:00 GMT</pubDate>
      <category>Frontend</category>
      <description>Come ho trasformato un portfolio React a pagina singola in pagine statiche per lingua, con canonical, hreflang, sitemap generata in build e qualche ottimizzazione di caricamento.</description>
    </item>
  </channel>
</rss>
