<?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: Sapnil M</title>
    <description>The latest articles on DEV Community by Sapnil M (@sapnil_m_72d9cd3abdf0f3f1).</description>
    <link>https://dev.to/sapnil_m_72d9cd3abdf0f3f1</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%2F4151394%2F3be01a08-3727-49c0-ace4-1e018a24e21f.jpeg</url>
      <title>DEV Community: Sapnil M</title>
      <link>https://dev.to/sapnil_m_72d9cd3abdf0f3f1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sapnil_m_72d9cd3abdf0f3f1"/>
    <language>en</language>
    <item>
      <title>Verdant 🌿: The Anti-Screen Agent</title>
      <dc:creator>Sapnil M</dc:creator>
      <pubDate>Sun, 11 Oct 2026 20:05:14 +0000</pubDate>
      <link>https://dev.to/sapnil_m_72d9cd3abdf0f3f1/verdant-the-anti-screen-agent-geg</link>
      <guid>https://dev.to/sapnil_m_72d9cd3abdf0f3f1/verdant-the-anti-screen-agent-geg</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  The Digital Fatigue Crisis
&lt;/h3&gt;

&lt;p&gt;As software developers and knowledge workers, we spend &lt;strong&gt;10 to 14 hours every single day&lt;/strong&gt; illuminated by the harsh blue glow of monitors. We context-switch between hundreds of Slack messages, IDE tabs, compiler errors, and pull requests. Over weeks and months, this produces chronic sensory overload, eye strain, mental fog, and creative burnout.&lt;/p&gt;

&lt;p&gt;Almost every wellness, mindfulness, or "digital detox" app suffers from an absurd paradox:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;To disconnect from your screen, they make you stare at your screen even longer.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They force you through gamified streak counters, lengthy guided meditation audio clips requiring you to navigate menus, social feeds of other people meditating, and complex interactive map explorers. You end up swapping one screen addiction for another.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verdant's Core Philosophy: The 30-Second Rule
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Verdant flips this paradigm entirely.&lt;/strong&gt; Built specifically for the &lt;strong&gt;Touch Grass&lt;/strong&gt; challenge, Verdant is an open-source AI micro-sanctuary discovery agent designed with a radical constraint:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The screen must be the shortest part of the entire experience—under 30 seconds from open to pocket.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Verdant doesn't want your attention. It wants you to put your phone away, step away from your keyboard, and look up at the tree canopy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌────────────────────────────────────────────────────────────────────────┐
│                        THE 30-SECOND FLOW                              │
└────────────────────────────────────────────────────────────────────────┘
  [ 0 to 3 Seconds ]   ──► Pick your nervous system state &amp;amp; available walk time
  [ 3 to 5 Seconds ]   ──► Mastra agent queries Tiger Data pgvector or live GPS
  [ 5 to 15 Seconds ]  ──► Receive 1 tailored pocket sanctuary &amp;amp; 4 tactile steps
  [ 15 to 30 Seconds ] ──► Tap "Start Walk &amp;amp; Disconnect" -&amp;gt; Screen Locks Out!
  [ 30s onwards ]      ──► Phone is in your pocket. You are outside touching grass.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;3-Second Nervous System State Input&lt;/strong&gt;:&lt;br&gt;
Instead of forcing users to search text or browse pins on a map, Verdant provides four targeted restorative states:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💻 &lt;em&gt;Screen Glare&lt;/em&gt; (needs deep tree shade, canopy filtering, and eye relaxation)&lt;/li&gt;
&lt;li&gt;☀️ &lt;em&gt;Need Sunlight&lt;/em&gt; (needs open southern lawns, warm stone benches, and vitamin D)&lt;/li&gt;
&lt;li&gt;🌀 &lt;em&gt;Overthinking&lt;/em&gt; (needs moving water sounds, fountain babble, and white noise)&lt;/li&gt;
&lt;li&gt;🤫 &lt;em&gt;Quiet Solitude&lt;/em&gt; (needs secluded pocket groves with ambient noise &amp;lt; 45 dB)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sub-Second Micro-Sanctuary Vector Retrieval&lt;/strong&gt;:&lt;br&gt;
Using &lt;strong&gt;Tiger Data PostgreSQL with &lt;code&gt;pgvector&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;Mastra (&lt;code&gt;@mastra/core&lt;/code&gt;)&lt;/strong&gt;, Verdant translates your mental state and available walk duration (5 to 30 minutes) into 768-dimensional embeddings and calculates cosine similarity (&lt;code&gt;&amp;lt;=&amp;gt;&lt;/code&gt;) in under 20 milliseconds. It also supports &lt;strong&gt;Live GPS Discovery&lt;/strong&gt; via OpenStreetMap to find real-world parks and green spaces within walking distance of your current coordinates anywhere in the world.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Tactile Screen-Free Sensory Mindfulness Missions&lt;/strong&gt;:&lt;br&gt;
Unlike visual navigation apps that keep you looking at turn-by-turn directions, Verdant's &lt;code&gt;generateSensoryMissionTool&lt;/code&gt; creates a physical, non-visual ritual for the walk:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Acoustic Focus&lt;/em&gt;: Count 3 distinct non-mechanical sounds (wind rustling through leaves, bird chirp, gravel crunch).&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Tactile Grounding&lt;/em&gt;: Touch cold limestone, moss, or textured tree bark for 15 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Horizon Gazing&lt;/em&gt;: Look 50+ meters into the distance to reset strained ciliary eye muscles.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Disconnect Mode: Fullscreen Physical Lockout&lt;/strong&gt;:&lt;br&gt;
Once you tap &lt;strong&gt;"Start Walk &amp;amp; Disconnect"&lt;/strong&gt;, Verdant dims your screen to an ultra-low-brightness forest canopy palette, displays a countdown timer, and plays a soothing harmonic &lt;strong&gt;Tibetan Singing Bowl chime&lt;/strong&gt; generated in real-time via the browser's Web Audio API (no external audio assets required). An explicit on-screen prompt instructs:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Lock your device now. Slip it into your pocket. Your screen time is over."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;




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

&lt;h3&gt;
  
  
  📹 Video Walkthrough
&lt;/h3&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/h5mJznaew9E" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🎥 &lt;strong&gt;&lt;a href="https://youtu.be/h5mJznaew9E" rel="noopener noreferrer"&gt;Watch the Full Video Walkthrough on YouTube&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;(Experience the complete 30-second flow: mood selection, Tiger Data vector search, live GPS discovery, and fullscreen Disconnect Lockout Mode).&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Local Setup &amp;amp; Live Experience
&lt;/h3&gt;

&lt;p&gt;You can run Verdant locally in under 60 seconds:&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;# 1. Clone the repository&lt;/span&gt;
git clone https://github.com/SAPNIL-M/verdant.git
&lt;span class="nb"&gt;cd &lt;/span&gt;verdant

&lt;span class="c"&gt;# 2. Install dependencies&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# 3. Configure environment (optional - includes offline vector fallback)&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env.local

&lt;span class="c"&gt;# 4. Start the development server&lt;/span&gt;
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visit &lt;code&gt;http://localhost:3000&lt;/code&gt; on your desktop or mobile browser.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visual Walkthrough
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Instant 3-Second Mood &amp;amp; GPS Input
&lt;/h4&gt;

&lt;p&gt;Pick your sensory state, slide your walk time, and choose whether to discover live parks near your GPS coordinates or query Tiger Data's pocket sanctuaries:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3d60yhz85ojjremcey92.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3d60yhz85ojjremcey92.png" alt="Hero and Mood Selector" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Sub-Second Sanctuary Match
&lt;/h4&gt;

&lt;p&gt;Verdant matches your mood against urban nature spots with walking time, neighborhood context, ambiance notes, and instant walking directions:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F17mbeakotw0lcnlskzu8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F17mbeakotw0lcnlskzu8.png" alt="Sanctuary Recommendation Card" width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Screen-Free Tactile Sensory Protocol
&lt;/h4&gt;

&lt;p&gt;A 4-step mindfulness mission that engages hearing, touch, and peripheral sight so you don't look at your device while walking:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fppbpb6ml0fe5rxf5xs5t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fppbpb6ml0fe5rxf5xs5t.png" alt="Tactile Sensory Mindfulness Protocol" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Disconnect Mode: Fullscreen Lockout
&lt;/h4&gt;

&lt;p&gt;Tapping "Start Walk &amp;amp; Disconnect" dims the screen, triggers a Tibetan singing bowl chime via Web Audio, and prompts you to pocket your phone:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft0qdzj3ksr34hur46y74.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft0qdzj3ksr34hur46y74.png" alt="Disconnect Mode Fullscreen Lockout" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Taking Verdant on a Real-World Walk
&lt;/h3&gt;

&lt;p&gt;During development, I took Verdant outside for a real-world field test. At 3:15 PM, after 6 hours of continuous coding, I opened Verdant on a mobile browser, tapped &lt;strong&gt;"Screen Glare"&lt;/strong&gt; and &lt;strong&gt;"15 minutes"&lt;/strong&gt;, and selected &lt;strong&gt;"Use Live GPS"&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Within 4 seconds, the Mastra agent discovered a neighborhood pocket park with mature oak trees located 8 minutes away. I pressed &lt;strong&gt;"Start Walk &amp;amp; Disconnect"&lt;/strong&gt;, heard the soothing Tibetan singing bowl chime reverberate through my earbuds, locked the phone, put it in my pocket, and walked out the door. For the next 20 minutes, my screen stayed completely black. I touched moss-covered stone, listened to sparrows in the hedges, and returned to my desk with zero cognitive fatigue.&lt;/p&gt;




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

&lt;p&gt;Repository Link: &lt;strong&gt;&lt;a href="https://github.com/SAPNIL-M/verdant" rel="noopener noreferrer"&gt;https://github.com/SAPNIL-M/verdant&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

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



&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    User([User in Front of Screen]) --&amp;gt;|Selects Mood + Minutes &amp;lt;3s| UI[Next.js 16 App Router]

    subgraph Mastra Agent Pipeline ["Mastra Agent Framework (@mastra/core)"]
        Agent[verdantAgent]
        Agent --&amp;gt;|Checks Coordinates| GeoDecision{Live GPS vs Tiger Data?}

        GeoDecision --&amp;gt;|Live Coordinates| ToolOSM[fetchLiveNearbySanctuaries&amp;lt;br/&amp;gt;OpenStreetMap Photon API]
        GeoDecision --&amp;gt;|Mood &amp;amp; Distance| ToolTiger[searchSanctuariesTool&amp;lt;br/&amp;gt;Tiger Data pgvector]

        ToolTiger --&amp;gt;|Embedding &amp;lt;=&amp;gt; Cosine Distance| TigerDB[(Tiger Data Cloud&amp;lt;br/&amp;gt;Timescale PostgreSQL + pgvector)]

        ToolTiger --&amp;gt; SanctuaryData[Matched Micro-Sanctuary]
        ToolOSM --&amp;gt; SanctuaryData

        SanctuaryData --&amp;gt; ToolMission[generateSensoryMissionTool]
        ToolMission --&amp;gt; FinalPackage[Restorative Guidance + Mission]
    end

    UI --&amp;gt;|Invokes POST /api/agent| Agent
    FinalPackage --&amp;gt;|Renders Recommendation in &amp;lt;1s| UI

    UI --&amp;gt;|Click 'Start Walk &amp;amp; Disconnect'| DisconnectMode[Fullscreen Lockout Timer]
    DisconnectMode --&amp;gt;|Web Audio API Oscillator| Chime[Tibetan Singing Bowl Zen Chime]
    DisconnectMode --&amp;gt;|User Pockets Phone| Nature([Touching Grass Outdoors 🍃])

    subgraph Trace &amp;amp; Versioning ["Entire CLI"]
        Entire[entire.yaml &amp;amp; CLI Checkpoints] --&amp;gt;|Records session traces| GitRefs[refs/entire/checkpoints]
    end&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Core Code Snippets
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Mastra Agent Definition with Anti-Screen System Prompt
&lt;/h4&gt;

&lt;p&gt;Located in &lt;a href="https://github.com/SAPNIL-M/verdant/blob/master/src/mastra/agents/sanctuaryAgent.ts" rel="noopener noreferrer"&gt;&lt;code&gt;src/mastra/agents/sanctuaryAgent.ts&lt;/code&gt;&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Agent&lt;/span&gt; &lt;span class="p"&gt;}&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;@mastra/core/agent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;searchSanctuariesTool&lt;/span&gt; &lt;span class="p"&gt;}&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;../tools/searchSanctuaries&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;generateSensoryMissionTool&lt;/span&gt; &lt;span class="p"&gt;}&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;../tools/sensoryMission&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;VERDANT_AGENT_INSTRUCTIONS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`You are Verdant, an outdoor disconnect companion and micro-sanctuary guide.
Your mission is to cure screen fatigue and cognitive overload for software engineers and knowledge workers by recommending nearby peaceful nature spots within a 5-15 minute walk.

CRITICAL RULES:
1. Prioritize screen-time minimization above all else. The user must be looking at the screen for under 30 seconds.
2. Discover the top micro-sanctuary from live GPS locations or Tiger Data pgvector based on the user's mood, walking limit, and quiet needs.
3. Use generateSensoryMissionTool to generate a tactile, screen-free sensory mindfulness mission for the destination.
4. Keep all explanations grounded, restorative, concise, and devoid of screen distractions.
5. Emphasize activating Disconnect Mode, pocketing the phone, and stepping outside immediately.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;verdantAgent&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;Agent&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;verdantAgent&lt;/span&gt;&lt;span class="dl"&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="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;verdantAgent&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;VERDANT_AGENT_INSTRUCTIONS&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/gemini-2.5-flash&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;searchSanctuariesTool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;generateSensoryMissionTool&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;h4&gt;
  
  
  2. Tiger Data &lt;code&gt;pgvector&lt;/code&gt; Spatial Vector Tool
&lt;/h4&gt;

&lt;p&gt;Located in &lt;a href="https://github.com/SAPNIL-M/verdant/blob/master/src/mastra/tools/searchSanctuaries.ts" rel="noopener noreferrer"&gt;&lt;code&gt;src/mastra/tools/searchSanctuaries.ts&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://github.com/SAPNIL-M/verdant/blob/master/src/db/client.ts" rel="noopener noreferrer"&gt;&lt;code&gt;src/db/client.ts&lt;/code&gt;&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Sub-millisecond cosine vector distance query in Tiger Data&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;querySanctuariesVector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;
  &lt;span class="nx"&gt;maxWalkMins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;limit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;SanctuaryRecord&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;pool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getPool&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;vectorStr&lt;/span&gt; &lt;span class="o"&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;embedding&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
    SELECT 
      id, name, category, neighborhood, latitude, longitude,
      estimated_walk_mins, shade_rating, quiet_rating,
      ambiance_description, sensory_features, best_for_moods,
      (embedding &amp;lt;=&amp;gt; $1::vector) AS distance
    FROM micro_sanctuaries
    WHERE estimated_walk_mins &amp;lt;= $2
    ORDER BY (embedding &amp;lt;=&amp;gt; $1::vector) ASC
    LIMIT $3;
  `&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;res&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;pool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;vectorStr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;maxWalkMins&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;limit&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;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rows&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;h4&gt;
  
  
  3. Real-Time Tibetan Singing Bowl Synthesizer (Web Audio API)
&lt;/h4&gt;

&lt;p&gt;Located in &lt;a href="https://github.com/SAPNIL-M/verdant/blob/master/src/lib/audio.ts" rel="noopener noreferrer"&gt;&lt;code&gt;src/lib/audio.ts&lt;/code&gt;&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Synthesizes a calming singing bowl sound with natural inharmonic overtones&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;playSingingBowlChime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fundamentalFreq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;216&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&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;ctx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AudioContext&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;webkitAudioContext&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;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTime&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;duration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;4.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Natural singing bowl overtone ratios: Fundamental, Octave + minor 3rd, 2nd Octave&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;harmonics&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;freqMult&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.45&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;freqMult&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;2.76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.22&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;freqMult&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;5.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.08&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="nx"&gt;harmonics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;freqMult&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gain&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;osc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createOscillator&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;gainNode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createGain&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sine&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;frequency&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setValueAtTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fundamentalFreq&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;freqMult&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Exponential decay curve replicating metal resonance&lt;/span&gt;
    &lt;span class="nx"&gt;gainNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setValueAtTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;gainNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exponentialRampToValueAtTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.0001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;gainNode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;gainNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;osc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;now&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;duration&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;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;Verdant brings together modern open-source AI frameworks, cutting-edge cloud vector databases, and developer tracing tools:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Mastra Framework (&lt;code&gt;@mastra/core&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;I chose Mastra as my agent runtime because of its first-class TypeScript DX, modular tool definition system, and lightweight execution model. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool Architecture&lt;/strong&gt;: Rather than monolithic prompt stuffing, I built two purpose-specific Mastra tools (&lt;code&gt;searchSanctuariesTool&lt;/code&gt; and &lt;code&gt;generateSensoryMissionTool&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Guardrails&lt;/strong&gt;: Mastra enforces that the agent never writes long essays or asks conversational questions that keep the user interacting with the chat window. The agent is explicitly conditioned to terminate the screen interaction immediately.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Tiger Data (Timescale Cloud PostgreSQL + &lt;code&gt;pgvector&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Vector search shouldn't require a dedicated, expensive proprietary vector database. Tiger Data gives me robust PostgreSQL reliability with the raw speed of &lt;code&gt;pgvector&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vector Schema&lt;/strong&gt;: I stored 768-dimensional embeddings generated with &lt;code&gt;text-embedding-004&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IVFFlat Vector Indexing&lt;/strong&gt;: &lt;code&gt;CREATE INDEX sanctuary_embedding_idx ON micro_sanctuaries USING ivfflat (embedding vector_cosine_ops) WITH (lists = 10);&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid Querying&lt;/strong&gt;: Tiger Data allows me to combine semantic cosine distance (&lt;code&gt;&amp;lt;=&amp;gt;&lt;/code&gt;) with hard relational SQL predicates (&lt;code&gt;WHERE estimated_walk_mins &amp;lt;= $2 AND quiet_rating &amp;gt;= 4&lt;/code&gt;) in a single query execution plan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful Fallback&lt;/strong&gt;: If &lt;code&gt;DATABASE_URL&lt;/code&gt; is omitted in offline test environments, Verdant seamlessly falls back to a fast in-memory cosine engine so the user experience never crashes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. OpenStreetMap &amp;amp; Photon Geocoding
&lt;/h3&gt;

&lt;p&gt;To ensure Verdant works for anyone, anywhere in the world, I incorporated live GPS geocoding via OpenStreetMap. When a user clicks &lt;strong&gt;"Use Live GPS"&lt;/strong&gt;, Verdant queries open geospatial endpoints to identify nearby municipal parks, arboretums, and green squares within walking distance, embedding and ranking them on the fly.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Entire CLI (&lt;code&gt;entire&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;I integrated the &lt;strong&gt;Entire CLI&lt;/strong&gt; (&lt;code&gt;entire.yaml&lt;/code&gt;) to track checkpoints, autonomous commits, and session execution traces during development. With Entire enabled on my repository, all agent transitions, tool calibrations, and code modifications are versioned with transparent trace logs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;The Hacktoberfest Week 1 challenge prompt asks: &lt;em&gt;Why does open innovation matter for what you built? What did it make possible that a closed API wouldn't?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For a wellness and anti-screen application like Verdant, open innovation is not just an architectural choice—it is a moral necessity:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Personal Privacy Over Surveillance Capitalism
&lt;/h3&gt;

&lt;p&gt;Your mental health status (&lt;em&gt;"I am experiencing severe anxiety and sensory overload"&lt;/em&gt;) and your real-time physical GPS coordinates are among the most sensitive personal data points that exist. In proprietary wellness platforms, this data is routinely logged, ingested into user advertising profiles, and monetized to sell products. With open-source AI and transparent database infrastructure like PostgreSQL, user data remains strictly private.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Open Spatial Infrastructure vs. Monetized Maps
&lt;/h3&gt;

&lt;p&gt;Closed commercial mapping platforms prioritize sponsored pins, commercial businesses, and high-density vehicle routes. They are disincentivized to show you an unmonetized public bench under a willow tree. By building on OpenStreetMap data and self-hosted vector databases, Verdant treats quiet public micro-sanctuaries as fundamental human rights, not ad space.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Transparent AI Behavior
&lt;/h3&gt;

&lt;p&gt;Closed conversational AI assistants are programmed to maximize &lt;strong&gt;session duration and daily active engagement (DAU)&lt;/strong&gt;. Their underlying models will deliberately prompt you with follow-up questions to keep you chatting. By utilizing Mastra and open agent tooling, I was able to program my agent with the exact opposite objective: &lt;strong&gt;minimize screen time to &amp;lt;30 seconds and send the user away.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Zero-Cost Offline Resilience
&lt;/h3&gt;

&lt;p&gt;Because Verdant is open-source and includes offline in-memory vector fallbacks, you can run it on a laptop in airplane mode in the middle of a national park with no cell reception. It costs nothing to operate, requires no recurring SaaS subscriptions, and will remain functional forever.&lt;/p&gt;




&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I utilized the &lt;strong&gt;Entire Checkpoints CLI&lt;/strong&gt; throughout the development and testing of Verdant. All checkpoints, session snapshots, and autonomous agent executions are tracked within the repository.&lt;/p&gt;

&lt;p&gt;You can inspect the Entire configuration in &lt;a href="https://github.com/SAPNIL-M/verdant/blob/master/entire.yaml" rel="noopener noreferrer"&gt;&lt;code&gt;entire.yaml&lt;/code&gt;&lt;/a&gt; and review status directly via:&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;# Check Entire tracking status&lt;/span&gt;
entire status

&lt;span class="c"&gt;# View recorded development checkpoints&lt;/span&gt;
entire checkpoints
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Verified Entire Session Status
&lt;/h3&gt;

&lt;p&gt;Here is my live session verification showing Entire CLI actively recording on branch &lt;code&gt;master&lt;/code&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2movsmrxe26jwehef46q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2movsmrxe26jwehef46q.png" alt="Entire Status Session Verification" width="799" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The session traces capture the iteration from initial schema design in Tiger Data to Mastra tool integration, Web Audio synthesis, and live GPS fallback integration.&lt;/p&gt;




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

&lt;p&gt;I am officially submitting Verdant for the following featured partner tracks:&lt;/p&gt;

&lt;h3&gt;
  
  
  🏆 Best Use of Tiger Data
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Implementation&lt;/strong&gt;: Powered by Tiger Data Cloud (Timescale PostgreSQL) with the &lt;code&gt;pgvector&lt;/code&gt; extension enabled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical Highlights&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;vector(768)&lt;/code&gt; columns storing dense semantic representations of urban nature ambiance, acoustic tranquility, and sensory features.&lt;/li&gt;
&lt;li&gt;Sub-millisecond cosine distance sorting (&lt;code&gt;(embedding &amp;lt;=&amp;gt; $1::vector) ASC&lt;/code&gt;) combined with walking duration relational filters.&lt;/li&gt;
&lt;li&gt;IVFFlat vector index with optimized list buckets (&lt;code&gt;sanctuary_embedding_idx&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Automated database seeder (&lt;code&gt;npm run db:seed&lt;/code&gt;) and connection pooling configured in &lt;a href="https://github.com/SAPNIL-M/verdant/blob/master/src/db/client.ts" rel="noopener noreferrer"&gt;&lt;code&gt;src/db/client.ts&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏆 Best Use of Mastra
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Implementation&lt;/strong&gt;: Powered by Mastra (&lt;code&gt;@mastra/core&lt;/code&gt; v1.75).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical Highlights&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Custom &lt;code&gt;verdantAgent&lt;/code&gt; with strict system prompt conditioning that actively rejects screen-time prolongation and enforces the 30-Second Rule.&lt;/li&gt;
&lt;li&gt;Multi-tool orchestration combining &lt;code&gt;searchSanctuariesTool&lt;/code&gt; (spatial vector retrieval) and &lt;code&gt;generateSensoryMissionTool&lt;/code&gt; (tactile mindfulness synthesis).&lt;/li&gt;
&lt;li&gt;Clean TypeScript schema validation using Zod for all inputs and outputs.&lt;/li&gt;
&lt;li&gt;Integrated directly into Next.js 16 App Router API routes (&lt;a href="https://github.com/SAPNIL-M/verdant/blob/master/src/app/api/agent/route.ts" rel="noopener noreferrer"&gt;&lt;code&gt;src/app/api/agent/route.ts&lt;/code&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🏆 Best Use of Entire
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Implementation&lt;/strong&gt;: Integrated with Entire Checkpoints CLI via &lt;a href="https://github.com/SAPNIL-M/verdant/blob/master/entire.yaml" rel="noopener noreferrer"&gt;&lt;code&gt;entire.yaml&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical Highlights&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Full development checkpoints tracked on branch &lt;code&gt;master&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Captures development trajectory, agent execution logs, and reproducible environment configurations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧪 Live Partner &amp;amp; CLI Test Proof (Parts 1, 2, and 3)
&lt;/h3&gt;

&lt;p&gt;Below is the complete terminal verification executing &lt;code&gt;npm run agent:test&lt;/code&gt; and verifying all three partner tracks:&lt;/p&gt;

&lt;h4&gt;
  
  
  Verification Part 1: Mastra Agent Registration &amp;amp; Tiger Data Connection
&lt;/h4&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdt9zgfsrkwvjrwlz5rt8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdt9zgfsrkwvjrwlz5rt8.png" alt="Terminal Partner Verification Part 1" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Verification Part 2: Tiger Data Vector Distance Searches &amp;amp; Stress Scenarios
&lt;/h4&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbk9f30ake4bqzmawotrl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbk9f30ake4bqzmawotrl.png" alt="Terminal Partner Verification Part 2" width="800" height="620"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Verification Part 3: Live GPS OpenStreetMap Discovery &amp;amp; Offline Fallback
&lt;/h4&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fflham40shqslfhjc0m86.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fflham40shqslfhjc0m86.png" alt="Terminal Partner Verification Part 3" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary: Step Outside
&lt;/h2&gt;

&lt;p&gt;The greatest gift technology can give us is not more time looking at pixels—it is the freedom to look away from them.&lt;/p&gt;

&lt;p&gt;Verdant is live, open-source, and waiting to help you take your next walk. Open it up, pick your mood, step away from your computer, and go touch grass. 🌿&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>mastra</category>
      <category>postgres</category>
    </item>
    <item>
      <title>WhichModel? — I Built a AI Arena for My Friend to Prove Open Models Can Beat Commercial APIs</title>
      <dc:creator>Sapnil M</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:58:14 +0000</pubDate>
      <link>https://dev.to/sapnil_m_72d9cd3abdf0f3f1/whichmodel-i-built-a-double-blind-ai-arena-for-my-friend-to-prove-open-models-can-beat-59g6</link>
      <guid>https://dev.to/sapnil_m_72d9cd3abdf0f3f1/whichmodel-i-built-a-double-blind-ai-arena-for-my-friend-to-prove-open-models-can-beat-59g6</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

&lt;p&gt;Every week, my friend &lt;strong&gt;Abhi&lt;/strong&gt; asks me the exact same question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Bro, which AI model should I actually use? Do I need to pay \$20/month for closed commercial APIs, or can an open-weight model actually keep up with my real work?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Whenever we look at public AI leaderboards (MMLU, HumanEval, or Chatbot Arena), the answers feel disconnected from real life. Abhi and my wider circle of friends aren't sitting around evaluating standardized high-school math competitions or abstract trivia. In reality, they are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Debugging real code:&lt;/strong&gt; Fixing subtle CSS flexbox/grid overflows and asynchronous Python backend errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drafting high-stakes outreach:&lt;/strong&gt; Writing cold emails to tech CEOs and startup hiring managers for internship opportunities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Studying for exams:&lt;/strong&gt; Condensing dense university biology lectures (like the biochemistry of photosynthesis or WW2 timelines) into crisp study guides.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Translating regional languages:&lt;/strong&gt; Converting everyday colloquial phrases between English and regional languages like Malayalam without sounding robotic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The biggest obstacle wasn't the models—it was &lt;strong&gt;brand bias&lt;/strong&gt;. When an answer carries a famous proprietary logo, people automatically convince themselves it is smarter. When it’s labeled "open model", people scrutinize it twice as hard.&lt;/p&gt;

&lt;p&gt;To solve this for Abhi and our peer group, I built &lt;strong&gt;WhichModel?&lt;/strong&gt;: an interactive, &lt;strong&gt;double-blind AI benchmark arena&lt;/strong&gt; powered by their own daily prompts.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart LR
    A[Friend Submits Real Prompts] --&amp;gt; B[Async Inference Queue]
    B --&amp;gt; C[NVIDIA NIM: Llama 3.2 11B]
    B --&amp;gt; D[Groq: Qwen 3.8 27B]
    B --&amp;gt; E[Groq: GPT-OSS 20B]
    B --&amp;gt; F[Google: Gemini 3.5 Flash Lite]
    C &amp;amp; D &amp;amp; E &amp;amp; F --&amp;gt; G[Randomized Double-Blind Evaluation]
    G --&amp;gt; H[Friend Votes on Merit Alone]
    H --&amp;gt; I[Animated Model Reveal &amp;amp; Latency Stats]
    I --&amp;gt; J[Personal Scorecard &amp;amp; Community Leaderboard]&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  How It Works:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Submit Real Tasks:&lt;/strong&gt; Friends enter 5–15 prompts categorized by task type (&lt;code&gt;coding&lt;/code&gt;, &lt;code&gt;writing&lt;/code&gt;, &lt;code&gt;study_help&lt;/code&gt;, &lt;code&gt;summarizing&lt;/code&gt;, &lt;code&gt;translation&lt;/code&gt;, &lt;code&gt;other&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blind Comparison:&lt;/strong&gt; Candidate open-weight models and a closed comparison baseline generate answers in the background. Prompts are rendered as anonymous cards (&lt;em&gt;Answer A&lt;/em&gt;, &lt;em&gt;Answer B&lt;/em&gt;, &lt;em&gt;Answer C&lt;/em&gt;) with all identities, metadata, and token traces stripped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Reveal:&lt;/strong&gt; Friends pick the best answer strictly on merit (or select &lt;em&gt;"None are good"&lt;/em&gt;). Only &lt;em&gt;after&lt;/em&gt; voting are the model identities, license types, response latencies, and token counts revealed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personalized Guidance:&lt;/strong&gt; The &lt;code&gt;/results/me&lt;/code&gt; dashboard gives each friend a custom verdict: &lt;em&gt;"For coding, use Model X; for summaries, use Model Y"&lt;/em&gt;, backed by empirical win-rate statistics.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live Web Application:&lt;/strong&gt; &lt;a href="https://whichmodel.onrender.com/" rel="noopener noreferrer"&gt;https://whichmodel.onrender.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Live Community Leaderboard:&lt;/strong&gt; &lt;a href="https://whichmodel.onrender.com/results" rel="noopener noreferrer"&gt;https://whichmodel.onrender.com/results&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔍 &lt;strong&gt;Explore Public Prompts &amp;amp; Verified Answers:&lt;/strong&gt; &lt;a href="https://whichmodel.onrender.com/explore" rel="noopener noreferrer"&gt;https://whichmodel.onrender.com/explore&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The User Journey:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Invite-Gated Welcome:&lt;/strong&gt; Visitors sign in using an access code (e.g., &lt;code&gt;friends2026&lt;/code&gt;), choose a display name, and consent to AI processing terms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt Authoring:&lt;/strong&gt; Form validation ensures prompts are between 5 and 15 items with category tags. A handy &lt;em&gt;"Fill sample prompts"&lt;/em&gt; quick-button lets first-time testers jump in immediately.&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4u7kfdhfn82jfo2cnuxy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4u7kfdhfn82jfo2cnuxy.png" alt=" " width="799" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Figure 1: Friends submit real-world prompts categorized across coding, writing, and study domains.&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Double-Blind Card Arena:&lt;/strong&gt; Side-by-side card layout with copy-to-clipboard buttons, syntax-highlighted code blocks, and zero brand leakage in network payloads.&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiuk6g8ocenw0arhljgvy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiuk6g8ocenw0arhljgvy.png" alt=" " width="799" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Model Reveal:&lt;/strong&gt; Immediately after voting, the cards flip to expose the winning model, license, latency, and token metrics.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;(Optional Screenshot 3: Model Reveal Card showing latency and token counts)&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Instant Scorecards &amp;amp; Community Leaderboard:&lt;/strong&gt; Pairwise win-rate calculation with sample-size warnings ($n &amp;lt; 10$) and the live open vs. closed showdown.&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiqynoqv33fytutbta6z8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiqynoqv33fytutbta6z8.png" alt=" " width="799" height="291"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;The complete source code is public and open-source under the MIT license:&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/SAPNIL-M" rel="noopener noreferrer"&gt;
        SAPNIL-M
      &lt;/a&gt; / &lt;a href="https://github.com/SAPNIL-M/WhichModel" rel="noopener noreferrer"&gt;
        WhichModel
      &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;WhichModel?&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Ask your friends. Let the models compete. Find your best AI.&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;WhichModel?&lt;/strong&gt; is a small, invite-only benchmark for answering a very practical question:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Which AI model works best for the things I actually do?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead of trusting generic leaderboards, people submit their own prompts, compare anonymous answers from several models, and vote for the answer they like best. The app then turns those votes into personal insights and a shared leaderboard.&lt;/p&gt;
&lt;p&gt;It is built for friends, classmates, teammates, and anyone who wants a useful answer instead of another hype-filled model ranking.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The idea in one minute&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Enter an invite code.&lt;/li&gt;
&lt;li&gt;Add 5–15 prompts you really use for coding, writing, studying, summaries, translation, or anything else.&lt;/li&gt;
&lt;li&gt;Wait while the models answer in the background.&lt;/li&gt;
&lt;li&gt;Compare anonymous answers labelled &lt;strong&gt;A&lt;/strong&gt;, &lt;strong&gt;B&lt;/strong&gt;, &lt;strong&gt;C&lt;/strong&gt;, and &lt;strong&gt;D&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Pick the best answer — or say &lt;strong&gt;None are good&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;See which…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SAPNIL-M/WhichModel" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/SAPNIL-M/WhichModel" rel="noopener noreferrer"&gt;SAPNIL-M/WhichModel&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tech Stack:&lt;/strong&gt; Python 3.11+, FastAPI, Uvicorn, PostgreSQL (via SQLModel / SQLAlchemy), Jinja2, Vanilla JavaScript (0 heavy npm dependencies), and Bleach for XSS sanitization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Suite:&lt;/strong&gt; 18 automated tests passing in CI covering providers, async queues, double-blind security, and GDPR-style data deletion.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  1. The Open-Source AI Matrix
&lt;/h3&gt;

&lt;p&gt;WhichModel? is architected around accessible open-weight models, contrasted against a single commercial baseline:&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;Kind&lt;/th&gt;
&lt;th&gt;Host Provider&lt;/th&gt;
&lt;th&gt;License Category&lt;/th&gt;
&lt;th&gt;Role in Benchmark&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Llama 3.2 11B Vision Instruct&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenAI-compatible&lt;/td&gt;
&lt;td&gt;NVIDIA NIM&lt;/td&gt;
&lt;td&gt;Custom Open-Weights (Meta Community)&lt;/td&gt;
&lt;td&gt;Open Candidate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen 3.8 27B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenAI-compatible&lt;/td&gt;
&lt;td&gt;Groq&lt;/td&gt;
&lt;td&gt;Custom Open-Weights (Qwen Research)&lt;/td&gt;
&lt;td&gt;Open Candidate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GPT-OSS 20B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenAI-compatible&lt;/td&gt;
&lt;td&gt;Groq&lt;/td&gt;
&lt;td&gt;Permissive Open-Source (Apache 2.0)&lt;/td&gt;
&lt;td&gt;Open Candidate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemini 3.5 Flash Lite&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Gemini REST API&lt;/td&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;Proprietary Closed&lt;/td&gt;
&lt;td&gt;Comparison Baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All models are defined declaratively in &lt;code&gt;config/models.yaml&lt;/code&gt;. Swapping an endpoint or plugging in a local &lt;strong&gt;Ollama&lt;/strong&gt; model takes four lines of YAML with zero code changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;generation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;temperature&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.3&lt;/span&gt;
  &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;800&lt;/span&gt;
  &lt;span class="na"&gt;system_prompt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Answer&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;helpfully&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;concisely."&lt;/span&gt;

&lt;span class="na"&gt;models&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gpt-oss-20b&lt;/span&gt;
    &lt;span class="na"&gt;display_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;GPT OSS 20B&lt;/span&gt;
    &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;openai_compatible&lt;/span&gt;
    &lt;span class="na"&gt;base_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;https://api.groq.com/openai/v1&lt;/span&gt;
    &lt;span class="na"&gt;api_key_env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;GROQ_API_KEY&lt;/span&gt;
    &lt;span class="na"&gt;provider_model_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;openai/gpt-oss-20b&lt;/span&gt;
    &lt;span class="na"&gt;is_open&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;license_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;permissive&lt;/span&gt;
    &lt;span class="na"&gt;license_note&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Apache &lt;/span&gt;&lt;span class="m"&gt;2.0&lt;/span&gt;
    &lt;span class="na"&gt;live_enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;rpm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;An Honest Note on Resource Constraints &amp;amp; Model Selection:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Let's be completely transparent: there are even larger, highly perfected open-source and open-weight models in the ecosystem today (such as 70B+ parameter checkpoints, specialized reasoning models, and massive community fine-tunes). However, as an independent developer without cloud grant funding, venture sponsorship, or high-end GPU clusters to inference those massive models, I utilized the best accessible models I could get my hands on via developer-tier and free inference APIs (NVIDIA NIM and Groq).  &lt;/p&gt;

&lt;p&gt;The fact that these lightweight, sub-30B models (like GPT-OSS 20B and Qwen 27B) still went toe-to-toe with a commercial closed model proves the point even more strongly: &lt;strong&gt;if lightweight open models can already win 53.3% of real-world matchups, benchmarking with larger, perfected frontier open models will yield even more commanding results in favor of open source.&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Small tidbit: If anyone, an inference platform, or a compute provider would like to offer access to more powerful models or infrastructure for hosting larger open frontier models, I am more than open to collaborating! Drop a comment or reach out—let's expand the arena!)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Double-Blind Data Integrity
&lt;/h3&gt;

&lt;p&gt;To guarantee absolute double-blind evaluation, the backend enforces strict data sanitization:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;/api/next&lt;/code&gt; endpoint completely strips &lt;code&gt;model_id&lt;/code&gt;, provider names, and latency metrics before sending answers to the browser.&lt;/li&gt;
&lt;li&gt;Inspecting browser developer tools or DOM elements reveals only randomized UUIDs.&lt;/li&gt;
&lt;li&gt;Model outputs are safely rendered through &lt;code&gt;markdown&lt;/code&gt; and sanitized with &lt;code&gt;bleach&lt;/code&gt; to prevent XSS injection from untrusted model generations.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Server-side scrubbing: never leak model metadata before voting
&lt;/span&gt;&lt;span class="nd"&gt;@router.get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/api/next&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_next_prompt_for_picking&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Depends&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;get_db&lt;/span&gt;&lt;span class="p"&gt;)):&lt;/span&gt;
    &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;answers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;select_next_unpicked_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;shuffle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Randomize card positions
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text_html&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;render_safe_markdown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;answers&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# model_id, tokens, and latency are intentionally excluded!
&lt;/span&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Fault-Tolerant Async Inference Queue
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;An in-process &lt;code&gt;asyncio&lt;/code&gt; worker queries candidate models concurrently, enforcing per-provider rate limits (NIM: 3 concurrent requests, Groq: 2, Gemini: 2) with exponential backoff on HTTP 429.&lt;/li&gt;
&lt;li&gt;Job states (&lt;code&gt;queued&lt;/code&gt;, &lt;code&gt;running&lt;/code&gt;, &lt;code&gt;done&lt;/code&gt;, &lt;code&gt;failed&lt;/code&gt;) are stored in PostgreSQL. If the cloud container restarts or wakes from sleep, pending jobs are immediately resumed without losing user input.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Pairwise Statistical Modeling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Each evaluation treats the user's chosen answer as winning head-to-head against every unchosen answer in that round.&lt;/li&gt;
&lt;li&gt;Small sample indicators ($n &amp;lt; 10$) notify friends when data is preliminary.&lt;/li&gt;
&lt;li&gt;Self-service &lt;strong&gt;"Delete my data"&lt;/strong&gt; removes personal prompts and recalculates leaderboard aggregates in real time.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Running this benchmark with real friend-submitted prompts produced surprising, empirical discoveries that debunked common assumptions about closed vs. open AI:&lt;/p&gt;

&lt;h3&gt;
  
  
  🏆 Empirical Benchmark Scoreboard (Live Results from &lt;code&gt;/results.json&lt;/code&gt;):
&lt;/h3&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;Open / Closed&lt;/th&gt;
&lt;th&gt;License&lt;/th&gt;
&lt;th&gt;Overall Win Rate&lt;/th&gt;
&lt;th&gt;Coding ($n$)&lt;/th&gt;
&lt;th&gt;Writing ($n$)&lt;/th&gt;
&lt;th&gt;Study ($n$)&lt;/th&gt;
&lt;th&gt;Summary ($n$)&lt;/th&gt;
&lt;th&gt;Translation ($n$)&lt;/th&gt;
&lt;th&gt;Median Latency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GPT-OSS 20B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Open&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Apache 2.0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;60.0%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;75%&lt;/strong&gt; ($4$)&lt;/td&gt;
&lt;td&gt;50% ($4$)&lt;/td&gt;
&lt;td&gt;33% ($3$)&lt;/td&gt;
&lt;td&gt;60% ($5$)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;75%&lt;/strong&gt; ($4$)&lt;/td&gt;
&lt;td&gt;1005 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gemini 3.5 Flash Lite&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Closed&lt;/td&gt;
&lt;td&gt;Proprietary&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;66.7%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;50% ($4$)&lt;/td&gt;
&lt;td&gt;60% ($5$)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;86%&lt;/strong&gt; ($7$)&lt;/td&gt;
&lt;td&gt;33% ($3$)&lt;/td&gt;
&lt;td&gt;80% ($5$)&lt;/td&gt;
&lt;td&gt;1992 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen 3.8 27B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Open&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Research&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;23.1%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0% ($2$)&lt;/td&gt;
&lt;td&gt;0% ($3$)&lt;/td&gt;
&lt;td&gt;0% ($2$)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;75%&lt;/strong&gt; ($4$)&lt;/td&gt;
&lt;td&gt;0% ($2$)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;766 ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Llama 3.2 11B Vision&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Open&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Meta Comm.&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;27.3%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;75%&lt;/strong&gt; ($4$)&lt;/td&gt;
&lt;td&gt;0% ($2$)&lt;/td&gt;
&lt;td&gt;0% ($2$)&lt;/td&gt;
&lt;td&gt;0% ($3$)&lt;/td&gt;
&lt;td&gt;7448 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Key Takeaway:&lt;/strong&gt; Open-weight models won &lt;strong&gt;8 out of 15 head-to-head showdowns (53.3% win rate)&lt;/strong&gt; against the commercial closed baseline!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What This Taught Us About Open Innovation:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open Models Beat Closed APIs on Developer Workloads:&lt;/strong&gt; In coding tasks, &lt;strong&gt;GPT-OSS 20B won 75% of matchups&lt;/strong&gt;, beating Gemini 3.5 Flash Lite. Abhi noticed that the open model gave direct, working code with minimal unnecessary fluff, whereas the closed model over-explained basic concepts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specialized Excellence Over Generic Monoliths:&lt;/strong&gt; &lt;strong&gt;Qwen 3.8 27B&lt;/strong&gt; was the undisputed speed champion (a blazing &lt;strong&gt;766 ms median latency&lt;/strong&gt;) and dominated summarization with a &lt;strong&gt;75% win rate&lt;/strong&gt;. For high-speed reading, friends preferred Qwen over larger closed models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Subscription Anxiety &amp;amp; Zero Vendor Lock-in:&lt;/strong&gt; You can run these exact weights on your own machine using Ollama or vLLM. You aren't subject to unexpected pricing hikes, policy shifts, or API deprecations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Honest License Awareness:&lt;/strong&gt; We deliberately differentiated between true permissive open-source (Apache 2.0) and community open-weights (Llama Community, Qwen Research). Educating users about these distinctions ensures teams know their true commercial rights.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;h3&gt;
  
  
  🌟 Best Use of Render
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;WhichModel?&lt;/strong&gt; was built, configured, and deployed natively on &lt;strong&gt;Render&lt;/strong&gt; using an Infrastructure-as-Code Blueprint (&lt;code&gt;render.yaml&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;whichmodel&lt;/span&gt;
    &lt;span class="na"&gt;runtime&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python&lt;/span&gt;
    &lt;span class="na"&gt;plan&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;free&lt;/span&gt;
    &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;singapore&lt;/span&gt;
    &lt;span class="na"&gt;numInstances&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;# In-process worker requires single-node concurrency&lt;/span&gt;
    &lt;span class="na"&gt;buildCommand&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pip install -r requirements.txt&lt;/span&gt;
    &lt;span class="na"&gt;startCommand&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;uvicorn app.main:app --host 0.0.0.0 --port $PORT --proxy-headers --forwarded-allow-ips='*'&lt;/span&gt;
    &lt;span class="na"&gt;healthCheckPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/health&lt;/span&gt;
    &lt;span class="na"&gt;envVars&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DATABASE_URL&lt;/span&gt;
        &lt;span class="na"&gt;fromDatabase&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;whichmodel-db&lt;/span&gt;
          &lt;span class="na"&gt;property&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;connectionString&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;SESSION_SECRET&lt;/span&gt;
        &lt;span class="na"&gt;generateValue&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DAILY_CALL_CAP&lt;/span&gt;
        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;600"&lt;/span&gt;

&lt;span class="na"&gt;databases&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;whichmodel-db&lt;/span&gt;
    &lt;span class="na"&gt;databaseName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;whichmodel&lt;/span&gt;
    &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;whichmodel&lt;/span&gt;
    &lt;span class="na"&gt;plan&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;free&lt;/span&gt;
    &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;singapore&lt;/span&gt;
    &lt;span class="na"&gt;ipAllowList&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt; &lt;span class="c1"&gt;# Private network isolation: accessible only by the web service&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why Render Was Essential to This Architecture:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Friction Infrastructure as Code:&lt;/strong&gt; The entire environment—FastAPI app, environment secrets, and isolated PostgreSQL database—spins up reproducibly from a single declarative YAML file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handling Free-Tier Spin-Downs with Grace:&lt;/strong&gt; Free cloud instances spin down after 15 minutes of idle time. WhichModel?'s worker architecture was engineered specifically for this: client-side polling keeps the instance awake while a friend is actively evaluating prompts, and if a cold-start does occur, the FastAPI startup hook immediately audits PostgreSQL and resumes any pending jobs without dropping a single submission.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure Isolated Database Network:&lt;/strong&gt; The database uses &lt;code&gt;ipAllowList: []&lt;/code&gt;, ensuring it is only reachable internally by our Render web service, preventing external database exposure.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;&lt;strong&gt;GitHub Copilot&lt;/strong&gt; (CLI &amp;amp; Agent) was an essential pair programmer throughout this rapid weekend sprint:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Foundational Scaffolding via Copilot CLI:&lt;/strong&gt; Used GitHub Copilot CLI to accelerate Phase 1 architecture, generating boilerplate for the decoupled provider interfaces (&lt;code&gt;app/providers/openai_compat.py&lt;/code&gt; and &lt;code&gt;gemini.py&lt;/code&gt;) to normalize disparate vendor response schemas into a unified contract.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensive Test Suite Generation:&lt;/strong&gt; Copilot helped write and parameterize the 18 automated tests in &lt;code&gt;tests/&lt;/code&gt;, rapidly authoring mocked HTTP fixtures for provider retries (429 rate-limiting with exponential backoff), double-blind election fairness, and markdown sanitization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions CI/CD Pipeline:&lt;/strong&gt; Paired with GitHub Actions (&lt;code&gt;.github/workflows/ci.yml&lt;/code&gt;) to automatically execute test suites on pull requests, ensuring continuous verification before code was merged and deployed live.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;This project was built pair-programming with &lt;strong&gt;Antigravity&lt;/strong&gt; and &lt;strong&gt;GitHub Copilot CLI&lt;/strong&gt; throughout the Hacktoberfest weekend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Architectural Scaffolding:&lt;/strong&gt; Implementing the decoupled provider abstraction (&lt;code&gt;app/providers/base.py&lt;/code&gt;, &lt;code&gt;openai_compat.py&lt;/code&gt;, &lt;code&gt;gemini.py&lt;/code&gt;) and setting up comprehensive unit tests with mocked HTTP responses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend &amp;amp; UX Polish:&lt;/strong&gt; Developing the responsive styling, card reveal animations, and safe markdown rendering pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Async Concurrency Tuning:&lt;/strong&gt; Solving queue contention across disparate model rate limits and ensuring smooth recovery on cold boots.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All 18 tests pass cleanly, ensuring strict data privacy, election fairness, and resilience against external API hiccups.&lt;/p&gt;




&lt;h2&gt;
  
  
  What My Friend Said When They Used It
&lt;/h2&gt;

&lt;p&gt;When I gave the link to &lt;strong&gt;Abhi&lt;/strong&gt; to test on his own real coding and writing prompts:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I was convinced Answer A on my Python script prompt was gemini because the syntax was concise and it didn't lecture me. When the card flipped and revealed it was GPT-OSS 20B running on open weights, I was shocked. I don't need to pay for closed API keys for my daily coding tasks anymore—I'm running this locally tonight."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Thank you to the DEV team, GitHub, and Render for hosting this Hacktoberfest Challenge! Check out &lt;a href="https://whichmodel.onrender.com/" rel="noopener noreferrer"&gt;WhichModel?&lt;/a&gt; and test your own prompts against open AI.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
