<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nicola Lorenzini</title>
    <description>The latest articles on DEV Community by Nicola Lorenzini (@n4k48).</description>
    <link>https://dev.to/n4k48</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4109403%2F4a623210-d465-431a-96c5-7d7c164681f4.png</url>
      <title>DEV Community: Nicola Lorenzini</title>
      <link>https://dev.to/n4k48</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/n4k48"/>
    <language>en</language>
    <item>
      <title>MyZubster MVP — Dev Update: dal Ledger al Revenue &amp; Cost Simulator</title>
      <dc:creator>Nicola Lorenzini</dc:creator>
      <pubDate>Fri, 18 Sep 2026 21:23:44 +0000</pubDate>
      <link>https://dev.to/n4k48/myzubster-mvp-dev-update-dal-ledger-al-revenue-cost-simulator-1djg</link>
      <guid>https://dev.to/n4k48/myzubster-mvp-dev-update-dal-ledger-al-revenue-cost-simulator-1djg</guid>
      <description>&lt;p&gt;MyZubster MVP — Dev Update: From Ledger to Revenue &amp;amp; Cost Simulation&lt;/p&gt;

&lt;p&gt;Today we took another important step in the evolution of MyZubster MVP: moving from recording economic events to a system that can also simulate revenue, costs, and margins without contaminating real accounting data.&lt;/p&gt;

&lt;p&gt;At the core is the MYZ Ledger, where economic events are recorded with explicit revenue sources, auditable allocation rules, and UTC timestamps. From these events, the system derives the MYZ Balance, while keeping internal accounting clearly separated from payments, wallets, custody, and on-chain activity.&lt;/p&gt;

&lt;p&gt;We have now introduced the Revenue &amp;amp; Cost Simulator.&lt;/p&gt;

&lt;p&gt;It allows us to model scenarios using variables such as transaction volume, average transaction value, Marketplace commission, Zorgax Pro and Developer users, payment processing assumptions, AI costs, hosting costs, and other operating costs.&lt;/p&gt;

&lt;p&gt;The calculation flow is straightforward:&lt;/p&gt;

&lt;p&gt;GMV → Marketplace + Zorgax revenue → Costs → Monthly Margin → Annualized Scenario&lt;/p&gt;

&lt;p&gt;The most important architectural rule is that a simulation never creates an economic event in the MYZ Ledger.&lt;/p&gt;

&lt;p&gt;A simulated result is not recorded revenue.&lt;br&gt;
It is not a payout.&lt;br&gt;
It is not wallet funds.&lt;br&gt;
It is not certified profit.&lt;br&gt;
And it is not a financial forecast.&lt;/p&gt;

&lt;p&gt;We verified this boundary at runtime: after running the simulator, the Ledger remained at 3 events, confirming that simulated economic data was not persisted.&lt;/p&gt;

&lt;p&gt;On the engineering side, the project has also reached 47 passing tests, covering revenue calculations, cost and margin calculations, negative-input validation, and the simulator API.&lt;/p&gt;

&lt;p&gt;The next layer is the UI: bringing the Revenue &amp;amp; Cost Simulator directly into the MyZubster dashboard alongside MYZ Balance, My Assets, Revenue History, and MYZ Ledger.&lt;/p&gt;

&lt;p&gt;The direction is becoming increasingly clear:&lt;/p&gt;

&lt;p&gt;Evidence first. Economics explicit.&lt;/p&gt;

&lt;p&gt;Don't ask AI to invent value.&lt;/p&gt;

&lt;p&gt;Record the facts.&lt;br&gt;
Declare the rules.&lt;br&gt;
Simulate the scenarios.&lt;br&gt;
Keep reality separate from projections.&lt;/p&gt;

&lt;p&gt;N4K48 × MyZubster — building in public.&lt;/p&gt;

&lt;h1&gt;
  
  
  MyZubster #N4K48 #BuildInPublic #DevLog #AI #SoftwareDevelopment #FinTech #Zorgax #MVP
&lt;/h1&gt;

</description>
      <category>ledger</category>
      <category>simulator</category>
      <category>revenue</category>
      <category>myzubster</category>
    </item>
    <item>
      <title>🛠️ MyZubster: Moving from Generative RAG to Evidence-First AI</title>
      <dc:creator>Nicola Lorenzini</dc:creator>
      <pubDate>Fri, 18 Sep 2026 19:36:21 +0000</pubDate>
      <link>https://dev.to/n4k48/myzubster-moving-from-generative-rag-to-evidence-first-ai-3of6</link>
      <guid>https://dev.to/n4k48/myzubster-moving-from-generative-rag-to-evidence-first-ai-3of6</guid>
      <description>&lt;p&gt;🛠️ MyZubster: Moving from Generative RAG to Evidence-First AI&lt;/p&gt;

&lt;p&gt;Today we made an important step forward in the MyZubster AI stack.&lt;/p&gt;

&lt;p&gt;During an end-to-end test, we found a concrete failure mode:&lt;/p&gt;

&lt;p&gt;The knowledge base clearly contained:&lt;/p&gt;

&lt;p&gt;status = RECORDED&lt;br&gt;
success = true&lt;br&gt;
paymentRequired = false&lt;br&gt;
onchainRecorded = false&lt;/p&gt;

&lt;p&gt;Yet when asked:&lt;/p&gt;

&lt;p&gt;“Is the handover recorded on blockchain?”&lt;/p&gt;

&lt;p&gt;the LLM could still answer incorrectly:&lt;/p&gt;

&lt;p&gt;“It is recorded on blockchain.”&lt;/p&gt;

&lt;p&gt;The problem wasn't Qdrant. The correct source was being retrieved.&lt;/p&gt;

&lt;p&gt;The problem was letting an LLM make the final decision about a structured boolean that the system already knows with certainty.&lt;/p&gt;

&lt;p&gt;🔎 The solution&lt;/p&gt;

&lt;p&gt;We introduced structured metadata into MyZubster observations:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "status": "RECORDED",&lt;br&gt;
  "success": true,&lt;br&gt;
  "paymentRequired": false,&lt;br&gt;
  "onchainRecorded": false,&lt;br&gt;
  "handoverId": "6aab8faca70ce84f926d0b41",&lt;br&gt;
  "method": "HAND_DELIVERY"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The metadata is preserved in the observation and indexed alongside the RAG content.&lt;/p&gt;

&lt;p&gt;We then changed the /api/ai/ask flow to:&lt;/p&gt;

&lt;p&gt;question&lt;br&gt;
   ↓&lt;br&gt;
Qdrant retrieval&lt;br&gt;
   ↓&lt;br&gt;
authoritative metadata?&lt;br&gt;
   ├── yes → deterministic answer&lt;br&gt;
   └── no  → LLM / RAG&lt;/p&gt;

&lt;p&gt;So questions such as:&lt;/p&gt;

&lt;p&gt;“What is the status?”&lt;br&gt;
“Is it recorded on blockchain?”&lt;br&gt;
“Is payment required?”&lt;br&gt;
“Was the operation successful?”&lt;/p&gt;

&lt;p&gt;can be answered directly from authoritative structured data.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Status: RECORDED.&lt;br&gt;
Blockchain recording: no.&lt;/p&gt;

&lt;p&gt;No interpretation by the model.&lt;br&gt;
No probability involved.&lt;br&gt;
No false accidentally becoming true.&lt;/p&gt;

&lt;p&gt;🤖 What about Ollama?&lt;/p&gt;

&lt;p&gt;We didn't remove the LLM.&lt;/p&gt;

&lt;p&gt;Ollama is still used when the question requires natural-language reasoning and there isn't enough structured metadata to answer deterministically.&lt;/p&gt;

&lt;p&gt;We also made the RAG context more explicit:&lt;/p&gt;

&lt;p&gt;[SOURCE 1]&lt;br&gt;
description=...&lt;br&gt;
metadata={"onchainRecorded": false, ...}&lt;/p&gt;

&lt;p&gt;and strengthened the prompt with an evidence-first approach: the model should use only facts explicitly present in the retrieved sources.&lt;/p&gt;

&lt;p&gt;⚙️ Local inference optimization&lt;/p&gt;

&lt;p&gt;For the local test environment we also moved to:&lt;/p&gt;

&lt;p&gt;qwen2.5:0.5b&lt;/p&gt;

&lt;p&gt;with:&lt;/p&gt;

&lt;p&gt;AI_CONTEXT_LIMIT=1&lt;/p&gt;

&lt;p&gt;This reduced unnecessary context and improved response time during the test.&lt;/p&gt;

&lt;p&gt;🧪 Testing&lt;/p&gt;

&lt;p&gt;We added coverage for:&lt;/p&gt;

&lt;p&gt;structured metadata persistence;&lt;br&gt;
metadata inclusion in the RAG prompt;&lt;br&gt;
authoritative metadata responses;&lt;br&gt;
existing AI API behavior.&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;p&gt;27 passed&lt;/p&gt;

&lt;p&gt;The changes were committed and pushed to main:&lt;/p&gt;

&lt;p&gt;e680f54 Harden grounded AI metadata answers&lt;br&gt;
💡 The bigger lesson&lt;/p&gt;

&lt;p&gt;A RAG system shouldn't ask an LLM to interpret something the software already knows with certainty.&lt;/p&gt;

&lt;p&gt;If the database says:&lt;/p&gt;

&lt;p&gt;onchainRecorded = false&lt;/p&gt;

&lt;p&gt;the answer should come from that fact—not from the model's probability distribution.&lt;/p&gt;

&lt;p&gt;LLMs for interpretation.&lt;br&gt;
Structured data for authoritative decisions.&lt;br&gt;
RAG for evidence.&lt;/p&gt;

&lt;p&gt;That's the direction we're taking with MyZubster:&lt;/p&gt;

&lt;p&gt;AI that is not only grounded, but verifiable.&lt;/p&gt;

&lt;h1&gt;
  
  
  AI #RAG #LLM #Ollama #Qdrant #Python #Flask #Docker #SoftwareEngineering #AIEngineering #MyZubster
&lt;/h1&gt;

</description>
      <category>ollama</category>
      <category>ai</category>
      <category>myzubster</category>
      <category>docker</category>
    </item>
    <item>
      <title>🚀 **DEV UPDATE — MyZubster MVP: Local AI + RAG Knowledge Pipeline**</title>
      <dc:creator>Nicola Lorenzini</dc:creator>
      <pubDate>Fri, 18 Sep 2026 18:22:03 +0000</pubDate>
      <link>https://dev.to/n4k48/dev-update-myzubster-mvp-local-ai-rag-knowledge-pipeline-4p9c</link>
      <guid>https://dev.to/n4k48/dev-update-myzubster-mvp-local-ai-rag-knowledge-pipeline-4p9c</guid>
      <description>&lt;p&gt;🚀 &lt;strong&gt;DEV UPDATE — MyZubster MVP: Local AI + RAG Knowledge Pipeline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Oggi ho completato un nuovo step del mio progetto &lt;strong&gt;MyZubster MVP / N4K48&lt;/strong&gt;: un sistema AI locale che può interrogare le osservazioni del progetto e una knowledge base versionata su GitHub.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Repository&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;Commit del nuovo RAG&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp/commit/8da7435ddc1b9ae8b2f5c2eea5debd2df4bc5f47" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp/commit/8da7435ddc1b9ae8b2f5c2eea5debd2df4bc5f47&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Come funziona
&lt;/h3&gt;

&lt;p&gt;La pipeline locale è:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Knowledge / Observations → Embeddings → Qdrant → Retrieval → Ollama → Mistral → risposta con fonti&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Il progetto usa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; per eseguire i modelli AI localmente;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nomic-embed-text&lt;/strong&gt; per trasformare documenti e domande in embedding;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Qdrant&lt;/strong&gt; come vector database;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mistral&lt;/strong&gt; per generare la risposta finale;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flask API&lt;/strong&gt; come livello applicativo;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker Compose&lt;/strong&gt; per orchestrare API, Qdrant, Ollama e Open WebUI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Cosa abbiamo cambiato
&lt;/h3&gt;

&lt;p&gt;Prima, ogni domanda inviata all'AI poteva causare una nuova indicizzazione delle osservazioni.&lt;/p&gt;

&lt;p&gt;Ora abbiamo separato le due responsabilità:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WRITE&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;create observation → persist → embed → index in Qdrant&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;READ / ASK&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;question → embed question → search Qdrant → retrieve context → Mistral → answer&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Questo evita di re-indicizzare tutto a ogni domanda e rende il RAG più vicino a una vera architettura di retrieval.&lt;/p&gt;

&lt;h3&gt;
  
  
  Knowledge Base
&lt;/h3&gt;

&lt;p&gt;Ho aggiunto anche una knowledge base Markdown versionata direttamente nel repository:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;knowledge/N4K48.md&lt;/code&gt;&lt;br&gt;
&lt;code&gt;knowledge/ROADMAP.md&lt;/code&gt;&lt;br&gt;
&lt;code&gt;knowledge/ZORGAX.md&lt;/code&gt;&lt;br&gt;
&lt;code&gt;knowledge/GALLERY.md&lt;/code&gt;&lt;br&gt;
&lt;code&gt;knowledge/PROFILE.md&lt;/code&gt;&lt;br&gt;
&lt;code&gt;knowledge/README.md&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Uno script dedicato:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;scripts/ingest_knowledge.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;divide i documenti in chunk, genera embedding locali e li registra in Qdrant usando ID deterministici.&lt;/p&gt;

&lt;p&gt;Nel test attuale:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;38 knowledge chunks + 4 observations = 42 vector points&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Test
&lt;/h3&gt;

&lt;p&gt;La suite locale è passata:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;25/25 tests ✅&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Abbiamo poi eseguito una vera richiesta RAG:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Qual è lo stato del collegamento tra Nicola Comics e il Zorgax pubblico?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Risultato:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTTP 200 — 80.75 secondi&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Il sistema ha recuperato informazioni dalla knowledge base e ha correttamente mantenuto un confine importante: il collegamento pubblico Zorgax end-to-end &lt;strong&gt;non è ancora verificato&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Il retrieval in questo test ha selezionato due chunk di &lt;code&gt;ROADMAP.md&lt;/code&gt; invece di &lt;code&gt;ZORGAX.md&lt;/code&gt;: quindi il prossimo lavoro sarà migliorare ranking, chunking e pertinenza delle fonti, oltre alle prestazioni del modello locale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Evidence first
&lt;/h3&gt;

&lt;p&gt;Una regola importante del progetto resta:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;concept ≠ evidence&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un elemento viene dichiarato verificato solo quando esiste una prova tecnica concreta: test, commit, runtime, osservazione o altra evidenza controllabile.&lt;/p&gt;

&lt;p&gt;Per esempio, Nicola Comics può avere una tavola nello stato &lt;code&gt;NFT_CANDIDATE&lt;/code&gt;, ma questo &lt;strong&gt;non significa che sia stata mintata&lt;/strong&gt;. Allo stesso modo, l'adapter Zorgax locale esiste, ma il collegamento con il Zorgax pubblico deve ancora essere provato end-to-end.&lt;/p&gt;

&lt;h3&gt;
  
  
  Next
&lt;/h3&gt;

&lt;p&gt;I prossimi step sono:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;better retrieval → smaller/faster context → Zorgax-specific retrieval → public E2E verification&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;L'obiettivo è costruire progressivamente un assistente MyZubster capace di lavorare sulle informazioni reali del progetto, mantenendo separate visione, storytelling e prove tecniche.&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;MyZubster MVP&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;N4K48 knowledge&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp/tree/main/knowledge" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp/tree/main/knowledge&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;RAG ingestion script&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp/blob/main/scripts/ingest_knowledge.py" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp/blob/main/scripts/ingest_knowledge.py&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  MyZubster #RAG #LocalAI #Ollama #Qdrant #Mistral #AI #OpenSource #Docker #Python #N4K48 #Zorgax #DevLog
&lt;/h1&gt;

</description>
      <category>n4k48</category>
      <category>myzubster</category>
      <category>mvp</category>
      <category>local</category>
    </item>
    <item>
      <title>🛠️ MyZubster Dev Update — Local AI + RAG</title>
      <dc:creator>Nicola Lorenzini</dc:creator>
      <pubDate>Fri, 18 Sep 2026 17:59:24 +0000</pubDate>
      <link>https://dev.to/n4k48/myzubster-dev-update-local-ai-rag-1pm6</link>
      <guid>https://dev.to/n4k48/myzubster-dev-update-local-ai-rag-1pm6</guid>
      <description>&lt;p&gt;🛠️ &lt;strong&gt;MyZubster Dev Update — Local AI + RAG&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today we made an important step forward in MyZubster’s local AI infrastructure.&lt;/p&gt;

&lt;p&gt;We now have a local stack built around:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MyZubster API → Qdrant → Ollama → Mistral&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;with &lt;code&gt;nomic-embed-text&lt;/code&gt; generating embeddings and Mistral running locally to generate answers.&lt;/p&gt;

&lt;p&gt;🔗 MyZubster MVP&lt;br&gt;
&lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 Ollama&lt;br&gt;
&lt;a href="https://ollama.com/" rel="noopener noreferrer"&gt;https://ollama.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 Qdrant&lt;br&gt;
&lt;a href="https://qdrant.tech/" rel="noopener noreferrer"&gt;https://qdrant.tech/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What changed?
&lt;/h3&gt;

&lt;p&gt;The main work today was on the &lt;strong&gt;RAG — Retrieval-Augmented Generation — pipeline&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Previously, every AI question caused MyZubster to regenerate embeddings for all observations and upsert them into Qdrant again before searching.&lt;/p&gt;

&lt;p&gt;We separated &lt;strong&gt;indexing&lt;/strong&gt; from &lt;strong&gt;retrieval&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When an observation is recorded&lt;/strong&gt;&lt;br&gt;
→ MyZubster stores it&lt;br&gt;
→ its embedding is generated&lt;br&gt;
→ it is indexed in Qdrant&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When a question is asked&lt;/strong&gt;&lt;br&gt;
→ only the question embedding is generated&lt;br&gt;
→ Qdrant retrieves the most relevant information&lt;br&gt;
→ that context is passed to Mistral&lt;br&gt;
→ Mistral generates the answer&lt;/p&gt;

&lt;p&gt;This avoids repeatedly indexing the same observations and moves MyZubster toward a persistent, searchable local knowledge layer.&lt;/p&gt;

&lt;p&gt;We also worked on the &lt;strong&gt;Kefir &amp;amp; Knowledge / KF-006&lt;/strong&gt; data and made an important evidence distinction explicit:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;RECORDED&lt;/code&gt; = digitally recorded inside MyZubster&lt;br&gt;
&lt;code&gt;onchainRecorded=false&lt;/code&gt; = no blockchain registration is being claimed&lt;/p&gt;

&lt;p&gt;That distinction reflects one of the principles we are applying throughout development:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Evidence first. Claim only what the available data can actually verify.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The backend refactor was validated with the automated test suite:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;25/25 tests passing&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Next step
&lt;/h3&gt;

&lt;p&gt;The next stage is to connect the broader MyZubster knowledge base — including N4K48, Zorgax, roadmap and project documentation — to the same RAG architecture, with a consistent data schema, deterministic indexing and duplicate control.&lt;/p&gt;

&lt;p&gt;The goal is not simply to build another chatbot.&lt;/p&gt;

&lt;p&gt;The goal is to build a &lt;strong&gt;local MyZubster AI that can retrieve and reason over the project’s own knowledge and evidence.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  MyZubster #LocalAI #RAG #Ollama #Mistral #Qdrant #N4K48 #Zorgax #OpenSource #DevUpdate
&lt;/h1&gt;

</description>
      <category>local</category>
      <category>ai</category>
      <category>zorgax</category>
      <category>myzubster</category>
    </item>
    <item>
      <title>From Docker to Real Services: My Learning Journey with MyZubster</title>
      <dc:creator>Nicola Lorenzini</dc:creator>
      <pubDate>Fri, 18 Sep 2026 16:56:40 +0000</pubDate>
      <link>https://dev.to/n4k48/from-docker-to-real-services-my-learning-journey-with-myzubster-49hg</link>
      <guid>https://dev.to/n4k48/from-docker-to-real-services-my-learning-journey-with-myzubster-49hg</guid>
      <description>&lt;h1&gt;
  
  
  From Docker to Real Services: My Learning Journey with MyZubster
&lt;/h1&gt;

&lt;p&gt;What happens when a software project becomes a place to share your practical skills?&lt;/p&gt;

&lt;p&gt;I’m Nicola, also known as &lt;strong&gt;N4K48&lt;/strong&gt;. Through my work with Daniel Ioni and MyZubster, I’ve been learning how to connect GitHub documentation, Docker, APIs, Zorgax and real community activities.&lt;/p&gt;

&lt;p&gt;Now, two of my services are published on the MyZubster Marketplace.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚚 Need help with a move?
&lt;/h2&gt;

&lt;p&gt;I own a &lt;strong&gt;pickup with a tow hitch&lt;/strong&gt; and hold &lt;strong&gt;B, C and CE driving licences, plus CQC goods qualification&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;My listing covers small moves and bulky-item transport around Rimini. I’m also available as a driver when the customer already has a suitable vehicle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indicative driver rate: €20/hour.&lt;/strong&gt; Pickup use, fuel, tolls and any trailer costs are agreed separately.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.myzubster.com/marketplace" rel="noopener noreferrer"&gt;Open the Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Traslochi e trasporto ingombranti — pickup e autista disponibile”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then click &lt;strong&gt;“Richiedi”&lt;/strong&gt; to make a request.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 Want to learn from my driving experience?
&lt;/h2&gt;

&lt;p&gt;My second service offers individual sessions to share practical experience with transport preparation, moving logistics and working as a driver.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Price: €20 for a one-hour session&lt;/strong&gt;, in Rimini by appointment.&lt;/p&gt;

&lt;p&gt;These are experience-sharing sessions; they do not include driving lessons, licence courses or certification.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.myzubster.com/marketplace" rel="noopener noreferrer"&gt;Find my knowledge service on MyZubster&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Conoscenze pratiche da autista — patenti B, C, CE e CQC merci”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Marketplace currently opens as a shared listing page, so these links do not jump directly to an individual service.&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 What I learned while building
&lt;/h2&gt;

&lt;p&gt;The practical work taught me lessons that go beyond publishing an announcement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Docker:&lt;/strong&gt; a working command-line client does not mean the Docker engine is running.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API testing:&lt;/strong&gt; a healthy container does not guarantee that every endpoint works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Packaging:&lt;/strong&gt; excluding runtime catalog files from a Docker image can break a feature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bug reporting:&lt;/strong&gt; the exact error message makes a failed test useful.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marketplace testing:&lt;/strong&gt; currencies, prices and successful publication need checking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zorgax:&lt;/strong&gt; the comics adapter uses explicit catalog actions; its responses should remain tied to available records.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During the moving-service test, publication failed with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;E11000 duplicate key error
index: listingId_1
dup key: { listingId: null }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I reported that error and a missing EUR currency option to Daniel. After he reported deploying fixes, we repeated the flow and verified that the listings appeared.&lt;/p&gt;

&lt;p&gt;That is the learning cycle I want to keep using:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try → observe → report → fix → verify → share.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🥛 Where kefir fits in
&lt;/h2&gt;

&lt;p&gt;The Kefir &amp;amp; Knowledge pilot connects a physical exchange with documentation and learning.&lt;/p&gt;

&lt;p&gt;It also raises a useful engineering question: &lt;strong&gt;what does a digital record actually prove?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Delivery confirmation, receipt confirmation and a digital record are distinct steps. Scientific conclusions require their own observations, methods, data and review.&lt;/p&gt;

&lt;p&gt;My GitHub journey includes a kefir illustration and diagrams explaining this pathway. They describe the project and its next steps, rather than presenting completed scientific results.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Choose your next step
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Interested in…&lt;/th&gt;
&lt;th&gt;Start here&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;My skills, services and projects&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/nicolaususnicola-lgtm" rel="noopener noreferrer"&gt;My GitHub profile&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requesting either service&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.myzubster.com/marketplace" rel="noopener noreferrer"&gt;MyZubster Marketplace&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker, the comics catalog and Zorgax adapter&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp" rel="noopener noreferrer"&gt;My MVP repository&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;My development fork&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster" rel="noopener noreferrer"&gt;MyZubster fork&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The learning journey and visuals&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/nicolaususnicola-lgtm/nicolaususnicola-lgtm/blob/main/docs/percorso-daniel-kefir-zorgax.md" rel="noopener noreferrer"&gt;Kefir, Docker, MyZubster and Zorgax&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  💬 Help me test the experience
&lt;/h2&gt;

&lt;p&gt;Open the Marketplace and try to find one of my listings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can you tell what the service includes, what it costs and how to request it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Leave a comment with the step that felt clear—or the point where you got stuck. Please submit a service request only if you are interested; usability feedback can stay here in the comments.&lt;/p&gt;

&lt;p&gt;And if you’re building something similar: &lt;strong&gt;what practical skill would you turn into a useful community service?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>services</category>
      <category>myzubster</category>
      <category>zorgax</category>
    </item>
    <item>
      <title>🧪 **DEV LOG — From a Physical Kefir Handover to a Verified Digital Record**</title>
      <dc:creator>Nicola Lorenzini</dc:creator>
      <pubDate>Thu, 17 Sep 2026 07:50:13 +0000</pubDate>
      <link>https://dev.to/n4k48/dev-log-from-a-physical-kefir-handover-to-a-verified-digital-record-10od</link>
      <guid>https://dev.to/n4k48/dev-log-from-a-physical-kefir-handover-to-a-verified-digital-record-10od</guid>
      <description>&lt;p&gt;🧪 &lt;strong&gt;DEV LOG — From a Physical Kefir Handover to a Verified Digital Record&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today we completed another real-world test inside the &lt;strong&gt;MyZubster pilot&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This time, the starting point wasn't a mock transaction or test data.&lt;/p&gt;

&lt;p&gt;It was an actual physical handover of &lt;strong&gt;kefir&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal was simple: follow the event from the real world into MyZubster and verify every state without claiming anything the system couldn't prove.&lt;/p&gt;

&lt;h3&gt;
  
  
  🥛 1. Physical handover
&lt;/h3&gt;

&lt;p&gt;The kefir was handed over in person.&lt;/p&gt;

&lt;p&gt;The handover was created with:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;method: HAND_DELIVERY&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and the process moved through the physical delivery stage:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;HANDED_OVER&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🧑‍💻 2. Testing the recipient flow
&lt;/h3&gt;

&lt;p&gt;Then we tested the digital confirmation from the recipient account.&lt;/p&gt;

&lt;p&gt;During the first attempt, the system returned:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;HTTP 403 — Solo il donatore può confermare la consegna&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Instead of bypassing the error, changing data, or pretending the operation had succeeded, we stopped and documented it.&lt;/p&gt;

&lt;p&gt;That became part of the pilot evidence.&lt;/p&gt;

&lt;p&gt;After the role/action flow was verified, the recipient confirmation succeeded and the handover reached:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;RECEIVED&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ 3. Digital record completed
&lt;/h3&gt;

&lt;p&gt;The final operation successfully moved the handover to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;RECORDED&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The resulting record reported:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;success: true&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;paymentRequired: false&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;state: RECORDED&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Most importantly:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;onchainRecorded: false&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That last field matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RECORDED does not mean “recorded on blockchain.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It means the handover has been digitally recorded inside MyZubster.&lt;/p&gt;

&lt;p&gt;No blockchain transaction is being claimed because there is no verified on-chain transaction to prove.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔎 What we actually verified
&lt;/h3&gt;

&lt;p&gt;The real flow we were able to complete was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;physical handover → HANDED_OVER → RECEIVED → RECORDED&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We also verified that:&lt;/p&gt;

&lt;p&gt;✅ the transfer was a hand delivery&lt;br&gt;
✅ the recipient could confirm actual receipt&lt;br&gt;
✅ no payment was required&lt;br&gt;
✅ the digital handover record was completed&lt;br&gt;
✅ role permissions were enforced by the backend&lt;br&gt;
✅ an incorrect operation produced an HTTP 403 instead of silently succeeding&lt;br&gt;
✅ the final record explicitly reports that it was &lt;strong&gt;not recorded on-chain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is exactly why real pilots matter.&lt;/p&gt;

&lt;p&gt;A demo can show the happy path.&lt;/p&gt;

&lt;p&gt;A pilot reveals what actually happens when real people, real roles, real objects, permissions, APIs, and application state meet.&lt;/p&gt;

&lt;p&gt;And when something breaks, the error itself becomes useful evidence.&lt;/p&gt;

&lt;p&gt;Our rule remains the same:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;build → test → observe → document → fix → verify.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And another rule is becoming just as important:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't call something blockchain until the blockchain evidence actually exists.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today we didn't mint an NFT.&lt;/p&gt;

&lt;p&gt;We didn't simulate a transaction.&lt;/p&gt;

&lt;p&gt;We didn't need a payment.&lt;/p&gt;

&lt;p&gt;We proved something simpler — and real:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;a physical handover can move through a verifiable digital lifecycle inside MyZubster.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next step: keep connecting these real-world pilot events with the broader &lt;strong&gt;MyZubster × Zorgax × Nico Comics&lt;/strong&gt; ecosystem, while maintaining the same evidence-first approach.&lt;/p&gt;

&lt;p&gt;🧑‍💻 &lt;strong&gt;N4K48 × MyZubster — Pilot 2026&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  MyZubster #N4K48 #BuildInPublic #DevLog #SoftwareDevelopment #API #Zorgax #Blockchain #WebDevelopment #DigitalIdentity #OpenSource
&lt;/h1&gt;

</description>
      <category>physycak</category>
      <category>kefir</category>
      <category>verified</category>
      <category>digital</category>
    </item>
    <item>
      <title>From GitHub to a Real-World Pilot: Building N4K48 MyZubster</title>
      <dc:creator>Nicola Lorenzini</dc:creator>
      <pubDate>Thu, 17 Sep 2026 07:29:55 +0000</pubDate>
      <link>https://dev.to/n4k48/from-github-to-a-real-world-pilot-building-n4k48-x-myzubster-5gie</link>
      <guid>https://dev.to/n4k48/from-github-to-a-real-world-pilot-building-n4k48-x-myzubster-5gie</guid>
      <description>&lt;h1&gt;
  
  
  From GitHub to a Real-World Pilot: Building N4K48 × MyZubster
&lt;/h1&gt;

&lt;p&gt;I’m building &lt;strong&gt;Nicola Comics × MyZubster&lt;/strong&gt;, a project connecting my digital identity, N4K48, three comic pages, and a small software service.&lt;/p&gt;

&lt;p&gt;The goal is to bring my idea into the MyZubster metaverse through verifiable steps: create content, organize it in a catalog, expose it through an API, and test the experience with Zorgax.&lt;/p&gt;

&lt;p&gt;Alongside this, I’m participating in a separate experiment: recording a free, in-person kefir handover through MyZubster.&lt;/p&gt;

&lt;p&gt;This article covers what we built, a deployment bug we encountered, and what still needs to happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Turning an idea into a visual story
&lt;/h2&gt;

&lt;p&gt;We started with three AI-assisted comic pages, preserving the N4K48 character appearance I selected:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;From a Software Idea to the Metaverse&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Software Takes Shape&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Toward Neon Plaza&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The pages tell the story of my development journey and future ambitions. Their illustrated interfaces are not application screenshots: some scenes depict features that remain to be developed.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp/blob/main/docs/nicola-comics/GALLERY.md" rel="noopener noreferrer"&gt;Explore the comic gallery on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Turning images into a catalog
&lt;/h2&gt;

&lt;p&gt;Publishing three images is a starting point. To make them usable by software, we added a JSON catalog and an individual record for each comic.&lt;/p&gt;

&lt;p&gt;Each entry includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an identifier and title;&lt;/li&gt;
&lt;li&gt;series, episode, and description;&lt;/li&gt;
&lt;li&gt;creative contribution and AI provenance;&lt;/li&gt;
&lt;li&gt;a link to the image;&lt;/li&gt;
&lt;li&gt;its Git content hash;&lt;/li&gt;
&lt;li&gt;rights status;&lt;/li&gt;
&lt;li&gt;NFT candidacy status.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The manifest lives here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docs/nicola-comics/comics.manifest.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We also preserved earlier ecosystem reference images as separate entries, without automatically attributing them to me.&lt;/p&gt;

&lt;p&gt;The first new comic is recorded as a &lt;strong&gt;proposed NFT candidate&lt;/strong&gt;. Rights still require verification, and no mint has taken place.&lt;/p&gt;

&lt;p&gt;A file hash identifies content. By itself, it does not prove ownership or blockchain registration.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Exposing the catalog through an API
&lt;/h2&gt;

&lt;p&gt;The project uses Python and Flask. We added these endpoints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET  /api/comics
GET  /api/comics/{comic_id}
POST /api/zorgax/ask
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first returns the three comics created for the pilot. The second returns an individual record.&lt;/p&gt;

&lt;p&gt;The third is a read-only adapter intended for integration with Zorgax. It supports four explicit actions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;gallery&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List the comic pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;detail&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Retrieve a specific comic record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;candidate&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Retrieve the proposed NFT candidate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;next_steps&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Return guidance on the next steps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The adapter reads the catalog directly and constructs its response from that data. It does not independently interpret arbitrary natural-language questions, and these operations do not require Ollama or Qdrant.&lt;/p&gt;

&lt;p&gt;The same catalog functionality is available through the existing AI endpoint by specifying the &lt;code&gt;nicola-comics&lt;/code&gt; topic.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Running the project with Docker
&lt;/h2&gt;

&lt;p&gt;On my Windows PC, from the repository directory, I ran:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--ff-only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ps&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The stack includes the API, Qdrant, and Open WebUI. However, the comic catalog adapter does not use the AI services to retrieve its records.&lt;/p&gt;

&lt;p&gt;The first obstacle was Docker Desktop: the client was installed, but its Linux engine was not running. After starting Docker Desktop, &lt;code&gt;docker info&lt;/code&gt; displayed the server information, and we could build the containers.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The bug our local tests missed
&lt;/h2&gt;

&lt;p&gt;The API container reported itself as &lt;code&gt;healthy&lt;/code&gt;, but this request failed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Invoke-RestMethod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:5000/api/comics"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Catalogo fumetti temporaneamente non disponibile"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That translates to “Comic catalog temporarily unavailable.”&lt;/p&gt;

&lt;p&gt;The cause was in &lt;code&gt;.dockerignore&lt;/code&gt;: it excluded the entire &lt;code&gt;docs/&lt;/code&gt; directory, which also contained the manifest required at runtime.&lt;/p&gt;

&lt;p&gt;The catalog existed on the local filesystem, but it was never copied into the Docker image.&lt;/p&gt;

&lt;p&gt;We removed that exclusion and added catalog and adapter requests to the automated Docker verification workflow.&lt;/p&gt;

&lt;p&gt;After the fix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;git&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--ff-only&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;origin&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;docker&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;compose&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;up&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The practical lesson: &lt;strong&gt;a passing health check does not necessarily verify every application feature&lt;/strong&gt;. Our health check covered the observations endpoint, not the comic catalog.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Testing the catalog and adapter
&lt;/h2&gt;

&lt;p&gt;To retrieve the catalog:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Invoke-RestMethod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:5000/api/comics"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;ConvertTo-Json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Depth&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;6&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On my PC, the response included:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full response also contained titles, descriptions, links, and the status of each comic.&lt;/p&gt;

&lt;p&gt;Next, I tested the adapter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;@{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Show me Nicola's comics"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gallery"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ConvertTo-Json&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Invoke-RestMethod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;-Uri&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:5000/api/zorgax/ask"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;-Method&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Post&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;-ContentType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"application/json"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="se"&gt;`
&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nt"&gt;-Body&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$body&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="nv"&gt;$response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;answer&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It returned the three catalog entries, whose stored titles are in Italian:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;n4k48-comic-001 — Dall’idea software al metaverso
n4k48-comic-002 — Il software prende forma
n4k48-comic-003 — Verso Neon Plaza
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;action&lt;/code&gt; field selects the operation; changing the wording of &lt;code&gt;question&lt;/code&gt; does not translate the catalog or change the selected action.&lt;/p&gt;

&lt;p&gt;In the development environment, &lt;strong&gt;19 automated tests passed&lt;/strong&gt;, covering the new catalog alongside existing AI and observation functionality.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp/blob/main/docs/nicola-comics/ZORGAX.md" rel="noopener noreferrer"&gt;Adapter documentation and integration instructions&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7. A second pilot: an in-person kefir handover
&lt;/h2&gt;

&lt;p&gt;In parallel, we are testing a MyZubster workflow involving a physical item: a free kefir donation delivered in person.&lt;/p&gt;

&lt;p&gt;The intended sequence is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Accept the gift
→ donor confirms the handover
→ recipient confirms receipt
→ record the completed handover digitally
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;During testing, we encountered session-recognition problems and an inconsistent listing: its title displayed “Visual Laser,” while other fields classified it as kefir. These are issues to document and correct.&lt;/p&gt;

&lt;p&gt;We also observed a useful validation rule: attempting to record the completed handover before confirming receipt caused the site to reject the operation without advancing its state.&lt;/p&gt;

&lt;p&gt;At the time of writing, final registration of that handover has not been confirmed in our documented workflow.&lt;/p&gt;

&lt;p&gt;The digital record captures confirmations submitted through the site. It does not automatically certify food quality or safety, and it is not equivalent to a blockchain transaction.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. What remains before public integration
&lt;/h2&gt;

&lt;p&gt;The catalog and adapter work in my local Docker environment. That does not mean the public Zorgax service is already using them.&lt;/p&gt;

&lt;p&gt;The agreed next steps are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;prepare the service for HTTPS hosting;&lt;/li&gt;
&lt;li&gt;verify the endpoints in the deployed environment;&lt;/li&gt;
&lt;li&gt;agree on configuration and access with the MyZubster team;&lt;/li&gt;
&lt;li&gt;connect Zorgax to the service;&lt;/li&gt;
&lt;li&gt;test the complete journey together, from a request to a comic record and image.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The service address must be configurable. &lt;code&gt;localhost&lt;/code&gt; is appropriate for testing on my PC, but it cannot serve as the address for communication between public services.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I’m learning
&lt;/h2&gt;

&lt;p&gt;This project is teaching me to distinguish three layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The vision&lt;/strong&gt;, expressed through the comic pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Working software&lt;/strong&gt;, demonstrated through tests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A public service&lt;/strong&gt;, which requires deployment and integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most concrete progress so far is turning three images into an API-accessible catalog and running it inside Docker, including fixing a real packaging error.&lt;/p&gt;

&lt;p&gt;The next milestone is making that experience available through public Zorgax and documenting what happens during the test.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp" rel="noopener noreferrer"&gt;Nicola Comics / MyZubster MVP&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Roadmap:&lt;/strong&gt; &lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp/blob/main/docs/n4k48-comics/ROADMAP.md" rel="noopener noreferrer"&gt;Project progress&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is an experimental project under development. The visuals and part of the software work were created with AI assistance. Manual checks were performed on my PC, and the results above are described within their tested scope.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>docker</category>
      <category>pythob</category>
      <category>myzubster</category>
    </item>
    <item>
      <title>🚀 **DEV UPDATE — Nico Comics MyZubster**</title>
      <dc:creator>Nicola Lorenzini</dc:creator>
      <pubDate>Wed, 16 Sep 2026 14:29:57 +0000</pubDate>
      <link>https://dev.to/n4k48/dev-update-nico-comics-x-myzubster-306c</link>
      <guid>https://dev.to/n4k48/dev-update-nico-comics-x-myzubster-306c</guid>
      <description>&lt;p&gt;🚀 &lt;strong&gt;DEV UPDATE — Nico Comics × MyZubster&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Over the last few days, we moved from an idea to something people can actually open, query, test, and verify online.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nico Comics × MyZubster&lt;/strong&gt; started as a pilot exploring the connection between comics, software development, digital identity, Zorgax, and — eventually — NFTs and Neon Plaza.&lt;/p&gt;

&lt;p&gt;Here’s what we’ve built so far.&lt;/p&gt;

&lt;p&gt;🎨 &lt;strong&gt;Nico Comics takes shape&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We created the first &lt;strong&gt;3 comic boards in the N4K48 × MyZubster series&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;01 — &lt;em&gt;From a Software Idea to the Metaverse&lt;/em&gt;&lt;br&gt;
02 — &lt;em&gt;The Software Takes Shape&lt;/em&gt;&lt;br&gt;
03 — &lt;em&gt;Towards Neon Plaza&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The boards are now organized in a public catalog with metadata, individual records, and explicit verification states.&lt;/p&gt;

&lt;p&gt;The first board has been identified as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;NFT_CANDIDATE / PROPOSED_FOR_REVIEW&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But that does &lt;strong&gt;not&lt;/strong&gt; mean an NFT has already been minted.&lt;/p&gt;

&lt;p&gt;Its rights status remains:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;TO_VERIFY&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We are not claiming a contract address, token ID, transaction hash, or any other blockchain event that we cannot verify.&lt;/p&gt;

&lt;p&gt;🧠 &lt;strong&gt;We built a Zorgax integration layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The pilot now exposes a read-only adapter that allows Nico Comics to be queried through four explicit actions:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gallery&lt;/code&gt;&lt;br&gt;
&lt;code&gt;detail&lt;/code&gt;&lt;br&gt;
&lt;code&gt;candidate&lt;/code&gt;&lt;br&gt;
&lt;code&gt;next_steps&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This means an assistant such as Zorgax can retrieve the gallery, inspect a specific comic, identify the proposed NFT candidate, and explain the next steps.&lt;/p&gt;

&lt;p&gt;No automatic minting.&lt;br&gt;
No wallet operations.&lt;br&gt;
No payments.&lt;br&gt;
No catalog modifications.&lt;/p&gt;

&lt;p&gt;First we verify. Then, if appropriate, we move something on-chain.&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;We deployed the project publicly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The service is now running on Render:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://myzubster-mvp.onrender.com" rel="noopener noreferrer"&gt;https://myzubster-mvp.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The deployment is connected to the project’s GitHub repository and automatically updates from commits to &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We also made the public endpoint configurable through:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;NICOLA_COMICS_BASE_URL&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;without hardcoding localhost addresses or storing secrets in the repository.&lt;/p&gt;

&lt;p&gt;🧪 &lt;strong&gt;Then we automated verification&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We built a public smoke-test script that does more than test the application locally.&lt;/p&gt;

&lt;p&gt;It actually calls the deployed HTTPS service.&lt;/p&gt;

&lt;p&gt;Our GitHub Actions pipeline verified:&lt;/p&gt;

&lt;p&gt;✅ Public catalog reachable&lt;br&gt;
✅ All 3 N4K48 boards present&lt;br&gt;
✅ &lt;code&gt;gallery&lt;/code&gt; working&lt;br&gt;
✅ &lt;code&gt;detail&lt;/code&gt; working&lt;br&gt;
✅ &lt;code&gt;candidate&lt;/code&gt; working&lt;br&gt;
✅ &lt;code&gt;next_steps&lt;/code&gt; working&lt;br&gt;
✅ Correct candidate: &lt;code&gt;n4k48-comic-001&lt;/code&gt;&lt;br&gt;
✅ &lt;code&gt;rights_status = TO_VERIFY&lt;/code&gt;&lt;br&gt;
✅ No fabricated on-chain claims&lt;/p&gt;

&lt;p&gt;The result:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;PUBLIC PILOT VERIFICATION: PASS&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The same CI run also completed &lt;strong&gt;25 software tests&lt;/strong&gt; and the Docker verification successfully.&lt;/p&gt;

&lt;p&gt;🛠 &lt;strong&gt;And we already found real production bugs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While turning the old landing page into the new Nico Comics website, the comic images were not loading.&lt;/p&gt;

&lt;p&gt;Instead of continuing to change the frontend blindly, we inspected the deployment logs.&lt;/p&gt;

&lt;p&gt;The server showed the real problem:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;HTTP 404&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;for the comic image requests.&lt;/p&gt;

&lt;p&gt;We traced the issue and changed the way those assets are served.&lt;/p&gt;

&lt;p&gt;That is exactly the development loop we want this pilot to follow:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;build → deploy → observe → verify → fix.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔗 &lt;strong&gt;The next boundary: public MyZubster Zorgax&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We also identified the integration point inside the public MyZubster Zorgax architecture and prepared a minimal read-only bridge proposal.&lt;/p&gt;

&lt;p&gt;The end-to-end flow we want to prove is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Public Zorgax → gallery → detail/card → image → candidate → rights/on-chain status → next_steps&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We are &lt;strong&gt;not claiming that this E2E integration is complete yet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The upstream bridge still needs to be applied and deployed on the MyZubster side, followed by a real public end-to-end test.&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;Where we are now&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Nico Comics is no longer just an idea or three images.&lt;/p&gt;

&lt;p&gt;We now have:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;comics → catalog → API → Zorgax adapter → public deployment → Docker → automated tests → CI → HTTPS verification → public website&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And, more importantly, we are trying to follow one simple rule:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don’t claim something is complete unless we can prove it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next milestone is connecting the public MyZubster Zorgax flow and completing the full end-to-end verification.&lt;/p&gt;

&lt;p&gt;After that, we can start seriously exploring the path:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nico Comics → provenance → NFT proof → MyZubster → Neon Plaza.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🧑‍💻 &lt;strong&gt;N4K48 × MyZubster — Pilot 2026&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  NicoComics #N4K48 #MyZubster #Zorgax #BuildInPublic #DevLog #OpenSource #AI #WebDevelopment #Blockchain #NFT
&lt;/h1&gt;

</description>
      <category>n4k48</category>
      <category>zorgax</category>
      <category>myzubster</category>
      <category>nicola</category>
    </item>
    <item>
      <title>MyZubster MVP: from an idea to a live decentralized green ecosystem</title>
      <dc:creator>Nicola Lorenzini</dc:creator>
      <pubDate>Tue, 15 Sep 2026 16:02:19 +0000</pubDate>
      <link>https://dev.to/n4k48/myzubster-mvp-from-an-idea-to-a-live-decentralized-green-ecosystem-4o5m</link>
      <guid>https://dev.to/n4k48/myzubster-mvp-from-an-idea-to-a-live-decentralized-green-ecosystem-4o5m</guid>
      <description>&lt;h1&gt;
  
  
  MyZubster MVP: From an Idea to a Live Decentralized Green Ecosystem
&lt;/h1&gt;

&lt;p&gt;Today I’m sharing the first public MVP of &lt;strong&gt;MyZubster&lt;/strong&gt;, an experimental open project that brings together environmental data, artificial intelligence, decentralized technologies and digital creativity.&lt;/p&gt;

&lt;p&gt;After developing and testing the first APIs, the project now has a &lt;strong&gt;public deployment running on Render&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;Live project:&lt;/strong&gt; &lt;a href="https://myzubster-mvp.onrender.com/" rel="noopener noreferrer"&gt;https://myzubster-mvp.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🌱 What is MyZubster?
&lt;/h2&gt;

&lt;p&gt;MyZubster explores the idea of a decentralized green ecosystem where technology can help connect real-world environmental observations with AI and new digital tools.&lt;/p&gt;

&lt;p&gt;The project currently experiments with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;environmental observations and tree tracking&lt;/li&gt;
&lt;li&gt;AI-assisted access to environmental information&lt;/li&gt;
&lt;li&gt;privacy-oriented and decentralized technologies&lt;/li&gt;
&lt;li&gt;permaculture and sustainability&lt;/li&gt;
&lt;li&gt;future marketplace concepts&lt;/li&gt;
&lt;li&gt;digital creativity through &lt;strong&gt;Nicola Comics&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;a public &lt;strong&gt;Zorgax-oriented catalog adapter&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is an MVP: some components are already operational, while others remain experiments or require further verification.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎨 Nicola Comics
&lt;/h2&gt;

&lt;p&gt;One experiment inside MyZubster is &lt;strong&gt;Nicola Comics&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The MVP exposes a small comic catalog through a public API.&lt;/p&gt;

&lt;p&gt;You can see it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://myzubster-mvp.onrender.com/api/comics" rel="noopener noreferrer"&gt;https://myzubster-mvp.onrender.com/api/comics&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The catalog currently contains three entries.&lt;/p&gt;

&lt;p&gt;One of them, &lt;code&gt;n4k48-comic-001&lt;/code&gt;, is marked as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;NFT_CANDIDATE&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This deliberately does &lt;strong&gt;not&lt;/strong&gt; mean that an NFT has already been minted.&lt;/p&gt;

&lt;p&gt;The project currently keeps its rights status as &lt;code&gt;TO_VERIFY&lt;/code&gt;, while &lt;code&gt;contract_address&lt;/code&gt;, &lt;code&gt;token_id&lt;/code&gt; and &lt;code&gt;transaction_hash&lt;/code&gt; remain empty until verifiable evidence exists.&lt;/p&gt;

&lt;p&gt;This is an important design principle for the project:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;a proposal for tokenization is not the same thing as an on-chain asset.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 The Zorgax bridge
&lt;/h2&gt;

&lt;p&gt;The MVP also includes a public Zorgax-oriented endpoint:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;POST /api/zorgax/ask&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For example, the catalog can process a request such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Show me the Nicola Comics"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gallery"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The endpoint has been successfully tested on the public deployment and returns the Nicola Comics catalog with absolute links to the individual entries.&lt;/p&gt;

&lt;p&gt;At this stage, this verifies the &lt;strong&gt;public catalog adapter running inside the MyZubster MVP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Integration with a separate or upstream Zorgax service should be considered a different integration step and is not being claimed by this MVP test.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ The current stack
&lt;/h2&gt;

&lt;p&gt;The public MVP currently uses:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Python + Flask&lt;/strong&gt; for the API&lt;br&gt;
&lt;strong&gt;Gunicorn&lt;/strong&gt; as the application server&lt;br&gt;
&lt;strong&gt;Docker&lt;/strong&gt; for containerization&lt;br&gt;
&lt;strong&gt;Render&lt;/strong&gt; for the public deployment&lt;br&gt;
&lt;strong&gt;GitHub&lt;/strong&gt; for source code and documentation&lt;/p&gt;

&lt;p&gt;The broader development environment also explores &lt;strong&gt;Ollama&lt;/strong&gt; and &lt;strong&gt;Qdrant&lt;/strong&gt; for AI and semantic-search functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Try MyZubster
&lt;/h2&gt;

&lt;p&gt;🌐 &lt;strong&gt;Live website&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://myzubster-mvp.onrender.com/" rel="noopener noreferrer"&gt;https://myzubster-mvp.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎨 &lt;strong&gt;Nicola Comics API&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://myzubster-mvp.onrender.com/api/comics" rel="noopener noreferrer"&gt;https://myzubster-mvp.onrender.com/api/comics&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;MyZubster MVP source code&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧭 &lt;strong&gt;Main MyZubster repository&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm/myzubster&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔭 What comes next?
&lt;/h2&gt;

&lt;p&gt;The next steps are to improve the public interface, develop the environmental-data components, connect Nicola Comics more deeply with the ecosystem, verify provenance and rights before any NFT-related operation, and continue experimenting with the AI architecture.&lt;/p&gt;

&lt;p&gt;MyZubster is still an early public build.&lt;/p&gt;

&lt;p&gt;That is exactly why I’m publishing it now: to build in public, test the architecture, document what works and clearly distinguish experiments from verified functionality.&lt;/p&gt;

&lt;p&gt;Feedback, testing, ideas and collaboration are welcome.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build first. Verify everything. Then decentralize what actually makes sense.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ai</category>
      <category>devops</category>
      <category>myzubster</category>
    </item>
    <item>
      <title>Building a Read-Only Comics Adapter for MyZubster: From Local Prototype to a Public-Ready Pilot</title>
      <dc:creator>Nicola Lorenzini</dc:creator>
      <pubDate>Tue, 15 Sep 2026 15:30:33 +0000</pubDate>
      <link>https://dev.to/n4k48/building-a-read-only-comics-adapter-for-myzubster-from-local-prototype-to-a-public-ready-pilot-2jif</link>
      <guid>https://dev.to/n4k48/building-a-read-only-comics-adapter-for-myzubster-from-local-prototype-to-a-public-ready-pilot-2jif</guid>
      <description>&lt;h1&gt;
  
  
  Building a Read-Only Comics Adapter for MyZubster: From Local Prototype to a Public-Ready Pilot
&lt;/h1&gt;

&lt;p&gt;Over the last few days, I’ve been working on a small but concrete experiment inside the &lt;strong&gt;MyZubster ecosystem&lt;/strong&gt;: turning my &lt;strong&gt;N4K48 × MyZubster comic series&lt;/strong&gt; into a structured catalog that can be queried by &lt;strong&gt;Zorgax&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal wasn't to jump directly into minting NFTs.&lt;/p&gt;

&lt;p&gt;Instead, I wanted to build and verify the pieces that should come &lt;strong&gt;before&lt;/strong&gt; that: catalog data, API access, rights status, an explicit NFT candidate, and a clean boundary between what is already working and what still needs validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pilot
&lt;/h2&gt;

&lt;p&gt;The project currently contains three comic panels:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dall’idea software al metaverso&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Il software prende forma&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verso Neon Plaza&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;They are exposed through a read-only catalog adapter.&lt;/p&gt;

&lt;p&gt;The first panel is currently marked as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NFT_CANDIDATE
PROPOSED_FOR_REVIEW
rights_status: TO_VERIFY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This distinction matters.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;NFT_CANDIDATE&lt;/code&gt; does &lt;strong&gt;not&lt;/strong&gt; mean that an NFT has been minted.&lt;/p&gt;

&lt;p&gt;At this stage there is no contract address, token ID or transaction hash associated with the comic. Those fields remain empty until an actual on-chain operation can be performed and independently verified.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small API for Zorgax
&lt;/h2&gt;

&lt;p&gt;The pilot exposes a few deliberately simple endpoints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /api/comics
GET /api/comics/{comic_id}
POST /api/zorgax/ask
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Zorgax adapter supports four explicit actions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gallery
detail
candidate
next_steps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Quale candidata NFT?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"candidate"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;returns the proposed candidate from the catalog.&lt;/p&gt;

&lt;p&gt;The important architectural decision here is that the adapter is &lt;strong&gt;read-only&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It cannot mint NFTs, modify the catalog, access wallets or execute payments.&lt;/p&gt;

&lt;p&gt;It simply provides a controlled interface between the catalog and the assistant layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the complete local flow
&lt;/h2&gt;

&lt;p&gt;I rebuilt the environment using Docker Compose and tested the API from PowerShell.&lt;/p&gt;

&lt;p&gt;The API container reached:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;healthy
0.0.0.0:5000-&amp;gt;5000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I manually verified the main flow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gallery
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;gallery&lt;/code&gt; returned all three N4K48 comic panels.&lt;/p&gt;

&lt;h3&gt;
  
  
  Detail
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;detail&lt;/code&gt; correctly returned the complete record for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;n4k48-comic-001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  NFT candidate
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;candidate&lt;/code&gt; returned only:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;n4k48-comic-001
Dall’idea software al metaverso
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nft_status: NFT_CANDIDATE
selection_status: PROPOSED_FOR_REVIEW
rights_status: TO_VERIFY
transaction_hash: null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Next steps
&lt;/h3&gt;

&lt;p&gt;The adapter also correctly reports that provenance/authorizations and the public Zorgax connection still need verification, and that the service itself does not execute minting.&lt;/p&gt;

&lt;p&gt;So the local happy path is now working:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;request
   ↓
gallery
   ↓
detail
   ↓
comic asset
   ↓
candidate
   ↓
rights / on-chain status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Preparing the adapter for a public environment
&lt;/h2&gt;

&lt;p&gt;The next problem was important.&lt;/p&gt;

&lt;p&gt;The API worked on:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:5000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but we don't want a public Zorgax service to depend on — or expose — my personal PC.&lt;/p&gt;

&lt;p&gt;So I changed the adapter to accept its public base URL through an environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NICOLA_COMICS_BASE_URL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without that variable, the API returns relative URLs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/api/comics/n4k48-comic-001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With a configured public base URL, it can instead return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://pilot.example.org/api/comics/n4k48-comic-001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No production URL is hardcoded into the application.&lt;/p&gt;

&lt;p&gt;No authentication tokens or secrets are stored in the repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  An interesting Docker issue
&lt;/h2&gt;

&lt;p&gt;During the test I set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&lt;/span&gt;&lt;span class="nn"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;NICOLA_COMICS_BASE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"https://pilot.example.org"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but the API continued returning:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"api_base_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Python code was working correctly.&lt;/p&gt;

&lt;p&gt;The problem was Docker Compose: the environment variable from the host wasn't being forwarded to the API container.&lt;/p&gt;

&lt;p&gt;The fix was to explicitly pass it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;NICOLA_COMICS_BASE_URL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;${NICOLA_COMICS_BASE_URL:-}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After rebuilding the containers, the same API request returned:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"api_base_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://pilot.example.org"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"detail_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;"https://pilot.example.org/api/comics/n4k48-comic-001"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That gave us a useful intermediate verification: the adapter is still running locally, but its URL-generation behavior is ready to be configured for a separate public hosting environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is verified — and what isn't
&lt;/h2&gt;

&lt;p&gt;At this point we have verified:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✓ Docker deployment locally
✓ comic catalog
✓ gallery
✓ comic detail
✓ NFT candidate selection
✓ next-step reporting
✓ configurable API base URL
✓ Docker environment propagation
✓ read-only integration boundary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Still pending:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;○ real public HTTPS deployment
○ public Zorgax → pilot connection
○ hosting authentication/authorization
○ rights verification
○ on-chain transaction
○ NFT mint verification
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keeping those two lists separate is one of the most important parts of the experiment.&lt;/p&gt;

&lt;p&gt;A prototype shouldn't claim capabilities simply because they're part of the roadmap.&lt;/p&gt;

&lt;h2&gt;
  
  
  The next milestone
&lt;/h2&gt;

&lt;p&gt;The next test will move the same adapter from the local environment to a reachable HTTPS endpoint.&lt;/p&gt;

&lt;p&gt;Then the goal is to verify the complete public flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User request
      ↓
Public Zorgax
      ↓
Nicola Comics adapter
      ↓
Gallery
      ↓
Comic detail/card
      ↓
Published image
      ↓
NFT candidate
      ↓
Rights / verified on-chain status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The adapter remains read-only during this phase.&lt;/p&gt;

&lt;p&gt;Only after rights and the blockchain step have actually been completed and verified should the project move from &lt;strong&gt;NFT candidate&lt;/strong&gt; to a real minted asset.&lt;/p&gt;

&lt;p&gt;For me, that's the interesting part of this pilot: not simply putting a comic “on Web3”, but building a small, reproducible path where every transition has an explicit and verifiable state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nicola / N4K48&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  opensource #python #docker #api #web3 #ai #buildinpublic
&lt;/h1&gt;

</description>
      <category>python</category>
      <category>docker</category>
      <category>myzubster</category>
      <category>local</category>
    </item>
    <item>
      <title>N4K48 Project Planner AI/Zorgax</title>
      <dc:creator>Nicola Lorenzini</dc:creator>
      <pubDate>Fri, 04 Sep 2026 16:04:23 +0000</pubDate>
      <link>https://dev.to/n4k48/n4k48-project-planner-aizorgax-1522</link>
      <guid>https://dev.to/n4k48/n4k48-project-planner-aizorgax-1522</guid>
      <description>&lt;h1&gt;
  
  
  N4K48 Project Planner AI/Zorgax
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Build and publish a digital product in seven days with an AI guide that organizes the work, identifies mistakes and recommends the next action.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;N4K48 Project Planner is an experimental product-planning assistant developed as part of the MyZubster journey.&lt;/p&gt;

&lt;p&gt;It is designed for people who want to create a digital product but struggle with too many steps, unclear priorities, deadlines and mistakes discovered too late.&lt;/p&gt;

&lt;p&gt;The planner helps users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;define one concrete objective;&lt;/li&gt;
&lt;li&gt;divide the objective into manageable activities;&lt;/li&gt;
&lt;li&gt;understand what to do next;&lt;/li&gt;
&lt;li&gt;identify missing or incorrect steps;&lt;/li&gt;
&lt;li&gt;monitor deadlines and progress;&lt;/li&gt;
&lt;li&gt;document completed work and supporting evidence;&lt;/li&gt;
&lt;li&gt;prepare a product for publication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Zorgax represents the AI guidance layer. Its role is to assist with planning, analysis and error detection while keeping important decisions under human control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seven-day outcome
&lt;/h2&gt;

&lt;p&gt;The initial test asks one practical question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can an AI-guided project planner help someone produce a concrete and verifiable result within seven days?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Current status
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Product idea defined&lt;/li&gt;
&lt;li&gt;Public GitHub documentation available&lt;/li&gt;
&lt;li&gt;N4K48 identity and visual profile published&lt;/li&gt;
&lt;li&gt;MyZubster authenticated flow tested&lt;/li&gt;
&lt;li&gt;22 automated tests passed&lt;/li&gt;
&lt;li&gt;First public DEV.to article published&lt;/li&gt;
&lt;li&gt;Seven-day product test in progress&lt;/li&gt;
&lt;li&gt;User validation still partial&lt;/li&gt;
&lt;li&gt;Public production release not yet available&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub profile: &lt;a href="https://github.com/nicolaususnicola-lgtm" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MyZubster repository: &lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm/myzubster&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Independent MVP: &lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm/myzubster-mvp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Public roadmap: &lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster/blob/main/ROADMAP_N4K48_METAVERSE.md" rel="noopener noreferrer"&gt;https://github.com/nicolaususnicola-lgtm/myzubster/blob/main/ROADMAP_N4K48_METAVERSE.md&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;DEV.to article: &lt;a href="https://dev.to/n4k48/building-n4k48-my-journey-with-myzubster-ai-and-neon-plaza-3nbp"&gt;https://dev.to/n4k48/building-n4k48-my-journey-with-myzubster-ai-and-neon-plaza-3nbp&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is an experimental MVP under development. Documentation, visuals and local test results do not by themselves demonstrate production deployment, commercial adoption, external payments or third-party endorsement.&lt;/p&gt;

</description>
      <category>zorgax</category>
      <category>myzubster</category>
      <category>n4k48</category>
      <category>ai</category>
    </item>
    <item>
      <title>Building N4K48: My Journey with MyZubster, AI and Neon Plaza</title>
      <dc:creator>Nicola Lorenzini</dc:creator>
      <pubDate>Fri, 04 Sep 2026 15:36:02 +0000</pubDate>
      <link>https://dev.to/n4k48/building-n4k48-my-journey-with-myzubster-ai-and-neon-plaza-3nbp</link>
      <guid>https://dev.to/n4k48/building-n4k48-my-journey-with-myzubster-ai-and-neon-plaza-3nbp</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwyabnv6zye0tzt1w8i9f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwyabnv6zye0tzt1w8i9f.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Building N4K48: My Journey with MyZubster, AI and Neon Plaza
&lt;/h1&gt;

&lt;p&gt;I am building &lt;strong&gt;N4K48&lt;/strong&gt;, my digital identity and personal development path inside the MyZubster ecosystem.&lt;/p&gt;

&lt;p&gt;N4K48 is more than a profile picture or a fictional character. It is a way to connect my technical work, experiments with artificial intelligence, open-source contributions and the visual world of &lt;strong&gt;Neon Plaza&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;My goal is to build everything in public and clearly separate working software from concepts, future plans and visual storytelling.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is N4K48?
&lt;/h2&gt;

&lt;p&gt;N4K48 is designed as a persistent and recognizable identity.&lt;/p&gt;

&lt;p&gt;Instead of creating a temporary guest character every time someone enters the experience, the system connects the character to an authenticated account. The server—not the browser—determines the verified identity.&lt;/p&gt;

&lt;p&gt;The current flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Identity → Authentication → Persistent Profile → Neon Plaza → AI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This foundation can later support shared spaces, interactions, observations and AI-assisted experiences.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we have completed
&lt;/h2&gt;

&lt;p&gt;The following components have been implemented and tested:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a persistent N4K48 character profile;&lt;/li&gt;
&lt;li&gt;JWT-based authentication;&lt;/li&gt;
&lt;li&gt;a clear distinction between guests and authenticated accounts;&lt;/li&gt;
&lt;li&gt;authenticated access to Neon Plaza;&lt;/li&gt;
&lt;li&gt;server-side identity protection;&lt;/li&gt;
&lt;li&gt;rejection of invalid tokens instead of silently treating them as guest sessions;&lt;/li&gt;
&lt;li&gt;automated coverage of the authenticated flow;&lt;/li&gt;
&lt;li&gt;public documentation and a development roadmap.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The latest recorded verification completed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Test Suites: 4 passed
Tests:       22 passed
Tests failed: 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These results verify the tested local behavior. They do not mean that the complete platform is already production-ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two connected repositories
&lt;/h2&gt;

&lt;p&gt;My work is currently documented across two public repositories.&lt;/p&gt;

&lt;h3&gt;
  
  
  MyZubster development fork
&lt;/h3&gt;

&lt;p&gt;The main repository contains the authenticated Metaverse flow, persistent profile, roadmap and detailed N4K48 documentation:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster" rel="noopener noreferrer"&gt;nicolaususnicola-lgtm/myzubster&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also read the public roadmap:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster/blob/main/ROADMAP_N4K48_METAVERSE.md" rel="noopener noreferrer"&gt;N4K48 Metaverse Roadmap&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And the detailed project documentation:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster/tree/main/docs/n4k48" rel="noopener noreferrer"&gt;N4K48 Project README&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Independent MyZubster MVP
&lt;/h3&gt;

&lt;p&gt;The second repository explores a smaller technical MVP with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an API for recording observations;&lt;/li&gt;
&lt;li&gt;configurable JSON persistence;&lt;/li&gt;
&lt;li&gt;automated end-to-end tests;&lt;/li&gt;
&lt;li&gt;Docker support and health checks;&lt;/li&gt;
&lt;li&gt;local AI with Ollama;&lt;/li&gt;
&lt;li&gt;vector search with Qdrant;&lt;/li&gt;
&lt;li&gt;retrieval-augmented generation based on stored observations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/nicolaususnicola-lgtm/myzubster-mvp" rel="noopener noreferrer"&gt;nicolaususnicola-lgtm/myzubster-mvp&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AI and Zorgax
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Zorgax&lt;/strong&gt; represents the AI and operational guidance layer of the project.&lt;/p&gt;

&lt;p&gt;The purpose of AI is not to replace verification. It should help organize information, retrieve relevant observations, explain results and guide users through a workflow.&lt;/p&gt;

&lt;p&gt;The principle is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Observe → Document → Connect → Measure → Verify → Publish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visuals and storytelling explain the journey. Code, tests, commits and evidence demonstrate what has actually been completed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The product direction
&lt;/h2&gt;

&lt;p&gt;The broader idea is to explore how AI can assist users inside MyZubster, including future workflows connected to digital identity, verified activity and value exchange.&lt;/p&gt;

&lt;p&gt;Any payment or reward component must remain transparent and evidence-based. A contribution, issue, pull request or internal ledger entry is not automatically proof of an external payment.&lt;/p&gt;

&lt;p&gt;This distinction is important when building an open and trustworthy product.&lt;/p&gt;

&lt;h2&gt;
  
  
  What comes next?
&lt;/h2&gt;

&lt;p&gt;The next development priorities are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;complete GitHub OAuth in the frontend;&lt;/li&gt;
&lt;li&gt;implement logout and session-expiration handling;&lt;/li&gt;
&lt;li&gt;test Neon Plaza with multiple simultaneous sessions;&lt;/li&gt;
&lt;li&gt;verify presence and online-user counting;&lt;/li&gt;
&lt;li&gt;complete security and privacy checks;&lt;/li&gt;
&lt;li&gt;deploy a reproducible staging demo.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;N4K48 is still an MVP under development, but the technical foundation, documentation and public identity are now in place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow the journey
&lt;/h2&gt;

&lt;p&gt;You can follow my progress through my GitHub profile:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/nicolaususnicola-lgtm" rel="noopener noreferrer"&gt;github.com/nicolaususnicola-lgtm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I will continue documenting what works, what still needs validation and what I learn while building N4K48 with MyZubster and AI.&lt;/p&gt;

&lt;p&gt;If you are interested in open source, AI, authenticated digital identities or experimental virtual environments, feedback and technical discussion are welcome.&lt;/p&gt;

</description>
      <category>opensouce</category>
      <category>ai</category>
      <category>webdev</category>
      <category>github</category>
    </item>
  </channel>
</rss>
