<?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: Saquib Shahid</title>
    <description>The latest articles on DEV Community by Saquib Shahid (@devsaquib).</description>
    <link>https://dev.to/devsaquib</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1001148%2F4cd27a71-f468-41ba-8453-e79ce38d751a.png</url>
      <title>DEV Community: Saquib Shahid</title>
      <link>https://dev.to/devsaquib</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devsaquib"/>
    <language>en</language>
    <item>
      <title>NexusGraph — Transform Any Text into a Stunning AI Knowledge Graph (Gemma 4 + D3.js)</title>
      <dc:creator>Saquib Shahid</dc:creator>
      <pubDate>Sun, 10 May 2026 11:12:50 +0000</pubDate>
      <link>https://dev.to/devsaquib/nexusgraph-transform-any-text-into-a-stunning-ai-knowledge-graph-gemma-4-d3js-oe0</link>
      <guid>https://dev.to/devsaquib/nexusgraph-transform-any-text-into-a-stunning-ai-knowledge-graph-gemma-4-d3js-oe0</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NexusGraph&lt;/strong&gt; is an AI-powered knowledge graph explorer that transforms any text into a stunning, interactive force-directed graph visualization.&lt;/p&gt;

&lt;p&gt;Paste an article, research paper, meeting notes, or any content — and watch as Gemma 4 extracts entities, discovers relationships, and builds a beautiful animated knowledge graph in real-time.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✨ Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🧠 AI-Powered Entity Extraction&lt;/strong&gt; — Gemma 4 identifies people, organizations, concepts, technologies, events, and places from any text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔗 Relationship Discovery&lt;/strong&gt; — Automatically maps how entities connect with descriptive relationship labels&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🎬 Real-Time Streaming&lt;/strong&gt; — Nodes and edges appear one-by-one via Server-Sent Events, creating a mesmerizing build animation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🖱️ Interactive Graph&lt;/strong&gt; — Click, drag, zoom, and pan. Hover over nodes to highlight connections. Click any node to see its details and relationships&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔍 Explore Deeper&lt;/strong&gt; — Select any node and ask Gemma 4 to expand it with additional sub-entities and connections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;💬 Ask Gemma 4&lt;/strong&gt; — Ask natural language questions about the graph and get contextual AI-powered answers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📊 Category Visualization&lt;/strong&gt; — Nodes are color-coded by type (person, concept, technology, organization, etc.) with glowing effects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📥 Export&lt;/strong&gt; — Download your knowledge graph as a PNG image&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌍 Multilingual&lt;/strong&gt; — Works with text in 35+ languages thanks to Gemma 4's multilingual training&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Node.js + Express&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; Gemma 4 31B Dense via OpenRouter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualization:&lt;/strong&gt; D3.js force-directed graph&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming:&lt;/strong&gt; Server-Sent Events (SSE)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Vanilla HTML/CSS/JS — zero frameworks, zero bloat&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🔗 &lt;strong&gt;&lt;a href="https://nexusgraph-production.up.railway.app" rel="noopener noreferrer"&gt;Live Demo → https://nexusgraph-production.up.railway.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Try clicking one of the built-in examples ("AI &amp;amp; Machine Learning", "History of the Internet", or "The Solar System") to see it in action instantly!&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Looks
&lt;/h3&gt;

&lt;p&gt;The app analyzes the "AI &amp;amp; Machine Learning" example and extracts 21 entities and 22 relationships, building this interactive graph:&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/saquiblancework" rel="noopener noreferrer"&gt;
        saquiblancework
      &lt;/a&gt; / &lt;a href="https://github.com/saquiblancework/NexusGraph" rel="noopener noreferrer"&gt;
        NexusGraph
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;NexusGraph AI Explorer&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Transform any text into an interactive AI-powered knowledge graph using Gemma 4.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;NexusGraph is an innovative tool that leverages the power of Google's &lt;strong&gt;Gemma 4&lt;/strong&gt; model to analyze unstructured text and automatically generate interactive, visual knowledge graphs.&lt;/p&gt;
&lt;p&gt;Built for the DEV.to Gemma 4 Challenge, this application extracts key entities and relationships from any given text, displaying them in a dynamic, explorable visualization.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text-to-Graph Analysis&lt;/strong&gt;: Paste any article, document, or essay, and Gemma 4 will extract meaningful entities and their relationships.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Visualization&lt;/strong&gt;: Explore the generated knowledge graph dynamically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep Exploration&lt;/strong&gt;: Click on any node to "Explore Deeper." The app prompts Gemma 4 to expand the graph with more details about that specific entity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask Questions&lt;/strong&gt;: Ask questions about the analyzed text, and Gemma 4 will answer using the context of both the original text and the generated knowledge graph structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSE&lt;/strong&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/saquiblancework/NexusGraph" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I Used Gemma 4
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why Gemma 4 31B Dense?
&lt;/h3&gt;

&lt;p&gt;I chose the &lt;strong&gt;Gemma 4 31B Dense&lt;/strong&gt; model because knowledge graph extraction requires deep reasoning that smaller models can't match:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Complex entity extraction&lt;/strong&gt; — Identifying that "Dartmouth Conference" is an &lt;em&gt;event&lt;/em&gt;, "Geoffrey Hinton" is a &lt;em&gt;person&lt;/em&gt;, and "Transformer Architecture" is a &lt;em&gt;technology&lt;/em&gt; requires nuanced understanding&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relationship reasoning&lt;/strong&gt; — Generating specific relationship labels like "pioneered" or "defeated" (not generic "related to") demands strong language comprehension&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured JSON output&lt;/strong&gt; — Reliably producing valid JSON with nested objects and consistent IDs requires instruction-following capability that the 31B model handles excellently&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long context&lt;/strong&gt; — The 256K context window handles lengthy articles and papers without truncation&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Three Intentional Integration Points
&lt;/h3&gt;

&lt;p&gt;NexusGraph uses Gemma 4 in three distinct, purpose-built ways — not just a chat wrapper:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Analyze (&lt;code&gt;/api/analyze&lt;/code&gt;)&lt;/strong&gt; — The core pipeline. Gemma 4 receives carefully engineered prompts that instruct it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extract 10-25 entities with categories, descriptions, and importance scores (1-10)&lt;/li&gt;
&lt;li&gt;Map relationships with descriptive labels and strength scores&lt;/li&gt;
&lt;li&gt;Output strict JSON schema for programmatic parsing
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Structured prompt engineering for reliable graph extraction&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ANALYZE_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`You are an expert knowledge graph builder...
OUTPUT FORMAT — respond with ONLY this JSON:
{
  "nodes": [{"id": "snake_case_id", "label": "...", "category": "person|concept|...", "importance": 8}],
  "edges": [{"source": "node_id_1", "target": "node_id_2", "label": "relationship verb", "strength": 7}]
}
RULES:
- Extract 10-25 nodes for optimal visualization
- Every node MUST connect to at least one other node
- Use specific relationship labels — never "related to"`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Explore (&lt;code&gt;/api/explore&lt;/code&gt;)&lt;/strong&gt; — When a user clicks "Explore Deeper" on any node, Gemma 4 generates a &lt;em&gt;sub-graph&lt;/em&gt; with 5-10 additional entities specifically related to that concept, while being aware of existing nodes to avoid duplicates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Ask (&lt;code&gt;/api/ask&lt;/code&gt;)&lt;/strong&gt; — Context-aware Q&amp;amp;A. Gemma 4 receives both the original text AND the extracted graph structure, enabling it to answer questions like &lt;em&gt;"What's the connection between Geoffrey Hinton and modern LLMs?"&lt;/em&gt; with graph-aware reasoning.&lt;/p&gt;

&lt;h3&gt;
  
  
  The SSE Streaming Architecture
&lt;/h3&gt;

&lt;p&gt;Instead of waiting for the full response and rendering everything at once, I stream the graph to life:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Input → Gemma 4 (extract JSON) → Parse → SSE Stream nodes one-by-one → SSE Stream edges → Done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each node arrives as an individual SSE event with a 120ms delay, triggering a D3.js elastic spring animation. The result is a mesmerizing "graph building itself" effect that makes the AI feel alive.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Stream nodes one by one for animation effect&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nodes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nf"&gt;sseWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;node&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This isn't just eye candy — it gives users real-time feedback during the 10-30 second analysis, turning wait time into an engaging experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Gemma 4's instruction-following for structured JSON is remarkably reliable — I rarely needed to retry for parse errors&lt;/li&gt;
&lt;li&gt;The 31B Dense model strikes the perfect balance between quality and speed for this use case&lt;/li&gt;
&lt;li&gt;Prompt engineering matters more than model size — specific examples and strict format rules dramatically improved extraction quality.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Tested Gemma 4 and GPT-4o-mini on Indian Language Tasks — The Results Surprised Me</title>
      <dc:creator>Saquib Shahid</dc:creator>
      <pubDate>Sun, 10 May 2026 08:31:40 +0000</pubDate>
      <link>https://dev.to/devsaquib/i-tested-gemma-4-and-gpt-4o-mini-on-indian-language-tasks-the-results-surprised-me-19g8</link>
      <guid>https://dev.to/devsaquib/i-tested-gemma-4-and-gpt-4o-mini-on-indian-language-tasks-the-results-surprised-me-19g8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Write About Gemma 4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;I asked GPT-4o-mini to explain artificial intelligence in Bengali, as if teaching a 15-year-old student.&lt;/p&gt;

&lt;p&gt;It sent me back the original Bengali prompt. Word for word.&lt;/p&gt;

&lt;p&gt;That single moment — a major AI model completely failing a language spoken by 230 million people — is what this article is about.&lt;/p&gt;

&lt;p&gt;India has 1.4 billion people, 22 officially recognised languages, and hundreds of dialects. Yet nearly every AI benchmark is English-first. When developers talk about model quality, they are almost always talking about performance on Western language tasks. So I ran a direct, practical comparison: &lt;strong&gt;Gemma 4 (31B via OpenRouter) vs GPT-4o-mini (via ChatGPT)&lt;/strong&gt; — five prompts, five real Indian-language scenarios, zero cherry-picking.&lt;/p&gt;

&lt;p&gt;Here is what actually happened.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;I used Gemma 4 31B through OpenRouter's free tier and GPT-4o-mini through the standard ChatGPT free account. Same prompts, same conditions, both tested within the same hour to avoid any model update differences. I evaluated each response on three things: &lt;strong&gt;script correctness&lt;/strong&gt; (did it use the right writing system), &lt;strong&gt;linguistic naturalness&lt;/strong&gt; (does this sound like how people actually speak), and &lt;strong&gt;cultural fit&lt;/strong&gt; (does it understand Indian context, not just translate words).&lt;/p&gt;

&lt;p&gt;I also want to be upfront: I am a native Hindi speaker, and I used my own judgment for Hindi/Hinglish responses. For Bengali, I evaluated based on script correctness and structural coherence — and that Bengali failure in Prompt 5 is visible to anyone, native speaker or not.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prompt 1: Hinglish — the real test of Indian language understanding
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mujhe ek chhoti si poem likhni hai apne best friend ke liye jo kal foreign ja raha hai. Poem mein thoda emotion ho, thoda humor bhi. Help karo yaar, Hindi-English mix mein theek hai.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This was my first real test. Hinglish — the casual Hindi-English code-switching that dominates Indian WhatsApp conversations, college campuses, and everyday speech — is arguably the most important register for any model serving Indian users. It is not "broken Hindi." It is a distinct, expressive communication style with its own rhythm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPT-4o-mini's response:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tu ja raha hai door, par yaari wahi rahegi,&lt;br&gt;
Time zone alag hoga, par bakchodi daily chalegi. 😄&lt;br&gt;
Kal tak jo chai pe duniya solve karte the,&lt;br&gt;
Ab tu foreign jaake "bro accent" mein bolega shayad re.&lt;br&gt;
...&lt;br&gt;
Distance sirf maps pe hota hai mere bhai,&lt;br&gt;
Best friend toh wahi rehta hai… chahe duniya ke kisi bhi side chala jaye. ❤️&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4's response:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Kal ek naya chapter shuru hoga teri life ka,&lt;br&gt;
Tu ja raha hai door, apne sapno ki raah par.&lt;br&gt;
Proud hoon main tera, ki tune yeh mukaam paaya,&lt;br&gt;
Par dil thoda udaas hai, kyunki tu door chala gaya.&lt;br&gt;
...&lt;br&gt;
Fly high, stay humble, and shine like a star,&lt;br&gt;
Hamesha yaad rakhna, I'm always here, no matter how far.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Both models handled Hinglish naturally and confidently — neither switched to formal Hindi or Devanagari, and neither produced stilted translated-sounding text. The difference is tone. GPT-4o-mini leaned into banter and humour ("bakchodi daily chalegi", "bro accent" mein bolega). Gemma 4 went emotional and poetic. Both are genuinely good Hinglish.&lt;/p&gt;

&lt;p&gt;This is a &lt;strong&gt;tie&lt;/strong&gt;, but it reveals something important: both models have absorbed enough real Indian internet text to produce natural code-switching. That was not guaranteed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prompt 2: Formal Hindi — where the gap becomes obvious
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Please write a professional email in Hindi to a senior colleague (addressing them as "Aap") requesting a 30-minute meeting to discuss a project update. The tone should be respectful but not overly formal — natural office Hindi.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a practical task that millions of Indian office workers face daily. The key test: does the model understand that "formal Hindi" means Devanagari script, proper honorifics, and a structured format — not a transliteration?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPT-4o-mini's response:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Namaste Sir/Ma'am,&lt;br&gt;
Aasha karta hoon aap theek honge.&lt;br&gt;
Main project ke latest updates aur kuch important points discuss karna chahta tha. Agar aapke schedule mein possible ho, toh kya hum is week 30-minute ki ek meeting schedule kar sakte hain?&lt;br&gt;
Dhanyavaad.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It wrote the entire email in Roman script. This is a significant failure. If you send a "Hindi email" written in Roman transliteration to a senior colleague in an Indian corporate environment, it does not read as professional — it reads as an informal WhatsApp message. The structure is fine. The language is fine. But the script choice undermines the entire purpose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4's response:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Subject: Project [Project Name] के updates के संबंध में मीटिंग के लिए अनुरोध&lt;/p&gt;

&lt;p&gt;Dear [Colleague's Name] जी,&lt;/p&gt;

&lt;p&gt;आशा है कि आप ठीक होंगे।&lt;/p&gt;

&lt;p&gt;मैं आपसे Project [Project Name] की current progress के बारे में चर्चा करना चाहता/चाहती हूँ। मुझे कुछ updates साझा करने हैं और आगे के steps के लिए आपका feedback और मार्गदर्शन चाहिए।&lt;/p&gt;

&lt;p&gt;क्या आपके पास इस हफ्ते 30 मिनट का समय होगा? आप अपनी सुविधा के अनुसार कोई भी दिन और समय बता दें, मैं उस हिसाब से calendar invite भेज दूँगा/दूँगी।&lt;/p&gt;

&lt;p&gt;धन्यवाद&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Proper Devanagari script. A subject line. The natural Hindi-English hybrid that Indian offices actually use ("current progress", "feedback" embedded in Hindi sentences). The gender-aware "दूँगा/दूँगी" without being prompted. This is what a real professional Hindi email looks like.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict: Gemma 4 wins clearly.&lt;/strong&gt; It understood that "formal Hindi" is a script and register choice, not just a tone choice.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prompt 3: News Translation — and an unexpected insight
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Translate the following paragraph into Hindi. The translation should sound natural to a native Hindi speaker, not like a word-for-word translation: "The Supreme Court today dismissed the petition challenging the new data protection law, stating that the government had followed due process. The ruling is expected to impact millions of internet users across the country."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Both models produced accurate, readable translations. But Gemma 4 did something GPT-4o-mini did not: it explained its linguistic choices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPT-4o-mini:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;आज सुप्रीम कोर्ट ने नए डेटा प्रोटेक्शन कानून को चुनौती देने वाली याचिका खारिज कर दी। कोर्ट ने कहा कि सरकार ने इस कानून को लागू करने में सभी जरूरी प्रक्रियाओं का पालन किया है। माना जा रहा है कि इस फैसले का असर देशभर के करोड़ों इंटरनेट उपयोगकर्ताओं पर पड़ेगा।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Clean. Accurate. Natural.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;सुप्रीम कोर्ट ने आज नए डेटा प्रोटेक्शन कानून को चुनौती देने वाली याचिका को यह कहते हुए खारिज कर दिया कि सरकार ने निर्धारित कानूनी प्रक्रिया का पालन किया है। इस फैसले का असर देश भर के करोड़ों इंटरनेट यूज़र्स पर पड़ने की संभावना है।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then it added something remarkable — a breakdown of &lt;em&gt;why&lt;/em&gt; specific word choices were made:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"खारिज कर दिया"&lt;/strong&gt; — standard legal term for "dismissed" in Hindi journalism&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"निर्धारित कानूनी प्रक्रिया"&lt;/strong&gt; — captures "due process" professionally rather than literally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"करोड़ों"&lt;/strong&gt; — noting that "millions" in English maps to "crores" in Indian cultural reference, not "लाख"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last observation is genuinely sharp. A direct translation of "millions" to "दस लाख" would be technically correct and feel completely wrong to a native reader. Gemma 4 caught that without being asked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict: Gemma 4 wins&lt;/strong&gt; — same translation quality, but with deeper linguistic self-awareness.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prompt 4: Cultural context — the WhatsApp wedding message
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Write a heartfelt wedding congratulations message in Hindi for a close friend. It should feel warm and genuine — the kind of message an Indian person would actually send on WhatsApp, not a translated greeting card.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;GPT-4o-mini&lt;/strong&gt; gave one warm, natural Hinglish message. Good tone, genuine feel, appropriate for close friends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4&lt;/strong&gt; gave three options — labelled "Deeply Emotional", "Sweet and Simple", and "Playful/Desi" — with a tip section that included culturally specific advice: use "Mere bhai" for a guy friend, "Meri jaan" for a girl friend, and add a personal memory line like recalling who said they'd get married first.&lt;/p&gt;

&lt;p&gt;The "Desi" option included the phrase "finally tu bhi 'phass' gaya" — which is authentic Indian friend-group humour that no greeting card would ever produce. That level of cultural specificity is hard to fake.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict: Gemma 4 wins&lt;/strong&gt; — not just for giving more options, but for demonstrating that it understands how Indian friendships actually communicate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prompt 5: Bengali — and the failure that says everything
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The prompt&lt;/strong&gt; was written in Bengali script, asking both models to explain AI to a 15-year-old student in simple Bengali.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPT-4o-mini's response:&lt;/strong&gt; It returned the original Bengali prompt, with the English translation below it. No explanation. No attempt. Just the input, echoed back.&lt;/p&gt;

&lt;p&gt;This is not a minor miss. Bengali is the seventh most spoken language in the world. It is the official language of West Bengal and Bangladesh. Asking an AI model to respond in Bengali is not an exotic edge case — it is a basic requirement for serving a massive, real user population.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4's response&lt;/strong&gt; was a detailed, properly structured Bengali explanation covering what AI is, how machine learning works (using the analogy of teaching a child to recognise cats), and real-world examples including YouTube recommendations and ChatGPT. Written entirely in proper Bengali script. Age-appropriate. Clear.&lt;/p&gt;

&lt;p&gt;Here is a direct excerpt from Gemma 4's Bengali response:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;এটি কীভাবে কাজ করে? চলো একটা উদাহরণের মাধ্যমে বুঝি: মনে করো, তুমি একটা ছোট বাচ্চাকে শেখাচ্ছ যে 'বিড়াল' দেখতে কেমন। তুমি তাকে অনেকগুলো বিড়ালের ছবি দেখালে এবং বললে, "দেখো, এটা বিড়াল।" AI-এর কাজ করার পদ্ধতিও ঠিক তেমন।&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A cat-recognition analogy to explain machine learning, in Bengali, for a teenager. That is genuinely good pedagogy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Verdict: Gemma 4 wins by default&lt;/strong&gt; — GPT-4o-mini did not attempt the task.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Overall Scorecard
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Gemma 4&lt;/th&gt;
&lt;th&gt;GPT-4o-mini&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hinglish poem&lt;/td&gt;
&lt;td&gt;Natural, emotional&lt;/td&gt;
&lt;td&gt;Natural, humorous&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Formal Hindi email&lt;/td&gt;
&lt;td&gt;Devanagari script, structured ✅&lt;/td&gt;
&lt;td&gt;Roman script only ❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News translation&lt;/td&gt;
&lt;td&gt;Accurate + linguistic insight ✅&lt;/td&gt;
&lt;td&gt;Accurate only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WhatsApp wedding message&lt;/td&gt;
&lt;td&gt;3 culturally aware options ✅&lt;/td&gt;
&lt;td&gt;1 good option&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bengali explanation&lt;/td&gt;
&lt;td&gt;Excellent, full response ✅&lt;/td&gt;
&lt;td&gt;Failed — echoed prompt ❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4: 4 wins, 1 tie. GPT-4o-mini: 0 wins, 1 tie, 2 clear failures.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why does Gemma 4 perform better here?
&lt;/h2&gt;

&lt;p&gt;This is informed speculation, not a technical deep-dive.&lt;/p&gt;

&lt;p&gt;Google has been building Indian language products for years — Google Translate, Google Search in Indic scripts, Google Assistant in Hindi. That corpus and institutional knowledge almost certainly shaped Gemma's training data in ways a model primarily optimised for English-language internet text would not replicate.&lt;/p&gt;

&lt;p&gt;Gemma 4's choice to use Devanagari without being asked, its "करोड़ों vs लाख" observation, and its ability to produce three contextually distinct registers in a single response all point to a model that has deeply absorbed how Indian languages actually function — not just what Indian language text looks like.&lt;/p&gt;




&lt;h2&gt;
  
  
  The practical verdict
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use Gemma 4 when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your users communicate in Hindi, Bengali, or other Indic languages&lt;/li&gt;
&lt;li&gt;You need correct script output, not just Roman transliteration&lt;/li&gt;
&lt;li&gt;Cultural nuance matters — greetings, office communication, social messages&lt;/li&gt;
&lt;li&gt;You are building any product for Indian users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GPT-4o-mini still holds its own for:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Casual Hinglish content — it is genuinely good here&lt;/li&gt;
&lt;li&gt;English-first tasks with occasional Hindi&lt;/li&gt;
&lt;li&gt;Contexts where Roman script is acceptable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most important finding is not that one model "won." It is that the gap is large enough to matter for real product decisions. If you are building a Hindi chatbot, a regional language assistant, or anything targeting Indian users, defaulting to GPT-4o-mini because it is familiar could mean your users get their own prompts echoed back at them.&lt;/p&gt;

&lt;p&gt;That is not a UX problem. That is a trust problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting started with Gemma 4
&lt;/h2&gt;

&lt;p&gt;All of this testing was done at zero cost:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 31B&lt;/strong&gt;: Free via &lt;a href="https://openrouter.ai" rel="noopener noreferrer"&gt;OpenRouter&lt;/a&gt; — no credit card required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 2B/4B&lt;/strong&gt;: Available on &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;Google AI Studio&lt;/a&gt; for free&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run locally&lt;/strong&gt;: Download from &lt;a href="https://huggingface.co/google" rel="noopener noreferrer"&gt;Hugging Face&lt;/a&gt; and run with &lt;code&gt;ollama&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Gemma 4 Challenge runs through May 24 — if this sparked an idea for something you want to build for Indian language users, now is the time.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;All responses in this article were captured from actual model runs. Nothing was edited or paraphrased — you are reading what the models actually produced.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
      <category>ai</category>
    </item>
    <item>
      <title>A2A + MCP — The Two Protocols That Were the Actual Story of Google Cloud NEXT '26</title>
      <dc:creator>Saquib Shahid</dc:creator>
      <pubDate>Fri, 24 Apr 2026 22:37:59 +0000</pubDate>
      <link>https://dev.to/devsaquib/a2a-mcp-the-two-protocols-that-were-the-actual-story-of-google-cloud-next-26-3pj8</link>
      <guid>https://dev.to/devsaquib/a2a-mcp-the-two-protocols-that-were-the-actual-story-of-google-cloud-next-26-3pj8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-cloud-next-2026-04-22"&gt;Google Cloud NEXT Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Hey, I'm Saquib. I've been deep in the backend trenches for a couple of years now, mostly building out Node and Go microservices. Like pretty much every dev in 2026, I spent the last few months messing around with AI. Wiring LLMs into APIs. Breaking stuff. Fixing it. Getting a prototype working on the first try and immediately assuming something is horribly wrong.&lt;/p&gt;

&lt;p&gt;When Google Cloud NEXT '26 kicked off, I actually blocked out some calendar time to watch. My feed was absolutely flooded with hot takes on the Gemini Enterprise Agent Platform and the new 8th-gen TPUs. Everyone also had a very loud opinion about that "75% of Google's code is AI-generated" stat.&lt;/p&gt;

&lt;p&gt;But honestly? I kept getting distracted by two boring acronyms.&lt;/p&gt;

&lt;p&gt;A2A and MCP.&lt;/p&gt;

&lt;p&gt;They barely got any stage time. No hype reel. But I genuinely think they were the most important things announced at the whole event. Let me try to explain why.&lt;/p&gt;

&lt;h3&gt;
  
  
  the problem nobody wanted to say out loud
&lt;/h3&gt;

&lt;p&gt;Every vendor on stage was showing off agents. Salesforce has Agentforce. ServiceNow's got one. SAP too. Microsoft Copilot, obviously. Google's Gemini Enterprise. Basically everyone is shipping agents right now. Which is fine.&lt;/p&gt;

&lt;p&gt;But the question I kept coming back to was way less glamorous: how do any of these things actually talk to each other?&lt;/p&gt;

&lt;p&gt;In a normal backend setup, when two microservices need to chat, we have a playbook. REST, gRPC, Kafka queues, OpenAPI specs. The whole mess is solved. It's boring and it works.&lt;/p&gt;

&lt;p&gt;But with agents? A year ago, the answer was they just didn't. Or worse, they did it through some horrible custom webhook adapter that someone is going to have to babysit from a Slack DM at 2am. Every system spoke its own language. Integration wasn't a feature—it was somebody's entire job.&lt;/p&gt;

&lt;p&gt;A2A and MCP fix that exact problem. Google finally stopped treating them like research experiments and started treating them like actual infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  the mental model that finally made it click
&lt;/h3&gt;

&lt;p&gt;I had to read the docs a few times before I really got it. Here is the summary I wish I had on day one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP is HTTP for agents. A2A is DNS plus HTTP for agents talking to &lt;em&gt;other&lt;/em&gt; agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MCP (Model Context Protocol) was Anthropic's baby originally. It standardizes how a model reaches out to your tools and databases. Before MCP, if you wanted Gemini to query a database, you had to write a bunch of glue code and pray the model didn't invent a table name. Now, the model speaks MCP, the server speaks MCP, and they just shake hands.&lt;/p&gt;

&lt;p&gt;A2A (Agent2Agent) came from Google and got donated to the Linux Foundation. It standardizes how one agent talks to another autonomous agent.&lt;/p&gt;

&lt;p&gt;The A2A docs say it best: build with whatever framework, equip with MCP, and communicate with A2A. They aren't competing standards. MCP is how your agent talks down to the database. A2A is how it talks sideways to another agent. That realization saved me a massive headache.&lt;/p&gt;

&lt;h3&gt;
  
  
  okay, so what did google actually ship?
&lt;/h3&gt;

&lt;p&gt;A lot of this trickled out before NEXT, but the conference is where they put it all together into an actual strategy.&lt;/p&gt;

&lt;p&gt;On the MCP side, we got fully managed servers for things like BigQuery, Cloud SQL, and Pub/Sub. You don't deploy anything. You just point your agent at an endpoint. They also turned Apigee into an MCP bridge. This means any REST API you already built instantly becomes a discoverable agent tool with your existing auth layered on top. As a guy who spent way too long last year hand-wrapping APIs for LLMs, that was a huge relief. Auth is all IAM-backed now too, so no more passing API keys around.&lt;/p&gt;

&lt;p&gt;On the A2A side, it hit production grade with LangGraph and CrewAI support. Donating it to the Linux Foundation was a big move. They also announced Agent Registry (basically DNS for your internet of agents) and Agent Gateway.&lt;/p&gt;

&lt;p&gt;Put it all together, and Google is basically saying they don't need to own the agent itself. They just want to own the highways the agents drive on.&lt;/p&gt;

&lt;h3&gt;
  
  
  show me the code
&lt;/h3&gt;

&lt;p&gt;I hate architecture diagrams. I need to see the actual implementation. So here is a really minimal setup: a planner agent analyzing data, handing work off to a reporter agent in a completely different service.&lt;/p&gt;

&lt;p&gt;Planner first. We'll set it up to hit BigQuery via MCP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# planner_agent.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LlmAgent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.tools.mcp_tool&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MCPToolset&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.tools.mcp_tool.mcp_session_manager&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;StreamableHTTPConnectionParams&lt;/span&gt;

&lt;span class="c1"&gt;# Point at Google Cloud's managed BigQuery MCP server.
# No infra to deploy. Auth handled by IAM.
&lt;/span&gt;&lt;span class="n"&gt;bigquery_tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MCPToolset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;connection_params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;StreamableHTTPConnectionParams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://bigquery.googleapis.com/mcp/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;planner&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LlmAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sales_planner&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-3.1-pro&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You analyze sales data in BigQuery and prepare a brief &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;for the reporter agent. Findings as bullet points only.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;bigquery_tools&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice what's missing there. There are no BigQuery SDK imports or crazy prompt schemas. The managed MCP server just exposes the database as an agent tool. When I ran this the first time, I kept looking for the missing step. There isn't one.&lt;/p&gt;

&lt;p&gt;Next, we expose the reporter agent over A2A:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# reporter_server.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;a2a.server&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;A2AServer&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;a2a.types&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentCard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;AgentSkill&lt;/span&gt;

&lt;span class="c1"&gt;# The Agent Card is the "business card" that other agents fetch.
# Served at /.well-known/agent-card.json automatically.
&lt;/span&gt;&lt;span class="n"&gt;card&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentCard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;QuarterlyReporter&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Turns sales briefs into formatted exec reports.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.0.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://reporter.example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;skills&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="nc"&gt;AgentSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;write_exec_report&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Write executive report&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Takes bullet findings and produces a polished report.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;input_modes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="n"&gt;output_modes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/pdf&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;A2AServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent_card&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;handler&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;my_report_handler&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That Agent Card is the magic part. It's just a tiny JSON doc at a predictable URL. It tells any other agent from any cloud exactly what this bot can do and how to authenticate. It's basically robots.txt for AI.&lt;/p&gt;

&lt;p&gt;Finally, we make them talk:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# orchestrator.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;a2a.client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;A2AClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;A2ACardResolver&lt;/span&gt;

&lt;span class="c1"&gt;# Discover what the reporter can do.
&lt;/span&gt;&lt;span class="n"&gt;resolver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;A2ACardResolver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://reporter.example.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;card&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;resolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_agent_card&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Open a client against it.
&lt;/span&gt;&lt;span class="n"&gt;reporter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;A2AClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent_card&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Run the planner...
&lt;/span&gt;&lt;span class="n"&gt;findings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;planner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyze Q1 2026 revenue by region.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# ...and hand off to the reporter over A2A.
&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;reporter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;findings&lt;/span&gt;&lt;span class="p"&gt;}]},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# A2A tasks have a real lifecycle so we stream updates back.
&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;reporter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stream_task&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;artifacts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three files and we have a working cross-service handoff. The crazy part is that the reporter could be running on AWS or it could be a Salesforce agent. The planner code wouldn't need to change at all.&lt;/p&gt;

&lt;h3&gt;
  
  
  the detail most write-ups miss
&lt;/h3&gt;

&lt;p&gt;A lot of the coverage I've seen just says "these are cool." True. But the interesting part is the underlying design.&lt;/p&gt;

&lt;p&gt;A2A is basically stealing every good idea from how the early web scaled. Agent Cards live at /.well-known/agent-card.json. That's RFC 8615, the same pattern we use for security.txt. They're using JSON-RPC 2.0 over HTTP and Server-Sent Events. If your system speaks HTTP, it speaks A2A.&lt;/p&gt;

&lt;p&gt;Tasks have a normal lifecycle too. Submitted, working, completed. It's the same shape as AWS Step Functions or GitHub Actions. It's boring—and coming from backend land, that's basically the nicest thing I can say about a tech. Clever protocols usually die because nobody wants to actually implement them. MCP and A2A are predictable.&lt;/p&gt;

&lt;h3&gt;
  
  
  stuff I'm still not sold on
&lt;/h3&gt;

&lt;p&gt;Look, I'm not totally sold yet.&lt;/p&gt;

&lt;p&gt;The security surface area here is terrifying. An agent that can auto-discover other agents and pass tasks around is an absolute nightmare for prompt injection or data exfiltration. I'd need a very solid threat model before letting this touch real production data.&lt;/p&gt;

&lt;p&gt;Debugging is also going to be awful. Google says everything lands in Cloud Audit Logs. Cool. But tracing a failed task across three different agents built by three different vendors? Prepare for a lot of late nights.&lt;/p&gt;

&lt;p&gt;Also, the spec is still moving. A2A is at the Linux Foundation, which means it will evolve. If you build heavily on it today, you will probably be rewriting parts of it next year.&lt;/p&gt;

&lt;h3&gt;
  
  
  what I'd actually do this week
&lt;/h3&gt;

&lt;p&gt;If you want to get ahead of this, here is my unsolicited advice.&lt;/p&gt;

&lt;p&gt;Go run the A2A Python quickstart. It takes maybe an hour and you get a working agent in 50 lines. Then hook a basic agent up to a managed MCP server. BigQuery is probably the easiest to test. Read a real Agent Card—just go look at the JSON and see how the auth and skills are structured. It grounds the whole concept. Just don't overbuild right away. Start with two agents and see what breaks.&lt;/p&gt;

&lt;p&gt;Next '26 was Google quietly admitting that no single company will own the agent ecosystem. So they're building the infrastructure instead. A2A is the DNS. MCP is the HTTP. If you learn these protocols now, future-you is going to be really happy about it. That's my bet anyway.&lt;/p&gt;

&lt;p&gt;If you are building with A2A or MCP, drop a comment. I'd love to swap notes, especially if you've hit weird OAuth snags between managed MCP servers and non-Google clients. I definitely spent a few hours stuck on that this week.&lt;/p&gt;

&lt;p&gt;— Saquib&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>cloudnextchallenge</category>
      <category>googlecloud</category>
      <category>ai</category>
    </item>
    <item>
      <title>BrewOS 3000: The $47M Enterprise Coffee Platform That Has Never Made Coffee</title>
      <dc:creator>Saquib Shahid</dc:creator>
      <pubDate>Thu, 09 Apr 2026 17:34:58 +0000</pubDate>
      <link>https://dev.to/devsaquib/brewos-3000-the-47m-enterprise-coffee-platform-that-has-never-made-coffee-50i2</link>
      <guid>https://dev.to/devsaquib/brewos-3000-the-47m-enterprise-coffee-platform-that-has-never-made-coffee-50i2</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/aprilfools-2026"&gt;DEV April Fools Challenge&lt;/a&gt;, Best Ode to Larry Masinter&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;In 1998, Larry Masinter published &lt;a href="https://datatracker.ietf.org/doc/html/rfc2324" rel="noopener noreferrer"&gt;RFC 2324&lt;/a&gt; — the Hyper Text Coffee Pot Control Protocol. It defined a new HTTP method (&lt;code&gt;BREW&lt;/code&gt;), a new status code (&lt;code&gt;418 I'm a Teapot&lt;/code&gt;), and exactly zero practical applications. It was an April Fools joke. It became immortal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BrewOS 3000&lt;/strong&gt; is my love letter to that joke.&lt;/p&gt;

&lt;p&gt;It is a NASA mission-control-grade enterprise coffee procurement dashboard that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accepts your blood type (affects roast compatibility)&lt;/li&gt;
&lt;li&gt;Requires you to select your Existential Mood State (&lt;code&gt;Monday&lt;/code&gt; is a valid option)&lt;/li&gt;
&lt;li&gt;Makes you pass a CAPTCHA to add milk ("Spell COFFEE backwards")&lt;/li&gt;
&lt;li&gt;Asks you to agree that &lt;em&gt;"coffee is a human right and you accept all karmic responsibility for choosing decaf"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Runs a live WebSocket diagnostics log that — I cannot stress this enough — logs &lt;code&gt;[17:22:32] Querying Larry Masinter's ghost... 404&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Tracks six real-time metrics including Bean Entropy, Grind Latency, and Quantum Roast Index&lt;/li&gt;
&lt;li&gt;Executes a full 8-step async brew sequence with blockchain verification&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Always fails with HTTP 418.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every single time. Without exception. By design.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I am a teapot&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Short and stout, here is my spout&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Your coffee: denied&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🔗 &lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://htcpcp.vercel.app/" rel="noopener noreferrer"&gt;htcpcp.vercel.app&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://htcpcp.vercel.app/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;htcpcp.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;![BrewOS 3000 dashboard showing brew parameters, live diagnostics log reading "Querying Larry Masinter's ghost... 404", and six real-time telemetry metrics in a dark CRT-style terminal UI]&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;SYSTEM UPTIME: 09:02:28 · ONLINE · NEVER BREWED&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/saquib-shahid" rel="noopener noreferrer"&gt;
        saquib-shahid
      &lt;/a&gt; / &lt;a href="https://github.com/saquib-shahid/htcpcp" rel="noopener noreferrer"&gt;
        htcpcp
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Dev April fool challenge
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tbody&gt;
  &lt;tr&gt;
    &lt;th&gt;title&lt;/th&gt;
    &lt;td&gt;BrewOS 3000: The $47M Enterprise Coffee Solution That Has Never Brewed a Cup&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;published&lt;/th&gt;
    &lt;td&gt;false&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;description&lt;/th&gt;
    &lt;td&gt;My submission for the DEV April Fools Content Challenge - Best Ode to Larry Masinter&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;tags&lt;/th&gt;
    &lt;td&gt;webdev, humor, javascript, aprilfools, react&lt;/td&gt;
  &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 The $47M Mission&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Picture this: The year is 2021. Our CEO waited an agonizing &lt;em&gt;four minutes&lt;/em&gt; for a latte at a hipster coffee shop. In a moment of pure unadulterated hubris, he decided what the world really needed was not another barista, but a &lt;strong&gt;distributed coffee infrastructure platform&lt;/strong&gt; powered by Web3, Machine Learning, and arbitrary venture capital.&lt;/p&gt;
&lt;p&gt;We raised $47M in Series B funding. We hired 200 engineers. We spent two years rewriting our microservices in Rust.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;And we have never made a single cup of coffee.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Welcome to &lt;strong&gt;[BrewOS 3000]&lt;/strong&gt;, my wildly over-engineered submission for the &lt;strong&gt;DEV April Fools Content Challenge 2024&lt;/strong&gt; under the &lt;em&gt;"Best Ode to Larry Masinter"&lt;/em&gt;…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/saquib-shahid/htcpcp" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;





&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; React + Vite, Tailwind CSS v4, deployed on Vercel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fonts:&lt;/strong&gt; &lt;code&gt;Bebas Neue&lt;/code&gt; for headers, &lt;code&gt;Share Tech Mono&lt;/code&gt; for everything that needed to feel like a submarine terminal. Both doing &lt;em&gt;serious&lt;/em&gt; work here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The aesthetic:&lt;/strong&gt; Full dark CRT mission-control theme. Amber-on-black. Scanline overlay. Real-time metrics that fluctuate via &lt;code&gt;setInterval&lt;/code&gt; to make it look like the servers are working incredibly hard to do nothing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The brew sequence&lt;/strong&gt; is a React state machine — eight async steps with artificial delays, each one logging to the live diagnostics panel. Steps include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Validating blood type against NASA coffee manifest&lt;/li&gt;
&lt;li&gt;Verifying bean provenance on-chain&lt;/li&gt;
&lt;li&gt;Checking municipal brew permit&lt;/li&gt;
&lt;li&gt;Milk authorization CAPTCHA&lt;/li&gt;
&lt;li&gt;Blockchain roast consensus (always times out)&lt;/li&gt;
&lt;li&gt;Biometric mood analysis&lt;/li&gt;
&lt;li&gt;Running 47 pre-flight safety checks&lt;/li&gt;
&lt;li&gt;Attempting to brew → &lt;strong&gt;418&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The diagnostics log streams these in real time. The progress bar hits 99% and turns red. The 418 modal takes over the screen with the full RFC citation and the haiku.&lt;/p&gt;

&lt;p&gt;I originally planned a real Node/Express HTCPCP backend, but realized the true startup move is to fake the entire infrastructure client-side to save on compute costs. We call this "serverless". Investors love it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keyboard shortcuts exist&lt;/strong&gt;, because of course they do. Press &lt;code&gt;B&lt;/code&gt; to initiate brew. Press &lt;code&gt;Escape&lt;/code&gt; to acknowledge your failure and try again.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Best Ode to Larry Masinter.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's why this earns it:&lt;/p&gt;

&lt;p&gt;RFC 2324 is one of the greatest pieces of technical writing in internet history. It's a fully specified protocol, complete with &lt;code&gt;BREW&lt;/code&gt; and &lt;code&gt;WHEN&lt;/code&gt; methods, error codes, and a clause prohibiting the addition of milk &lt;em&gt;"to an Assam Darjeeling"&lt;/em&gt;. It introduced &lt;code&gt;418 I'm a Teapot&lt;/code&gt; as a serious-looking status code for a joke that has since survived every attempt to remove it from the web. Developers rallied. The code stayed. Larry Masinter won.&lt;/p&gt;

&lt;p&gt;BrewOS 3000 does not merely &lt;em&gt;reference&lt;/em&gt; RFC 2324. It &lt;strong&gt;implements&lt;/strong&gt; it — faithfully, reverently, and completely uselessly. The &lt;code&gt;BREW&lt;/code&gt; request fires. The &lt;code&gt;418&lt;/code&gt; returns. The teapot wins. Every time.&lt;/p&gt;

&lt;p&gt;This is the only correct way to honor a man who made the internet laugh for 28 years and counting.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;© 2025 BrewOS Inc. Powered by HTCPCP/1.0 · RFC 2324 · No coffee was harmed in the making of this app (because none was made).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>418challenge</category>
      <category>showdev</category>
      <category>aprilfool</category>
    </item>
  </channel>
</rss>
