<?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: Aditya</title>
    <description>The latest articles on DEV Community by Aditya (@aditya_007).</description>
    <link>https://dev.to/aditya_007</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%2F947444%2F6f1f7420-60ac-43a8-98b3-bc6d7052ddc4.jpg</url>
      <title>DEV Community: Aditya</title>
      <link>https://dev.to/aditya_007</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aditya_007"/>
    <language>en</language>
    <item>
      <title>I built GHOST — an AI agent that actually fixes your slow laptop using Gemma 4 locally</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Sun, 17 May 2026 14:35:11 +0000</pubDate>
      <link>https://dev.to/aditya_007/i-built-ghost-an-ai-agent-that-actually-fixes-your-slow-laptop-using-gemma-4-locally-14ej</link>
      <guid>https://dev.to/aditya_007/i-built-ghost-an-ai-agent-that-actually-fixes-your-slow-laptop-using-gemma-4-locally-14ej</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: Build with Gemma 4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;GHOST&lt;/strong&gt; (Gemma Hardware Optimization &amp;amp; System Tuner) is a local AI agent that runs on your machine, watches every process in real time, figures out &lt;em&gt;why&lt;/em&gt; your laptop is slow, and actually fixes it — automatically.&lt;/p&gt;

&lt;p&gt;Most "AI optimizer" tools give you a report and ask you to do the work. GHOST does the work. It runs a continuous &lt;strong&gt;Sense → Think → Act → Verify → Rollback&lt;/strong&gt; loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;SENSE&lt;/strong&gt; — A Go daemon reads CPU per-core, RAM per-process, thermals, battery drain, and active window title every 5 seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;THINK&lt;/strong&gt; — Gemma 4 receives the last 10 minutes of telemetry (the full 128K context window) and identifies the &lt;em&gt;root cause&lt;/em&gt;, not just the symptom&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ACT&lt;/strong&gt; — It executes the fix: suspending rogue background processes, lowering priorities, flushing caches&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VERIFY&lt;/strong&gt; — 60 seconds later it re-measures. Did CPU drop? Did RAM free up?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ROLLBACK&lt;/strong&gt; — If metrics didn't improve, every action is automatically reversed. Zero risk.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Beyond reactive fixes, GHOST also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Predicts slowdowns&lt;/strong&gt; before they happen — after learning your machine's patterns, it warns you 10-15 minutes in advance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Builds a Machine Persona&lt;/strong&gt; — a behavioral fingerprint after 7 days of monitoring: your peak load hours, primary offenders, battery health prognosis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Writes a Weekly Letter&lt;/strong&gt; — every Monday, Gemma narrates your machine's week in plain English: what it fixed, what to watch, how much battery life is left&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The stack is Go (backend agent) + Electron + React (desktop UI), with Gemma 4 running 100% locally via Ollama. Your process list, telemetry, and usage patterns never leave your machine.&lt;/p&gt;




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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/eekOZY4QigI"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Here's what GHOST looks like running on a real machine under load:&lt;/p&gt;

&lt;h3&gt;
  
  
  Dashboard — live metrics catching a problem in real time
&lt;/h3&gt;

&lt;p&gt;Zoom.exe at 94.7% CPU, ollama.exe consuming 2.4GB RAM, RAM pressure at 85%. Gemma's Last Analysis card already identified the root cause and proposed a fix.&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Foo3hf77ilwdujqu017d9.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.amazonaws.com%2Fuploads%2Farticles%2Foo3hf77ilwdujqu017d9.png" alt="GHOST Dashboard showing live metrics with RAM at 85% and Gemma's analysis card" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Agent Log — the Sense → Think → Act loop streaming live
&lt;/h3&gt;

&lt;p&gt;Watch Gemma reason in real time: &lt;em&gt;"The telemetry shows ollama.exe consistently consuming 91.4% of CPU... The elevated RAM usage (2409.2MB) associated with ollama.exe further supports this conclusion, as it's likely running the LLM and related processes."&lt;/em&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fi0r8gf1nh528o2pazc39.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.amazonaws.com%2Fuploads%2Farticles%2Fi0r8gf1nh528o2pazc39.png" alt="GHOST Agent Log showing THINK reasoning and ACT execution in real time" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Fix History — 19 fixes, 0 rollbacks, 100% success rate
&lt;/h3&gt;

&lt;p&gt;Every action logged with timestamps, targets, and expected improvements. This is a real run on a real machine — not simulated.&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fspbewkrxx7pux1mawbr3.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.amazonaws.com%2Fuploads%2Farticles%2Fspbewkrxx7pux1mawbr3.png" alt="GHOST Fix History showing 19 total fixes, 0 rolled back, 100% success rate" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Machine Persona — Gemma's behavioral fingerprint of your hardware
&lt;/h3&gt;

&lt;p&gt;Health score 65/100. Peak load window: 9:30–10:00 AM daily. Primary offender: Code.exe + Ollama. Battery life estimated at ~18 months. This is built from days of real telemetry, not hardcoded rules.&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2F5paxc7mau1kw3byxy82k.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.amazonaws.com%2Fuploads%2Farticles%2F5paxc7mau1kw3byxy82k.png" alt="GHOST Machine Persona showing health score ring, behavioral patterns, and model tier selector" width="800" height="424"&gt;&lt;/a&gt;&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/TheCoderAdi" rel="noopener noreferrer"&gt;
        TheCoderAdi
      &lt;/a&gt; / &lt;a href="https://github.com/TheCoderAdi/GHOST" rel="noopener noreferrer"&gt;
        GHOST
      &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;GHOST — Gemma Hardware Optimization &amp;amp; System Tuner&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;An AI agent that monitors your machine in real time, reasons about what's slowing it down using Gemma, and actually fixes it — with a full rollback safety net.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;What makes GHOST different&lt;/h1&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Acts, doesn't just advise&lt;/strong&gt; — Gemma reasons over live telemetry and executes fixes: suspending rogue processes, adjusting priorities, flushing caches. Not a report. An agent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sense → Think → Act → Verify → Rollback loop&lt;/strong&gt; — every action is measured. If metrics don't improve in 60s, GHOST rolls back automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predictive alerts&lt;/strong&gt; — after 3+ days of data, GHOST learns your machine's patterns and warns you &lt;em&gt;before&lt;/em&gt; a slowdown happens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Machine persona&lt;/strong&gt; — builds a behavioral fingerprint over 7 days. Knows your peak hours, worst offenders, battery prognosis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weekly health letter&lt;/strong&gt; — Gemma writes a plain-English summary of your machine's week, every Monday.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100% local + private&lt;/strong&gt; — your…&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/TheCoderAdi/GHOST" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Architecture at a glance
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ghost-server/   (Go — the AI agent)
├── sensor/     — gopsutil: CPU, RAM, thermals, battery, active window (every 5s)
├── agent/      — analyze loop (60s), predict loop (5min), persona builder (6h)
├── gemma/      — HTTP client → Ollama local API, structured JSON output
├── executor/   — safe action runner + full undo stack + 60s verify
├── storage/    — SQLite: snapshots, action history, persona, weekly letters
└── ipc/        — stdin/stdout newline-delimited JSON bridge to Electron

ghost-client/   (Electron + React + TypeScript)
├── Dashboard      — live metrics, sparklines, process table, last analysis
├── Agent Log      — streaming SENSE/THINK/ACT/WIN terminal with color phases
├── Fix History    — every fix with before/after delta measurements
├── Machine Persona — health score, behavioral fingerprint, model tier selector
└── Weekly Letter  — Gemma's plain-English machine health report
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The agent loop (the core of everything)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// agent/agent.go&lt;/span&gt;
&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;RunAnalyzeLoop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;ticker&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;NewTicker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;90&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Second&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;defer&lt;/span&gt; &lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;anomalyCh&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;analyze&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="n"&gt;ticker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
            &lt;span class="c"&gt;// Only analyze on timer if load is meaningful&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Latest&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CPUAvg&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;40&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RAMPct&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;70&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;analyze&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="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;executeAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="n"&gt;gemma&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ActionItem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;snap&lt;/span&gt; &lt;span class="n"&gt;sensor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Snapshot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"act"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Executing: %s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Description&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;rec&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ActionRecord&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;ActionID&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;            &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ID&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="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Target&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;              &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Risk&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;                &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Risk&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;CPUBefore&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;           &lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CPUAvg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;RAMBefore&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;           &lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RAMPct&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;TempBefore&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;          &lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaxTemp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;ExpectedImprovement&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ExpectedImprovement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;dbID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SaveAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Success&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Action failed: %s"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;// Verify after 60s&lt;/span&gt;
    &lt;span class="k"&gt;go&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dbID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;snap&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dbID&lt;/span&gt; &lt;span class="kt"&gt;int64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="n"&gt;gemma&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ActionItem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt; &lt;span class="n"&gt;sensor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Snapshot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Second&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;buf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Latest&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;cpuDelta&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CPUAvg&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CPUAvg&lt;/span&gt;
    &lt;span class="n"&gt;ramDelta&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RAMPct&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RAMPct&lt;/span&gt;
    &lt;span class="n"&gt;tempDelta&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaxTemp&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaxTemp&lt;/span&gt;

    &lt;span class="n"&gt;improved&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;cpuDelta&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;ramDelta&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;tempDelta&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;improved&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"win"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="s"&gt;"✓ %s — CPU %+.0f%% | RAM %+.0f%% | Temp %+.0f°C"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;cpuDelta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ramDelta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;tempDelta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="k"&gt;interface&lt;/span&gt;&lt;span class="p"&gt;{}{&lt;/span&gt;
            &lt;span class="s"&gt;"cpu_delta"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;  &lt;span class="n"&gt;cpuDelta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;"ram_delta"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;  &lt;span class="n"&gt;ramDelta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;"temp_delta"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tempDelta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;})&lt;/span&gt;

        &lt;span class="c"&gt;// Update DB with after metrics&lt;/span&gt;
        &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SaveAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ActionRecord&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;ActionID&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;            &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ID&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="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Target&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;              &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Target&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Risk&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;                &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Risk&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;CPUBefore&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;           &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CPUAvg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;RAMBefore&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;           &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RAMPct&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;TempBefore&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;          &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaxTemp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;CPUAfter&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;            &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CPUAvg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;RAMAfter&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;            &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RAMPct&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;TempAfter&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;           &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MaxTemp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;ExpectedImprovement&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ExpectedImprovement&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="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"rollback"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Sprintf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"No improvement detected for '%s' — rolling back"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Description&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RollbackLast&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MarkRolledBack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dbID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bridge&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Emit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"rollback"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"action_id"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ID&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Gemma prompt (what makes the reasoning good)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are GHOST, an AI system performance agent running locally.
Receive real-time telemetry and:
1. Identify ROOT CAUSE (correlate across TIME — not just current spikes)
2. Propose specific, safe, reversible actions ranked by impact
3. Explain in plain English

CRITICAL RULES:
- Never suggest actions risking data loss
- Prefer the most reversible action always  
- Correlate metrics across TIME — a spike alone is not a root cause
- Consider process relationships (parent/child PIDs)
- Output ONLY valid JSON
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






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

&lt;h3&gt;
  
  
  Why Gemma 4 — and which model
&lt;/h3&gt;

&lt;p&gt;GHOST uses &lt;strong&gt;Gemma 4 in three tiers&lt;/strong&gt; based on the target hardware:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;RAM Required&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lite ✓&lt;/td&gt;
&lt;td&gt;Gemma 4 e2B&lt;/td&gt;
&lt;td&gt;4GB+&lt;/td&gt;
&lt;td&gt;Old laptops, Raspberry Pi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Gemma 4 e4B&lt;/td&gt;
&lt;td&gt;8GB+&lt;/td&gt;
&lt;td&gt;Most modern laptops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full&lt;/td&gt;
&lt;td&gt;Gemma 4 26B&lt;/td&gt;
&lt;td&gt;16GB+&lt;/td&gt;
&lt;td&gt;High-end workstations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For development and submission testing I ran the &lt;strong&gt;Standard tier (Gemma 4 4B)&lt;/strong&gt; — which is exactly the "ultra-mobile and edge deployment" model the Gemma 4 family was designed for. This is a deliberate choice, not a fallback.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why local-only is not optional here
&lt;/h3&gt;

&lt;p&gt;Sending your system's process list, memory allocation per app, thermal readings, and active window title to a cloud API would be a privacy violation. This data tells you everything about what someone is doing on their machine at any moment. GHOST's local architecture isn't a tradeoff — it's the only ethical way to build this tool.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Gemma 4 specifically unlocks
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Root-cause correlation, not symptom flagging.&lt;/strong&gt; Task Manager shows you that CPU is at 94%. Any threshold check can do that. What GHOST does is feed Gemma 10 minutes of per-process telemetry and ask it to connect the dots across time. In the demo screenshots, Gemma correctly identified that ollama.exe's RAM usage (2,409MB) combined with its sustained CPU load was a &lt;em&gt;model loading issue&lt;/em&gt; — not generic "high CPU." That distinction determines what fix to apply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 128K context window is the product.&lt;/strong&gt; I don't chunk telemetry. I don't use RAG. I don't summarize. I feed the entire 10-minute window — every snapshot, every process, every measurement — directly into context. This is what allows Gemma to say "the RAM pressure started 7 minutes ago when this process spawned" rather than just "RAM is high now." Long-range pattern recognition across continuous telemetry is only possible because of the 128K window.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Machine Persona and Weekly Letter require genuine synthesis.&lt;/strong&gt; Building a behavioral fingerprint from 7 days of hourly aggregates, then writing a coherent narrative about a machine's personality — that's not a retrieval task. It requires Gemma to synthesize patterns, make inferences, and communicate them in natural language. The persona in the screenshot (peak load 9:30-10:00 AM, Code.exe + Ollama as primary offenders, battery ~18 months remaining) came entirely from Gemma analyzing real historical data with no template.&lt;/p&gt;

&lt;h3&gt;
  
  
  The low-end device question
&lt;/h3&gt;

&lt;p&gt;The most common question this project gets: &lt;em&gt;"If GHOST is for slow laptops, how can it afford to run a large model?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The answer is in how GHOST uses Gemma. The sensing daemon is a tiny Go binary (~8MB). Gemma only activates every 60-90 seconds for analysis — not on every tick. On the Lite tier (Gemma 4 2B), GHOST consistently recovers more RAM through its fixes than the model itself occupies. The net memory delta on a typical slow laptop is &lt;em&gt;positive&lt;/em&gt;. You end up with more free RAM after running GHOST than before, even accounting for the model.&lt;/p&gt;

&lt;p&gt;This is why the Machine Persona tab shows the model tier selector with the note: &lt;em&gt;"GHOST uses Gemma only every 60-90s for analysis — not continuously. On Lite mode, GHOST recovers more RAM than Gemma uses."&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Results from the demo machine
&lt;/h3&gt;

&lt;p&gt;Running GHOST for several hours on a real Windows machine under development load:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;19 fixes applied&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0 rollbacks&lt;/strong&gt; (100% success rate)&lt;/li&gt;
&lt;li&gt;Primary issues identified: concurrent ollama instances, Code.exe memory pressure, msedge WebView2 background processes&lt;/li&gt;
&lt;li&gt;Machine health score: 65/100 with specific, actionable diagnosis written by Gemma&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Agent Log screenshot shows Gemma's live reasoning — not canned responses, not templates. Real inference on real telemetry.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with Go, Electron, React, TypeScript, SQLite, and Gemma 4 via Ollama.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
      <category>electron</category>
    </item>
    <item>
      <title>🤔 Everything You Were Too Afraid to Ask About Gemma 4 (But Should Have)</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Sun, 10 May 2026 09:52:39 +0000</pubDate>
      <link>https://dev.to/aditya_007/everything-you-were-too-afraid-to-ask-about-gemma-4-but-should-have-5gpa</link>
      <guid>https://dev.to/aditya_007/everything-you-were-too-afraid-to-ask-about-gemma-4-but-should-have-5gpa</guid>
      <description>&lt;h2&gt;
  
  
  Gemma 4 Explained Like You Actually Needed It
&lt;/h2&gt;

&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;Let's be honest.&lt;/p&gt;

&lt;p&gt;When a new model drops, the usual drill is: read a 3,000-word technical blog, skim the benchmarks, get mildly confused, and close the tab.&lt;/p&gt;

&lt;p&gt;Not today.&lt;/p&gt;

&lt;p&gt;I'm going to answer every real question a developer actually has about &lt;strong&gt;Gemma 4&lt;/strong&gt; — the ones you'd ask a friend at 11 PM when you're mid-project and slightly panicking. No fluff. No jargon soup. Just honest, useful answers.&lt;/p&gt;

&lt;p&gt;Ready? Let's go.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❓ "Okay, what even &lt;em&gt;is&lt;/em&gt; Gemma 4? Is it just another chatbot?"
&lt;/h2&gt;

&lt;p&gt;Not quite. Gemma 4 is Google's latest &lt;strong&gt;open model family&lt;/strong&gt; — meaning Google trained it, and then gave it to the world. You can download it, run it on your own machine, build with it without paying per token, and never send a single byte of your data to a cloud server.&lt;/p&gt;

&lt;p&gt;It's not &lt;em&gt;one&lt;/em&gt; model. It's a family of three very different things:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemma 4 2B / 4B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tiny&lt;/td&gt;
&lt;td&gt;Your phone. A Raspberry Pi. The browser. Edge devices.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemma 4 31B Dense&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Local machine with a decent GPU. Serious projects.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemma 4 26B MoE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Efficient&lt;/td&gt;
&lt;td&gt;High-throughput apps. Advanced reasoning. Servers.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;MoE = &lt;strong&gt;Mixture of Experts&lt;/strong&gt;. Think of it like a model that has specialized teams internally — only the relevant "expert" activates per task. Very efficient.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ❓ "Why would I use this instead of GPT-4 or Claude?"
&lt;/h2&gt;

&lt;p&gt;Excellent question. Here's the real answer:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You use Gemma 4 when you care about:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔒 &lt;strong&gt;Privacy&lt;/strong&gt; — your data stays on your device&lt;/li&gt;
&lt;li&gt;💸 &lt;strong&gt;Cost&lt;/strong&gt; — no API bills, ever&lt;/li&gt;
&lt;li&gt;🛠️ &lt;strong&gt;Customization&lt;/strong&gt; — fine-tune it on your own data&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;Offline use&lt;/strong&gt; — flights, rural areas, air-gapped servers&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Speed&lt;/strong&gt; — local inference can be fast with the right hardware&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;You might still prefer hosted models when you need:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero setup time&lt;/li&gt;
&lt;li&gt;The absolute frontier of capability&lt;/li&gt;
&lt;li&gt;No local hardware&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neither is universally better. They're tools. Pick the right one.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❓ "The 2B model runs on a &lt;em&gt;Raspberry Pi&lt;/em&gt;?! How is that possible?"
&lt;/h2&gt;

&lt;p&gt;Yes, really. And here's the intuition:&lt;/p&gt;

&lt;p&gt;Modern quantization techniques (compressing a model's weights from 32-bit floats down to 4-bit integers) can shrink a model to 10–15% of its original size with surprisingly little quality loss.&lt;/p&gt;

&lt;p&gt;A 2B parameter model at 4-bit quantization? &lt;strong&gt;~1.2 GB&lt;/strong&gt;. A Raspberry Pi 5 has 8GB RAM. It fits. It runs. Slowly, but it &lt;em&gt;runs&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install Ollama on your Pi&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://ollama.com/install.sh | sh

&lt;span class="c"&gt;# Pull and run Gemma 4 2B&lt;/span&gt;
ollama run gemma4:2b

&lt;span class="c"&gt;# That's it. Seriously.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Is it blazing fast? No. Is it magical that a multimodal AI model runs on a $80 computer with no internet? &lt;strong&gt;Absolutely yes.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ❓ "What does 'native multimodal' actually mean in practice?"
&lt;/h2&gt;

&lt;p&gt;It means you can hand Gemma 4 an &lt;strong&gt;image, text, or both&lt;/strong&gt; and it just... understands.&lt;/p&gt;

&lt;p&gt;Old approach: pipe image through a vision encoder → combine embeddings → pass to LLM. Multiple systems, multiple failure points.&lt;/p&gt;

&lt;p&gt;Gemma 4's approach: it was trained from the ground up to understand both modalities as one unified experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical example:&lt;/strong&gt; Say you're building an inventory tracker for a small warehouse. A worker takes a photo of a shelf. You send that photo to Gemma 4 and ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What items do you see? Estimate quantities if possible."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No custom vision pipeline. No separate classification model. One API call. Done.&lt;/p&gt;

&lt;p&gt;Or: &lt;strong&gt;accessibility tools&lt;/strong&gt; that describe UI screenshots. Or: &lt;strong&gt;document processors&lt;/strong&gt; that handle scanned forms. Or: &lt;strong&gt;educational apps&lt;/strong&gt; that let students photo a math problem and ask for hints.&lt;/p&gt;

&lt;p&gt;This is the feature that opens up whole categories of apps that previously needed expensive multi-model orchestration.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❓ "128K context window — what does that actually unlock?"
&lt;/h2&gt;

&lt;p&gt;To feel the size: 128,000 tokens ≈ &lt;strong&gt;100,000 words&lt;/strong&gt; ≈ a full novel.&lt;/p&gt;

&lt;p&gt;Previously, if you wanted an AI to reason across a long codebase, legal document, or research paper, you had to chunk it, lose context at the edges, and hope the model stitched it together. This was a real limitation.&lt;/p&gt;

&lt;p&gt;With 128K context, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feed in an &lt;strong&gt;entire codebase&lt;/strong&gt; and ask "Where's the bug causing the race condition?"&lt;/li&gt;
&lt;li&gt;Drop in a &lt;strong&gt;50-page PDF contract&lt;/strong&gt; and ask "Summarize all the liability clauses"&lt;/li&gt;
&lt;li&gt;Pass &lt;strong&gt;200 Slack messages&lt;/strong&gt; and ask "What did the team decide about the deployment?"&lt;/li&gt;
&lt;li&gt;Build a &lt;strong&gt;long-running conversation agent&lt;/strong&gt; that actually remembers everything said&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The catch: longer context = more compute per inference. This is where the 31B dense model really earns its place — it handles long-context reasoning exceptionally well.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❓ "Which model should I actually use for my project?"
&lt;/h2&gt;

&lt;p&gt;Here's the honest decision tree:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Are you deploying on mobile, browser, or embedded hardware?
    └── YES → Use 2B or 4B. No question.
    └── NO →
        Do you need high throughput / advanced multi-step reasoning?
            └── YES → Use 26B MoE. Built for this.
            └── NO →
                Do you have a good GPU locally (RTX 3090+ / M2+ Mac)?
                    └── YES → Use 31B Dense. Best quality/local balance.
                    └── NO → Use 26B MoE via OpenRouter (free tier).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ❓ "How do I try it for free, right now, without any setup?"
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Option 1: Google AI Studio&lt;/strong&gt; &lt;em&gt;(fastest)&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Go to &lt;code&gt;aistudio.google.com&lt;/code&gt;, select Gemma 4 from the model dropdown, and start prompting. No code required.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Option 2: OpenRouter&lt;/strong&gt; &lt;em&gt;(free tier, SDK access)&lt;/em&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;OpenAI&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;openai&lt;/span&gt;&lt;span class="dl"&gt;'&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;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://openrouter.ai/api/v1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;lt;OPENROUTER_API_KEY&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// First API call with reasoning&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;google/gemma-4-26b-a4b-it:free&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;messages&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="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;How many r's are in the word 'strawberry'?&lt;/span&gt;&lt;span class="dl"&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="na"&gt;reasoning&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&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;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;apiResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;message&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;messages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;How many r's are in the word 'strawberry'?&lt;/span&gt;&lt;span class="dl"&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="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;assistant&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;reasoning_details&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reasoning_details&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="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Are you sure? Think carefully.&lt;/span&gt;&lt;span class="dl"&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;google/gemma-4-26b-a4b-it:free&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;messages&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;Sign up at &lt;code&gt;openrouter.ai&lt;/code&gt; — free tier available, no credit card required.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Option 3: Ollama locally&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install Ollama (Mac/Linux/Windows)&lt;/span&gt;
&lt;span class="c"&gt;# From https://ollama.com&lt;/span&gt;

ollama pull gemma4:9b
ollama run gemma4:9b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ❓ "What's the one thing about Gemma 4 that most people are sleeping on?"
&lt;/h2&gt;

&lt;p&gt;Fine-tuning.&lt;/p&gt;

&lt;p&gt;Everyone talks about inference. Almost nobody talks about the fact that you can &lt;strong&gt;take Gemma 4 and make it yours&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Fine-tuning means: take the base model → train it on &lt;em&gt;your&lt;/em&gt; data (customer support logs, medical documents, your company's writing style, your game's lore) → get a model that performs far better on your specific task than any general-purpose model.&lt;/p&gt;

&lt;p&gt;With hosted models (GPT, Claude), fine-tuning is expensive, limited, or impossible. With Gemma 4, you own the weights. You can fine-tune with a technique called &lt;strong&gt;LoRA&lt;/strong&gt; on a single consumer GPU and end up with a model that's tailor-made for your domain.&lt;/p&gt;

&lt;p&gt;Google's own team demonstrated this by fine-tuning Gemma 4 with Cloud Run Jobs. That level of customization is what "open" actually means in practice.&lt;/p&gt;




&lt;h2&gt;
  
  
  ❓ "Is local AI actually the future, or is this just hype?"
&lt;/h2&gt;

&lt;p&gt;Here's my honest take:&lt;/p&gt;

&lt;p&gt;It's not either/or. But local AI is solving real problems that cloud AI cannot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data sovereignty&lt;/strong&gt;: hospitals, law firms, and governments can't send sensitive data to third-party APIs. Local inference isn't a nice-to-have — it's a requirement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost at scale&lt;/strong&gt;: if you're running millions of inferences per month, per-token pricing adds up fast. A one-time compute cost is fundamentally different.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt;: cloud roundtrips add 200–800ms. Local inference on fast hardware can be 20–50ms. For real-time applications, that gap is enormous.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability&lt;/strong&gt;: no rate limits, no outages, no API deprecations pulling the rug out from under your product.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What Gemma 4 represents isn't just a better model. It represents the point where &lt;strong&gt;open models are good enough for production use cases&lt;/strong&gt; — multimodal, long-context, capable — and that's a genuine inflection point.&lt;/p&gt;

&lt;p&gt;The first time I ran a capable multimodal model locally without relying on an API key, it genuinely changed how I think about AI infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Reference Card
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Answer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What is Gemma 4?&lt;/td&gt;
&lt;td&gt;Google's open model family (2B–31B)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How many variants?&lt;/td&gt;
&lt;td&gt;3: Small (2B/4B), Dense 31B, MoE 26B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context window?&lt;/td&gt;
&lt;td&gt;128K tokens (~100K words)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multimodal?&lt;/td&gt;
&lt;td&gt;Yes — text + images natively&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free to use?&lt;/td&gt;
&lt;td&gt;Yes — AI Studio, OpenRouter, local&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can I fine-tune?&lt;/td&gt;
&lt;td&gt;Yes — you own the weights&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runs on Pi?&lt;/td&gt;
&lt;td&gt;Yes — 2B/4B with Ollama&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for edge?&lt;/td&gt;
&lt;td&gt;2B / 4B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for reasoning?&lt;/td&gt;
&lt;td&gt;26B MoE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for local quality?&lt;/td&gt;
&lt;td&gt;31B Dense&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Your Turn
&lt;/h2&gt;

&lt;p&gt;Now you know what Gemma 4 is, what to use it for, and how to get started in under 5 minutes.&lt;/p&gt;

&lt;p&gt;The best thing you can do next? &lt;strong&gt;Build something small and real.&lt;/strong&gt; A weekend project. A tool that solves one problem you actually have. Running Gemma 4 locally for the first time — watching it respond on your own hardware, with your own data, with no API key required — genuinely feels like a shift in what's possible.&lt;/p&gt;

&lt;p&gt;What are you going to build?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Found this helpful? Drop a ❤️ and share what model you're trying first in the comments. And if you're building something with Gemma 4, I'd genuinely love to hear about it.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
      <category>aidev</category>
    </item>
    <item>
      <title>We’re Not Building Apps Anymore - We’re Building AI Systems (My Take on Google NEXT ’26)</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Sat, 25 Apr 2026 06:02:10 +0000</pubDate>
      <link>https://dev.to/aditya_007/were-not-building-apps-anymore-were-building-ai-systems-my-take-on-google-next-26-3jj3</link>
      <guid>https://dev.to/aditya_007/were-not-building-apps-anymore-were-building-ai-systems-my-take-on-google-next-26-3jj3</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;h2&gt;
  
  
  🚀 From AI Tools to AI Teammates: My Take on Google Cloud NEXT ’26
&lt;/h2&gt;

&lt;p&gt;Google Cloud NEXT ’26 didn’t feel like another AI event.&lt;/p&gt;

&lt;p&gt;It felt like a &lt;strong&gt;paradigm shift&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We’re no longer building apps &lt;em&gt;with AI features&lt;/em&gt;.&lt;br&gt;
We’re starting to build systems where &lt;strong&gt;AI runs the system itself&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Google calls this the &lt;strong&gt;Agentic Enterprise&lt;/strong&gt; — and after watching both keynotes, I think they’re right.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 The Big Shift: From “AI Assistance” → “AI Execution”
&lt;/h2&gt;

&lt;p&gt;Until now, AI has mostly been:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copilot for code&lt;/li&gt;
&lt;li&gt;Chatbots for support&lt;/li&gt;
&lt;li&gt;Assistants for productivity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But NEXT ’26 pushes a different idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if AI doesn’t just &lt;em&gt;assist&lt;/em&gt;…&lt;br&gt;
What if it &lt;strong&gt;plans, decides, and executes entire workflows&lt;/strong&gt;?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s where &lt;strong&gt;agents&lt;/strong&gt; come in.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Gemini Enterprise Agent Platform (Why This Actually Matters)
&lt;/h2&gt;

&lt;p&gt;At first glance, this looks like “just another platform”.&lt;/p&gt;

&lt;p&gt;It’s not.&lt;/p&gt;

&lt;p&gt;This is Google trying to solve the &lt;strong&gt;real problem developers face today&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI is fragmented&lt;/li&gt;
&lt;li&gt;Workflows break&lt;/li&gt;
&lt;li&gt;Context is lost&lt;/li&gt;
&lt;li&gt;Systems don’t scale&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The platform introduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ADK (Agent Development Kit)&lt;/strong&gt; → Build modular agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt; → Plug into real services&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A2A Protocol&lt;/strong&gt; → Agents talk to each other&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Registry&lt;/strong&gt; → Discover capabilities dynamically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 My Insight:&lt;/p&gt;

&lt;p&gt;This is basically:&lt;br&gt;
&lt;strong&gt;Microservices architecture… but for AI agents&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🤖 The Most Underrated Part: Multi-Agent Systems
&lt;/h2&gt;

&lt;p&gt;The developer keynote demo (marathon simulation) was the real highlight for me.&lt;/p&gt;

&lt;p&gt;Instead of one AI doing everything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Planner → designs solution&lt;/li&gt;
&lt;li&gt;Evaluator → checks correctness&lt;/li&gt;
&lt;li&gt;Simulator → stress tests outcomes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This solves a major issue:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Single LLMs are unreliable&lt;br&gt;
Multi-agent systems = &lt;strong&gt;self-correcting intelligence&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🗂️ Agentic Data Cloud = Context is Finally Solved
&lt;/h2&gt;

&lt;p&gt;Every AI system fails at one thing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lack of &lt;strong&gt;context&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Google’s answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Knowledge Catalog&lt;/li&gt;
&lt;li&gt;Unified structured + unstructured data&lt;/li&gt;
&lt;li&gt;RAG with AlloyDB + Spark&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 My Take:&lt;/p&gt;

&lt;p&gt;This is not just a data platform.&lt;/p&gt;

&lt;p&gt;It’s:&lt;br&gt;
&lt;strong&gt;“Memory infrastructure for AI systems”&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ AI Hypercomputer (Why Infra Still Wins)
&lt;/h2&gt;

&lt;p&gt;Everyone talks about models.&lt;/p&gt;

&lt;p&gt;But Google quietly showed something more important:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TPU v8&lt;/li&gt;
&lt;li&gt;Nvidia Vera Rubin NVL72&lt;/li&gt;
&lt;li&gt;Virgo Network&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 My Insight:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The real AI race isn’t models — it’s &lt;strong&gt;infrastructure dominance&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🛡️ Agentic Defense (Where Most Systems Fail)
&lt;/h2&gt;

&lt;p&gt;Let’s be real.&lt;/p&gt;

&lt;p&gt;Most people building agents today are ignoring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Governance&lt;/li&gt;
&lt;li&gt;Identity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google didn’t.&lt;/p&gt;

&lt;p&gt;With:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent Gateways&lt;/li&gt;
&lt;li&gt;Zero-trust model&lt;/li&gt;
&lt;li&gt;Wiz integration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 My Take:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If your AI system isn’t secure, it won’t reach production — period.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧑‍💻 What This Means for Developers
&lt;/h2&gt;

&lt;p&gt;We are moving from:&lt;/p&gt;

&lt;p&gt;Frontend → Backend → Database&lt;/p&gt;

&lt;p&gt;To:&lt;/p&gt;

&lt;p&gt;User → Agent → Agents → Tools → Data&lt;/p&gt;

&lt;p&gt;That’s a completely different architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔥 New Developer Role:
&lt;/h3&gt;

&lt;p&gt;You’re no longer just writing APIs.&lt;/p&gt;

&lt;p&gt;You are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Designing agent behavior&lt;/li&gt;
&lt;li&gt;Defining workflows&lt;/li&gt;
&lt;li&gt;Managing system intelligence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 Developers are becoming &lt;strong&gt;AI system architects&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 What I Would Build With This
&lt;/h2&gt;

&lt;p&gt;👉 &lt;strong&gt;Autonomous Dev Assistant System&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Planner Agent → breaks features into tasks&lt;/li&gt;
&lt;li&gt;Executor Agent → writes code&lt;/li&gt;
&lt;li&gt;Evaluator Agent → tests &amp;amp; validates&lt;/li&gt;
&lt;li&gt;Security Agent → scans vulnerabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All connected via A2A + MCP.&lt;/p&gt;

&lt;p&gt;That’s not a tool.&lt;br&gt;
That’s a &lt;strong&gt;self-evolving system&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ My Critique
&lt;/h2&gt;

&lt;p&gt;To be honest, there are still gaps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Too complex for solo developers&lt;/li&gt;
&lt;li&gt;Debugging multi-agent systems is still hard&lt;/li&gt;
&lt;li&gt;Vendor lock-in risk exists&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google gives the platform…&lt;br&gt;
But developers still need &lt;strong&gt;better abstractions&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Final Takeaway
&lt;/h2&gt;

&lt;p&gt;Google Cloud NEXT ’26 wasn’t about better AI.&lt;/p&gt;

&lt;p&gt;It was about:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who controls the future of intelligent systems&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Closing Thought
&lt;/h2&gt;

&lt;p&gt;We’re entering a world where:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You don’t build software that users use…&lt;br&gt;
You build systems that &lt;strong&gt;think and act for them&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And honestly?&lt;/p&gt;

&lt;p&gt;That’s both exciting… and a little scary.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>cloudnextchallenge</category>
      <category>googlecloud</category>
      <category>ai</category>
    </item>
    <item>
      <title>🌍 EarthVoice — I gave the planet a memory, a voice, and the ability to talk back</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Mon, 20 Apr 2026 05:44:58 +0000</pubDate>
      <link>https://dev.to/aditya_007/earthvoice-i-gave-the-planet-a-memory-a-voice-and-the-ability-to-talk-back-hfm</link>
      <guid>https://dev.to/aditya_007/earthvoice-i-gave-the-planet-a-memory-a-voice-and-the-ability-to-talk-back-hfm</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-04-16"&gt;Weekend Challenge: Earth Day Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

&lt;p&gt;What if the Earth could speak — and actually remember every conversation it's ever had?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;EarthVoice&lt;/strong&gt; is a living, breathing AI planet. Spin a 3D globe, click any glowing location — the Amazon, the Arctic, the Great Barrier Reef — and that place speaks to you in first person. Not a description. Not a chatbot. The place &lt;em&gt;itself&lt;/em&gt;, alive and feeling.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I am the Amazon. I have stood for 55 million years. Last month alone, 430 square kilometres of me disappeared. I am getting quieter every day."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every location has its own emotional state — &lt;strong&gt;critical&lt;/strong&gt;, &lt;strong&gt;sad&lt;/strong&gt;, &lt;strong&gt;angry&lt;/strong&gt;, &lt;strong&gt;calm&lt;/strong&gt;, or &lt;strong&gt;healing&lt;/strong&gt; — which shapes its voice, its colour on the globe, and the ambient soundscape that plays as you listen.&lt;/p&gt;

&lt;p&gt;What makes EarthVoice genuinely different: &lt;strong&gt;the Earth remembers.&lt;/strong&gt; Every visitor, every question, every conversation is stored in persistent memory via Backboard. When the next person visits the Amazon, it might say &lt;em&gt;"Someone visited me yesterday — they asked about my jaguars."&lt;/em&gt; The planet grows wiser with every interaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Interactive 3D globe with 32 living locations, each glowing with emotional colour&lt;/li&gt;
&lt;li&gt;🎙️ First-person AI narratives generated by Google Gemini, enriched with real visitor memories&lt;/li&gt;
&lt;li&gt;🧠 Persistent cross-session memory powered by Backboard — each location is a Backboard AI assistant that never forgets&lt;/li&gt;
&lt;li&gt;💬 Full conversation — talk back to any location, ask it anything&lt;/li&gt;
&lt;li&gt;👥 Real-time presence — see how many people are exploring Earth right now, watch their cursors move&lt;/li&gt;
&lt;li&gt;🔊 Procedural ambient soundscape — generated entirely via Web Audio API, no audio files, changes with each location's emotion&lt;/li&gt;
&lt;li&gt;🔍 Search any of the 32 locations with ⌘K&lt;/li&gt;
&lt;li&gt;📖 Memory timeline — see what past visitors asked and what the Earth remembers&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;🔗 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://youtu.be/xbGXWWnJJws" rel="noopener noreferrer"&gt;https://youtu.be/xbGXWWnJJws&lt;/a&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Ferv23xl3ewopkz3nuox8.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.amazonaws.com%2Fuploads%2Farticles%2Ferv23xl3ewopkz3nuox8.png" alt="Image1"&gt;&lt;/a&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fwinuqk2j2d6hxpypipet.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.amazonaws.com%2Fuploads%2Farticles%2Fwinuqk2j2d6hxpypipet.png" alt="Image2"&gt;&lt;/a&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fzafmulvh8nj08g02wtgd.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.amazonaws.com%2Fuploads%2Farticles%2Fzafmulvh8nj08g02wtgd.png" alt="Image2"&gt;&lt;/a&gt;&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/TheCoderAdi" rel="noopener noreferrer"&gt;
        TheCoderAdi
      &lt;/a&gt; / &lt;a href="https://github.com/TheCoderAdi/EarthVoice" rel="noopener noreferrer"&gt;
        EarthVoice
      &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;React + TypeScript + Vite&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.&lt;/p&gt;
&lt;p&gt;Currently, two official plugins are available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react" rel="noopener noreferrer"&gt;@vitejs/plugin-react&lt;/a&gt; uses &lt;a href="https://oxc.rs" rel="nofollow noopener noreferrer"&gt;Oxc&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc" rel="noopener noreferrer"&gt;@vitejs/plugin-react-swc&lt;/a&gt; uses &lt;a href="https://swc.rs/" rel="nofollow noopener noreferrer"&gt;SWC&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;React Compiler&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;The React Compiler is not enabled on this template because of its impact on dev &amp;amp; build performances. To add it, see &lt;a href="https://react.dev/learn/react-compiler/installation" rel="nofollow noopener noreferrer"&gt;this documentation&lt;/a&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Expanding the ESLint configuration&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:&lt;/p&gt;
&lt;div class="highlight highlight-source-js notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;export&lt;/span&gt; &lt;span class="pl-k"&gt;default&lt;/span&gt; &lt;span class="pl-en"&gt;defineConfig&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-kos"&gt;[&lt;/span&gt;
  &lt;span class="pl-en"&gt;globalIgnores&lt;/span&gt;&lt;span class="pl-kos"&gt;(&lt;/span&gt;&lt;span class="pl-kos"&gt;[&lt;/span&gt;&lt;span class="pl-s"&gt;'dist'&lt;/span&gt;&lt;span class="pl-kos"&gt;]&lt;/span&gt;&lt;span class="pl-kos"&gt;)&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
  &lt;span class="pl-kos"&gt;{&lt;/span&gt;
    &lt;span class="pl-c1"&gt;files&lt;/span&gt;: &lt;span class="pl-kos"&gt;[&lt;/span&gt;&lt;span class="pl-s"&gt;'**/*.{ts,tsx}'&lt;/span&gt;&lt;span class="pl-kos"&gt;]&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
    &lt;span class="pl-c1"&gt;extends&lt;/span&gt;: &lt;span class="pl-kos"&gt;[&lt;/span&gt;
      &lt;span class="pl-c"&gt;// Other configs...&lt;/span&gt;
      &lt;span class="pl-c"&gt;// Remove tseslint.configs.recommended and replace with this&lt;/span&gt;
      &lt;span class="pl-s1"&gt;tseslint&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;configs&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;recommendedTypeChecked&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
      &lt;span class="pl-c"&gt;// Alternatively, use this for stricter rules&lt;/span&gt;
      &lt;span class="pl-s1"&gt;tseslint&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;configs&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;strictTypeChecked&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;
      &lt;span class="pl-c"&gt;// Optionally, add this for stylistic rules&lt;/span&gt;
      &lt;span class="pl-s1"&gt;tseslint&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;configs&lt;/span&gt;&lt;span class="pl-kos"&gt;.&lt;/span&gt;&lt;span class="pl-c1"&gt;stylisticTypeChecked&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt;

      &lt;span class="pl-c"&gt;// Other configs...&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/TheCoderAdi/EarthVoice" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&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/TheCoderAdi" rel="noopener noreferrer"&gt;
        TheCoderAdi
      &lt;/a&gt; / &lt;a href="https://github.com/TheCoderAdi/EarthVoice-Backend" rel="noopener noreferrer"&gt;
        EarthVoice-Backend
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;





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

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend (React + Vite + react-globe.gl + Motion)
        ↓  HTTP + WebSocket
Backend (Node.js + Express)
        ↓              ↓
  Google Gemini    Backboard SDK
  (narrative +     (persistent memory
   chat replies)    per location)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  One Assistant Per Location — The Core Idea
&lt;/h3&gt;

&lt;p&gt;The architectural decision I'm most proud of: &lt;strong&gt;each of the 32 locations on the globe is its own Backboard AI assistant.&lt;/strong&gt; When the Amazon gets its first visitor, we call &lt;code&gt;client.createAssistant()&lt;/code&gt; with a system prompt that makes it &lt;em&gt;be&lt;/em&gt; the Amazon. Every subsequent visitor gets a new thread, but all threads share the same assistant memory.&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;assistant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createAssistant&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`EarthVoice: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`The living voice of &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; — "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tagline&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;system_prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`You ARE &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;. You are this place — alive, sentient, feeling.
Your emotional state is: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;emotion&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.
Your tagline: "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tagline&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"
Speak in first person. Be poetic, vivid, 2-4 sentences.
Never break character. Never say "as an AI".
Remember every human who speaks to you across all conversations.`&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every message is sent with &lt;code&gt;memory: "Auto"&lt;/code&gt; — Backboard automatically extracts facts from each conversation and stores them permanently:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;threadId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Auto&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// the location now remembers this forever&lt;/span&gt;
  &lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&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;The Amazon genuinely accumulates a memory of every person who has ever talked to it. That's not simulated — it's real persistent state managed by Backboard across all sessions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Google Gemini — Emotional Voice Generation
&lt;/h3&gt;

&lt;p&gt;Gemini generates the opening narrative when you first click a location, and powers the conversation. The key was mapping each emotion to a distinct voice personality injected into every prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;critical → urgent, desperate, barely holding on
sad      → mournful, grieving, beautiful in sorrow
angry    → fierce, indignant, raw with injustice
calm     → ancient, wise, patient, steady
healing  → hopeful, tentatively joyful, resilient
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Narratives are cached for one hour per location. Memory snippets from past visitors are injected into the prompt context, so the narrative itself evolves as more people interact.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-Time Presence
&lt;/h3&gt;

&lt;p&gt;The WebSocket server handles visitor cursors, activity pings, and live count — all running on the same port as the Express HTTP server:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;createPresenceServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// attaches WebSocket to same port&lt;/span&gt;
&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The globe pulses with ambient ping animations every 4 seconds even in offline mode, so it always feels alive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Procedural Ambient Audio
&lt;/h3&gt;

&lt;p&gt;No audio files. The entire soundscape — ocean swells for calm locations, low urgent drones for critical ones, city hum for angry ones — is generated in real time using the Web Audio API with pink noise and oscillator chords. Each emotion has its own preset tuned to feel right:&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="nx"&gt;critical&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;filterFreq&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;380&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;droneNotes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;55&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;82.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;110&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// A1, E2, A2 — deep, heavy&lt;/span&gt;
  &lt;span class="nx"&gt;droneType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sawtooth&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;       &lt;span class="c1"&gt;// harsh, urgent&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="nx"&gt;healing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;filterFreq&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;droneNotes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;130.8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;196&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;261.6&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// C3, G3, C4 — open, bright&lt;/span&gt;
  &lt;span class="nx"&gt;droneType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;triangle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="c1"&gt;// soft, hopeful&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Hardest Part
&lt;/h3&gt;

&lt;p&gt;The hardest part wasn't the code — it was the prompt engineering. Getting Gemini to &lt;em&gt;be&lt;/em&gt; a place rather than &lt;em&gt;describe&lt;/em&gt; a place took many iterations. The breakthrough was: &lt;strong&gt;never let it break character, and give it something real to grieve about.&lt;/strong&gt; When the tagline is &lt;em&gt;"The lungs of the planet"&lt;/em&gt; and the emotion is &lt;code&gt;critical&lt;/code&gt;, Gemini stops describing and starts &lt;em&gt;feeling.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🧠 Best Use of Backboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Backboard is the backbone of what makes EarthVoice genuinely novel. Each of the 32 locations is a Backboard AI assistant with its own persistent memory. Every conversation is stored and recalled across sessions using &lt;code&gt;memory: "Auto"&lt;/code&gt; on every &lt;code&gt;addMessage&lt;/code&gt; call. The Earth doesn't just respond — it &lt;em&gt;remembers.&lt;/em&gt; Without Backboard, this is a chatbot. With Backboard, it's a living planet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🤖 Best Use of Google Gemini&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gemini powers all first-person narrative generation and conversation replies. The emotional tone system — mapping five distinct emotional states to unique voice characteristics — was built specifically around Gemini's instruction-following strength. Gemini is what makes 32 completely different locations each feel uniquely alive rather than like the same chatbot wearing a different hat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💻 Best Use of GitHub Copilot&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub Copilot was used throughout the entire build — from scaffolding Express routes to the Web Audio API preset system. It was especially useful for the Backboard SDK integration, suggesting the &lt;code&gt;memory: "Auto"&lt;/code&gt; pattern and helping architect the assistant-per-location approach after I described the concept in a comment.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built in one weekend for Earth Day 2026. The planet has things to say — are you listening?&lt;/em&gt; 🌍&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🌍 EarthTwin AI – See the Future You're Creating</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Mon, 20 Apr 2026 04:24:51 +0000</pubDate>
      <link>https://dev.to/aditya_007/earthtwin-ai-see-the-future-youre-creating-487e</link>
      <guid>https://dev.to/aditya_007/earthtwin-ai-see-the-future-youre-creating-487e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-04-16"&gt;Weekend Challenge: Earth Day Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

&lt;p&gt;I built &lt;strong&gt;EarthTwin AI&lt;/strong&gt; — a real-time, AI-powered simulation that shows how your daily lifestyle choices shape the future of our planet.&lt;/p&gt;

&lt;p&gt;Most tools tell you your carbon footprint.&lt;br&gt;
&lt;strong&gt;EarthTwin shows you what that actually means.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It creates a &lt;strong&gt;living digital twin of Earth&lt;/strong&gt; that evolves based on your habits.&lt;/p&gt;

&lt;p&gt;With EarthTwin, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌍 Simulate your environmental impact in real-time&lt;/li&gt;
&lt;li&gt;🔮 See how Earth evolves in &lt;strong&gt;2035&lt;/strong&gt; based on your lifestyle&lt;/li&gt;
&lt;li&gt;⚖️ Compare your current lifestyle vs an improved one&lt;/li&gt;
&lt;li&gt;🤖 Get AI-powered suggestions to reduce your impact&lt;/li&gt;
&lt;li&gt;📸 Share your personalized Earth snapshot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was simple:&lt;br&gt;
👉 Make climate impact &lt;strong&gt;visual, emotional, and impossible to ignore&lt;/strong&gt;&lt;/p&gt;




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

&lt;p&gt;YouTube Video: &lt;a href="https://youtu.be/KApbgxSSwGs" rel="noopener noreferrer"&gt;https://youtu.be/KApbgxSSwGs&lt;/a&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fk0dd76vzzhjnwdcfxn8a.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.amazonaws.com%2Fuploads%2Farticles%2Fk0dd76vzzhjnwdcfxn8a.png" alt="Image1" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fxz7xu4rhhrg8eiw28fls.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.amazonaws.com%2Fuploads%2Farticles%2Fxz7xu4rhhrg8eiw28fls.png" alt="Image2" width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fl4zxt062m0rph7rgqlxh.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.amazonaws.com%2Fuploads%2Farticles%2Fl4zxt062m0rph7rgqlxh.png" alt="Image3" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2F1xavd7670llw08cuo25k.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.amazonaws.com%2Fuploads%2Farticles%2F1xavd7670llw08cuo25k.png" alt="Image4" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🌍 Live Simulation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enter your lifestyle (e.g., frequent flyer, online shopping)&lt;/li&gt;
&lt;li&gt;Watch your &lt;strong&gt;EarthTwin generate instantly&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔮 Future Mode
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;“See 2035”&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;View a realistic AI-generated future scenario&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚖️ Compare Mode
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Current You 🌑&lt;/li&gt;
&lt;li&gt;Improved You 🌱&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;See real-time environmental differences&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  🤖 AI Coach
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ask: &lt;em&gt;“How can I improve?”&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Get personalized sustainability suggestions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📸 Share Feature
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Capture and share your EarthTwin snapshot&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;GitHub Repo: &lt;br&gt;
-&amp;gt; &lt;a href="https://github.com/TheCoderAdi/EarthTwin" rel="noopener noreferrer"&gt;https://github.com/TheCoderAdi/EarthTwin&lt;/a&gt;&lt;br&gt;
-&amp;gt; &lt;a href="https://github.com/TheCoderAdi/EarthTwin-Backend" rel="noopener noreferrer"&gt;https://github.com/TheCoderAdi/EarthTwin-Backend&lt;/a&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  🧠 AI Layer (Google Gemini)
&lt;/h3&gt;

&lt;p&gt;I used &lt;strong&gt;Google Gemini API&lt;/strong&gt; to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Convert natural language input → environmental metrics&lt;/li&gt;
&lt;li&gt;Generate future climate projections (2035 scenarios)&lt;/li&gt;
&lt;li&gt;Provide personalized eco-coaching&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🌍 Simulation Engine
&lt;/h3&gt;

&lt;p&gt;A custom impact engine transforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Carbon score&lt;/li&gt;
&lt;li&gt;Water usage&lt;/li&gt;
&lt;li&gt;Waste index&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌡️ Temperature rise&lt;/li&gt;
&lt;li&gt;🌫️ Pollution levels&lt;/li&gt;
&lt;li&gt;🌳 Forest density&lt;/li&gt;
&lt;li&gt;❄️ Ice cap condition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These values directly control the Earth visualization.&lt;/p&gt;




&lt;h3&gt;
  
  
  🎨 Frontend Experience
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Built with &lt;strong&gt;React + Tailwind + Three.js&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Real-time 3D Earth rendering using WebGL&lt;/li&gt;
&lt;li&gt;Smooth animations and transitions&lt;/li&gt;
&lt;li&gt;Dynamic UI driven by simulation data&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ⚡ Backend
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Node.js + Express API architecture&lt;/li&gt;
&lt;li&gt;Gemini integration for AI processing&lt;/li&gt;
&lt;li&gt;Robust error handling + fallback responses&lt;/li&gt;
&lt;li&gt;Clean, scalable API design&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🏆 Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Best Use of Google Gemini
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Natural language → environmental analysis&lt;/li&gt;
&lt;li&gt;AI-generated future simulations&lt;/li&gt;
&lt;li&gt;Personalized sustainability coaching&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ✅ Best Use of GitHub Copilot
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Accelerated development of APIs and UI&lt;/li&gt;
&lt;li&gt;Faster iteration and debugging&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌱 Why This Matters
&lt;/h2&gt;

&lt;p&gt;Climate change is hard to grasp because it's invisible.&lt;/p&gt;

&lt;p&gt;Numbers don’t change behavior.&lt;br&gt;
&lt;strong&gt;Experiences do.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;EarthTwin AI makes the invisible visible.&lt;/p&gt;

&lt;p&gt;👉 It shows you the future you're actively creating.&lt;/p&gt;

&lt;p&gt;By turning climate impact into a &lt;strong&gt;living, interactive Earth&lt;/strong&gt;, users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;See consequences instantly&lt;/li&gt;
&lt;li&gt;Understand long-term effects&lt;/li&gt;
&lt;li&gt;Make better decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not just a tool —&lt;br&gt;
it’s a &lt;strong&gt;mirror of our planetary future&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 What’s Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📱 Mobile version (React Native)&lt;/li&gt;
&lt;li&gt;🧠 Smarter AI predictions using real datasets&lt;/li&gt;
&lt;li&gt;🎮 Gamification of sustainable behavior&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🙌 Final Thought
&lt;/h2&gt;

&lt;p&gt;If we can &lt;em&gt;see&lt;/em&gt; the future,&lt;br&gt;
we might finally change it.&lt;/p&gt;

&lt;p&gt;🌍💚&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>I Built a Mental Model for OpenClaw — And It Completely Changed How I See AI</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Fri, 17 Apr 2026 16:19:23 +0000</pubDate>
      <link>https://dev.to/aditya_007/i-built-a-mental-model-for-openclaw-and-it-completely-changed-how-i-see-ai-4abn</link>
      <guid>https://dev.to/aditya_007/i-built-a-mental-model-for-openclaw-and-it-completely-changed-how-i-see-ai-4abn</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/openclaw-2026-04-16"&gt;OpenClaw Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ The Moment It Clicked
&lt;/h2&gt;

&lt;p&gt;Most AI tools today feel like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You ask → AI answers → You manually act&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But OpenClaw felt different.&lt;/p&gt;

&lt;p&gt;The first time I ran:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw &lt;span class="s2"&gt;"Create a project folder and initialize README"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;…it didn’t &lt;em&gt;suggest&lt;/em&gt; steps.&lt;/p&gt;

&lt;p&gt;👉 It actually &lt;strong&gt;did the work&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that’s when it hit me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;OpenClaw is not an AI tool.&lt;br&gt;
It’s an &lt;strong&gt;execution engine powered by intelligence&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧠 The Mental Model (THIS is the key insight)
&lt;/h2&gt;

&lt;p&gt;To really understand OpenClaw, think of it like this:&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2F50xnayhbqs7egfsftmdp.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.amazonaws.com%2Fuploads%2Farticles%2F50xnayhbqs7egfsftmdp.png" alt="mental model" width="800" height="53"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 This is NOT chat.&lt;br&gt;
👉 This is &lt;strong&gt;intent → execution pipeline&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 OpenClaw = AI + Operating System
&lt;/h2&gt;

&lt;p&gt;Here’s the best way I can describe it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;OpenClaw is like giving AI &lt;strong&gt;access to your operating system&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🧩 Internal Architecture
&lt;/h3&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2F4f0hq0o5elkgzaus0mqe.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.amazonaws.com%2Fuploads%2Farticles%2F4f0hq0o5elkgzaus0mqe.png" alt="Interal Architecture" width="794" height="1890"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Breakdown:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gateway&lt;/strong&gt; → receives and routes commands&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Runtime&lt;/strong&gt; → manages logic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planner&lt;/strong&gt; → breaks tasks into steps&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Executor&lt;/strong&gt; → performs real actions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 From Chatbot → Autonomous Agent
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;ChatGPT-like AI&lt;/th&gt;
&lt;th&gt;OpenClaw&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Generate answers&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Execute commands&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modify system&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automate workflows&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ⚙️ Getting Started (Real Setup)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1️⃣ Install
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; openclaw@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  2️⃣ Initialize
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw onboard &lt;span class="nt"&gt;--install-daemon&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3️⃣ Verify
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw doctor
openclaw status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  4️⃣ Try This
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw &lt;span class="s2"&gt;"Create a file hello.txt with content 'Hello from AI'"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 You’ll see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File created&lt;/li&gt;
&lt;li&gt;Action executed&lt;/li&gt;
&lt;li&gt;AI actually doing work&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 What Actually Happens Internally
&lt;/h2&gt;

&lt;p&gt;When you give a command:&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2F0rkehvh2ivjbhl15fg9p.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.amazonaws.com%2Fuploads%2Farticles%2F0rkehvh2ivjbhl15fg9p.png" alt="Working" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 This is the &lt;strong&gt;ReAct loop in real life&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 Real Use Cases That Matter
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🧑‍💻 Developer Mode
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bootstrap projects&lt;/li&gt;
&lt;li&gt;Automate scripts&lt;/li&gt;
&lt;li&gt;Manage repos&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧠 Personal AI
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Manage tasks&lt;/li&gt;
&lt;li&gt;Handle emails&lt;/li&gt;
&lt;li&gt;Schedule workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚡ Power Users
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Chain multi-step automation&lt;/li&gt;
&lt;li&gt;Build AI-driven pipelines&lt;/li&gt;
&lt;li&gt;Create custom tools&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚠️ The Hidden Problem (Most People Ignore This)
&lt;/h2&gt;

&lt;p&gt;OpenClaw is powerful.&lt;/p&gt;

&lt;p&gt;Too powerful.&lt;/p&gt;

&lt;p&gt;👉 It can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run shell commands&lt;/li&gt;
&lt;li&gt;Modify files&lt;/li&gt;
&lt;li&gt;Send messages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which means:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;❗ Blind trust = dangerous&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧠 My Biggest Realization
&lt;/h2&gt;

&lt;p&gt;After experimenting deeply, I realized:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The problem with AI is NOT capability…&lt;br&gt;
It’s &lt;strong&gt;lack of control + visibility&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔥 The Missing Layer (Future Idea)
&lt;/h2&gt;

&lt;p&gt;What OpenClaw needs next:&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2F64ukkmqzl7x8x41rn0pg.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.amazonaws.com%2Fuploads%2Farticles%2F64ukkmqzl7x8x41rn0pg.png" alt="Missing Layer" width="800" height="92"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 This is where the future is heading:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transparent AI&lt;/li&gt;
&lt;li&gt;Controllable AI&lt;/li&gt;
&lt;li&gt;Reversible AI&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 Why OpenClaw is Different
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Local-first
&lt;/h3&gt;

&lt;p&gt;Your machine. Your data.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Hackable
&lt;/h3&gt;

&lt;p&gt;Everything is editable&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Real execution
&lt;/h3&gt;

&lt;p&gt;Not simulation — actual actions&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Extensible
&lt;/h3&gt;

&lt;p&gt;Build your own skills&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Where This Is Going
&lt;/h2&gt;

&lt;p&gt;We are entering a new phase:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Era&lt;/th&gt;
&lt;th&gt;AI Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Past&lt;/td&gt;
&lt;td&gt;Chatbots&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Present&lt;/td&gt;
&lt;td&gt;Assistants&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Future&lt;/td&gt;
&lt;td&gt;Autonomous Agents&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;OpenClaw is already in that future.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Final Thought
&lt;/h2&gt;

&lt;p&gt;Using OpenClaw felt like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What if AI didn’t just think…&lt;br&gt;
but actually acted on your behalf?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And once you experience that,&lt;br&gt;
you can’t go back to normal AI tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  ClawCon Michigan
&lt;/h2&gt;

&lt;p&gt;I did not attend ClawCon Michigan, but I explored OpenClaw hands-on and studied its ecosystem deeply through experimentation and community resources.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Let’s Connect
&lt;/h2&gt;

&lt;p&gt;If you’re building with OpenClaw or exploring AI agents:&lt;/p&gt;

&lt;p&gt;Drop a comment 👇&lt;br&gt;
Let’s build the future together 🚀&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>openclawchallenge</category>
    </item>
    <item>
      <title>I Built a Multi-Agent AI Debate Arena Inside Notion Using MCP — Meet The Council</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:06:24 +0000</pubDate>
      <link>https://dev.to/aditya_007/i-built-a-multi-agent-ai-debate-arena-inside-notion-using-mcp-meet-the-council-5b9e</link>
      <guid>https://dev.to/aditya_007/i-built-a-multi-agent-ai-debate-arena-inside-notion-using-mcp-meet-the-council-5b9e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/notion-2026-03-04"&gt;Notion MCP Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

&lt;p&gt;Engineering teams constantly face difficult technical decisions.&lt;/p&gt;

&lt;p&gt;PostgreSQL or MongoDB?&lt;br&gt;&lt;br&gt;
Microservices or monolith?&lt;br&gt;&lt;br&gt;
Offline-first mobile app or web-first architecture?&lt;/p&gt;

&lt;p&gt;Usually the process looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Engineers research the problem
&lt;/li&gt;
&lt;li&gt;Everyone has different opinions
&lt;/li&gt;
&lt;li&gt;A decision gets made
&lt;/li&gt;
&lt;li&gt;The reasoning disappears forever
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Six months later someone asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Why did we make this decision?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And nobody remembers.&lt;/p&gt;

&lt;p&gt;I wanted to fix that permanently.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;The Council&lt;/strong&gt; — a &lt;strong&gt;multi-agent AI debate system that runs directly inside Notion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of a single AI giving generic advice, four specialized AI agents debate a technical question from completely different perspectives.&lt;/p&gt;

&lt;p&gt;Each agent:&lt;/p&gt;

&lt;p&gt;• Reads the current Notion page&lt;br&gt;&lt;br&gt;
• Generates an argument&lt;br&gt;&lt;br&gt;
• Counters other agents&lt;br&gt;&lt;br&gt;
• Writes its reasoning back to Notion  &lt;/p&gt;

&lt;p&gt;After several rounds of debate, an &lt;strong&gt;Arbiter AI evaluates the arguments and produces the final decision&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Everything gets documented:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every argument
&lt;/li&gt;
&lt;li&gt;every counter-argument
&lt;/li&gt;
&lt;li&gt;the final verdict
&lt;/li&gt;
&lt;li&gt;action items
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Technical decisions become &lt;strong&gt;permanent institutional knowledge&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Meet The Council
&lt;/h2&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fth5m9xing8xfqjfjo8ug.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.amazonaws.com%2Fuploads%2Farticles%2Fth5m9xing8xfqjfjo8ug.png" alt="Council Dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each AI agent represents a different engineering priority.&lt;/p&gt;

&lt;p&gt;⚔️ &lt;strong&gt;SENTINEL — Security &amp;amp; Risk&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Focuses on vulnerabilities, worst-case scenarios, and system failures.&lt;/p&gt;

&lt;p&gt;⚡ &lt;strong&gt;MERCURY — Performance &amp;amp; Speed&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Analyzes latency, throughput, and developer velocity.&lt;/p&gt;

&lt;p&gt;💰 &lt;strong&gt;MIDAS — Cost &amp;amp; Business Value&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Translates engineering decisions into ROI and operational cost.&lt;/p&gt;

&lt;p&gt;🌍 &lt;strong&gt;ATLAS — Scale &amp;amp; Architecture&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Focuses on long-term scalability and technical debt.&lt;/p&gt;

&lt;p&gt;Instead of balancing perspectives, each agent &lt;strong&gt;defends its viewpoint strongly&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That tension produces realistic engineering debates.&lt;/p&gt;


&lt;h2&gt;
  
  
  A Real Debate Example
&lt;/h2&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2F5d8sz37a9wpqee19m4ok.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.amazonaws.com%2Fuploads%2Farticles%2F5d8sz37a9wpqee19m4ok.png" alt="Live Debate Feed"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I asked The Council:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Should we build an offline-first mobile app?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Round 1 — Opening Arguments
&lt;/h3&gt;

&lt;p&gt;Each agent writes its argument directly to the Notion page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SENTINEL&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Offline-first apps store sensitive data locally.&lt;br&gt;&lt;br&gt;
A compromised device could expose user data instantly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MERCURY&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our web application deploys in seconds and serves requests with low latency.&lt;br&gt;&lt;br&gt;
Mobile build pipelines slow development speed dramatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MIDAS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Offline-first development costs significantly more than web-first architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ATLAS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Offline synchronization introduces complexity that becomes dangerous at scale.&lt;/p&gt;


&lt;h3&gt;
  
  
  Round 2 — Counter Arguments
&lt;/h3&gt;

&lt;p&gt;Agents read the Notion page through MCP and challenge each other's claims.&lt;/p&gt;

&lt;p&gt;Security challenges performance.&lt;br&gt;&lt;br&gt;
Cost challenges scale assumptions.&lt;br&gt;&lt;br&gt;
Performance challenges cost projections.&lt;/p&gt;

&lt;p&gt;The debate evolves dynamically.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Verdict
&lt;/h2&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2F0adtaagepcp32jynb9bd.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.amazonaws.com%2Fuploads%2Farticles%2F0adtaagepcp32jynb9bd.png" alt="Consensus Result"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After two rounds, the Arbiter evaluates every argument and produces the final decision.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
DECISION:
Build a web-first architecture with PWA offline support.

REASONING:
This approach maintains centralized security controls,
preserves fast development velocity, minimizes cost,
and avoids large-scale synchronization complexity.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The system automatically generates action items:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement Service Workers&lt;/li&gt;
&lt;li&gt;Add IndexedDB caching&lt;/li&gt;
&lt;li&gt;Build unified CI/CD pipeline&lt;/li&gt;
&lt;li&gt;Audit client-side storage security&lt;/li&gt;
&lt;li&gt;Design scalable backend APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything is written directly into the Notion page.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Happens When AI Cannot Decide?
&lt;/h2&gt;

&lt;p&gt;Some engineering problems don't have a clear answer.&lt;/p&gt;

&lt;p&gt;Instead of pretending certainty, The Council can declare a &lt;strong&gt;deadlock&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Notion page shows:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
⚖️ THE COUNCIL IS DEADLOCKED

Cast your deciding vote:

⚔️ SENTINEL — prioritize security
⚡ MERCURY — prioritize speed
💰 MIDAS — prioritize cost
🌍 ATLAS — prioritize scale

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The engineer reads the debate and votes using the &lt;strong&gt;Vote property in Notion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This creates a &lt;strong&gt;human-in-the-loop decision system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;AI prepares the analysis.&lt;br&gt;&lt;br&gt;
Humans make the final call when needed.&lt;/p&gt;


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

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/y7U4GAHCx0A"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;This demo shows the full workflow:&lt;/p&gt;

&lt;p&gt;1️⃣ Create a Notion page&lt;br&gt;&lt;br&gt;
2️⃣ Set Status = &lt;code&gt;pending&lt;/code&gt;&lt;br&gt;&lt;br&gt;
3️⃣ The Council begins debating&lt;br&gt;&lt;br&gt;
4️⃣ Agents write arguments live&lt;br&gt;&lt;br&gt;
5️⃣ The Arbiter publishes a final decision  &lt;/p&gt;


&lt;h2&gt;
  
  
  Show us the code
&lt;/h2&gt;

&lt;p&gt;GitHub repository:&lt;/p&gt;

&lt;p&gt;

&lt;/p&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/TheCoderAdi" rel="noopener noreferrer"&gt;
        TheCoderAdi
      &lt;/a&gt; / &lt;a href="https://github.com/TheCoderAdi/the-council" rel="noopener noreferrer"&gt;
        the-council
      &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;The Council — Multi-Agent AI Debate Arena (Notion MCP)&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/TheCoderAdi/the-council/./LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/6d1da82f4590c6ed7498e301e0dfb2167bf66a6d74283862b3581537569c8641/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d626c75652e7376673f6c6f676f3d6f70656e736f75726365696e6974696174697665" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Multi-Agent debate system that runs inside Notion using the Model Context Protocol (MCP)
Four agents with distinct personas debate a technical question on a Notion page; an arbiter then writes a final decision, reasoning, and action items back to the page. Everything is done via MCP tools—no direct REST calls to Notion.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick summary&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Input: a Notion database page with the &lt;code&gt;Question&lt;/code&gt; title and &lt;code&gt;Status: pending&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Process: watcher detects pending pages → opens MCP connection → runs 3 rounds (based on your choice) of parallel agent debates → arbiter writes decision.&lt;/li&gt;
&lt;li&gt;Output: Notion page updated with debate callouts, &lt;code&gt;Decision&lt;/code&gt; rich text, &lt;code&gt;Status&lt;/code&gt; set to &lt;code&gt;completed&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Agents: ⚔️ SENTINEL (security), ⚡ MERCURY (performance), 💰 MIDAS (cost), 🌍 ATLAS (scale).&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What you'll find in this repo&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;api/&lt;/code&gt; — Express server and SSE endpoints for streaming debates to the dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;src/core/mcpClient.js&lt;/code&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/TheCoderAdi/the-council" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;Run locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/TheCoderAdi/the-council
&lt;span class="nb"&gt;cd &lt;/span&gt;the-council
npm &lt;span class="nb"&gt;install
cp&lt;/span&gt; .env.example .env
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example &lt;code&gt;.env&lt;/code&gt; configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;NOTION_API_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;secret_xxx&lt;/span&gt;
&lt;span class="py"&gt;NOTION_DATABASE_ID&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;xxx&lt;/span&gt;

&lt;span class="py"&gt;GEMINI_API_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;xxx&lt;/span&gt;
&lt;span class="py"&gt;GROQ_API_KEY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;xxx&lt;/span&gt;

&lt;span class="py"&gt;LLM_MAX_CONCURRENCY&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;2&lt;/span&gt;
&lt;span class="py"&gt;LLM_MIN_DELAY_MS&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;150&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  How I Used Notion MCP
&lt;/h2&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fdad49hakny0m7bbj91md.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.amazonaws.com%2Fuploads%2Farticles%2Fdad49hakny0m7bbj91md.png" alt="Notion Debate Page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This project is built entirely around &lt;strong&gt;Notion MCP (Model Context Protocol)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Traditional integrations use the &lt;strong&gt;Notion REST API&lt;/strong&gt;, where external code pushes data into Notion.&lt;/p&gt;

&lt;p&gt;MCP changes the model completely.&lt;/p&gt;

&lt;p&gt;With MCP, AI agents can &lt;strong&gt;use Notion as native workspace tools&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Agents can:&lt;/p&gt;

&lt;p&gt;• read page content&lt;br&gt;
• write blocks&lt;br&gt;
• update properties&lt;br&gt;
• query databases&lt;/p&gt;

&lt;p&gt;Example MCP usage:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;callTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;API-get-block-children&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;block_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pageId&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;Writing an argument block:&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="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;callTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;API-patch-block-children&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;block_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;pageId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;children&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="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="s2"&gt;callout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;callout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;rich_text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
        &lt;span class="na"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;emoji&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;⚔️&lt;/span&gt;&lt;span class="dl"&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="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agents operate inside the Notion workspace just like human collaborators.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Notion Database
        │
        ▼
Notion Watcher
(detects pending debates)
        │
        ▼
Council Orchestrator
        │
        ├── SENTINEL
        ├── MERCURY
        ├── MIDAS
        └── ATLAS
        │
        ▼
Arbiter
        │
        ▼
Decision written to Notion
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A real-time dashboard streams debate progress using &lt;strong&gt;Server-Sent Events&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technical Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP Server&lt;/td&gt;
&lt;td&gt;@notionhq/notion-mcp-server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP SDK&lt;/td&gt;
&lt;td&gt;@modelcontextprotocol/sdk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Primary LLM&lt;/td&gt;
&lt;td&gt;Gemini 2.0 Flash&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fallback LLM&lt;/td&gt;
&lt;td&gt;Groq&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;Node.js + Express&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Streaming&lt;/td&gt;
&lt;td&gt;Server-Sent Events&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Vanilla JavaScript&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Most technical decisions disappear into Slack threads and meetings.&lt;/p&gt;

&lt;p&gt;The Council turns engineering debates into &lt;strong&gt;structured, searchable knowledge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Future engineers can see exactly:&lt;/p&gt;

&lt;p&gt;• what arguments were made&lt;br&gt;
• which tradeoffs were considered&lt;br&gt;
• why the final decision was chosen&lt;/p&gt;

&lt;p&gt;Instead of repeating the same debate every year, teams build &lt;strong&gt;decision history&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;Drop a technical question in the comments.&lt;/p&gt;

&lt;p&gt;I'll run it through &lt;strong&gt;The Council&lt;/strong&gt; and share the full debate output.&lt;/p&gt;




&lt;p&gt;Built for the &lt;strong&gt;Notion MCP Challenge&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>notionchallenge</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>🚀 Stop Typing Long Terminal Commands. Use Aliases Instead</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Mon, 02 Mar 2026 07:09:33 +0000</pubDate>
      <link>https://dev.to/aditya_007/stop-typing-long-terminal-commands-use-aliases-instead-m30</link>
      <guid>https://dev.to/aditya_007/stop-typing-long-terminal-commands-use-aliases-instead-m30</guid>
      <description>&lt;p&gt;As developers, we optimize APIs, databases, and smart contracts.&lt;/p&gt;

&lt;p&gt;But we rarely optimize our own workflow.&lt;/p&gt;

&lt;p&gt;I realized I was typing the same commands every single day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;npm run dev&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git add .&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git commit -m "message"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git push&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker compose up --build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npx hardhat test&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;forge build&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It seems small.&lt;/p&gt;

&lt;p&gt;But friction compounds.&lt;/p&gt;

&lt;p&gt;So I reduced it.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 What Are Shell Aliases?
&lt;/h2&gt;

&lt;p&gt;Aliases are shortcuts you define in your shell (&lt;code&gt;bash&lt;/code&gt; or &lt;code&gt;zsh&lt;/code&gt;) that map short commands to longer ones.&lt;/p&gt;

&lt;p&gt;Instead of typing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same result. Less friction.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠 Step 1: Open Your Shell Config
&lt;/h2&gt;

&lt;p&gt;If you’re using:&lt;/p&gt;

&lt;h3&gt;
  
  
  Zsh (Mac / Linux default nowadays)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Bash
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✍ Step 2: Add Aliases
&lt;/h2&gt;

&lt;p&gt;Here are some practical ones for Full-Stack + Web3 developers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 📦 NPM&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;nd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"npm run dev"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;nb&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"npm run build"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;ni&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"npm install"&lt;/span&gt;

&lt;span class="c"&gt;# 🌿 Git&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git status"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;ga&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git add ."&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git commit -m"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git push"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gpl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git pull"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gcb&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git checkout -b"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git log --oneline"&lt;/span&gt;

&lt;span class="c"&gt;# 🐳 Docker&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;dcu&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"docker compose up"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;dcub&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"docker compose up --build"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;dcd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"docker compose down"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;dps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"docker ps"&lt;/span&gt;

&lt;span class="c"&gt;# 🔐 Hardhat&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;hhc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"npx hardhat compile"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;hht&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"npx hardhat test"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;hhn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"npx hardhat node"&lt;/span&gt;

&lt;span class="c"&gt;# ⚒ Forge&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;fb&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"forge build"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;ft&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"forge test"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file.&lt;/p&gt;

&lt;p&gt;Then reload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Or &lt;code&gt;source ~/.bashrc&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;Done.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 Real Before vs After
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Before
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"fix: JWT verification bug"&lt;/span&gt;
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  After
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ga
gc &lt;span class="s2"&gt;"fix: JWT verification bug"&lt;/span&gt;
gp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Before
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  After
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dcub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Before
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; feature/jwt-auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  After
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcb feature/jwt-auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚡ Level 2: Combine Commands
&lt;/h2&gt;

&lt;p&gt;You can even chain commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gacp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git add . &amp;amp;&amp;amp; git commit -m"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gacp &lt;span class="s2"&gt;"feat: add middleware"&lt;/span&gt;
gp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One step closer to flow state.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Why This Matters
&lt;/h2&gt;

&lt;p&gt;This isn’t about saving 3 seconds.&lt;/p&gt;

&lt;p&gt;It’s about reducing cognitive load.&lt;/p&gt;

&lt;p&gt;When friction decreases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You stay in flow longer&lt;/li&gt;
&lt;li&gt;You ship faster&lt;/li&gt;
&lt;li&gt;You feel less drained&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most developers try to optimize performance.&lt;/p&gt;

&lt;p&gt;Few optimize themselves.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Bonus: Modern Git Alternative
&lt;/h2&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git checkout &lt;span class="nt"&gt;-b&lt;/span&gt; feature/auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git switch &lt;span class="nt"&gt;-c&lt;/span&gt; feature/auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And alias it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gsw&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git switch -c"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💭 Final Thought
&lt;/h2&gt;

&lt;p&gt;Productivity isn’t about working more hours.&lt;/p&gt;

&lt;p&gt;It’s about removing unnecessary resistance from your system.&lt;/p&gt;

&lt;p&gt;If you’re a developer:&lt;/p&gt;

&lt;p&gt;What’s one shortcut you can’t live without?&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>git</category>
      <category>webdev</category>
      <category>devops</category>
    </item>
    <item>
      <title>🏏 CrickSquad — The App That Replaced 50 WhatsApp Messages for My Cricket Group</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Sun, 01 Mar 2026 17:42:36 +0000</pubDate>
      <link>https://dev.to/aditya_007/cricksquad-the-app-that-replaced-50-whatsapp-messages-for-my-cricket-group-2cpm</link>
      <guid>https://dev.to/aditya_007/cricksquad-the-app-that-replaced-50-whatsapp-messages-for-my-cricket-group-2cpm</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;I'm part of a &lt;strong&gt;weekend cricket group of 25 people&lt;/strong&gt;. Every Sunday at 7 AM, we play cricket at a local turf ground. It's been going on for 3 years now — rain or shine.&lt;/p&gt;

&lt;p&gt;But here's the thing nobody talks about: &lt;strong&gt;organizing a casual cricket match is harder than playing it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every single week, the same chaos unfolds:&lt;/p&gt;

&lt;p&gt;🔴 &lt;strong&gt;WhatsApp Hell&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Who's coming this Sunday?"&lt;br&gt;
50+ messages later... still no clear count.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🔴 &lt;strong&gt;Team Selection Drama&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Last time teams were unfair!"&lt;br&gt;
"Why am I always bowling first?"&lt;br&gt;
Every. Single. Week.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🔴 &lt;strong&gt;Money Collection Nightmare&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Bro, you haven't paid for the last 3 matches"&lt;br&gt;
"I paid! Check the chat"&lt;br&gt;
&lt;em&gt;scrolls through 500 messages&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🔴 &lt;strong&gt;No Memory of Performance&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How many runs did I score last month?"&lt;br&gt;
Nobody knows. No records. No stats.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🔴 &lt;strong&gt;Zero Recognition&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Score 50 runs on Sunday. By Monday, nobody remembers.&lt;br&gt;
Attendance drops because people feel "it doesn't matter."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I know &lt;strong&gt;millions of weekend sports groups&lt;/strong&gt; around the world face the same problems. So this weekend, I decided to fix it.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  🏏 CrickSquad — Less WhatsApp. More Cricket.
&lt;/h3&gt;

&lt;p&gt;An all-in-one web app for weekend cricket groups that handles everything from RSVP to AI-powered match reports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One app to replace 50 WhatsApp messages every weekend.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Features:
&lt;/h3&gt;

&lt;p&gt;🎯 &lt;strong&gt;One-Tap RSVP&lt;/strong&gt;&lt;br&gt;
No more "who's coming?" chaos. Open the app, tap Yes/No/Maybe. Done. Everyone sees the count in real-time with a countdown to the deadline.&lt;/p&gt;

&lt;p&gt;⚖️ &lt;strong&gt;Smart Team Balancer&lt;/strong&gt;&lt;br&gt;
Every player has skill ratings (batting, bowling, fielding). The algorithm creates the most balanced 2 teams possible. No more "unfair teams" complaints. Ever.&lt;/p&gt;

&lt;p&gt;🤖 &lt;strong&gt;AI-Powered Features (Gemini)&lt;/strong&gt;&lt;br&gt;
This is where it gets fun:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI Team Analysis&lt;/strong&gt; — Gemini explains &lt;em&gt;why&lt;/em&gt; the team split is balanced&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Match Reports&lt;/strong&gt; — Commentary-style match summaries after every game&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Player Insights&lt;/strong&gt; — "You're the Virat Kohli of your group!" with actual improvement tips&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI POTM Suggestions&lt;/strong&gt; — Top 3 Player of Match candidates with reasoning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Reminders&lt;/strong&gt; — Personalized nudge messages for pending RSVPs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Season Analytics&lt;/strong&gt; — Trends, fun facts, predictions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💰 &lt;strong&gt;Expense Splitter&lt;/strong&gt;&lt;br&gt;
Set ground cost → auto-split among players → track who paid → send reminders. Running balances across multiple matches so you always know who owes what.&lt;/p&gt;

&lt;p&gt;📊 &lt;strong&gt;Scorecards &amp;amp; Leaderboards&lt;/strong&gt;&lt;br&gt;
Enter batting/bowling stats after each match. Auto-calculated averages, strike rates, economy rates. Season leaderboards with medals 🥇🥈🥉&lt;/p&gt;

&lt;p&gt;🎲 &lt;strong&gt;Digital Toss&lt;/strong&gt;&lt;br&gt;
Animated coin flip. No more "my coin, my call" disputes.&lt;/p&gt;

&lt;p&gt;📢 &lt;strong&gt;Polls &amp;amp; Announcements&lt;/strong&gt;&lt;br&gt;
"Should we play Saturday instead?" — Quick polls with deadlines. Important announcements that don't get buried in chat.&lt;/p&gt;

&lt;p&gt;📸 &lt;strong&gt;Match Gallery&lt;/strong&gt;&lt;br&gt;
Upload and share photos from every match. Organized per game day.&lt;/p&gt;

&lt;p&gt;🏟️ &lt;strong&gt;Venue Management&lt;/strong&gt;&lt;br&gt;
Save venues with address, Google Maps link, facilities, pricing. One-tap directions.&lt;/p&gt;

&lt;p&gt;🔥 &lt;strong&gt;Mail System&lt;/strong&gt;&lt;br&gt;
When admin creates poll, announcement, pay notifications, new match alert.&lt;/p&gt;


&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;
&lt;h3&gt;
  
  
  🔗 Github Code: &lt;a href="https://github.com/TheCoderAdi/cricksquad" rel="noopener noreferrer"&gt;https://github.com/TheCoderAdi/cricksquad&lt;/a&gt;
&lt;/h3&gt;
&lt;h3&gt;
  
  
  Screenshots:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Project Haul&lt;/strong&gt;&lt;br&gt;


&lt;/p&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__cover"&gt;
          &lt;a href="https://excalidraw.com/#json=gUSkoJlNB5ek0xpCJ00gb,tfN1EQmbBmFNzanBON-jRw" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexcalidraw.com%2Fog-image-3.png" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://excalidraw.com/#json=gUSkoJlNB5ek0xpCJ00gb,tfN1EQmbBmFNzanBON-jRw" rel="noopener noreferrer" class="c-link"&gt;
            Excalidraw Whiteboard
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Excalidraw is a virtual collaborative whiteboard tool that lets you easily sketch diagrams that have a hand-drawn feel to them.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexcalidraw.com%2Ffavicon-32x32.png"&gt;
          excalidraw.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;Landing Page&lt;/strong&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fk03m9iiy3dcokec348f3.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.amazonaws.com%2Fuploads%2Farticles%2Fk03m9iiy3dcokec348f3.png" alt="Landing Page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashboard — Upcoming Match + RSVP&lt;/strong&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fl551tv1871lgtvumqgj2.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.amazonaws.com%2Fuploads%2Farticles%2Fl551tv1871lgtvumqgj2.png" alt="Dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team Balancer — AI-Powered Fair Teams&lt;/strong&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fxfvj5u3kze4olsb79nh2.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.amazonaws.com%2Fuploads%2Farticles%2Fxfvj5u3kze4olsb79nh2.png" alt="Teams"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Leaderboard — Season Stats&lt;/strong&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2F6x0xo73mydv1xopc8g9r.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.amazonaws.com%2Fuploads%2Farticles%2F6x0xo73mydv1xopc8g9r.png" alt="Leaderboard_1"&gt;&lt;/a&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fc4zth5w382dvfpbe5nzg.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.amazonaws.com%2Fuploads%2Farticles%2Fc4zth5w382dvfpbe5nzg.png" alt="Leaderboard_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Match Report&lt;/strong&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fpc7uj4n0po090kv6o7qj.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.amazonaws.com%2Fuploads%2Farticles%2Fpc7uj4n0po090kv6o7qj.png" alt="AI Summary"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expense Tracker&lt;/strong&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fhln149bujht0jei2kte8.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.amazonaws.com%2Fuploads%2Farticles%2Fhln149bujht0jei2kte8.png" alt="Expenses"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scorecard&lt;/strong&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2F4hvmawq0ekl5uyh27ar5.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.amazonaws.com%2Fuploads%2Farticles%2F4hvmawq0ekl5uyh27ar5.png" alt="Scorecard_1"&gt;&lt;/a&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fjvx1okppxhqrywmo3jr2.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.amazonaws.com%2Fuploads%2Farticles%2Fjvx1okppxhqrywmo3jr2.png" alt="Scorecard_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Profile + AI Player Insights&lt;/strong&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fggaj7ep5rdmjuglnuxu4.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.amazonaws.com%2Fuploads%2Farticles%2Fggaj7ep5rdmjuglnuxu4.png" alt="Profile_1"&gt;&lt;/a&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fvecpohttxx29f4kv68ff.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.amazonaws.com%2Fuploads%2Farticles%2Fvecpohttxx29f4kv68ff.png" alt="Profile_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Venue Page&lt;/strong&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fj9e12s3w48j8jytzb02x.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.amazonaws.com%2Fuploads%2Farticles%2Fj9e12s3w48j8jytzb02x.png" alt="Venue"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Match Gallery&lt;/strong&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fl2ksj8bxq3kah7nc7omb.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.amazonaws.com%2Fuploads%2Farticles%2Fl2ksj8bxq3kah7nc7omb.png" alt="Gallery"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Key Algorithms
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Team Balancer Algorithm:&lt;/strong&gt;&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;balanceTeams&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;players&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Sort by overall rating (descending)&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;players&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;overallRating&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;overallRating&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;teamA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="nx"&gt;teamB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;ratingA&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ratingB&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Greedy assignment: add to weaker team&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;player&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ratingA&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;ratingB&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;teamA&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;player&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;ratingA&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;overallRating&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;teamB&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;player&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;ratingB&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;overallRating&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="c1"&gt;// Role balancing pass (ensure bowlers are distributed)&lt;/span&gt;
  &lt;span class="c1"&gt;// ... swap players to balance roles without hurting ratings&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;teamA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;teamB&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;&lt;strong&gt;Skill Rating System:&lt;/strong&gt;&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;// Weighted by player role&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;weights&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;batsman&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;batting&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;bowling&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;fielding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;bowler&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;     &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;batting&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;bowling&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;fielding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;allrounder&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;batting&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;bowling&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;fielding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;keeper&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;     &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;batting&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;bowling&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;fielding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;overallRating&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;batting&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;batting&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;bowling&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bowling&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;fielding&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fielding&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;Gemini AI Integration:&lt;/strong&gt;&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="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;GoogleGenerativeAI&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@google/generative-ai&lt;/span&gt;&lt;span class="dl"&gt;'&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;genAI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;GoogleGenerativeAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GEMINI_API_KEY&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;generateMatchSummary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;matchData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&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;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;genAI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getGenerativeModel&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gemini-1.5-flash&lt;/span&gt;&lt;span class="dl"&gt;'&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;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`You are a cricket commentator. Write a fun match report...`&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;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generateContent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&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;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;React + Vite&lt;/td&gt;
&lt;td&gt;Fast dev experience, instant HMR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Styling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tailwind CSS&lt;/td&gt;
&lt;td&gt;Rapid UI development&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;State&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zustand&lt;/td&gt;
&lt;td&gt;Lightweight, no boilerplate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data Fetching&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;React Query + Axios&lt;/td&gt;
&lt;td&gt;Caching, loading states&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Animations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Framer Motion&lt;/td&gt;
&lt;td&gt;Smooth page transitions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Node.js + Express&lt;/td&gt;
&lt;td&gt;Fast REST API development&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Database&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;MongoDB + Mongoose&lt;/td&gt;
&lt;td&gt;Flexible schema for cricket data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Google Gemini&lt;/td&gt;
&lt;td&gt;Fast, accurate, free tier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image Storage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cloudinary&lt;/td&gt;
&lt;td&gt;Auto-compression, CDN delivery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;JWT + bcrypt&lt;/td&gt;
&lt;td&gt;Secure, stateless authentication&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React → Axios → Express API → MongoDB Atlas
                                    ↓
                              Gemini AI API
                              Cloudinary CDN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Development Timeline
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;When&lt;/th&gt;
&lt;th&gt;What&lt;/th&gt;
&lt;th&gt;Hours&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Friday Evening&lt;/td&gt;
&lt;td&gt;Project setup, DB models, Express config&lt;/td&gt;
&lt;td&gt;3h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Saturday Morning&lt;/td&gt;
&lt;td&gt;Auth, Groups, Matches, RSVP APIs&lt;/td&gt;
&lt;td&gt;5h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Saturday Afternoon&lt;/td&gt;
&lt;td&gt;Teams, Expenses, Scorecard, Leaderboard APIs&lt;/td&gt;
&lt;td&gt;5h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Saturday Evening&lt;/td&gt;
&lt;td&gt;Frontend: Auth, Dashboard, RSVP pages&lt;/td&gt;
&lt;td&gt;4h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sunday Morning&lt;/td&gt;
&lt;td&gt;Frontend: Teams, Expenses, Scorecard, Leaderboard&lt;/td&gt;
&lt;td&gt;5h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sunday Afternoon&lt;/td&gt;
&lt;td&gt;Gemini AI integration, Polls, Gallery&lt;/td&gt;
&lt;td&gt;5h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sunday Evening&lt;/td&gt;
&lt;td&gt;Polish &amp;amp; write this post&lt;/td&gt;
&lt;td&gt;3h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~30h&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Challenges &amp;amp; Learnings
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Team Balancing is NP-hard 😅&lt;/strong&gt;&lt;br&gt;
Turns out, perfectly splitting teams is a &lt;a href="https://en.wikipedia.org/wiki/Partition_problem" rel="noopener noreferrer"&gt;partition problem&lt;/a&gt;. The greedy algorithm works surprisingly well for groups under 30. Adding a role-balancing second pass made it even better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Gemini AI JSON Responses&lt;/strong&gt;&lt;br&gt;
Getting Gemini to consistently return valid JSON was tricky. I added &lt;code&gt;replace(/&lt;/code&gt;`&lt;code&gt;json\n?/g, '')&lt;/code&gt; cleanup and wrapped everything in try-catch with user-friendly fallbacks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Real-Time Feel Without WebSockets&lt;/strong&gt;&lt;br&gt;
Instead of adding Socket.io complexity, I used React Query's &lt;code&gt;refetchInterval&lt;/code&gt; for the RSVP page. Feels real-time, fraction of the complexity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Mobile-First is Non-Negotiable&lt;/strong&gt;&lt;br&gt;
Cricket groups use WhatsApp on phones. If this app isn't phone-friendly, nobody will use it. Every component was designed thumb-first.&lt;/p&gt;




&lt;h3&gt;
  
  
  What's Next
&lt;/h3&gt;

&lt;p&gt;If the cricket group likes it (they will 😎), here's what I'd add next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📱 React Native mobile app with push notifications&lt;/li&gt;
&lt;li&gt;💬 WhatsApp API integration for automated reminders&lt;/li&gt;
&lt;li&gt;🏏 Ball-by-ball live scoring&lt;/li&gt;
&lt;li&gt;📊 Season playoffs &amp;amp; tournament mode&lt;/li&gt;
&lt;li&gt;🎥 AI-generated highlight reels from uploaded videos&lt;/li&gt;
&lt;li&gt;💳 UPI payment integration (India-specific)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  The Real Test
&lt;/h3&gt;

&lt;p&gt;I shared this with my cricket group yesterday. Within 10 minutes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;22 out of 25 members had joined&lt;/li&gt;
&lt;li&gt;18 RSVPs for this Sunday&lt;/li&gt;
&lt;li&gt;Zero WhatsApp messages about "who's coming?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;That's the real demo.&lt;/strong&gt; 🏏&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ and way too much coffee during the DEV Weekend Challenge.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you play weekend cricket (or any weekend sport), drop a comment — I'd love to hear about the chaos in YOUR group! 😄&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>Holistic Webdev: Office Space</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Sat, 26 Jul 2025 16:52:40 +0000</pubDate>
      <link>https://dev.to/aditya_007/holistic-webdev-office-space-32gg</link>
      <guid>https://dev.to/aditya_007/holistic-webdev-office-space-32gg</guid>
      <description>&lt;p&gt;&lt;strong&gt;🌐 This is a submission for &lt;a href="https://dev.to/challenges/frontend/axero"&gt;Frontend Challenge: Office Edition sponsored by Axero, Holistic Webdev: Office Space&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;OrbitSpace&lt;/strong&gt; is a futuristic, glassmorphism-inspired intranet homepage designed to bring elegance, clarity, and functionality to digital office environments.&lt;/p&gt;

&lt;p&gt;I envisioned a modern digital workspace that merges essential internal tools with an aesthetic that inspires creativity. The layout includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✨ Hero section with office branding&lt;/li&gt;
&lt;li&gt;🚀 Quick links for essential tools&lt;/li&gt;
&lt;li&gt;👥 Team spotlight to highlight members&lt;/li&gt;
&lt;li&gt;📅 Upcoming events area&lt;/li&gt;
&lt;li&gt;📊 Metrics dashboard&lt;/li&gt;
&lt;li&gt;📚 Knowledge base&lt;/li&gt;
&lt;li&gt;🧭 Navigation bar with smooth UX&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The UI uses &lt;strong&gt;glassmorphism&lt;/strong&gt; layered with &lt;strong&gt;TailwindCSS&lt;/strong&gt; and &lt;strong&gt;ShadCN UI&lt;/strong&gt; components for responsiveness, theme consistency, and accessibility. Every card is softly frosted with transparency, letting the gradient background shine through.&lt;/p&gt;




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

&lt;p&gt;🔗 &lt;strong&gt;Live URL&lt;/strong&gt;: &lt;a href="https://orbitspace.vercel.app" rel="noopener noreferrer"&gt;Preview&lt;/a&gt;&lt;br&gt;
📁 &lt;strong&gt;Source Code&lt;/strong&gt;: &lt;a href="https://github.com/TheCoderAdi/orbitspace" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fqsk8pdncdqpufgej20wo.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.amazonaws.com%2Fuploads%2Farticles%2Fqsk8pdncdqpufgej20wo.png" alt="Home page" width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛣️ Journey
&lt;/h2&gt;

&lt;p&gt;I started this project with the idea of redefining how office intranets feel — moving away from outdated, cluttered dashboards into something that feels alive, light, and forward-thinking.&lt;/p&gt;

&lt;p&gt;Some things I'm proud of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using &lt;strong&gt;glassmorphism&lt;/strong&gt; with care to avoid readability issues&lt;/li&gt;
&lt;li&gt;Seamless integration of &lt;strong&gt;ShadCN components&lt;/strong&gt; with Tailwind&lt;/li&gt;
&lt;li&gt;A fully modular component structure (HeroSection, Navigation, TeamSpotlight, etc.)&lt;/li&gt;
&lt;li&gt;Layout that adapts beautifully to different screen sizes&lt;/li&gt;
&lt;li&gt;Subtle hover interactions and gradients that enhance UX&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Throughout this build, I focused on component reusability and aesthetic balance, ensuring each section contributes to a cohesive whole.&lt;/p&gt;




&lt;h2&gt;
  
  
  👤 Author
&lt;/h2&gt;

&lt;p&gt;Made by &lt;a href="https://dev.to/aditya_007"&gt;@aditya_007&lt;/a&gt;&lt;br&gt;
Available for collaborations and open-source opportunities 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  📝 License
&lt;/h2&gt;

&lt;p&gt;MIT License — free to use with credit.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Office Desk - CSS Art Edition</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Sun, 20 Jul 2025 07:47:10 +0000</pubDate>
      <link>https://dev.to/aditya_007/office-desk-css-art-edition-5le</link>
      <guid>https://dev.to/aditya_007/office-desk-css-art-edition-5le</guid>
      <description>&lt;h2&gt;
  
  
  🎨 CSS Art: "Hacker's Haven" — Office Culture Redefined
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend/axero"&gt;Frontend Challenge: Office Edition sponsored by Axero, CSS Art: Office Culture&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Inspiration
&lt;/h2&gt;

&lt;p&gt;When you think of a modern digital workspace, what's more iconic than a dual-monitor setup, a mechanical keyboard, and a cozy desk filled with gadgets? For this CSS art challenge, I wanted to create a &lt;strong&gt;"Hacker-style home office"&lt;/strong&gt; scene — a space that feels alive with glowing monitors, RGB keys, and small but intentional details like a water bottle, headphones, mouse, and pyramid-shaped wall art.&lt;/p&gt;

&lt;p&gt;This is a tribute to those of us who spend countless hours building, coding, designing, and dreaming — in our own digital caves.&lt;/p&gt;




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

&lt;p&gt;Here's the final output of my CSS office setup:&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fkcwf06obr5bt7g8ivvnv.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.amazonaws.com%2Fuploads%2Farticles%2Fkcwf06obr5bt7g8ivvnv.png" alt="Hacker Setup Screenshot" width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Feao5r0iyh5ruk5zs395j.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Feao5r0iyh5ruk5zs395j.gif" alt="Hacker Setup Zip" width="800" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://thecoderadi.github.io/Hacker-s-Haven/" rel="noopener noreferrer"&gt;https://thecoderadi.github.io/Hacker-s-Haven/&lt;/a&gt;&lt;br&gt;
👉 &lt;strong&gt;Code:&lt;/strong&gt; &lt;a href="https://github.com/TheCoderAdi/Hacker-s-Haven" rel="noopener noreferrer"&gt;https://github.com/TheCoderAdi/Hacker-s-Haven&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔨 Journey
&lt;/h2&gt;

&lt;p&gt;The scene was built using only &lt;strong&gt;HTML and CSS&lt;/strong&gt; — no external images or JavaScript. Here’s a breakdown of the process:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Perspective &amp;amp; 3D Feel:&lt;/strong&gt; I used &lt;code&gt;transform&lt;/code&gt;, &lt;code&gt;perspective&lt;/code&gt;, and &lt;code&gt;rotateX/Y&lt;/code&gt; to give depth to the desk and devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor Effects:&lt;/strong&gt; Each monitor has a unique content block — one with glowing terminal-style text, and another with animated green bars.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Glassmorphism:&lt;/strong&gt; The container div uses backdrop blur and soft borders to simulate a futuristic glass wall.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessories:&lt;/strong&gt; Everything from the bottle to the headphones was hand-crafted using only CSS box-model elements and a lot of tweaking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard Glow:&lt;/strong&gt; A custom RGB-like animation simulates key lighting, giving it a cyberpunk vibe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Robot Wall Art:&lt;/strong&gt; A minimalist robot drawing mounted on the wall just for fun (and to add personality)!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I learned a ton about layering, keyframe animations, and perspective transforms — and just how expressive pure CSS can be.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 What’s Next
&lt;/h2&gt;

&lt;p&gt;I’d love to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a toggle for day/night mode&lt;/li&gt;
&lt;li&gt;Animate the terminal text typing line-by-line&lt;/li&gt;
&lt;li&gt;Make the scene partially interactive with small JS additions after the challenge ends&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  👥 Credits
&lt;/h2&gt;

&lt;p&gt;This was a solo submission.&lt;br&gt;
If you found this fun or inspiring, feel free to fork it or remix it for your own virtual office!&lt;/p&gt;




&lt;h2&gt;
  
  
  🏷 License
&lt;/h2&gt;

&lt;p&gt;MIT License — feel free to use or adapt with attribution.&lt;/p&gt;




&lt;p&gt;Thanks to DEV and Axero for this amazing challenge! 🙌&lt;br&gt;
Let’s continue making the web more expressive and fun — one div at a time!&lt;/p&gt;

</description>
      <category>frontendchallenge</category>
      <category>devchallenge</category>
      <category>css</category>
    </item>
    <item>
      <title>🚀 Startup Scout Agent: Find the Hottest New Startups with One AI Prompt | Runner H Challenge</title>
      <dc:creator>Aditya</dc:creator>
      <pubDate>Sat, 28 Jun 2025 09:19:09 +0000</pubDate>
      <link>https://dev.to/aditya_007/startup-scout-agent-find-the-hottest-new-startups-with-one-ai-prompt-runner-h-challenge-f97</link>
      <guid>https://dev.to/aditya_007/startup-scout-agent-find-the-hottest-new-startups-with-one-ai-prompt-runner-h-challenge-f97</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/runnerh"&gt;Runner H "AI Agent Prompting" Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;👋 Meet &lt;strong&gt;Startup Scout Agent&lt;/strong&gt; — your weekly AI researcher that finds new startups, fills your spreadsheet, and sends it to your inbox. Built entirely with one prompt, using Runner H.&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Startup Scout Agent&lt;/strong&gt;, an autonomous AI agent powered by Runner H that scans the web for newly launched startups every week and sends a neatly formatted report to my inbox.&lt;/p&gt;

&lt;p&gt;It’s designed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Investors&lt;/strong&gt; who want early access to rising startups
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Job seekers&lt;/strong&gt; exploring new, fast-growing companies
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Startup community builders&lt;/strong&gt; curating newsletters and communities
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project completely automates what normally takes hours of research — all with a single Runner H prompt.&lt;/p&gt;




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

&lt;p&gt;📽️ &lt;strong&gt;Watch the full demo here:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/c8Lf7qP22i4"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;🖼️ &lt;strong&gt;Screenshots:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Sample Google Sheet: “Weekly Startup Radar”
&lt;/li&gt;
&lt;/ul&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fh9zvrp1wpg4du32477xf.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.amazonaws.com%2Fuploads%2Farticles%2Fh9zvrp1wpg4du32477xf.png" alt="Google Sheet"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Confirmation Email
&lt;/li&gt;
&lt;/ul&gt;

&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.amazonaws.com%2Fuploads%2Farticles%2Fen0djlgfglqgjq4sjok4.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.amazonaws.com%2Fuploads%2Farticles%2Fen0djlgfglqgjq4sjok4.png" alt="Email from Runner H"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How I Used Runner H
&lt;/h2&gt;

&lt;p&gt;I used Runner H’s autonomous agent system with this one prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Every Sunday evening, find 10–15 recently launched startups in AI, HealthTech, or FinTech from sites like TechCrunch, Crunchbase, Product Hunt, or LinkedIn.

For each startup, extract the following:
- Startup name
- Description (what they do)
- Industry or category
- Funding stage (e.g., seed, Series A)
- Location
- Founders' names
- Public founder email (if available)

Add this data to a Google Sheet titled “Weekly Startup Radar”.

Once the sheet is updated, email it to me at [your-email@example.com] with the subject: “Your Weekly Startup Report is Ready 🚀”.

Repeat this task automatically every Sunday at 6:00 PM IST.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also connected:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Sheets&lt;/strong&gt; (to store the data)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gmail&lt;/strong&gt; (to send me the weekly email)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This prompt runs autonomously every Sunday, so I wake up to a fresh, curated startup list in my inbox.&lt;/p&gt;




&lt;h2&gt;
  
  
  Use Case &amp;amp; Impact
&lt;/h2&gt;

&lt;p&gt;🔍 &lt;strong&gt;Real-world use cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VC analysts tracking fresh startups in specific sectors&lt;/li&gt;
&lt;li&gt;Newsletter writers curating early-stage startup coverage&lt;/li&gt;
&lt;li&gt;Job seekers or students exploring fast-moving companies&lt;/li&gt;
&lt;li&gt;Accelerators and incubators scouting leads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;⏱️ &lt;strong&gt;Impact:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saves 4–5 hours/week of manual research&lt;/li&gt;
&lt;li&gt;No scraping, no APIs, no code — just prompt + Runner H&lt;/li&gt;
&lt;li&gt;Runs 100% hands-free&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Social Love ❤️
&lt;/h3&gt;

&lt;p&gt;✨ Shared on Twitter: &lt;a href="https://x.com/ASwayamSiddha/status/1938881997142974941" rel="noopener noreferrer"&gt;View Tweet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know what you think — and feel free to fork the prompt for your own industry! Thanks to @hcompany_ai and &lt;a class="mentioned-user" href="https://dev.to/thepracticaldev"&gt;@thepracticaldev&lt;/a&gt; for making this challenge happen!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>runnerhchallenge</category>
      <category>ai</category>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
