<?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: Mir Shah</title>
    <description>The latest articles on DEV Community by Mir Shah (@mirshah12).</description>
    <link>https://dev.to/mirshah12</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3772882%2F6fa5a1fc-b364-47a4-8302-54107dba1a04.jpg</url>
      <title>DEV Community: Mir Shah</title>
      <link>https://dev.to/mirshah12</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mirshah12"/>
    <language>en</language>
    <item>
      <title>Among Liars -&gt; The 7th Player Isn't Human</title>
      <dc:creator>Mir Shah</dc:creator>
      <pubDate>Sat, 20 Jun 2026 11:24:32 +0000</pubDate>
      <link>https://dev.to/mirshah12/among-liars-the-7th-player-isnt-human-345h</link>
      <guid>https://dev.to/mirshah12/among-liars-the-7th-player-isnt-human-345h</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/june-game-jam-2026-06-03"&gt;June Solstice Game Jam&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Among Liars&lt;/strong&gt;, a realtime multiplayer elimination where six humans join a room, but the game secretly adds a seventh player: a &lt;strong&gt;Gemini-powered AI&lt;/strong&gt; hiding inside the Spy side.&lt;/p&gt;

&lt;p&gt;There are two teams:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detectives&lt;/strong&gt; are trying to expose the hidden AI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spies&lt;/strong&gt; are trying to protect the AI long enough for the Detectives to run out of chances.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The game is inspired by the &lt;strong&gt;Turing Test&lt;/strong&gt;, but instead of asking &lt;em&gt;"Can AI answer like a human?"&lt;/em&gt;, it asks something more playable:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can AI survive being socially judged by humans?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When the game begins, six human players are split into two teams: &lt;strong&gt;three Detectives&lt;/strong&gt; and &lt;strong&gt;three Spy Agents&lt;/strong&gt;. A hidden &lt;strong&gt;Gemini-powered AI&lt;/strong&gt; is then added to the Spy side, creating a team of &lt;strong&gt;four spies&lt;/strong&gt;. The Detectives must identify the AI, while the Spy Agents work together to keep it hidden.&lt;/p&gt;

&lt;p&gt;Each round starts with a &lt;strong&gt;2-minute warmup&lt;/strong&gt; where teams can plan in private rooms. Detectives discuss who feels suspicious. Spies coordinate how to protect the AI.&lt;/p&gt;

&lt;p&gt;Then one Detective asks a wildcard-style question to the Spy side. The question is automatically sent to every living Spy player and also to the Gemini AI. Everyone answers under pressure, and the Detective has to read the answers like evidence.&lt;/p&gt;

&lt;p&gt;The trick is that Spy-side players receive &lt;strong&gt;new cover names every round&lt;/strong&gt;, so Detectives cannot simply track the AI by name or position. They have to judge tone, timing, weirdness, confidence, and emotional detail.&lt;/p&gt;

&lt;p&gt;A question like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Describe a tiny mistake you made today without making it sound important."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;is much harder than a normal trivia question because it asks for texture, not correctness.&lt;/p&gt;

&lt;p&gt;That is where the game becomes interesting.&lt;/p&gt;

&lt;p&gt;Sometimes AI sounds too polished.&lt;/p&gt;

&lt;p&gt;Sometimes humans sound fake on purpose.&lt;/p&gt;

&lt;p&gt;Sometimes the suspicious answer is suspicious because it is AI.&lt;/p&gt;

&lt;p&gt;Sometimes it is suspicious because a Spy is protecting the AI.&lt;/p&gt;

&lt;p&gt;That tension is the core of &lt;strong&gt;Among Liars&lt;/strong&gt;.&lt;/p&gt;

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

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




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

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




&lt;h2&gt;
  
  
  Live App
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://amongliars.vercel.app" rel="noopener noreferrer"&gt;https://amongliars.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  GitHub Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/abbasmir12/amongliars" rel="noopener noreferrer"&gt;https://github.com/abbasmir12/amongliars&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The frontend is built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;Framer Motion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and a custom black-and-white visual style.&lt;/p&gt;

&lt;p&gt;The backend uses &lt;strong&gt;Supabase&lt;/strong&gt; for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Room creation&lt;/li&gt;
&lt;li&gt;Random matchmaking&lt;/li&gt;
&lt;li&gt;Player state&lt;/li&gt;
&lt;li&gt;Role assignment&lt;/li&gt;
&lt;li&gt;Realtime chat&lt;/li&gt;
&lt;li&gt;Private team rooms&lt;/li&gt;
&lt;li&gt;Round state&lt;/li&gt;
&lt;li&gt;Answer storage&lt;/li&gt;
&lt;li&gt;Eliminations&lt;/li&gt;
&lt;li&gt;Win conditions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used &lt;strong&gt;Supabase Realtime&lt;/strong&gt; instead of a custom WebSocket server, so messages, answers, player changes, and round changes update live across browser tabs and devices.&lt;/p&gt;

&lt;p&gt;The game includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6-player waiting room with automatic countdown&lt;/li&gt;
&lt;li&gt;Private role reveal&lt;/li&gt;
&lt;li&gt;Detective-only and Spy-only private rooms&lt;/li&gt;
&lt;li&gt;Public chat&lt;/li&gt;
&lt;li&gt;2-minute planning/warmup phase&lt;/li&gt;
&lt;li&gt;Rotating Spy cover names every round&lt;/li&gt;
&lt;li&gt;Wildcard question flow&lt;/li&gt;
&lt;li&gt;90-second Detective question window&lt;/li&gt;
&lt;li&gt;45-second Spy answer window&lt;/li&gt;
&lt;li&gt;30-second Detective final read window&lt;/li&gt;
&lt;li&gt;Gemini AI answer generation&lt;/li&gt;
&lt;li&gt;Evidence cards&lt;/li&gt;
&lt;li&gt;Detective guess phase&lt;/li&gt;
&lt;li&gt;Round result screen&lt;/li&gt;
&lt;li&gt;Eliminated player tracking&lt;/li&gt;
&lt;li&gt;Detective/Spy win states&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Round Flow
&lt;/h2&gt;

&lt;p&gt;Each round is designed to feel like a small interrogation.&lt;/p&gt;

&lt;p&gt;First, there is a &lt;strong&gt;2-minute warmup&lt;/strong&gt;. During this time everyone can continue talking publicly, but the private rooms are where the real strategy happens.&lt;/p&gt;

&lt;h3&gt;
  
  
  Detective Strategy Room
&lt;/h3&gt;

&lt;p&gt;Detectives discuss:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who sounds too clean&lt;/li&gt;
&lt;li&gt;Who is avoiding pressure&lt;/li&gt;
&lt;li&gt;What question would expose the AI&lt;/li&gt;
&lt;li&gt;Which answer patterns felt suspicious in previous rounds&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Spy Strategy Room
&lt;/h3&gt;

&lt;p&gt;Spies coordinate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to protect the hidden AI&lt;/li&gt;
&lt;li&gt;How messy or natural their answers should feel&lt;/li&gt;
&lt;li&gt;Whether to draw suspicion away from one player&lt;/li&gt;
&lt;li&gt;How to make the room harder for Detectives to read&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After warmup, one living Detective is selected.&lt;/p&gt;

&lt;p&gt;That Detective receives a &lt;strong&gt;90-second question window&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The Detective writes a wildcard pressure prompt. Once submitted, the question is automatically sent to every living Spy-side player, including the human Spies and the hidden Gemini AI.&lt;/p&gt;

&lt;p&gt;The Spy side then receives a &lt;strong&gt;45-second answer window&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Human Spies type their responses while Gemini generates its answer through a Supabase Edge Function.&lt;/p&gt;

&lt;p&gt;All responses are stored in Supabase and displayed as evidence cards.&lt;/p&gt;

&lt;p&gt;Finally, the selected Detective receives a &lt;strong&gt;30-second final read window&lt;/strong&gt; and must click the answer card they believe belongs to the AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resolution
&lt;/h3&gt;

&lt;p&gt;The resolution is intentionally asymmetric:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the Detective guesses wrong, that Detective is eliminated.&lt;/li&gt;
&lt;li&gt;If the Detective guesses correctly, one human Spy bodyguard is eliminated.&lt;/li&gt;
&lt;li&gt;The AI survives until all human Spies are gone and it has nowhere left to hide.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Undercover Names
&lt;/h2&gt;

&lt;p&gt;One of the most important mechanics is the rotating identity system.&lt;/p&gt;

&lt;p&gt;Spy-side players never keep the same visible name between rounds.&lt;/p&gt;

&lt;p&gt;A player might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;TAVI&lt;/code&gt; in Round 1&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ORION&lt;/code&gt; in Round 2&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MICA&lt;/code&gt; in Round 3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This prevents cheap detective work.&lt;/p&gt;

&lt;p&gt;Detectives cannot simply memorize player names, positions, or patterns tied to a specific identity.&lt;/p&gt;

&lt;p&gt;Instead, they must judge the answers themselves.&lt;/p&gt;

&lt;p&gt;Previous round results preserve the original cover names, so historical evidence remains readable even after identities rotate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wildcard Questions
&lt;/h2&gt;

&lt;p&gt;The wildcard question is the heart of the game.&lt;/p&gt;

&lt;p&gt;The best questions pressure the difference between a lived human answer and a generated answer.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Describe a tiny mistake you made today without making it sound important."&lt;/li&gt;
&lt;li&gt;"What is a smell that makes you trust a place?"&lt;/li&gt;
&lt;li&gt;"Say something you would only text, not say out loud."&lt;/li&gt;
&lt;li&gt;"Which answer in this room feels rehearsed, and why?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions are not about facts.&lt;/p&gt;

&lt;p&gt;They are about texture.&lt;/p&gt;

&lt;p&gt;They force players to produce awkward, emotional, sensory, or social details under pressure.&lt;/p&gt;

&lt;p&gt;That is where the Turing Test becomes playable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gemini Integration
&lt;/h3&gt;

&lt;p&gt;The Gemini integration runs server-side through a &lt;strong&gt;Supabase Edge Function&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When a Detective submits a question, the function:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Checks the current room and round.&lt;/li&gt;
&lt;li&gt;Finds the hidden AI player.&lt;/li&gt;
&lt;li&gt;Reads the AI's current cover name.&lt;/li&gt;
&lt;li&gt;Sends the question and game context to Gemini.&lt;/li&gt;
&lt;li&gt;Receives a short in-character answer.&lt;/li&gt;
&lt;li&gt;Saves the answer into Supabase.&lt;/li&gt;
&lt;li&gt;Broadcasts it alongside the other Spy answers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Gemini API key is never exposed to the browser.&lt;/p&gt;

&lt;p&gt;I also added multiple AI behavior styles so Gemini does not always respond with the same personality.&lt;/p&gt;

&lt;p&gt;Sometimes it answers plainly.&lt;/p&gt;

&lt;p&gt;Sometimes it is guarded.&lt;/p&gt;

&lt;p&gt;Sometimes it is short, awkward, or oddly direct.&lt;/p&gt;

&lt;p&gt;The goal is not to make the AI sound perfectly human every time.&lt;/p&gt;

&lt;p&gt;The goal is to make it difficult to separate from the Spy side.&lt;/p&gt;




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

&lt;p&gt;I am submitting for both optional prize categories.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Ode to Alan Turing
&lt;/h3&gt;

&lt;p&gt;Among Liars is built directly around the idea of the &lt;strong&gt;Turing Test&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But instead of making the test a static question-and-answer screen, I turned it into a social game.&lt;/p&gt;

&lt;p&gt;The AI is not judged by one answer alone.&lt;/p&gt;

&lt;p&gt;It is judged by how it survives inside a room full of humans who are actively suspicious of it.&lt;/p&gt;

&lt;p&gt;The game asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Can a machine imitate a human well enough to survive pressure, suspicion, and social reading?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That felt like a more interactive tribute to Alan Turing's original imitation game.&lt;/p&gt;




&lt;h3&gt;
  
  
  Best Google AI Usage
&lt;/h3&gt;

&lt;p&gt;Gemini is not a decorative feature in this project.&lt;/p&gt;

&lt;p&gt;It is the hidden player.&lt;/p&gt;

&lt;p&gt;The entire game loop depends on Gemini:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gemini receives the Detective's wildcard question.&lt;/li&gt;
&lt;li&gt;Gemini answers as a Spy-side player.&lt;/li&gt;
&lt;li&gt;Gemini uses the current room context and cover name.&lt;/li&gt;
&lt;li&gt;Gemini's answer becomes evidence the Detective must judge.&lt;/li&gt;
&lt;li&gt;The game cannot fully exist without the AI participant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I integrated Gemini through a server-side Supabase Edge Function so the API key remains protected and the AI response becomes part of the realtime game state.&lt;/p&gt;

&lt;p&gt;The AI is also given its current undercover identity and round context, allowing it to behave like a player inside the match rather than a generic assistant.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Among Liars started from a simple question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if the Turing Test was not a test, but a game night?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The result is a tense social deduction game where humans are reading AI, humans are imitating AI, and nobody can fully trust what "normal" sounds like.&lt;/p&gt;

&lt;p&gt;That is the fun part.&lt;/p&gt;

&lt;p&gt;In this game, the AI does not need to be perfect.&lt;/p&gt;

&lt;p&gt;It just needs to survive.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
      <category>amongliars</category>
    </item>
    <item>
      <title>PROCSee -&gt; Turn Your System Into a Crime Scene &amp; let Gemini Become Investigator!</title>
      <dc:creator>Mir Shah</dc:creator>
      <pubDate>Thu, 26 Feb 2026 15:10:50 +0000</pubDate>
      <link>https://dev.to/mirshah12/procsee-turn-your-system-into-a-crime-scene-let-gemini-become-investigator-hbc</link>
      <guid>https://dev.to/mirshah12/procsee-turn-your-system-into-a-crime-scene-let-gemini-become-investigator-hbc</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/mlh-built-with-google-gemini-02-25-26"&gt;Built with Google Gemini: Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Built with Google Gemini
&lt;/h2&gt;

&lt;p&gt;About four weeks ago, the &lt;a href="https://gemini3.devpost.com/" rel="noopener noreferrer"&gt;Gemini 3 Hackathon&lt;/a&gt; dropped — Google DeepMind's global hackathon with a $100K prize pool, asking builders to create something genuinely new with the Gemini 3 API. Not another chatbot. Not a wrapper. Something that actually pushes what the model can do.&lt;/p&gt;

&lt;p&gt;I had one question sitting in my head for a while: &lt;em&gt;what if your computer could investigate itself?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Not just flag a suspicious process. Not just match a signature and throw an alert at you. But actually &lt;em&gt;think&lt;/em&gt; — form a theory, pull more evidence, change its mind, reach a conclusion. The way a real security analyst would.&lt;/p&gt;

&lt;p&gt;That became &lt;strong&gt;PROCSee&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's an autonomous security investigation system for Windows. It monitors every process on your machine in real-time, and when something looks suspicious, it hands the investigation off to Gemini 3 Pro — which then decides what additional data it needs, queries for it, reasons across multiple rounds of evidence, and writes a full forensic report. The tagline: &lt;em&gt;Turn your system into a crime scene. Let PROCSee be the forensic analyst.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  How It Actually Works (The Architecture)
&lt;/h3&gt;

&lt;p&gt;Let me walk through this the way I wish someone had explained it to me before I built it, because the architecture decisions were the hardest part — not the AI integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Catch everything, instantly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Windows is constantly spawning processes. Updaters, scanners, system services — hundreds of events per hour on a normal machine. The classic approach is polling: check what's running every few seconds. The problem? A piece of malware that executes, drops a payload, and exits in under a second is completely invisible to a poller.&lt;/p&gt;

&lt;p&gt;We used &lt;strong&gt;WMI event callbacks&lt;/strong&gt; instead. WMI (Windows Management Instrumentation) is a pub/sub system built into Windows. You subscribe to process creation events, and the OS calls your code the moment &lt;em&gt;anything&lt;/em&gt; starts — under 10ms latency. We capture it all: the process name, path, parent process, command line, user account, everything. Immediately written to a &lt;strong&gt;raw events database&lt;/strong&gt; in SQLite. No analysis yet. Just capture.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;New Process Starts
      ↓
WMI fires callback (&amp;lt;10ms)
      ↓
Stored in raw_process_events immediately
      ↓
Done. Fast. No AI involved yet.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: The problem with "just send everything to Gemini"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's where we made our first big mistake, and then fixed it.&lt;/p&gt;

&lt;p&gt;Our first instinct: every time a process starts, send its data to Gemini and ask "is this suspicious?" Simple idea. We tested it. On a normal Windows machine, that's easily 3-5 process creation events per second during active use. At that rate you'd blow through your API quota in literal &lt;em&gt;minutes&lt;/em&gt;. Not hours. Minutes.&lt;/p&gt;

&lt;p&gt;So we needed a smarter funnel before anything touches the API.&lt;/p&gt;

&lt;p&gt;We built a &lt;strong&gt;local behavior-scoring engine&lt;/strong&gt; — zero API cost, runs entirely on-device. It checks 40+ patterns before Gemini ever sees anything:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is PowerShell using &lt;code&gt;-encodedcommand&lt;/code&gt; or &lt;code&gt;-executionpolicy bypass&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Is a browser spawning a shell? (chrome.exe → powershell.exe is almost never legitimate)&lt;/li&gt;
&lt;li&gt;Is something executing from &lt;code&gt;%TEMP%&lt;/code&gt; or &lt;code&gt;AppData&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Is &lt;code&gt;certutil.exe&lt;/code&gt; or &lt;code&gt;mshta.exe&lt;/code&gt; making network connections? (classic LOLBins abuse)&lt;/li&gt;
&lt;li&gt;Is a process touching registry persistence keys?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each pattern scores points. If a process scores zero — nothing suspicious — it's logged and forgotten. It never reaches Gemini. Only things that &lt;em&gt;earn&lt;/em&gt; attention get elevated. This alone cut our API calls by around 95%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: The dual-database architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Even with the scoring filter, we still needed to solve &lt;em&gt;what&lt;/em&gt; Gemini actually sees. This is the core architectural insight of the whole project: &lt;strong&gt;separate "store everything" from "show the AI what matters."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We run two databases side by side:&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;raw events database&lt;/strong&gt; stores every single process event in full detail. This is the forensic record — complete, unfiltered, queryable at any time. It's how we can answer "show me every process that made a network connection to this external IP in the last 30 minutes" without having pre-loaded all of that into Gemini's context.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;summary database&lt;/strong&gt; gets built every 60 seconds. We aggregate the raw events into a 1-minute digest: what was unusual, what matched suspicious patterns, the high-level picture. This is small — a few KB of actual signal. This is what Gemini reads first to orient itself.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Raw Events DB (everything)  →→→  Summary DB (1-min digest)
       ↓                                    ↓
  Forensic record                   Gemini reads this first
  Gemini queries this               to orient itself
  when it needs more detail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Gemini doesn't just read the data — it decides what it needs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the part we're most proud of, and it's what makes PROCSee different from a standard AI integration.&lt;/p&gt;

&lt;p&gt;Most AI integrations work like this: gather all the data you think is relevant, stuff it into a prompt, hope the AI has what it needs. The problem is you're guessing what it'll need. You either over-send (burns tokens, hits context limits) or under-send (bad analysis).&lt;/p&gt;

&lt;p&gt;We flipped it. After Gemini reads the summary, it can say: "I need more information before I give you a verdict." And then it tells us exactly what it wants:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"needs_more_data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"queries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"QUERY_PROCESS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"process_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4821&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"time_range"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"last_5_minutes"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"network"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"file_access"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cpu"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"QUERY_NETWORK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"time_range"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"last_30_minutes"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"min_connections"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We execute those queries against the raw database, return the results, and Gemini continues its analysis. Another round. It keeps doing this until it's confident enough to give a verdict.&lt;/p&gt;

&lt;p&gt;A real investigation flow looks like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Round 1&lt;/strong&gt; — Gemini reads the summary: &lt;em&gt;"There's suspicious PowerShell activity worth investigating."&lt;/em&gt;&lt;br&gt;
→ We query: full process details for that PowerShell instance&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 2&lt;/strong&gt; — Gemini gets the data: &lt;em&gt;"It's making outbound connections to 203.0.113.42, an external IP."&lt;/em&gt;&lt;br&gt;
→ We query: all network activity to that IP across the whole system&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Round 3&lt;/strong&gt; — Gemini gets the data: &lt;em&gt;"Three separate processes are all calling out to the same external IP. This is command-and-control communication."&lt;/em&gt;&lt;br&gt;
→ &lt;strong&gt;Final verdict: CONFIRMED_THREAT — risk 0.95, confidence 0.92&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No human in that loop. Gemini decided what it needed, went and got it, and formed its own conclusion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: The forensic report&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When risk is ≥50% and confidence is ≥60%, Gemini generates a full Markdown forensic report — written in first person, walking through its investigation process, the evidence chain, MITRE ATT&amp;amp;CK technique mappings, indicators of compromise, and recommended response actions.&lt;/p&gt;

&lt;p&gt;We built a custom renderer for these reports with syntax highlighting for &lt;code&gt;cmd:&lt;/code&gt;, &lt;code&gt;path:&lt;/code&gt;, &lt;code&gt;ip:&lt;/code&gt;, and &lt;code&gt;proc:&lt;/code&gt; prefixes so they read like real analyst documents, not raw AI output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The stack:&lt;/strong&gt; Python + FastAPI for the backend agent, SQLite with WAL mode for the dual-database architecture, pywin32 for WMI, psutil for process data, React + Vite for the dashboard, WebSocket for real-time streaming, and the &lt;code&gt;google-genai&lt;/code&gt; SDK for Gemini 3 Pro.&lt;/p&gt;




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

&lt;p&gt;

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


&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[GitHub: &lt;a href="https://github.com/abbasmir12/procsee" rel="noopener noreferrer"&gt;https://github.com/abbasmir12/procsee&lt;/a&gt;]&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The dashboard has a few views worth calling out. The &lt;strong&gt;Gemini Conversation View&lt;/strong&gt; is the one that surprised me most when I first saw it working. You can watch in real-time as Gemini issues a &lt;code&gt;QUERY_NETWORK&lt;/code&gt; call, gets results back, immediately pivots to &lt;code&gt;QUERY_PATTERN: shell_spawn&lt;/code&gt; because it noticed something in the results, and keeps iterating toward a verdict. It genuinely looks like watching someone think through a problem — because that's what it is.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Detailed Report Viewer&lt;/strong&gt; renders the final forensic reports with full Markdown and syntax highlighting. Each report includes the complete investigation chain — every query Gemini issued, every piece of evidence it weighed, every confidence score.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  The architecture problem was the real challenge
&lt;/h3&gt;

&lt;p&gt;Here's what I didn't expect going in: the Gemini integration itself was actually the smooth part. Once the architecture was solid, plugging in Gemini was relatively clean. The hard part — the part that took most of the time — was building the system that makes &lt;em&gt;responsible, efficient use&lt;/em&gt; of the API.&lt;/p&gt;

&lt;p&gt;The quota problem hit us immediately. Naive implementation: fire an API call for every process event. Reality: quota exhausted in under an hour on a busy machine. That forced us to completely rethink the data flow. The behavior scoring engine, the 60-second aggregation, the dual-database design — all of that exists because of one question we kept coming back to: &lt;em&gt;how do we make sure Gemini only sees what's actually worth its attention?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every architectural decision in this project traces back to that question. If you're building anything that involves a continuous data stream and an LLM, that's the question you need to answer first. Everything else flows from it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rate limits aren't just a bug — they shaped the whole system
&lt;/h3&gt;

&lt;p&gt;When we stress-tested with multiple concurrent investigations, we hit rate limits constantly. Five investigations running simultaneously, each doing 3-4 query rounds with large contexts — that's a lot of tokens per minute, very fast.&lt;/p&gt;

&lt;p&gt;The frustrating part: the error messages just said "resource exhausted." Is that requests per minute? Tokens per minute? Daily limit? These have completely different fixes. RPM you solve with throttling and request spacing. TPM you solve with context compression and smarter batching. Daily limits you solve with queuing strategy. Not knowing which one you're hitting means you're guessing at the solution while your quota keeps burning.&lt;/p&gt;

&lt;p&gt;We ended up implementing all three mitigations simultaneously because we couldn't tell which problem we were actually solving: exponential backoff with jitter, a hard cap on &lt;code&gt;max_query_rounds&lt;/code&gt; per investigation (default 4), a global concurrency limit (max 3 deep investigations at once), and dynamic thinking level selection so we're not burning high-compute calls on triage decisions that don't need them. The rate limit constraints literally shaped the concurrency model of the entire system — which is a weird thing to say but it's true.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thinking levels matter more than I expected
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;thinking_level="low"&lt;/code&gt; vs &lt;code&gt;thinking_level="high"&lt;/code&gt; isn't just a speed dial. It changes the quality of reasoning you get and what prompting strategies work well. We use low for fast triage — "is this worth investigating at all?" — and high for deep forensic analysis and report generation.&lt;/p&gt;

&lt;p&gt;Early on we used high thinking everywhere. Slower responses, heavier quota usage, and no meaningful quality improvement for simple yes/no triage decisions. Right tool for the right job. Sounds obvious in retrospect, but figuring out &lt;em&gt;which&lt;/em&gt; job needs which level took real experimentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cutting features is a skill
&lt;/h3&gt;

&lt;p&gt;We came into the hackathon wanting to build prevention features — automatically suspending suspicious processes, network isolation. Had it half-implemented. Then we cut all of it.&lt;/p&gt;

&lt;p&gt;Not because of time. Because we realized: if you're wrong on a false positive and your tool kills a legitimate process, you've broken trust permanently. Investigation and reporting empowers analysts. Autonomous process-killing is a liability. Cutting that scope made the project sharper and more honest about what it actually is. The disabled &lt;code&gt;beta_prevention&lt;/code&gt; block is still in &lt;code&gt;config.yaml&lt;/code&gt; — kept it as a reminder of the decision.&lt;/p&gt;




&lt;h2&gt;
  
  
  Google Gemini Feedback
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What genuinely worked
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The 1M token context window carried the whole investigation model.&lt;/strong&gt; I planned to build summarization logic to manage context across multi-turn investigations — compress old query results, drop less-relevant evidence as rounds progressed. Never needed any of it. The entire investigation history — all the autonomous queries, all the results, all the evidence across multiple rounds — fit comfortably. And Gemini would reason &lt;em&gt;across&lt;/em&gt; all of it in later rounds, catching connections between something from round 1 and new data from round 3. That cross-context reasoning was more capable than I expected going in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Structured JSON output was rock solid.&lt;/strong&gt; The autonomous query protocol only works if Gemini reliably returns machine-parseable decisions mid-analysis. I was genuinely nervous this would be flaky — sometimes JSON, sometimes Markdown-wrapped, sometimes off-schema. It wasn't. &lt;code&gt;response_mime_type="application/json"&lt;/code&gt; combined with a clear schema in the prompt was consistently reliable even when the underlying reasoning was complex.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-turn reasoning quality is genuinely different.&lt;/strong&gt; The gap between "here's all the data, give me a verdict" and the autonomous multi-turn investigation is not subtle. The model caught things in round 3 that it completely missed or hand-waved in round 1. Letting it pull the data it actually needed, rather than us guessing upfront, made a real difference to the quality of the final verdicts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where we hit friction
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Rate limit error messages need more context.&lt;/strong&gt; "Resource exhausted" isn't actionable. RPM, TPM, and daily limits all require different solutions, and not knowing which constraint you're hitting means you're solving the wrong problem while your quota keeps ticking down. Even a simple error code that differentiates the limit type would have saved us significant debugging time during the crunch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;thinking_level&lt;/code&gt; documentation is thin for practical use.&lt;/strong&gt; Finding the parameter was easy. Understanding the actual tradeoffs — which prompt structures work best at each level, how it affects structured output reliability, what temperature to pair with each level — was entirely trial and error. For anyone building agentic systems where you're making many API calls with different complexity levels, practical guidance here would save a lot of iteration time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini will over-query if you let it.&lt;/strong&gt; With high thinking enabled, it sometimes issued 5-6 autonomous queries when 2-3 would have been enough for a confident verdict. Thorough is good — but in a long-running monitoring system that's real quota cost accumulating over hours and days. Prompting it toward decisiveness helped somewhat, but the hard &lt;code&gt;max_query_rounds&lt;/code&gt; cap was ultimately necessary as a backstop. Guidance on prompting for query efficiency specifically in agentic loops — not just single-shot quality — would be useful to see in the docs.&lt;/p&gt;




&lt;p&gt;None of this broke the project. The core capability — letting Gemini autonomously decide what it needs and go get it — worked better than expected and is genuinely a different kind of AI integration than the standard request/response loop. PROCSee wouldn't exist without it.&lt;/p&gt;

&lt;p&gt;You can also check out my original Gemini 3 Hackathon submission on Devpost here: &lt;a href="https://devpost.com/software/procsee" rel="noopener noreferrer"&gt;https://devpost.com/software/procsee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[GitHub: &lt;a href="https://github.com/abbasmir12/procsee" rel="noopener noreferrer"&gt;https://github.com/abbasmir12/procsee&lt;/a&gt; | Built for the &lt;a href="https://gemini3.devpost.com/" rel="noopener noreferrer"&gt;Gemini 3 Hackathon&lt;/a&gt; on Devpost]&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>geminireflections</category>
      <category>gemini</category>
      <category>ai</category>
    </item>
    <item>
      <title>MindMelee: Beat AI in debate Arena!</title>
      <dc:creator>Mir Shah</dc:creator>
      <pubDate>Sun, 15 Feb 2026 12:36:26 +0000</pubDate>
      <link>https://dev.to/mirshah12/mindmelee-beat-ai-in-debate-arena-5c36</link>
      <guid>https://dev.to/mirshah12/mindmelee-beat-ai-in-debate-arena-5c36</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;MindMelee&lt;/strong&gt; is basically your AI debate partner that's always ready to argue with you (in a good way!). I wanted to create something that helps people get better at debating without needing another person around.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/lqRVlVBc24M" rel="noopener noreferrer"&gt;https://youtu.be/lqRVlVBc24M&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtu.be/lqRVlVBc24M" rel="noopener noreferrer"&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%2Ficxwgfvr67mg8xmvltdu.jpg" alt="Watch the video" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The app uses Google's Gemini Live API so you can actually talk to it like a real conversation. After each debate, it breaks down your performance - vocabulary, clarity, how persuasive you were, all that stuff. You can pick between two modes: Coach (nice and helpful) or Fierce (actually challenges you).&lt;/p&gt;

&lt;p&gt;The UI is pretty bold - I went for this neubrutalist style inspired by CodeJam. Big timer on the left, your conversation on the right. Only shows the last 5 messages so you stay focused instead of scrolling through everything.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/abbasmir12/mindmelee" rel="noopener noreferrer"&gt;github.com/abbasmir12/mindmelee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo Site:&lt;/strong&gt; &lt;a href="https://mindmelee.vercel.app/" rel="noopener noreferrer"&gt;https://mindmelee.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dashboard - Start Your Debate&lt;/strong&gt;&lt;br&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%2Fvfhp2luzhnqnwmir9s8c.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%2Fvfhp2luzhnqnwmir9s8c.png" alt="Dashboard" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Debate Interface&lt;/strong&gt;&lt;br&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%2F1wb7d6214mg29awgaw4y.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%2F1wb7d6214mg29awgaw4y.png" alt="Live Debate" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Analytics&lt;/strong&gt;&lt;br&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%2F705mjjk44jmi62lsi5xj.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%2F705mjjk44jmi62lsi5xj.png" alt="Analytics" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm still learning - only scored 30 on my first try 😒 Let me know what you get!&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Voice Debates&lt;/strong&gt; - Just talk naturally, AI responds right away&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bold Neubrutalist UI&lt;/strong&gt; - CodeJam-inspired design with smooth animations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensive Analytics&lt;/strong&gt; - See exactly where you're strong and where you need work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual AI Modes&lt;/strong&gt; - Coach mode for learning, Fierce mode when you want a real challenge&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progress Tracking&lt;/strong&gt; - Charts and heatmaps showing your improvement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persona Discovery&lt;/strong&gt; - Find out what kind of debater you are&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;Okay, so here's the thing - I'm not gonna pretend Copilot CLI built this entire app for me. I designed everything, figured out the architecture, made all the creative decisions. But man, when it came to actually implementing stuff? Copilot CLI saved my life.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Actually Helped
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Talking to Code&lt;/strong&gt;&lt;br&gt;
Instead of spending hours reading docs, I could just ask Copilot CLI in plain English. Like when I needed the audio visualization thing - I just asked how to make a real-time audio analyzer. It gave me the code AND explained how the WebAudio API actually works. That's huge when you're learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smart Suggestions&lt;/strong&gt;&lt;br&gt;
The context-aware stuff is wild. While I was building the UI, it would suggest the exact Tailwind classes I needed for those neubrutalist shadows. It somehow understood the pattern I was going for and kept everything consistent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instant Debugging&lt;/strong&gt;&lt;br&gt;
My components were re-rendering like crazy on every audio frame (performance nightmare). Copilot CLI spotted the issue immediately and told me to use refs instead. Saved me probably 3 hours of debugging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learning on the Fly&lt;/strong&gt;&lt;br&gt;
This is what really got me - it doesn't just give you code, it teaches you. When I was struggling with Framer Motion, it explained spring physics and showed me this &lt;code&gt;mode="popLayout"&lt;/code&gt; feature I'd never seen. Every time I used it, I learned something new.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TypeScript Help&lt;/strong&gt;&lt;br&gt;
WebRTC and MediaStream types are confusing as hell. Copilot CLI just... knew the right types. And explained why they were needed. No more tab-switching to docs every 5 seconds.&lt;/p&gt;

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

&lt;p&gt;Look, what would've taken me days of Stack Overflow rabbit holes took minutes with Copilot CLI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebAudio API: 30 minutes vs. probably 4+ hours&lt;/li&gt;
&lt;li&gt;Framer Motion animations: 1 hour vs. a full day of trial and error&lt;/li&gt;
&lt;li&gt;Performance fixes: Instant vs. who knows how long&lt;/li&gt;
&lt;li&gt;TypeScript types: Right there vs. endless doc searching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it's not just about speed. Copilot CLI changed how I approach building stuff. I'm not scared to try new APIs anymore because I know I've got this AI pair programmer who can explain things in real-time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Moments
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Genius Suggestion&lt;/strong&gt;: Copilot CLI told me to use &lt;code&gt;flex-col-reverse&lt;/code&gt; for the chat feed. New messages at bottom, old ones fade out at top. So simple, so perfect. I wouldn't have thought of that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Design Consistency&lt;/strong&gt;: It helped me keep the neubrutalist style consistent across 20+ components. Once it understood the pattern, it just... got it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance Win&lt;/strong&gt;: Fixed that re-render issue in seconds. Went from laggy mess to smooth 60fps just like that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Learning&lt;/strong&gt;: Finally understanding React's closure issues with useEffect. Not just fixing the bug, but actually getting why it happened.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;If you're building something complex by yourself, Copilot CLI is like having a senior dev on your team. Not to do the work for you - to help you do it better.&lt;/p&gt;

&lt;p&gt;I knew what I wanted to build. Copilot CLI helped me actually build it without getting stuck every 10 minutes. That's the difference between "cool idea" and "working app."&lt;/p&gt;

&lt;p&gt;MindMelee has real-time voice AI, complex animations, comprehensive analytics - stuff that requires knowing a lot of different things. Copilot CLI made it possible to tackle all of it without drowning in documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try It Yourself
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/abbasmir12/mindmelee.git
&lt;span class="nb"&gt;cd &lt;/span&gt;mindmelee
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add your Gemini API key in Settings and start debating!&lt;/p&gt;




&lt;p&gt;I had the vision, Copilot CLI helped me execute it.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
    <item>
      <title>MindMelee: Beat AI In Arena!</title>
      <dc:creator>Mir Shah</dc:creator>
      <pubDate>Sun, 15 Feb 2026 11:25:03 +0000</pubDate>
      <link>https://dev.to/mirshah12/mindmelee-beat-ai-in-arena-59i0</link>
      <guid>https://dev.to/mirshah12/mindmelee-beat-ai-in-arena-59i0</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-01-21"&gt;GitHub Copilot CLI Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;MindMelee&lt;/strong&gt; is basically your AI debate partner that's always ready to argue with you (in a good way!). I wanted to create something that helps people get better at debating without needing another person around.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/lqRVlVBc24M" rel="noopener noreferrer"&gt;https://youtu.be/lqRVlVBc24M&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtu.be/lqRVlVBc24M" rel="noopener noreferrer"&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%2Ficxwgfvr67mg8xmvltdu.jpg" alt="Watch the video" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The app uses Google's Gemini Live API so you can actually talk to it like a real conversation. After each debate, it breaks down your performance - vocabulary, clarity, how persuasive you were, all that stuff. You can pick between two modes: Coach (nice and helpful) or Fierce (actually challenges you).&lt;/p&gt;

&lt;p&gt;The UI is pretty bold - I went for this neubrutalist style inspired by CodeJam. Big timer on the left, your conversation on the right. Only shows the last 5 messages so you stay focused instead of scrolling through everything.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/abbasmir12/mindmelee" rel="noopener noreferrer"&gt;github.com/abbasmir12/mindmelee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo Site:&lt;/strong&gt; &lt;a href="https://mindmelee.vercel.app/" rel="noopener noreferrer"&gt;https://mindmelee.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Dashboard - Start Your Debate&lt;/strong&gt;&lt;br&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%2Fvfhp2luzhnqnwmir9s8c.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%2Fvfhp2luzhnqnwmir9s8c.png" alt="Dashboard" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Debate Interface&lt;/strong&gt;&lt;br&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%2F1wb7d6214mg29awgaw4y.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%2F1wb7d6214mg29awgaw4y.png" alt="Live Debate" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Analytics&lt;/strong&gt;&lt;br&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%2F705mjjk44jmi62lsi5xj.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%2F705mjjk44jmi62lsi5xj.png" alt="Analytics" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm still learning - only scored 30 on my first try 😒 Let me know what you get!&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Voice Debates&lt;/strong&gt; - Just talk naturally, AI responds right away&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bold Neubrutalist UI&lt;/strong&gt; - CodeJam-inspired design with smooth animations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensive Analytics&lt;/strong&gt; - See exactly where you're strong and where you need work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual AI Modes&lt;/strong&gt; - Coach mode for learning, Fierce mode when you want a real challenge&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progress Tracking&lt;/strong&gt; - Charts and heatmaps showing your improvement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persona Discovery&lt;/strong&gt; - Find out what kind of debater you are&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot CLI
&lt;/h2&gt;

&lt;p&gt;Okay, so here's the thing - I'm not gonna pretend Copilot CLI built this entire app for me. I designed everything, figured out the architecture, made all the creative decisions. But man, when it came to actually implementing stuff? Copilot CLI saved my life.&lt;/p&gt;

&lt;h3&gt;
  
  
  How It Actually Helped
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Talking to Code&lt;/strong&gt;&lt;br&gt;
Instead of spending hours reading docs, I could just ask Copilot CLI in plain English. Like when I needed the audio visualization thing - I just asked how to make a real-time audio analyzer. It gave me the code AND explained how the WebAudio API actually works. That's huge when you're learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smart Suggestions&lt;/strong&gt;&lt;br&gt;
The context-aware stuff is wild. While I was building the UI, it would suggest the exact Tailwind classes I needed for those neubrutalist shadows. It somehow understood the pattern I was going for and kept everything consistent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instant Debugging&lt;/strong&gt;&lt;br&gt;
My components were re-rendering like crazy on every audio frame (performance nightmare). Copilot CLI spotted the issue immediately and told me to use refs instead. Saved me probably 3 hours of debugging.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learning on the Fly&lt;/strong&gt;&lt;br&gt;
This is what really got me - it doesn't just give you code, it teaches you. When I was struggling with Framer Motion, it explained spring physics and showed me this &lt;code&gt;mode="popLayout"&lt;/code&gt; feature I'd never seen. Every time I used it, I learned something new.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TypeScript Help&lt;/strong&gt;&lt;br&gt;
WebRTC and MediaStream types are confusing as hell. Copilot CLI just... knew the right types. And explained why they were needed. No more tab-switching to docs every 5 seconds.&lt;/p&gt;

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

&lt;p&gt;Look, what would've taken me days of Stack Overflow rabbit holes took minutes with Copilot CLI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WebAudio API: 30 minutes vs. probably 4+ hours&lt;/li&gt;
&lt;li&gt;Framer Motion animations: 1 hour vs. a full day of trial and error&lt;/li&gt;
&lt;li&gt;Performance fixes: Instant vs. who knows how long&lt;/li&gt;
&lt;li&gt;TypeScript types: Right there vs. endless doc searching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But it's not just about speed. Copilot CLI changed how I approach building stuff. I'm not scared to try new APIs anymore because I know I've got this AI pair programmer who can explain things in real-time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Moments
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Genius Suggestion&lt;/strong&gt;: Copilot CLI told me to use &lt;code&gt;flex-col-reverse&lt;/code&gt; for the chat feed. New messages at bottom, old ones fade out at top. So simple, so perfect. I wouldn't have thought of that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Design Consistency&lt;/strong&gt;: It helped me keep the neubrutalist style consistent across 20+ components. Once it understood the pattern, it just... got it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance Win&lt;/strong&gt;: Fixed that re-render issue in seconds. Went from laggy mess to smooth 60fps just like that.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The Learning&lt;/strong&gt;: Finally understanding React's closure issues with useEffect. Not just fixing the bug, but actually getting why it happened.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;If you're building something complex by yourself, Copilot CLI is like having a senior dev on your team. Not to do the work for you - to help you do it better.&lt;/p&gt;

&lt;p&gt;I knew what I wanted to build. Copilot CLI helped me actually build it without getting stuck every 10 minutes. That's the difference between "cool idea" and "working app."&lt;/p&gt;

&lt;p&gt;MindMelee has real-time voice AI, complex animations, comprehensive analytics - stuff that requires knowing a lot of different things. Copilot CLI made it possible to tackle all of it without drowning in documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try It Yourself
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/abbasmir12/mindmelee.git
&lt;span class="nb"&gt;cd &lt;/span&gt;mindmelee
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add your Gemini API key in Settings and start debating!&lt;/p&gt;




&lt;p&gt;I had the vision, Copilot CLI helped me execute it.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>cli</category>
      <category>githubcopilot</category>
    </item>
  </channel>
</rss>
