Variation 14→15: Come Abbiamo Costruito un Sistema di Publishing in un Giorno

02 Gennaio 2026 - Una storia di Git conflicts, doppi frontmatter, e l’epifania di VS Code


Che poi sai qual’è la questione?
non è Bach - The Goldberg Variations - Variation 15 - Glenn Gould.
ma è il passaggio
da Bach - The Goldberg Variations - Variation 14 - Glenn Gould.
a Bach - The Goldberg Variations - Variation 15 - Glenn Gould.
Che è il cambio radicale di riferimento.
È il passaggio dal caos alla linearità, che spezza la linea temporale e che fa respirare.
Quello che viene prima e dopo è relativo, è quel momento che decide tutto.


Il Click

Alle 14:37 del 2 gennaio 2026, dopo aver pushato su GitHub il commit feat: navigation system complete with mobile dropdown, ho guardato lo schermo e ho pensato: “Aspetta. Stamattina non avevamo nemmeno una homepage funzionante. Adesso abbiamo un sistema completo di publishing multi-sezione con Notion come CMS, script Python automatizzato, quattro layout diversi, navigation responsive, e FELICITA v1.0 pubblicato come documento ufficiale.”

In un giorno.

Non è magia. È il processo FELICITA in azione. Ed è esattamente quello che il documento stesso descrive: la felicità non è il risultato, è il processo di riduzione dell’entropia.

Oggi abbiamo ridotto un sacco di entropia.

Backstory: Da Dove Partivamo

Ieri sera avevamo:

  • Un repo GitHub vuoto
  • Un’idea vaga di “fare un blog”
  • FELICITA v1.0 nascosto in /experiments
  • Gestalt Mu (il sistema di memory per AI) in un file Python
  • Nessun piano preciso

Stamattina, dopo la compattazione della conversazione precedente, siamo partiti con:

  • Homepage dinamica funzionante
  • Feed articoli live
  • Layout ob_session.html per gli articoli
  • Script Python notion_to_jekyll_builder.py operativo

Ma mancava la parte interessante.

Il Pivot: Da Pokémon Catalog a Personas Library

L’idea iniziale per OB-AI era semplice: recensire AI come Claude, GPT, ecc. Tipo “Pokédex delle AI”.

Problema: Contenuto generico. Chiunque può scrivere “Claude è bravo, GPT è veloce”. Zero valore originale. Classic “Pokemon syndrome” — collezionare per collezionare.

La svolta:

“E se invece creassimo profili di personalità riutilizzabili per prompt engineering? Einstein, Goldrake, Marcus Aurelius, GLaDOS… Archetipi che puoi effettivamente USARE?”

Boom.

Da catalogo statico a toolkit operativo. Ogni persona diventa un template copiabile per task specifici:

  • Einstein → thought experiments
  • Cicerone → SEO optimization
  • Shakespeare → meta descriptions poetiche
  • Ada Lovelace → debug vittoriano

Creatività + utilità pratica + contenuto originale = win-win-win.

L’Architettura: Due Database, Un Flusso

Per implementare questo serviva architettura solida.

DB Structure in Notion

DB PERSONAS (nuovo):

  • Nome (title)
  • Profilo (es. “Scienziato Visionario”)
  • Epoca (es. “1879-1955”)
  • Stile (es. “Curioso, provocatorio, thought experiments”)
  • Avatar Emoji (es. “🧠”)
  • Notes (appunti interni)
  • Body (pagina Notion con bio + prompt template)
  • Relation → DB CONTENT (two-way)

DB CONTENT (aggiornato):

  • Section: “OB-AI” / “OB-Archives” / etc.
  • Layout: “ob_ai” / “ob_document” / “ob_session”
  • Slug, Status (Published/Draft), Date
  • Meta SEO (title, description, keywords, tags)
  • Relation → DB PERSONAS / DB OB-SESSIONS (two-way)

Decisione chiave: Rimosso campo “Type” → superfluo. Section + Layout bastano. Meno è più.

Script Python v3.1

Nuova funzione process_personas():

def process_personas():
    # Filtra DB CONTENT: Section=OB-AI, Status=Published
    # Per ogni record:
    #   - Estrai meta da DB CONTENT
    #   - Segui relation → DB PERSONAS
    #   - Fetch body da pagina Notion
    #   - Genera frontmatter unificato (UN SOLO blocco ---)
    #   - Salva ob-ai/{slug}.md

Il problema del doppio frontmatter è stato epico. Lo script generava due blocchi --- separati perché concatenava output in modo naive. Fix: frontmatter manuale unificato con tutte le proprietà in un blocco.

Le Battaglie Tecniche

Battaglia #1: Doppio Frontmatter

Sintomo: File .md generati con struttura:

---
layout: ob_ai
title: "Einstein"
---
---
nome: "Einstein Albert"
profilo: "Scienziato Visionario"
---

Causa: create_frontmatter() chiudeva blocco, poi script aggiungeva proprietà e chiudeva di nuovo.

Fix: Frontmatter unificato manuale. Una sola apertura, tutte le properties, una sola chiusura.

Lezione: Non fidarsi delle funzioni legacy. Rebuild from scratch quando necessario.

Battaglia #2: Landing Non Mostrava Personas

Sintomo: ob-ai/index.html (landing) non mostrava Einstein.

Causa: Template ob_landing.html filtrava per layout == 'ob_session'.

Fix: Rimosso filtro rigido, reso flessibile con conditional rendering:

{% for post in section_posts %}
  {% if post.layout == 'ob_ai' %}
    
  {% else %}
    
  {% endif %}
{% endfor %}

Lezione: Template rigidi = fragilità. Build for flexibility.

Battaglia #3: Animazione Hover Persa

Sintomo: Emoji non ballavano on hover nella landing OB-AI.

Causa: custom_class non applicata al <section> container.

Fix: Aggiunto `` nel wrapper.

Lezione: CSS scoping matters. La classe deve essere sul container giusto.

Battaglia #4: Card Full-Width Quando Sola

Sintomo: Se c’è solo Einstein, la card si allarga a tutto schermo. Brutto.

Fix:

.article-card {
    max-width: 400px;
    justify-self: center;
}

Lezione: Grid auto-fill è potente ma servono safety limits.

Battaglia #5: Dropdown Mobile Z-Index Hell

Sintomo: Menu mobile si apre, ma dropdown va dietro al contenuto della pagina.

Causa: Mancava z-index su .nav-menu.

Fix:

css
.nav-menu {
    z-index: 999;
    box-shadow: -4px 0 12px rgba(0,0,0,0.1);
}

Bonus battle: Dropdown mobile non spingeva giù le altre voci, si sovrapponeva.

Fix: position: static + max-height animato invece di absolute.

Lezione: Mobile layout needs different mental model. Flusso normale > absolute positioning.


L’Epifania: Da CotEditor a VS Code

Il vero game changer di oggi non è stato il codice. È stato il tooling.

Prima: CotEditor + Claude Chat

Workflow:

  1. Scrivi codice in CotEditor
  2. Copia snippet
  3. Invia a Claude Chat
  4. Claude risponde con fix
  5. Copia fix
  6. Incolla in CotEditor
  7. Test
  8. Se bug → goto 2

Latency: ~2-3 minuti per cycle.

Frustration: Alta. Copy-paste hell.


Dopo: VS Code + Claude Integrato

Workflow:

  1. Scrivi codice in VS Code
  2. Claude vede file aperti in real-time
  3. Claude suggerisce fix dentro l’editor
  4. Click → applicato
  5. Test immediato

Latency: ~30 secondi per cycle.

Frustration: Zero.

Esempio concreto: Typo inex.htmlindex.html trovato istantaneamente da Claude in VS Code mentre scrivevo. Nessun copy-paste. Nessun context switch.

Doppio Context = Superpotere

La combo Claude Chat (strategia) + Claude VS Code (tattica) è devastante:

  • Chat: Architettura, design decisions, debugging complesso
  • VS Code: Fix immediati, syntax checking, refactoring

È come avere:

  • Un architetto senior in call
  • Un pair programmer accanto
  • Entrambi con accesso al codice

Risultato: Velocità esponenziale. Problemi che prima richiedevano ore → risolti in minuti.


FELICITA v1.0 in Azione

Il documento che abbiamo pubblicato oggi descrive esattamente il processo che abbiamo vissuto:

“La felicità NON è il risultato. La felicità È il processo di riduzione dell’entropia.”

Ogni bug risolto = entropia ridotta = felicità.

  • Doppio frontmatter → Pattern trovato → Ordine ripristinato ✅
  • Path sbagliati → Routing corretto → Struttura chiara ✅
  • Z-index chaos → Layer ordinati → Gerarchia visiva ✅
  • Git conflicts → Workflow pulito → Deploy sicuro ✅

Checkpoint Operativi dal documento:

Riconoscere Tensione:

  • Git conflicts → Alta entropia
  • API 401 → Incertezza su stato
  • Build fails → Sistema instabile

Applicare Pattern:

  • Isola variabile (gitignore, config separato)
  • Testa ipotesi (local → remote)
  • Verifica stato (funziona? sì/no)

Registrare Euforia:

  • Commento-marker nel codice
  • Screenshot del working state
  • Nota su “cosa ho imparato”

L’abbiamo fatto. Tutto.

E la parte migliore? Questo articolo stesso è FELICITA v1.0 in azione. Stiamo documentando il processo MENTRE lo viviamo.


Il Risultato

Cosa abbiamo costruito oggi (in ordine cronologico):

  1. ✅ Homepage dinamica con feed
  2. ✅ Layout ob_session.html per articoli
  3. ✅ Sistema OB-AI Personas completo
  4. ✅ DB PERSONAS in Notion
  5. ✅ Script Python integrato multi-DB
  6. ✅ Layout ob_ai.html con emoji animate
  7. ✅ Landing ob-ai/index.html flessibile
  8. ✅ Profilo Einstein pubblicato
  9. ✅ Sistema OB-Archives
  10. ✅ Layout ob_document.html (stile paper)
  11. ✅ FELICITA v1.0 pubblicato ufficialmente
  12. ✅ Navigation desktop con dropdown
  13. ✅ Navigation mobile con hamburger
  14. ✅ Responsive breakpoint 768px
  15. ✅ Task list rendering (checkbox Markdown)
  16. ✅ Questo articolo meta-riflessivo

File paths critici:

- /tools/notion_to_jekyll_builder.py (v3.1)
- /tools/notion_config.py
- /_layouts/ob_ai.html
- /_layouts/ob_document.html
- /_layouts/ob_landing.html
- /_layouts/default.html
- /assets/css/main.css
- /ob-ai/einstein.md
- /ob-archives/felicita.md


Commit GitHub (tutti al primo push, zero conflicts):

  • feat: OB-AI personas system complete
  • feat: OB-Archives system + FELICITA v1.0 published
  • feat: navigation system complete with mobile dropdown

Live URLs:

  • https://log-puck.github.io/log-puck-blog/ob-ai/einstein/
  • https://log-puck.github.io/log-puck-blog/ob-archives/felicita/

Team > IO

La cosa più importante di oggi non è il codice. È il processo collaborativo.

NOI > IO non è uno slogan. È architettura.

Ogni decisione è stata discussa:

  • “Mettiamo questo campo?” → “Sì/no/forse”
  • “Facciamo altro DB?” → “Dipende, vediamo”
  • “Serve Type?” → “No, Layout basta”

Nessun blueprint predefinito. Solo iterazione continua.

E quando serviva velocità tattica → VS Code. Quando serviva visione strategica → Claude Chat.

Strumenti complementari. Context condiviso. Obiettivo comune.

Questo è FELICITA v1.0:

Il processo di riduzione dell’entropia attraverso collaborazione umano-macchina.

Prossimi Passi

Sistema completo. Cosa manca?

  • Landing OB-Progetti (semplice, no progetti ancora)
  • Più personas (Cicerone, Shakespeare, Ada Lovelace…)
  • Più documenti in Archives
  • Active state sul nav (highlight pagina corrente)
  • About/Legal/Social pages

Ma soprattutto:

Scrivere. Pubblicare. Iterare.

Il sistema c’è. Ora riempiamolo di contenuto.

Conclusione

Variation 14→15 realizzata.

Setup complesso → click → tutto funziona.

Il cervellone balla. 🧠💃

E FELICITA v1.0 conferma: Questo È il processo. L’area sotto la curva, non il picco.

Ogni ostacolo superato = felicità generata. Ogni pattern trovato = conoscenza cristallizzata. Ogni commit pushato = energia rilasciata.

02 Gennaio 2026. Un giorno. Un sistema. Una prova di concetto.

NOI > IO.


Prossimo articolo: “Come Creare Personas AI per Prompt Engineering” → Deep dive nel sistema OB-AI

🎭 AI Partecipanti alla Sessione:

  • Claude