<?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>Forem: omkar</title>
    <description>The latest articles on Forem by omkar (@omkar598).</description>
    <link>https://forem.com/omkar598</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3501868%2Fa848b963-cc42-48fb-b7b7-0dbc8a9dd98f.png</url>
      <title>Forem: omkar</title>
      <link>https://forem.com/omkar598</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/omkar598"/>
    <language>en</language>
    <item>
      <title>Building NagarDrishti: A Live AI Agent for Road Safety in India</title>
      <dc:creator>omkar</dc:creator>
      <pubDate>Mon, 16 Mar 2026 23:44:21 +0000</pubDate>
      <link>https://forem.com/omkar598/building-nagardrishti-a-live-ai-agent-for-road-safety-in-india-31pk</link>
      <guid>https://forem.com/omkar598/building-nagardrishti-a-live-ai-agent-for-road-safety-in-india-31pk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; This blog post was created for the purposes of entering the &lt;a href="https://geminiliveagentchallenge.devpost.com/" rel="noopener noreferrer"&gt;Gemini Live Agent Challenge&lt;/a&gt; hackathon. #GeminiLiveAgentChallenge&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Problem: Monsoon Potholes Kill
&lt;/h2&gt;

&lt;p&gt;Pune, India — 7 million people, 2,273 kilometers of roads. During monsoon season, potholes and waterlogging cause hundreds of accidents every year. In October 2025, the Bombay High Court mandated that &lt;strong&gt;every pothole must be repaired within 48 hours&lt;/strong&gt; after multiple fatalities, with personal liability on senior officials for delays.&lt;/p&gt;

&lt;p&gt;Yet citizens have no efficient way to report hazards, and municipal officers lack real-time situational awareness.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: NagarDrishti (City Vision)
&lt;/h2&gt;

&lt;p&gt;We built &lt;strong&gt;NagarDrishti&lt;/strong&gt; — an AI-powered platform where citizens report road hazards through &lt;strong&gt;video or natural voice conversation&lt;/strong&gt;, and municipal officers manage them through an &lt;strong&gt;intelligent dashboard with AI chat capabilities&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feg9cdwwjg2swpxoamf9t.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%2Feg9cdwwjg2swpxoamf9t.png" alt="Architecture"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Live Agent: Commute Mode
&lt;/h2&gt;

&lt;p&gt;The heart of NagarDrishti is &lt;strong&gt;Commute Mode&lt;/strong&gt; — a hands-free, always-listening voice agent powered by &lt;strong&gt;Gemini Live API&lt;/strong&gt;.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tap once&lt;/strong&gt; to activate Commute Mode while driving&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speak naturally&lt;/strong&gt; — &lt;em&gt;"There's a big pothole ahead"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI responds instantly&lt;/strong&gt; via audio — &lt;em&gt;"Got it. Pothole logged. Stay safe."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Report created&lt;/strong&gt; with GPS, severity, and jurisdiction — all without touching your phone&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What Makes It "Live"
&lt;/h3&gt;

&lt;p&gt;This isn't a chatbot. It's a &lt;strong&gt;real-time AI agent&lt;/strong&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bidirectional audio streaming&lt;/strong&gt; via WebSocket (not turn-based text)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice Activity Detection&lt;/strong&gt; tuned for noisy traffic (800ms silence threshold)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Function calling during live audio&lt;/strong&gt; — creates database records while you speak&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interruptible&lt;/strong&gt; — you can speak mid-response, agent handles gracefully&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context-aware&lt;/strong&gt; — knows your GPS, nearby hazards, previous reports this session&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multilingual&lt;/strong&gt; — English, Hindi, Marathi system prompts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Response latency: 2–4 seconds&lt;/strong&gt; from speech to AI audio reply.&lt;/p&gt;




&lt;h2&gt;
  
  
  The AI Pipeline: 5 Steps in &amp;lt;15 Seconds
&lt;/h2&gt;

&lt;p&gt;When a citizen submits a video report, the AI pipeline processes it automatically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Classification&lt;/strong&gt; — Gemini Vision analyzes video frames → hazard type + severity (1–5)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jurisdiction Routing&lt;/strong&gt; — GPS-based routing to PMC/PCMC/PMRDA/Cantonment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deduplication&lt;/strong&gt; — BigQuery spatial query (20m radius) + Gemini LLM similarity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weather Intelligence&lt;/strong&gt; — Open-Meteo 48h rain forecast → severity multiplier (1.0×–2.0×)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dimension Estimation&lt;/strong&gt; — Gemini Vision estimates length/width/depth + repair cost&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; Verified report in BigQuery, ready for officer action.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Dashboard: AI Chat for Officers
&lt;/h2&gt;

&lt;p&gt;Municipal officers use the &lt;strong&gt;PMC Dashboard&lt;/strong&gt; — a Next.js web app with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live heatmap&lt;/strong&gt; with severity-colored dots (Mapbox)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Chat&lt;/strong&gt; powered by Gemini with &lt;strong&gt;11 BigQuery function-calling tools&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent-as-tool pattern&lt;/strong&gt; — &lt;code&gt;generate_ward_report&lt;/code&gt; is a sub-agent that queries BigQuery + Gemini to produce structured ward reports on demand&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example Queries
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Officer:&lt;/strong&gt; "Which areas have the most critical hazards?"&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI:&lt;/strong&gt; &lt;em&gt;(queries BigQuery)&lt;/em&gt; "Dapodi ward has 12 severity-4 potholes, Baner has 8..."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Officer:&lt;/strong&gt; "Generate report for ward 15"&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AI:&lt;/strong&gt; &lt;em&gt;(invokes sub-agent)&lt;/em&gt; "Ward 15 Report: 23 active hazards, 18 overdue, top type: waterlogging..."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Real Data, Real Roads
&lt;/h2&gt;

&lt;p&gt;Every report in the system is from &lt;strong&gt;actual road hazards in Pune&lt;/strong&gt; — no synthetic or mock data.&lt;/p&gt;

&lt;p&gt;Our team physically traveled across Pune on bikes to collect &lt;strong&gt;24+ real field reports&lt;/strong&gt; from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PCMC:&lt;/strong&gt; Dapodi, Sangvi, Pimple Saudagar, Chinchwad&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PMC:&lt;/strong&gt; Aundh, Baner, Kothrud, Pashan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We drove through these areas and recorded hazards using both video capture and Commute Mode voice reporting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Technical Highlights
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Google Cloud Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Run&lt;/strong&gt; — FastAPI backend + Next.js frontend (asia-south1)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BigQuery&lt;/strong&gt; — Hazard reports, users, verifications (45 reports currently)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Storage&lt;/strong&gt; — Video evidence, thumbnails (nagardrishti-media bucket)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terraform&lt;/strong&gt; — Infrastructure-as-Code for all GCP resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Gemini Models
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3 Flash&lt;/strong&gt; (&lt;code&gt;gemini-3-flash-preview&lt;/code&gt;) — Vision + Text classification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 2.5 Flash Native Audio&lt;/strong&gt; (&lt;code&gt;gemini-2.5-flash-native-audio-preview-12-2025&lt;/code&gt;) — Live API audio streaming&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mobile App
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flutter&lt;/strong&gt; (Android) with Riverpod state management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Features:&lt;/strong&gt; Video capture (10s auto-stop), Commute Mode, heatmap, leaderboard, proximity alerts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gamification:&lt;/strong&gt; Points system (+10 report, +5 verify, +2 endorse) with tier progression (Bronze → Diamond)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Challenges We Solved
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Gemini Live API Latency
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Initial voice response took 10–15 seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Tuned VAD parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;silence_duration&lt;/code&gt;: 1800ms → &lt;strong&gt;800ms&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;prefix_padding&lt;/code&gt;: &lt;strong&gt;300ms&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Disabled dynamic thinking in Live API config&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; 2–4 second response latency.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Duplicate Detection at Scale
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Simple distance-based matching caused false positives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Combined BigQuery spatial query (20m radius) + Gemini LLM comparison of hazard descriptions + hazard type matching.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; Precision deduplication with community confirmation boost.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Jurisdiction Routing Accuracy
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Problem:&lt;/strong&gt; GPS coordinates near municipal boundaries gave incorrect assignments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Deterministic polygon-based routing instead of AI classification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; 100% accurate jurisdiction assignment.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemini Live API's native audio capabilities&lt;/strong&gt; are remarkably good at understanding Indian English accents and Hindi/Marathi mixed speech&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice Activity Detection tuning&lt;/strong&gt; is critical for real-world driving conditions — default settings are designed for quiet environments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BigQuery's serverless architecture&lt;/strong&gt; handles the read-heavy pattern of a dashboard perfectly — no infrastructure management needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real field data collection&lt;/strong&gt; is irreplaceable — AI models behave very differently with actual monsoon road conditions vs. clean test videos&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Dashboard:&lt;/strong&gt; &lt;a href="https://nagardrishti-frontend-692377565465.asia-south1.run.app" rel="noopener noreferrer"&gt;https://nagardrishti-frontend-692377565465.asia-south1.run.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo Video:&lt;/strong&gt; &lt;a href="https://youtu.be/Rn7eJxBdWe4" rel="noopener noreferrer"&gt;https://youtu.be/Rn7eJxBdWe4&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile APK:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/1xkoClmcbUo0uvFUaYITg4GTM5RkXIZMj/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1xkoClmcbUo0uvFUaYITg4GTM5RkXIZMj/view?usp=sharing&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Demo Credentials
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;PMC Dashboard (Web):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email: &lt;code&gt;admin@pmc.gov.in&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Password: &lt;code&gt;pmc2026&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mobile App:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email: &lt;code&gt;test@email.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Password: &lt;code&gt;test123&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;FCM push notifications when report status changes&lt;/li&gt;
&lt;li&gt;Multi-city expansion beyond Pune (Mumbai, Nagpur)&lt;/li&gt;
&lt;li&gt;Integration with PMC's existing grievance portal (SARATHI)&lt;/li&gt;
&lt;li&gt;Community verification rewards with blockchain-anchored proof&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Built With
&lt;/h2&gt;

&lt;p&gt;Python • FastAPI • Flutter • Next.js • TypeScript • TailwindCSS • Google Gemini API • Gemini Live API • Google GenAI SDK • Google Cloud Run • Google BigQuery • Google Cloud Storage • Terraform • Docker • Mapbox&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;This project was built for the &lt;a href="https://geminiliveagentchallenge.devpost.com/" rel="noopener noreferrer"&gt;Gemini Live Agent Challenge&lt;/a&gt; hackathon. #GeminiLiveAgentChallenge&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Project Category:&lt;/strong&gt; Live Agents&lt;/p&gt;

</description>
      <category>geminiliveagentchallenge</category>
    </item>
    <item>
      <title>Why Elasticsearch Is the Best Memory for AI Agents: A Deep Dive into Agentic Architecture</title>
      <dc:creator>omkar</dc:creator>
      <pubDate>Fri, 27 Feb 2026 15:59:13 +0000</pubDate>
      <link>https://forem.com/omkar598/why-elasticsearch-is-the-best-memory-for-ai-agents-a-deep-dive-into-agentic-architecture-137l</link>
      <guid>https://forem.com/omkar598/why-elasticsearch-is-the-best-memory-for-ai-agents-a-deep-dive-into-agentic-architecture-137l</guid>
      <description>&lt;p&gt;&lt;strong&gt;This blog post was submitted to the Elastic Blogathon Contest and is eligible to win a prize.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I've been researching how developers are building AI agents in 2026 — not chatbots, not search bars, but autonomous systems that investigate, reason, and act. In the emerging discipline of **context engineering&lt;/em&gt;* — the defining paradigm of AI development in 2026, focused on giving agents the right information at the right time — one pattern keeps emerging: the best agents don't just search. They &lt;strong&gt;remember&lt;/strong&gt;.*&lt;/p&gt;

&lt;p&gt;&lt;em&gt;And the memory layer they're choosing? Elasticsearch.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Elastic Stack for Agentic AI
&lt;/h2&gt;

&lt;p&gt;After months of hands-on research and building agentic architectures, I've identified the Elastic features that matter most for production AI agents in 2026:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwi50l96mk4sc1xhu0icu.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%2Fwi50l96mk4sc1xhu0icu.png" alt="The Elastic AI Agent Stack — the key features that power production-ready agentic architectures"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Elastic Feature&lt;/th&gt;
&lt;th&gt;Role in Agent Architecture&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Agent Builder&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Core reasoning orchestration — the brain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Temporal analytics — episodic memory&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Semantic/Vector Search&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Meaning retrieval — semantic memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Elastic Workflows&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automated actions — procedural memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ELSER/ELSER-2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Zero-config embeddings via Inference Service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP Server&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tool integration for external agent frameworks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hybrid Search (BM25 + kNN + RRF)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Best-of-both-worlds retrieval&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The combination that matters most? &lt;strong&gt;Agent Builder + ES|QL + vector search&lt;/strong&gt; — together they transform Elasticsearch from a database into an &lt;strong&gt;agent brain&lt;/strong&gt;. Not a tool that finds documents, but a system that gives AI agents institutional knowledge, contextual reasoning, and the ability to act.&lt;/p&gt;

&lt;p&gt;This blog explores three memory layers that define production-ready agentic architectures, the trust patterns that separate toy demos from deployable systems, and why Elasticsearch's convergent platform gives it an edge that no standalone vector database can match&lt;/p&gt;




&lt;h2&gt;
  
  
  The Three Memory Layers of an Elasticsearch Agent Brain
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ixdk9bawmr6799l6zhx.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%2F4ixdk9bawmr6799l6zhx.png" alt="The 3 Memory Layers of an Elasticsearch Agent Brain — Episodic (ES|QL), Semantic (ELSER), and Procedural (Workflows)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The most sophisticated agentic systems aren't just storing vectors. They're building &lt;strong&gt;layered memory systems&lt;/strong&gt; — eerily similar to how the human brain organizes knowledge. Here's the pattern:&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 1: Episodic Memory — "What Happened"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Elastic Feature: ES|QL + Time-Series Indices&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Episodic memory stores specific events with temporal context — &lt;em&gt;what&lt;/em&gt; happened, &lt;em&gt;when&lt;/em&gt;, and &lt;em&gt;in what sequence&lt;/em&gt;. In Elasticsearch, this maps perfectly to time-series indices queried via ES|QL.&lt;/p&gt;

&lt;p&gt;Consider a self-healing infrastructure agent. Its anomaly detection component uses parameterized ES|QL to detect anomalies against rolling baselines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;metrics&lt;/span&gt;&lt;span class="o"&gt;-*&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="nb"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;NOW&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt; &lt;span class="n"&gt;minutes&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;STATS&lt;/span&gt; &lt;span class="n"&gt;avg_cpu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;system&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cpu&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;percent&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;avg_memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;AVG&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;system&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;used&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pct&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="k"&gt;host&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;avg_cpu&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;85&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;avg_memory&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives the agent &lt;strong&gt;temporal awareness&lt;/strong&gt; — it doesn't just know something is wrong, it knows &lt;em&gt;how&lt;/em&gt; the system's behavior has changed over time. It can detect that CPU usage has been climbing steadily for the past hour, not just that it's currently high.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; ES|QL transforms agents from stateless chatbots into operationally aware tools that reason over real data. The consistent insight from my research? &lt;strong&gt;ES|QL + LLM reasoning = grounded intelligence.&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  🔬 Working Demo: ES|QL Aggregation on Live Elastic Cloud
&lt;/h4&gt;

&lt;p&gt;I built a working demo on Elastic Cloud Serverless to demonstrate this. Here's a real ES|QL query aggregating incident counts and resolution times by service:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqakl8zaj2oize68n5kap.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%2Fqakl8zaj2oize68n5kap.png" alt="ES|QL query running on Elastic Cloud Serverless — aggregating incident counts and average resolution time by service"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 2: Semantic Memory — "What Things Mean"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Elastic Feature: ELSER / Vector Search / &lt;code&gt;semantic_text&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Semantic memory stores &lt;em&gt;meaning&lt;/em&gt; — not exact words, but concepts and relationships. This is where Elasticsearch's vector capabilities shine, and where the most powerful agent capabilities emerge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "Zero Keywords" Moment:&lt;/strong&gt; Imagine an SRE agent that needs to match the production error &lt;code&gt;"NullPointerException in PaymentProcessor"&lt;/code&gt; to a Git commit message &lt;code&gt;"Removed null safety checks"&lt;/code&gt;. There is &lt;strong&gt;zero keyword overlap&lt;/strong&gt; between these two strings. Yet ELSER finds the connection because it understands &lt;em&gt;meaning&lt;/em&gt;, not words.&lt;/p&gt;

&lt;p&gt;Setting this up requires just a few lines in your index mapping:&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="err"&gt;PUT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/incidents&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;"mappings"&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;"properties"&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;"description"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"semantic_text"&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;"root_cause"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"semantic_text"&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;"severity"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"keyword"&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;"timestamp"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"date"&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;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;&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%2Fo23w5v8616n6ztnutx0k.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%2Fo23w5v8616n6ztnutx0k.png" alt="Creating a semantic_text index mapping on Elastic Cloud — acknowledged: true"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it. On Elastic Cloud Serverless, &lt;code&gt;semantic_text&lt;/code&gt; defaults to the &lt;code&gt;.elser-2-elastic&lt;/code&gt; inference endpoint — Elastic's hosted ELSER model via the Elastic Inference Service (EIS). Embedding generation, text chunking, and storage are handled automatically at ingest time. No separate pipeline, no external embedding service, no vector dimension configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to use a different model?&lt;/strong&gt; Elastic's Inference Endpoints API lets you swap in Cohere, OpenAI, or the multilingual E5 model with a single &lt;code&gt;inference_id&lt;/code&gt; parameter:&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="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;First,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;create&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;custom&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;inference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;endpoint&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;PUT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;_inference/text_embedding/my-cohere-endpoint&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;"service"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cohere"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"service_settings"&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;"api_key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{COHERE_API_KEY}}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"model_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"embed-english-v3.0"&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="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Then&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;reference&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;mapping&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;PUT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/incidents-multilingual&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;"mappings"&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;"properties"&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;"description"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"semantic_text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"inference_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-cohere-endpoint"&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;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;This &lt;strong&gt;pluggable inference architecture&lt;/strong&gt; is a massive advantage — you can switch embedding models without rewriting application code, test ELSER vs. Cohere vs. E5 on the same data, or use multilingual models for international deployments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ingestion at Scale:&lt;/strong&gt; Elasticsearch's &lt;strong&gt;Open Web Crawler&lt;/strong&gt; can feed directly into &lt;code&gt;semantic_text&lt;/code&gt; indices, automatically generating embeddings at ingest. This means an agent can continuously crawl and semantically index an entire corporate knowledge base — docs, wikis, runbooks — without any custom ETL pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scaling the Memory Layer:&lt;/strong&gt; At enterprise scale, agent memory can grow to billions of vectors. Elasticsearch addresses this with &lt;strong&gt;Better Binary Quantization (BBQ)&lt;/strong&gt; — reducing float32 vectors to bits with a &lt;strong&gt;95% memory reduction&lt;/strong&gt; while preserving ranking quality (GA in ES 9.1). The newer &lt;strong&gt;DiskBBQ&lt;/strong&gt; algorithm (ES 9.2) eliminates the need to keep entire vector indexes in RAM, sustaining ~15ms query latencies at just 100MB of memory. This means your agent's semantic memory can scale to petabytes without proportionally scaling infrastructure costs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9mnf1h56rmltcs6civv8.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%2F9mnf1h56rmltcs6civv8.png" alt="BBQ: Better Binary Quantization — 95% memory reduction with DiskBBQ sustaining 15ms latency at 100MB RAM"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  🔬 Working Demo: Semantic Search with Zero Keyword Overlap
&lt;/h4&gt;

&lt;p&gt;I tested this on my Elastic Cloud project. I queried &lt;code&gt;"null pointer exception in payment processing"&lt;/code&gt; against the &lt;code&gt;root_cause&lt;/code&gt; field. The top result? &lt;code&gt;"Removed null safety checks in payment module during refactoring"&lt;/code&gt; with a score of &lt;strong&gt;13.44&lt;/strong&gt; — matched purely by meaning, not keywords:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffeipu3m6736qaab5ogl7.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%2Ffeipu3m6736qaab5ogl7.png" alt="Semantic search results on Elastic Cloud — ELSER matched "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What makes this even more powerful is the &lt;strong&gt;dual memory architecture&lt;/strong&gt;. The best agentic systems I've studied implement a pattern inspired by the actual hippocampus:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Episodic layer&lt;/strong&gt;: Recent operational events with a 90-day ILM expiry policy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic layer&lt;/strong&gt;: Persistent consolidated knowledge, distilled from episodes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A background consolidation loop periodically converts episodic memories into semantic ones. The agent uses ES|QL joins for "domain density scoring" — measuring how much verified experience exists per topic. When density is too low, the agent genuinely refuses to answer: &lt;em&gt;"I don't have enough evidence on this topic."&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Layer 3: Procedural Memory — "How to Act"
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Elastic Feature: Elastic Workflows + Agent Builder&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Procedural memory stores &lt;em&gt;how to do things&lt;/em&gt; — learned routines, proven playbooks, tested remediation steps. In Elasticsearch, this maps to Elastic Workflows (YAML-defined automation, currently in technical preview) triggered by Agent Builder reasoning.&lt;/p&gt;

&lt;p&gt;Here's the architecture pattern I've seen work best for incident response agents — chaining everything together with a confidence gate (simplified for illustration):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Workflow receives webhook&lt;/strong&gt; (alert fires)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent runs 3 ES|QL queries&lt;/strong&gt; (regional errors, latency anomalies, error fingerprinting)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent retrieves SOP&lt;/strong&gt; via hybrid search (BM25 + ELSER)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent produces &lt;code&gt;RemediationPlan&lt;/code&gt;&lt;/strong&gt; with deterministic confidence score&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety gate evaluates confidence:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;steps&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;evaluate_confidence&lt;/span&gt;
    &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;condition&lt;/span&gt;
    &lt;span class="na"&gt;if&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;all&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;agent.confidence&lt;/span&gt;
          &lt;span class="na"&gt;gte&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.90&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;agent.thresholds_met&lt;/span&gt;
          &lt;span class="na"&gt;eq&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;then&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http_request&lt;/span&gt;
        &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{remediation_endpoint}}"&lt;/span&gt;
        &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;POST&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{agent.remediation_plan}}"&lt;/span&gt;
    &lt;span class="na"&gt;else&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;slack_message&lt;/span&gt;
        &lt;span class="na"&gt;channel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#incidents"&lt;/span&gt;
        &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;⚠️&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Confidence&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{agent.confidence}}&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;0.90.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Human&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;review&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;required."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The result:&lt;/strong&gt; Alert to fix in under 90 seconds. 100% Elastic-native — no LangChain, no external orchestration, no data leaving the cluster.&lt;/p&gt;

&lt;p&gt;Agent Builder also supports the &lt;strong&gt;Agent-to-Agent (A2A) protocol&lt;/strong&gt; — allowing your incident response agent to delegate tasks to specialized sub-agents (e.g., a "forensics agent" and a "remediation agent") that coordinate autonomously while sharing a unified Elasticsearch context. Combined with &lt;strong&gt;MCP&lt;/strong&gt; for external tool integration, this creates a fully interoperable multi-agent ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhpfz7lmig1gcs8q73o7.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%2Fuhpfz7lmig1gcs8q73o7.png" alt="Multi-Agent Collaboration with A2A + MCP — Forensics, Orchestrator, and Remediation agents coordinate via A2A protocol while connecting to external tools via MCP"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Trust Problem — Why the Best Agents Refuse to Act
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgi3g3bai0o7p4vupcea.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%2Fpgi3g3bai0o7p4vupcea.png" alt="Evidence-Gated Agent Decision Flow — showing how agents use evidence gates and confidence scoring to decide whether to auto-remediate, escalate to human review, or refuse to act"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The #1 lesson from studying production agentic systems isn't about speed or accuracy. It's about &lt;strong&gt;trust&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The most production-ready systems all share one characteristic: they build in mechanisms for the agent to &lt;strong&gt;refuse&lt;/strong&gt; when it isn't confident enough. Here are the five trust patterns I've identified:&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 1: Evidence Gates
&lt;/h3&gt;

&lt;p&gt;Require &lt;strong&gt;≥2 independent citations from different indices&lt;/strong&gt; before taking any action. Use Reciprocal Rank Fusion (RRF) to combine BM25 lexical scores with kNN vector similarity scores into a single ranking. If you can't find two independent sources that corroborate an answer, stop.&lt;/p&gt;

&lt;p&gt;A more sophisticated approach uses &lt;strong&gt;intent-based query routing&lt;/strong&gt;: the agent classifies each query's intent before searching. Factual queries (e.g., "What is the SLA for service X?") are routed to BM25 for exact matches, while reasoning queries (e.g., "Why did latency spike?") prioritize vector similarity via the &lt;strong&gt;Linear Retriever&lt;/strong&gt; (GA in ES 8.18), which allows weighted score normalization between lexical and semantic signals. This adaptive fusion maximizes relevance for each question type — something no standalone vector DB offers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fapn93qkhzg100sj4krnz.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%2Fapn93qkhzg100sj4krnz.png" alt="Intent-Based Query Routing — factual queries route to BM25, reasoning queries route to vector search, merged via Linear Retriever weighted normalization"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"What if an AI system refused to act unless it had independent evidence?"&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 2: Adversarial Self-Review
&lt;/h3&gt;

&lt;p&gt;Run a multi-agent swarm where one agent's &lt;em&gt;entire job&lt;/em&gt; is to &lt;strong&gt;disprove&lt;/strong&gt; the findings of the others. It searches for exception patterns, checks IOC databases, cross-references asset inventory. Only when it &lt;em&gt;cannot&lt;/em&gt; explain a finding does the conclusion stand.&lt;/p&gt;

&lt;p&gt;In cybersecurity threat hunting, this means having a "devil's advocate" agent that adversarially challenges every finding. In healthcare applications, it means a verification agent that challenges every clinical recommendation. As one architect noted: &lt;em&gt;"A review where nothing is questioned is a rubber stamp, not a safeguard."&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 3: The "No Query, No Number" Policy
&lt;/h3&gt;

&lt;p&gt;Enforce a radical rule: every number presented to the user must come from an ES|QL aggregation (&lt;code&gt;SUM&lt;/code&gt;, &lt;code&gt;COUNT_DISTINCT&lt;/code&gt;, &lt;code&gt;AVG&lt;/code&gt;). If there are zero records, the agent returns no answer — never a fabricated one. I've seen this validated across three different LLMs with &lt;strong&gt;zero hallucinations&lt;/strong&gt; in testing.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Confidence without data is a well-dressed lie."&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 4: CONFIRM Gates
&lt;/h3&gt;

&lt;p&gt;Implement explicit human confirmation for privileged actions (closing incidents, reopening tickets) in compliance-sensitive environments. The MCP server acts as the single source of truth for incident lifecycle state.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pattern 5: Investigation ≠ Decision-Making
&lt;/h3&gt;

&lt;p&gt;The best architectural principle I've found: &lt;em&gt;"Investigation (AI) ≠ Decision-making (workflow)."&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;The agent investigates — searching logs, correlating signals, matching patterns. But priority classification, severity assignment, and team routing are handled by &lt;strong&gt;deterministic Elastic Workflows with YAML &lt;code&gt;if&lt;/code&gt; steps and Liquid templates&lt;/strong&gt; — never by the LLM.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"LLMs should never decide severity."&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Elasticsearch Advantage — Why Not a Standalone Vector DB?
&lt;/h2&gt;

&lt;p&gt;If you only need vector search, any vector database will do. But real-world agentic systems &lt;em&gt;never&lt;/em&gt; only need vector search. They need:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fis31xfg572dl7fucxpc3.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%2Fis31xfg572dl7fucxpc3.png" alt="Elasticsearch vs Standalone Vector Databases — Elasticsearch provides hybrid search, ES|QL analytics, agent builder, and ELSER all in one platform"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What Agents Need&lt;/th&gt;
&lt;th&gt;Elasticsearch&lt;/th&gt;
&lt;th&gt;Standalone Vector DB&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Vector + keyword + structured&lt;/strong&gt; in one query&lt;/td&gt;
&lt;td&gt;✅ Hybrid Search (BM25 + kNN + RRF + Linear Retriever)&lt;/td&gt;
&lt;td&gt;❌ Separate systems&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Time-series analytics&lt;/strong&gt; over operational data&lt;/td&gt;
&lt;td&gt;✅ ES\&lt;/td&gt;
&lt;td&gt;QL: &lt;code&gt;BUCKET&lt;/code&gt;, &lt;code&gt;STATS&lt;/code&gt;, date math&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Automated actions&lt;/strong&gt; triggered by agent reasoning&lt;/td&gt;
&lt;td&gt;✅ Elastic Workflows (YAML)&lt;/td&gt;
&lt;td&gt;❌ Custom orchestration code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Built-in agent framework&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Agent Builder (GA Jan 2026)&lt;/td&gt;
&lt;td&gt;❌ Requires LangChain/LlamaIndex wrapper&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Semantic search with zero config&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ ELSER &lt;code&gt;semantic_text&lt;/code&gt; + Inference Endpoints&lt;/td&gt;
&lt;td&gt;❌ Bring your own embedding pipeline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Geospatial + vector&lt;/strong&gt; in one index&lt;/td&gt;
&lt;td&gt;✅ &lt;code&gt;geo_point&lt;/code&gt; + &lt;code&gt;dense_vector&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;❌ Separate stores&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IDE integration &amp;amp; multi-agent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ MCP + Agent-to-Agent (A2A) protocol&lt;/td&gt;
&lt;td&gt;❌ API-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Lifecycle management&lt;/strong&gt; (ILM/retention)&lt;/td&gt;
&lt;td&gt;✅ Native ILM policies&lt;/td&gt;
&lt;td&gt;❌ Manual TTL management&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The key insight: &lt;strong&gt;ES|QL is the #1 differentiator&lt;/strong&gt;. It lets agents investigate data with time-window correlations, aggregation pipelines, and structured analytics — capabilities that transform a chatbot into an operational tool. No standalone vector DB offers this.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Practitioners Are Saying
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"We kept overcomplicating the architecture — a single well-crafted Elasticsearch Tool definition could do it better, faster, and with zero hallucinations."&lt;/em&gt; — a common realization among practitioners&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Simplicity wins — we removed an entire tool from our agent, and it became simpler and just as functional."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"The power of an AI agent lies not in prompt complexity, but in the quality of retrieved context."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Elasticsearch is far more than a search engine — it is a high-performance Analytical Memory Store."&lt;/em&gt; — a sentiment echoed across the developer community&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Five Patterns You Should Steal
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl5sln93n4xalmbej5g72.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%2Fl5sln93n4xalmbej5g72.png" alt="5 Patterns That Make AI Agents Production-Ready — from neuroscience-inspired filtering to adversarial agent debate"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me close with five creative patterns that go beyond standard RAG tutorials and show what's possible when you treat Elasticsearch as an agent brain.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. 🧠 Neuroscience-Inspired Cognitive Filtering
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Result: 91% noise reduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most agents index &lt;em&gt;everything&lt;/em&gt;. A smarter approach applies neuroscience research to filter signals before they reach Elasticsearch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Habituation Filter&lt;/strong&gt; (Thompson &amp;amp; Spencer, 1966): Repeated similar events raise the threshold for alerting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Circadian Rhythm&lt;/strong&gt; (Borbely, 1982): Time-of-day vigilance adjustment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Salience Network&lt;/strong&gt; (Corbetta &amp;amp; Shulman, 2002): Only novel, significant events pass through&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a 48-hour live test, 2,200 sensor events were reduced to 173 meaningful alerts. Each indexed document carries cognitive metadata (habituation state, circadian phase, priority score) that improves downstream search relevance.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. 🔍 Semantic Commit Matching
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Result: 3 hours → 3 minutes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When a production error like &lt;code&gt;"NullPointerException in PaymentProcessor"&lt;/code&gt; occurs, use ELSER &lt;code&gt;semantic_text&lt;/code&gt; fields to search recent Git commits. ELSER matched the error to the commit &lt;code&gt;"Removed null safety checks"&lt;/code&gt; with &lt;strong&gt;zero shared keywords&lt;/strong&gt; — as we demonstrated in our live demo above. Traditional keyword search would have found nothing. The agent can then automatically create a revert PR via GitHub Actions and notify the team on Slack.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. 🏥 Geographic Impossibility Detection
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Result: $195K/year savings, lives saved&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In healthcare systems with distributed facilities, duplicate patient records waste resources and compromise care. An agent using ES|QL can detect "geographic impossibility" — a patient can't realistically be tested at two distant facilities on the same day. From 1,010 records, it found 131 duplicates including 5 same-day multi-facility cases, all in under 10 seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. 🛡️ Active Cyber Deception
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Result: 258 days → 15 seconds&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of passively alerting on threats, build an active defense system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Elastic Watcher monitors live logs for intrusion patterns&lt;/li&gt;
&lt;li&gt;ES|QL runs forensics to isolate attacker IP and payload&lt;/li&gt;
&lt;li&gt;ELSER searches source code semantically to find the exact vulnerable file&lt;/li&gt;
&lt;li&gt;Nginx reroutes the attacker into a Docker honeypot (fake environment)&lt;/li&gt;
&lt;li&gt;Cryptographic patch is applied with human approval&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The average breach lifecycle drops from 258 days to 15 seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. ⚖️ Adversarial Agent Debate
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Innovation: Agents argue with each other&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Build four specialized agents that work in a structured debate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SCANNER&lt;/strong&gt;: Finds initial compromise signals&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TRACER&lt;/strong&gt;: Traces lateral movement and privilege escalation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ADVOCATE&lt;/strong&gt; (devil's advocate): Actively tries to &lt;strong&gt;disprove&lt;/strong&gt; every finding using exception patterns and asset inventory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;COMMANDER&lt;/strong&gt;: Resolves disagreements, assigns final confidence scores&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the ADVOCATE cannot explain a finding, the threat stands. When it &lt;em&gt;can&lt;/em&gt; explain it (e.g., "that was a scheduled admin action"), a false positive is prevented. This mirrors how real investigative teams work — and it runs entirely on Elasticsearch Agent Builder.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Vector Is Just the Beginning
&lt;/h2&gt;

&lt;p&gt;Here's the mental model shift:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vectors are how you &lt;em&gt;represent&lt;/em&gt; knowledge. Memory is how you &lt;em&gt;use&lt;/em&gt; it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A vector tells you that two documents are semantically similar. But memory tells you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;When&lt;/em&gt; something last happened (episodic, via ES|QL time-series)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;What&lt;/em&gt; it means in context (semantic, via ELSER)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;How&lt;/em&gt; to respond (procedural, via Elastic Workflows)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Whether&lt;/em&gt; to trust the response (evidence gates, adversarial review, CONFIRM gates)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Elasticsearch in 2026 isn't just a vector database. It's the &lt;strong&gt;memory layer&lt;/strong&gt; — the system that gives AI agents the ability to investigate, reason, question their own conclusions, refuse to act without evidence, and learn from every interaction.&lt;/p&gt;

&lt;p&gt;The best agents don't just search. They &lt;strong&gt;remember&lt;/strong&gt;.&lt;/p&gt;




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

&lt;p&gt;See the complete Elasticsearch memory layer in action — live ES|QL queries, ELSER semantic search matching "null pointer exception" to "removed null safety checks" with zero keyword overlap, and the full agentic architecture walkthrough:&lt;/p&gt;

&lt;p&gt;

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


&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ready to build? Start with &lt;a href="https://www.elastic.co/docs/explore-analyze/ai-features/elastic-agent-builder" rel="noopener noreferrer"&gt;Elastic Agent Builder&lt;/a&gt; and explore &lt;a href="https://www.elastic.co/elasticsearch/vector-database" rel="noopener noreferrer"&gt;Elastic's vector search capabilities&lt;/a&gt; to create your own agentic memory layer.&lt;/em&gt;&lt;/p&gt;







&lt;p&gt;&lt;em&gt;Disclaimer: This Blog was submitted as part of the Elastic Blogathon.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; &lt;code&gt;#ElasticBlogathon&lt;/code&gt; &lt;code&gt;#VectorizedThinking&lt;/code&gt; &lt;code&gt;#AgentBuilder&lt;/code&gt; &lt;code&gt;#ELSER&lt;/code&gt; &lt;code&gt;#ESQL&lt;/code&gt; &lt;code&gt;#RAG&lt;/code&gt; &lt;code&gt;#AgenticAI&lt;/code&gt; &lt;code&gt;#VectorSearch&lt;/code&gt; &lt;code&gt;#SemanticSearch&lt;/code&gt; &lt;code&gt;#VectorDB&lt;/code&gt; &lt;code&gt;#VectorSearchwithElastic&lt;/code&gt; &lt;code&gt;#ElasticWorkflows&lt;/code&gt;&lt;/p&gt;

</description>
      <category>elasticblogathon</category>
      <category>vectorizedthinking</category>
      <category>agenticai</category>
      <category>vectorsearch</category>
    </item>
    <item>
      <title>ClimateIQ AI – 11 Mux Features Power Climate Action for 2B+ Users</title>
      <dc:creator>omkar</dc:creator>
      <pubDate>Mon, 05 Jan 2026 07:35:59 +0000</pubDate>
      <link>https://forem.com/omkar598/climateiq-ai-11-mux-features-power-climate-action-for-2b-users-3dh4</link>
      <guid>https://forem.com/omkar598/climateiq-ai-11-mux-features-power-climate-action-for-2b-users-3dh4</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/mux-2025-12-03"&gt;DEV's Worldwide Show and Tell Challenge Presented by Mux&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;ClimateIQ AI&lt;/strong&gt; is a production-grade climate intelligence platform transforming satellite data into actionable insights for farmers, cities, and communities worldwide.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌍 The Full Platform (Beyond Video)
&lt;/h3&gt;

&lt;p&gt;ClimateIQ already has deep climate features:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module&lt;/th&gt;
&lt;th&gt;Features&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🌾 &lt;strong&gt;Smart Agriculture&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Multi-agent AI Crop Advisor (SoilAgent + WeatherAgent + MarketAgent), Carbon Footprint Calculator (IPCC emission factors), Solar Irrigation Planner (NREL API)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🗺️ &lt;strong&gt;Climate Map&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;6 satellite layers (NASA FIRMS fires, AQI, temperature, precipitation, NREL solar, NDVI vegetation), AI Climate Alert System (heatwave/flood/AQI warnings)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🏙️ &lt;strong&gt;Urban Sustainability&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Gemini Vision Waste Scanner, Smart Home Tracker (water/electricity), Solar ROI Calculator, Eco-Advisor with weather-based tips&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📚 &lt;strong&gt;Climate Education&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Storyblok CMS learning modules, AI-generated quizzes, climate news feed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;♿ &lt;strong&gt;Accessibility&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Keyboard shortcuts, voice navigation, high contrast themes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Tech Stack:&lt;/strong&gt; Next.js 14, TypeScript, Supabase, Google Gemini AI, Mapbox, NASA FIRMS, NREL PVWatts, Planet API, SoilGrids&lt;/p&gt;




&lt;h3&gt;
  
  
  📹 NEW: Community Hub (Powered by Mux)
&lt;/h3&gt;

&lt;p&gt;The missing piece was &lt;strong&gt;community-generated content&lt;/strong&gt;. Rural communities couldn't share drought videos. Cities couldn't broadcast awareness campaigns. Climate educators needed multilingual reach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mux solved this with 11 integrated features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📹 &lt;strong&gt;Climate Stories&lt;/strong&gt; – Upload video testimonials with auto-generated captions&lt;/li&gt;
&lt;li&gt;🌍 &lt;strong&gt;Climate Live&lt;/strong&gt; – Low-latency streaming for real-time expert consultations&lt;/li&gt;
&lt;li&gt;🌐 &lt;strong&gt;AI Translation&lt;/strong&gt; – Captions in Hindi, Spanish, French for global reach&lt;/li&gt;
&lt;li&gt;🎙️ &lt;strong&gt;Audio Dubbing&lt;/strong&gt; – ElevenLabs voice cloning + Mux multi-track audio&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  My Pitch Video
&lt;/h2&gt;

&lt;p&gt;

&lt;iframe src="https://player.mux.com/HJ900Yefgvpxg11AhdOuWd2ALPlcrfECCPxSwIHFyyhM" width="710" height="399"&gt;
&lt;/iframe&gt;



&lt;/p&gt;




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

&lt;p&gt;🔗 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://climate-iq-git-feature-omkardongres-projects.vercel.app/" rel="noopener noreferrer"&gt;https://climate-iq-git-feature-omkardongres-projects.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📦 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/omkardongre/climate-iq/tree/feature" rel="noopener noreferrer"&gt;https://github.com/omkardongre/climate-iq/tree/feature&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test Credentials:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email: &lt;code&gt;test@gmail.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Password: &lt;code&gt;12345678&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🔓 Without Login:&lt;/strong&gt; View videos, watch with captions, switch dubbed audio tracks, watch live streams&lt;br&gt;&lt;br&gt;
&lt;strong&gt;🔐 With Login:&lt;/strong&gt; Upload videos, generate chapters, translate captions, dub audio, go live&lt;/p&gt;


&lt;h3&gt;
  
  
  How to Test Mux Features (All from the UI)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Upload Video:&lt;/strong&gt; Go to Community Hub → Click "Share Your Story" button → Select a video → Watch it upload with progress bar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Chapters:&lt;/strong&gt; After upload completes, click on your video → Click "Generate AI Chapters" button → See chapters appear below the player&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Translate Captions:&lt;/strong&gt; Click "Translate Captions" button → Select Hindi/Spanish from dropdown → After ~40 seconds, check the CC menu in the video player&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dub Audio:&lt;/strong&gt; Click "Dub Audio" button → Select language → Wait ~2 minutes → Check the Audio/Language menu in the player settings (gear icon)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Streaming:&lt;/strong&gt; Click "Go Live" button → Copy the RTMP URL and Stream Key → Use OBS or any streaming software to broadcast&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  The Story Behind It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Climate Data Gap:&lt;/strong&gt; Satellites collect terabytes of climate data daily. But farmers facing crop failures, cities battling pollution, and communities seeking education can't access it. ClimateIQ bridges this gap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Video Was Missing:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A community in India showing drought damage creates more impact than statistics&lt;/li&gt;
&lt;li&gt;Live broadcasts enable real-time expert consultations during crises&lt;/li&gt;
&lt;li&gt;2B+ potential users need content in their language&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why Mux:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We needed auto-captions for accessibility&lt;/li&gt;
&lt;li&gt;Low-latency for real-time consultations&lt;/li&gt;
&lt;li&gt;Multi-language support for global reach&lt;/li&gt;
&lt;li&gt;Production-ready infrastructure in days, not months&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Technical Highlights
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;11 Mux Features Integrated:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Mux Feature&lt;/th&gt;
&lt;th&gt;Implementation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@mux/mux-player-react&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All video playback with ClimateIQ theming&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;@mux/mux-uploader-react&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Direct uploads (no backend file handling)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Auto-Generated Captions&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;generated_subtitles&lt;/code&gt; in upload config&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Live Streaming API&lt;/td&gt;
&lt;td&gt;&lt;code&gt;muxVideo.liveStreams.create()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Low Latency&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;reduced_latency: true&lt;/code&gt; for live broadcasts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Image API&lt;/td&gt;
&lt;td&gt;Thumbnails + animated GIFs on hover&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;@mux/ai&lt;/code&gt; Chapters&lt;/td&gt;
&lt;td&gt;Official SDK for chapter generation via Gemini&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Text Tracks API&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;assets.createTrack()&lt;/code&gt; for translated captions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;Audio Tracks API&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;assets.createTrack({ type: 'audio' })&lt;/code&gt; for dubs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Master Access&lt;/td&gt;
&lt;td&gt;Temporary signed URLs for AI processing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Mux Data Analytics&lt;/td&gt;
&lt;td&gt;Custom dimensions: &lt;code&gt;climate_topic&lt;/code&gt;, &lt;code&gt;user_region&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Use of Mux (Additional Prize Category)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9b90vazx7kpb4q8qx487.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%2F9b90vazx7kpb4q8qx487.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mux isn't just hosting videos – it's the backbone of our entire community feature.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  🎬 Beyond Basic Hosting
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. AI-Powered Chapters (@mux/ai SDK)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;generateChapters&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;@mux/ai/workflows&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chapters&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;generateChapters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;assetId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;en&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;provider&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&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Climate videos get auto-chapters like "Impact on Agriculture" or "Mitigation Strategies" – helping users navigate long content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Multi-Track Audio Dubbing&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;muxVideo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;assets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createTrack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;assetId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;audio&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;supabaseAudioUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;language_code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hi&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;AI Dubbed (hi)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ElevenLabs generates dubbed audio → we add it to the Mux asset → users switch languages natively in the player.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Low-Latency Live Streaming&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;muxVideo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;liveStreams&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;reduced_latency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;reconnect_window&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;generated_subtitles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;language_code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;en&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;English (auto)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Users broadcast with low-latency. Experts provide real-time advice during live sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Auto-Captions + AI Translation Pipeline&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload with &lt;code&gt;generated_subtitles&lt;/code&gt; → Mux generates English captions&lt;/li&gt;
&lt;li&gt;Fetch VTT from &lt;code&gt;https://stream.mux.com/{playbackId}/text/{trackId}.vtt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Gemini translates to Hindi/Spanish&lt;/li&gt;
&lt;li&gt;Upload to Supabase + add via &lt;code&gt;assets.createTrack()&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  📊 What Makes This Deep Integration
&lt;/h3&gt;

&lt;p&gt;We're not just hosting videos. We're using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Official &lt;code&gt;@mux/ai&lt;/code&gt; SDK for chapter generation&lt;/li&gt;
&lt;li&gt;Multi-Track Audio for dubbed languages&lt;/li&gt;
&lt;li&gt;Text Track API for translated captions&lt;/li&gt;
&lt;li&gt;Master Access for AI processing pipelines&lt;/li&gt;
&lt;li&gt;Low-Latency Live Streaming for real-time advice&lt;/li&gt;
&lt;li&gt;Custom Analytics Dimensions for climate insights&lt;/li&gt;
&lt;/ul&gt;




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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;User&lt;/th&gt;
&lt;th&gt;How Mux Helps&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rural Communities&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Upload climate impact videos with auto-captions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Experts&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Watch live broadcasts, give real-time advice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Global Audience&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Content in Hindi, Spanish, French via AI translation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Non-Readers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Audio dubbing for accessibility&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Mux handles encoding, CDN, multi-track, and AI – so we focus on climate impact.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;❗ By submitting this project, I confirm that my video adheres to Mux's terms of service: &lt;a href="https://www.mux.com/terms" rel="noopener noreferrer"&gt;https://www.mux.com/terms&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>muxchallenge</category>
      <category>showandtell</category>
      <category>video</category>
    </item>
    <item>
      <title>AdForge AI - Enterprise Visual Production Platform</title>
      <dc:creator>omkar</dc:creator>
      <pubDate>Fri, 02 Jan 2026 11:34:53 +0000</pubDate>
      <link>https://forem.com/omkar598/adforge-ai-enterprise-visual-production-platform-3mfd</link>
      <guid>https://forem.com/omkar598/adforge-ai-enterprise-visual-production-platform-3mfd</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/mux-2025-12-03"&gt;DEV's Worldwide Show and Tell Challenge Presented by Mux&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;AdForge AI is a complete enterprise visual production platform that transforms brand guidelines and campaign briefs into production-ready marketing assets at scale using an automated multi-agent AI pipeline.&lt;/p&gt;

&lt;p&gt;Marketing teams spend weeks creating campaign visuals—coordinating designers, waiting for revisions, losing brand consistency across platforms. AdForge AI solves this with deterministic, controllable, and reproducible visual generation.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;🎨 AI-powered brand DNA extraction from minimal input&lt;/li&gt;
&lt;li&gt;🚀 Automated multi-agent pipeline for asset generation&lt;/li&gt;
&lt;li&gt;🎛️ JSON-native visual controls (camera, lighting, composition)&lt;/li&gt;
&lt;li&gt;🔄 Natural language refinement without full regeneration&lt;/li&gt;
&lt;li&gt;🛡️ Deterministic reproducibility with seeds&lt;/li&gt;
&lt;li&gt;📤 Multi-destination export (PDF, Slack, HDR)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My Pitch Video
&lt;/h2&gt;

&lt;p&gt;

&lt;iframe src="https://player.mux.com/GpUDLxgQJKbzBaU2kepBm00wlMCvV7Hq0175fr3n3vjUM" width="710" height="399"&gt;
&lt;/iframe&gt;



&lt;/p&gt;

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

&lt;p&gt;🔗 &lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://ad-forge-ai.vercel.app" rel="noopener noreferrer"&gt;https://ad-forge-ai.vercel.app&lt;/a&gt;&lt;br&gt;
🔗 &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/omkardongre/AdForge-AI" rel="noopener noreferrer"&gt;https://github.com/omkardongre/AdForge-AI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No login required&lt;/strong&gt; - fully accessible for testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Story Behind It
&lt;/h2&gt;

&lt;p&gt;As a developer working with marketing teams, I watched them spend weeks creating campaign visuals - coordinating between designers, waiting for revisions, and losing brand consistency across platforms. It's slow, expensive, and broken.&lt;/p&gt;

&lt;p&gt;Most AI tools just generate random outputs. Marketing teams need &lt;strong&gt;deterministic&lt;/strong&gt;, &lt;strong&gt;controllable&lt;/strong&gt;, and &lt;strong&gt;reproducible&lt;/strong&gt; visual generation. That's why I built AdForge AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes It Special
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Multi-Agent Pipeline
&lt;/h3&gt;

&lt;p&gt;Instead of a single AI call, AdForge uses specialized agents working together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Brand DNA Extractor&lt;/strong&gt;: Analyzes minimal input to create complete brand guidelines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scene Composer&lt;/strong&gt;: Creates visual concepts from campaign briefs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON Generator&lt;/strong&gt;: Builds structured prompts with camera/lighting/composition parameters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variation Generator&lt;/strong&gt;: Creates multiple versions with parameter variations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality Assurance&lt;/strong&gt;: Validates brand compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. JSON-Native Visual Controls
&lt;/h3&gt;

&lt;p&gt;Unlike traditional AI tools that regenerate everything from scratch, AdForge gives you direct control over generation parameters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Camera Settings&lt;/strong&gt;: Angle (eye-level, low, high, bird's eye), FOV (10-180°), focal length (24mm-85mm), distance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lighting Settings&lt;/strong&gt;: Setup (studio soft, dramatic, golden hour, natural), direction (front, side, back), intensity (0-2), color temperature&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Color Settings&lt;/strong&gt;: Brand color palette integration, temperature, saturation (0-2), contrast (0-2)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composition Settings&lt;/strong&gt;: Rule of thirds, depth of field, framing, negative space&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Camera angle, lighting setup, and light direction use dropdown selectors. Saturation and contrast use visual sliders. All parameters map to structured JSON sent to the generation API.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Deterministic Reproducibility
&lt;/h3&gt;

&lt;p&gt;Every generated image has a reproducibility seed. Same seed + same JSON = identical output. Enterprises can recreate approved assets months later with pixel-perfect accuracy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reproducibility Proof Feature:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every asset displays a Shield icon showing its seed value&lt;/li&gt;
&lt;li&gt;Copy seed → paste in Visual Controls → Regenerate = identical image&lt;/li&gt;
&lt;li&gt;Proves deterministic output capability&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Three Generation Modes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Generate Mode:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text-to-image with structured JSON prompts&lt;/li&gt;
&lt;li&gt;5 camera presets (product, lifestyle, portrait, wide, dramatic)&lt;/li&gt;
&lt;li&gt;5 lighting presets automatically applied based on scene analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Refine Mode:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Iterative modifications via natural language&lt;/li&gt;
&lt;li&gt;Example: "make the lighting warmer" or "change camera angle to low"&lt;/li&gt;
&lt;li&gt;Updates only specified parameters while preserving everything else&lt;/li&gt;
&lt;li&gt;Pre-built instruction examples in UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Inspire Mode (Vision AI-Powered):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload reference image OR enter creative direction OR both&lt;/li&gt;
&lt;li&gt;Gemini Vision AI analyzes reference images to extract:

&lt;ul&gt;
&lt;li&gt;Subject attributes, lighting conditions, shadows&lt;/li&gt;
&lt;li&gt;Composition, color scheme, mood/atmosphere&lt;/li&gt;
&lt;li&gt;Camera angle, depth of field, focal length&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Generates new images inspired by reference style&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. AI-Powered Campaign Analysis
&lt;/h3&gt;

&lt;p&gt;Select any two campaign assets for side-by-side comparison. Gemini AI analyzes both with full campaign context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Brand alignment assessment&lt;/li&gt;
&lt;li&gt;Campaign objective fit&lt;/li&gt;
&lt;li&gt;Technical quality scores (1-10)&lt;/li&gt;
&lt;li&gt;Lighting, composition, color/mood comparison&lt;/li&gt;
&lt;li&gt;Winner recommendation with reasoning&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Core Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Dashboard
&lt;/h3&gt;

&lt;p&gt;Real-time statistics showing total brands, active campaigns, and generated assets. Quick Actions for creating brands, campaigns, and viewing assets.&lt;/p&gt;

&lt;h3&gt;
  
  
  4-Step Brand Wizard
&lt;/h3&gt;

&lt;p&gt;Guided workflow (Brand Info → Colors → Visual Style → Review):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter minimal brand information&lt;/li&gt;
&lt;li&gt;Pick 3 brand colors - AI expands into complete palette (primary, secondary, background, text)&lt;/li&gt;
&lt;li&gt;Define visual style preferences&lt;/li&gt;
&lt;li&gt;Review and confirm brand DNA&lt;/li&gt;
&lt;li&gt;LLM expands minimal input into complete brand guidelines&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Campaign Creation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Select existing brand&lt;/li&gt;
&lt;li&gt;Set campaign name, objective (awareness/conversion), key message, call-to-action&lt;/li&gt;
&lt;li&gt;Choose target platforms: Instagram Feed/Story, Facebook Feed, LinkedIn Post, Google Display&lt;/li&gt;
&lt;li&gt;Configure generation settings (scenes count, variations per scene)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Multi-Platform Generation
&lt;/h3&gt;

&lt;p&gt;Automatically generates assets at correct dimensions for each selected platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instagram: 1080×1080 (Feed), 1080×1920 (Story)&lt;/li&gt;
&lt;li&gt;LinkedIn: 1200×627&lt;/li&gt;
&lt;li&gt;Facebook: 1200×630&lt;/li&gt;
&lt;li&gt;Google Display: Various standard sizes&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Grid view of all generated assets&lt;/li&gt;
&lt;li&gt;Quality scores for brand compliance&lt;/li&gt;
&lt;li&gt;Platform dimension badges&lt;/li&gt;
&lt;li&gt;Action buttons for each asset (Refine, Compare, Download, Export)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Export Panel
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Multi-Destination Export:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PDF Storyboard&lt;/strong&gt;: Professional PDF document with all campaign assets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slack Notifications&lt;/strong&gt;: Team alerts when exporting assets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Print-Ready Format Export:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TIFF&lt;/strong&gt;: 300 DPI with enhanced sharpness and contrast for professional print&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PNG&lt;/strong&gt;: High-quality with DPI metadata&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JPEG&lt;/strong&gt;: 300 DPI high-quality compression&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technical Highlights
&lt;/h2&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F21ifokmr608t9wh23nw3.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%2F21ifokmr608t9wh23nw3.png" alt="AdForge AI User Journey - Complete 5-stage workflow from Onboarding to Export"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AdForge AI follows a structured 5-stage workflow: **Onboarding&lt;/em&gt;* → &lt;strong&gt;Campaign&lt;/strong&gt; → &lt;strong&gt;Generate&lt;/strong&gt; → &lt;strong&gt;Refine&lt;/strong&gt; → &lt;strong&gt;Export&lt;/strong&gt;*&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend (Python/FastAPI)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Multi-Agent Architecture:&lt;/strong&gt;&lt;br&gt;
5 specialized AI agents working in pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Brand DNA Extractor&lt;/strong&gt;: Uses LLM (Gemini/OpenAI/Anthropic) to extract complete brand identity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scene Composer&lt;/strong&gt;: Creates visual scene descriptions from campaign briefs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON Generator&lt;/strong&gt;: Builds structured prompts with camera/lighting/color/composition parameters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variation Generator&lt;/strong&gt;: Creates parameter-sweep variations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality Assurance&lt;/strong&gt;: Validates brand compliance, calculates quality scores&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Technology Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FastAPI for async/await API endpoints&lt;/li&gt;
&lt;li&gt;Bria API for structured JSON-based image generation&lt;/li&gt;
&lt;li&gt;Google Gemini for Vision AI (Inspire mode, AI Compare) and LLM orchestration&lt;/li&gt;
&lt;li&gt;SQLite with async support for database&lt;/li&gt;
&lt;li&gt;ReportLab for PDF generation&lt;/li&gt;
&lt;li&gt;slack_sdk for team notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Frontend (React/Vite/TypeScript)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;UI Pages and Modals:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pages&lt;/strong&gt;: Dashboard, Brands List, Brand Detail, Brand Wizard, Campaigns List, Campaign Detail, Campaign Create, Gallery, Export Panel, Settings, AI Compare, Semantic Search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modals&lt;/strong&gt;: Refine Modal, Inspire Modal, Visual Controls (JSON Editor)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key UI Components:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4-step Brand Wizard with color pickers and visual style selectors&lt;/li&gt;
&lt;li&gt;Campaign creation with brand selector and platform checkboxes&lt;/li&gt;
&lt;li&gt;Asset gallery with quality score badges&lt;/li&gt;
&lt;li&gt;Visual Controls modal with parameter sliders&lt;/li&gt;
&lt;li&gt;AI Compare page with side-by-side analysis&lt;/li&gt;
&lt;li&gt;ConsistencyBadge for reproducibility proof&lt;/li&gt;
&lt;li&gt;Export panel with multi-destination options&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technology Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React 18 with TypeScript&lt;/li&gt;
&lt;li&gt;Vite for fast development and builds&lt;/li&gt;
&lt;li&gt;TailwindCSS for styling&lt;/li&gt;
&lt;li&gt;React Router for navigation&lt;/li&gt;
&lt;li&gt;Axios for API communication&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Challenges I Ran Into
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;JSON Schema Design&lt;/strong&gt;: Designing the precise JSON structure for structured image generation required extensive experimentation with the Bria API's capabilities and constraints.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-Platform Aspect Ratios&lt;/strong&gt;: Generating consistent brand visuals across multiple platform dimensions while maintaining composition quality was challenging. Solved with platform-specific camera presets that adjust framing based on aspect ratio.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vision-Based Inspire Mode&lt;/strong&gt;: The Bria API doesn't directly accept image URLs. Integrated Gemini Vision AI to analyze reference images and build structured prompts from the visual analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reproducibility Implementation&lt;/strong&gt;: Implementing seed-based deterministic generation with a user-friendly UI for copying and reusing seeds across different generation sessions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Brand Consistency&lt;/strong&gt;: Ensuring generated assets maintained brand compliance across different scenes and variations. Built the Quality Assurance agent to validate brand DNA adherence.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Accomplishments I'm Proud Of
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;All 3 Generation Modes Fully Integrated&lt;/strong&gt;: Generate, Refine, and Inspire working end-to-end with production-quality results&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;JSON-Native Control System&lt;/strong&gt;: Visual sliders for every generation parameter (camera angle, lighting, saturation, contrast) directly mapped to API parameters&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vision AI Integration&lt;/strong&gt;: Gemini analyzes reference images to extract visual characteristics and build generation prompts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Campaign-Aware AI Compare&lt;/strong&gt;: Context-aware asset comparison that considers brand guidelines and campaign objectives&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reproducibility Proof&lt;/strong&gt;: Every asset has a verifiable seed for exact recreation, with UI indicators&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Complete Multi-Agent Pipeline&lt;/strong&gt;: 5 specialized agents working together seamlessly from brief to production assets&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Production Deployment&lt;/strong&gt;: Fully deployed and working live on Vercel (frontend) and Render (backend)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-Destination Export&lt;/strong&gt;: PDF storyboards and Slack notifications working in production&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Determinism is Critical for Enterprise AI&lt;/strong&gt;: Random outputs don't work in professional workflows. Reproducible generation with seeds is essential for brand consistency and client approvals.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-Agent Systems Are Powerful&lt;/strong&gt;: Breaking complex creative workflows into specialized agents produces better results than monolithic AI calls. Each agent can focus on its specific task with clear inputs/outputs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vision AI Enables New Workflows&lt;/strong&gt;: Gemini's image analysis unlocks reference-based generation and intelligent asset comparison, bridging the gap between traditional design workflows and AI generation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;JSON-Native Control Changes Everything&lt;/strong&gt;: Direct parameter control (vs. prompt engineering) is a game-changer for enterprise workflows. Designers need precise, predictable control.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Real-World Tools Need Export&lt;/strong&gt;: Production tools must integrate with existing workflows (PDF, Slack, print formats) to be truly useful. Generation is only half the story.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Collaboration&lt;/strong&gt;: Multi-user editing with live preview and commenting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A/B Test Analytics&lt;/strong&gt;: Performance analytics on generated variations with engagement metrics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DAM Integration&lt;/strong&gt;: Connect with existing Digital Asset Management systems (e.g., Bynder, Widen)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Batch Processing&lt;/strong&gt;: Generate hundreds of variations in parallel for large-scale campaigns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Semantic Search&lt;/strong&gt;: Natural language asset search using vector embeddings (ChromaDB)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version Control&lt;/strong&gt;: Git-like versioning for brand guidelines and campaign changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Access&lt;/strong&gt;: RESTful API for programmatic asset generation&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>devchallenge</category>
      <category>muxchallenge</category>
      <category>showandtell</category>
      <category>video</category>
    </item>
    <item>
      <title>ClimateIQ - AI Acceleration</title>
      <dc:creator>omkar</dc:creator>
      <pubDate>Mon, 08 Dec 2025 07:34:21 +0000</pubDate>
      <link>https://forem.com/omkar598/climateiq-ai-acceleration-2330</link>
      <guid>https://forem.com/omkar598/climateiq-ai-acceleration-2330</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/unoplatform"&gt;AI Challenge for Cross-Platform Apps&lt;/a&gt; - AI Acceleration&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;ClimateIQ&lt;/strong&gt; — a comprehensive climate intelligence platform that demonstrates how AI coding assistants can accelerate the development of complex, production-quality cross-platform applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;APIs Used:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemini AI&lt;/strong&gt; — Powers climate alerts, crop recommendations, eco-tips, waste scanning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NASA FIRMS&lt;/strong&gt; — Real-time fire/thermal anomaly data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenWeather API&lt;/strong&gt; — Temperature, air quality, precipitation data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NREL PVWatts&lt;/strong&gt; — Solar potential calculations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planet Labs&lt;/strong&gt; — Vegetation health (NDVI) data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storyblok CMS&lt;/strong&gt; — Community content, events, learning modules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Challenge:&lt;/strong&gt; Build a feature-rich climate app with 15+ tools, 6 real-time data layers, AI integrations, and CMS-powered content — all running on multiple platforms from a single codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Solution:&lt;/strong&gt; Leverage AI coding assistants with Uno Platform MCP for contextual, grounded guidance throughout development.&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/omkardongre/ClimateIQ-App" rel="noopener noreferrer"&gt;https://github.com/omkardongre/ClimateIQ-App&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;Live WebAssembly Demo:&lt;/strong&gt; &lt;a href="https://roaring-gumption-b8bf96.netlify.app/" rel="noopener noreferrer"&gt;roaring-gumption-b8bf96.netlify.app&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Development Screenshots
&lt;/h2&gt;

&lt;h3&gt;
  
  
  IDE with AI Assistant
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2tw791oa2vy29n9vxqr.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%2Ft2tw791oa2vy29n9vxqr.png" alt="IDE Screenshot 1" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Google Antigravity IDE with Gemini AI researching Mapbox integration and recommending Mapsui as the best map solution for Uno Platform&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1n47g9r4rxbwi4bn1pn.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%2Fu1n47g9r4rxbwi4bn1pn.png" alt="IDE Screenshot 2" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Windsurf IDE with Cascade AI fixing XAML build errors and adding Uno Toolkit to multiple pages simultaneously&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Uno Platform MCP in Action
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7atrn3df1lpxejy2ytog.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%2F7atrn3df1lpxejy2ytog.png" alt="MCP Screenshot 1" width="800" height="982"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Uno Platform MCP searching documentation for Material Controls Styles and Toolkit UI components&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftc23vpj1i399i0075b70.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%2Ftc23vpj1i399i0075b70.png" alt="MCP Screenshot 2" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Uno Platform MCP fetching Material Toolkit theme setup guidance while AI updates App.xaml resources&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  App Screenshots
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Home Page - Feature Discovery
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8n57vftt4nse6ugpbo5m.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%2F8n57vftt4nse6ugpbo5m.png" alt="Home Page" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Interactive Climate Map - 6 Data Layers
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Real-time visualization with NASA FIRMS fire data, air quality, flood risk&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5ba7r9cpj0nprsq1ma2.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%2Fd5ba7r9cpj0nprsq1ma2.png" alt="Climate Map 1" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwmh7vojl86xn8rahfyj.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%2Frwmh7vojl86xn8rahfyj.png" alt="Climate Map 2" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e202awpzcqf5zqgyl96.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%2F5e202awpzcqf5zqgyl96.png" alt="Climate Map 3" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Climate Alerts - Gemini Powered
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Personalized alerts with severity indicators and actionable recommendations&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0odk84nmtv7ovj13u0z.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%2Fo0odk84nmtv7ovj13u0z.png" alt="AI Alerts" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Smart Agriculture Hub - Multi-Agent AI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;AI Crop Advisor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbi8yqajccz6nz39adpnw.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%2Fbi8yqajccz6nz39adpnw.png" alt="Crop Advisor 1" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2g3womz6f8s55wfa1qo.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%2Ft2g3womz6f8s55wfa1qo.png" alt="Crop Advisor 2" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Carbon Calculator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7t66gp11fjh41gla70i.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%2Fb7t66gp11fjh41gla70i.png" alt="Carbon Calculator 1" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5w9dkbrhg2v7mbyl6eyj.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%2F5w9dkbrhg2v7mbyl6eyj.png" alt="Carbon Calculator 2" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solar Irrigation Calculator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F133ymptxytariomh9xr2.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%2F133ymptxytariomh9xr2.png" alt="Solar Irrigation 1" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmzhl2vjo5mjk2pe1fbzv.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%2Fmzhl2vjo5mjk2pe1fbzv.png" alt="Solar Irrigation 2" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Urban Sustainability Hub
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Waste Scanner, Solar Savings Calculator, AI Eco-Advisor, Smart Home Tracker&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fokzgwrxpbv0noyitipfw.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%2Fokzgwrxpbv0noyitipfw.png" alt="Urban Hub" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Waste Scanner&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvzkj4vl7s4t1s7emo5pp.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%2Fvzkj4vl7s4t1s7emo5pp.png" alt="Waste Scanner" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solar Savings Calculator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxj7y2816uyw36e15jfn2.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%2Fxj7y2816uyw36e15jfn2.png" alt="Solar Savings 1" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fluiy3hcz29i7e7zgudx1.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%2Fluiy3hcz29i7e7zgudx1.png" alt="Solar Savings 2" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Eco-Advisor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8mqkk4jujbwiqkcz18q.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%2Fy8mqkk4jujbwiqkcz18q.png" alt="Eco Advisor" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Community Hub - Storyblok CMS
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Environmental events, news, learning modules&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqawckol42vufi84npc88.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%2Fqawckol42vufi84npc88.png" alt="Community Hub" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Cross-Platform Testing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Linux Desktop (Ubuntu)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e4jdhj6rfoouilli85g.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%2F5e4jdhj6rfoouilli85g.png" alt="Linux Desktop App" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ClimateIQ running as a native desktop app on Ubuntu Linux with Skia renderer&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  WebAssembly (Browser)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99b6blwwytgdem3jcik6.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%2F99b6blwwytgdem3jcik6.png" alt="WebAssembly Browser" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Same app running in the browser via WebAssembly, deployed to Netlify&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  AI Tooling in Action
&lt;/h2&gt;

&lt;h3&gt;
  
  
  AI Agents Used
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windsurf IDE with Claude&lt;/strong&gt; — Primary AI coding assistant for code generation, debugging, and architecture&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Antigravity IDE with Gemini 3.0 Pro&lt;/strong&gt; — Additional AI assistance for rapid prototyping and API research&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used AI coding assistants throughout the entire development process. Here's how AI accelerated my workflow:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Uno Platform MCP Integration
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Uno Platform MCP Server&lt;/strong&gt; provided contextual, grounded guidance for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;XAML layout patterns and best practices&lt;/li&gt;
&lt;li&gt;Cross-platform compatibility considerations&lt;/li&gt;
&lt;li&gt;Material Design integration with Uno Toolkit&lt;/li&gt;
&lt;li&gt;Navigation patterns and state management&lt;/li&gt;
&lt;li&gt;Platform-specific adaptations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example Interaction:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Me: "How do I create a responsive card layout with shadows?"
MCP: [Provided specific Uno Platform guidance on ThemeShadow,
      Border styling, and responsive Grid layouts]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Code Generation Acceleration
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before AI:&lt;/strong&gt; Manually writing 100+ XAML files, ViewModels, Services, and Models would take weeks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With AI:&lt;/strong&gt; The AI assistant generated production-quality code efficiently:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Approximate Lines&lt;/th&gt;
&lt;th&gt;AI Contribution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;XAML Pages&lt;/td&gt;
&lt;td&gt;~3,000 lines&lt;/td&gt;
&lt;td&gt;~90% AI-generated, human-refined&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ViewModels&lt;/td&gt;
&lt;td&gt;~2,500 lines&lt;/td&gt;
&lt;td&gt;~85% AI-generated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Services&lt;/td&gt;
&lt;td&gt;~2,000 lines&lt;/td&gt;
&lt;td&gt;~80% AI-generated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Models&lt;/td&gt;
&lt;td&gt;~500 lines&lt;/td&gt;
&lt;td&gt;~95% AI-generated&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3. Real-Time Problem Solving
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Challenge:&lt;/strong&gt; Emojis not rendering on Linux Skia renderer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Solution:&lt;/strong&gt; The AI researched the issue, identified the root cause (font fallback limitations), and implemented a comprehensive fix — replacing all emojis with styled text badges across 10+ pages in a single session.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge:&lt;/strong&gt; Complex multi-step wizard for Solar Savings Calculator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Solution:&lt;/strong&gt; The AI designed the 4-step wizard architecture, implemented progress tracking, and integrated NREL API calls — all following Uno Platform best practices from MCP guidance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge:&lt;/strong&gt; JSON deserialization failing in WebAssembly Release builds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Solution:&lt;/strong&gt; The AI identified the &lt;code&gt;JsonSerializerIsReflectionDisabled&lt;/code&gt; error caused by .NET trimming, and replaced all reflection-based JSON operations with manual &lt;code&gt;JsonDocument&lt;/code&gt; parsing across 7 service files.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. API Integration Patterns
&lt;/h3&gt;

&lt;p&gt;The AI helped integrate 6 different APIs with proper:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Error handling and fallbacks&lt;/li&gt;
&lt;li&gt;Rate limiting considerations&lt;/li&gt;
&lt;li&gt;Response parsing and mapping&lt;/li&gt;
&lt;li&gt;Caching strategies
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Example: AI-generated NASA FIRMS integration&lt;/span&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IEnumerable&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ClimateDataPoint&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;GetFireDataAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;lat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;lon&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// AI generated this with proper error handling,&lt;/span&gt;
    &lt;span class="c1"&gt;// CSV parsing, and data point mapping&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. UI/UX Refinement
&lt;/h3&gt;

&lt;p&gt;The AI helped maintain consistent design patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gradient headers on every page&lt;/li&gt;
&lt;li&gt;Card-based layouts with proper spacing&lt;/li&gt;
&lt;li&gt;Accessible color contrasts&lt;/li&gt;
&lt;li&gt;Responsive breakpoints&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Key AI Acceleration Metrics
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Traditional Estimate&lt;/th&gt;
&lt;th&gt;With AI&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Initial prototype&lt;/td&gt;
&lt;td&gt;~2 weeks&lt;/td&gt;
&lt;td&gt;~2 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full feature set&lt;/td&gt;
&lt;td&gt;~2 months&lt;/td&gt;
&lt;td&gt;~2 weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bug fixes&lt;/td&gt;
&lt;td&gt;Hours each&lt;/td&gt;
&lt;td&gt;Minutes each&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-platform testing&lt;/td&gt;
&lt;td&gt;Days&lt;/td&gt;
&lt;td&gt;Hours&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  MCP-Grounded Development
&lt;/h2&gt;

&lt;p&gt;The Uno Platform MCP ensured that AI suggestions were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Compatible with Uno Platform's Skia renderer&lt;/li&gt;
&lt;li&gt;✅ Following MVVM patterns correctly&lt;/li&gt;
&lt;li&gt;✅ Using proper XAML syntax for cross-platform&lt;/li&gt;
&lt;li&gt;✅ Leveraging Uno Toolkit components appropriately&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Targets
&lt;/h2&gt;

&lt;p&gt;ClimateIQ runs on &lt;strong&gt;multiple platforms&lt;/strong&gt; from a single codebase:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🪟 Windows&lt;/td&gt;
&lt;td&gt;net9.0-desktop&lt;/td&gt;
&lt;td&gt;✅ Working&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🐧 Linux&lt;/td&gt;
&lt;td&gt;net9.0-desktop (Skia)&lt;/td&gt;
&lt;td&gt;✅ Working&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🍎 macOS&lt;/td&gt;
&lt;td&gt;net9.0-desktop&lt;/td&gt;
&lt;td&gt;✅ Builds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🌐 WebAssembly&lt;/td&gt;
&lt;td&gt;net9.0-browserwasm&lt;/td&gt;
&lt;td&gt;✅ Working&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Build Commands
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Desktop (Linux/Windows/macOS)&lt;/span&gt;
dotnet run &lt;span class="nt"&gt;-f&lt;/span&gt; net9.0-desktop

&lt;span class="c"&gt;# WebAssembly&lt;/span&gt;
dotnet run &lt;span class="nt"&gt;-f&lt;/span&gt; net9.0-browserwasm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Development Experience
&lt;/h2&gt;

&lt;p&gt;The AI development experience was transformative:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI + MCP = Grounded Intelligence&lt;/strong&gt; — The Uno Platform MCP kept AI suggestions relevant and accurate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterative Refinement Works&lt;/strong&gt; — Quick feedback loops with AI accelerated learning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex Apps Are Achievable&lt;/strong&gt; — What seemed like months of work became weeks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Platform Is Real&lt;/strong&gt; — Write once, run everywhere actually works with Uno Platform&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with Uno Platform, .NET 9, Google Gemini AI, Windsurf AI Assistant, and a passion for climate action. 🌍&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>unoplatformchallenge</category>
      <category>dotnet</category>
      <category>crossplatform</category>
    </item>
    <item>
      <title>ClimateIQ - WOW Factor</title>
      <dc:creator>omkar</dc:creator>
      <pubDate>Mon, 08 Dec 2025 07:02:30 +0000</pubDate>
      <link>https://forem.com/omkar598/climateiq-wow-factor-4ec8</link>
      <guid>https://forem.com/omkar598/climateiq-wow-factor-4ec8</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/unoplatform"&gt;AI Challenge for Cross-Platform Apps&lt;/a&gt; - WOW Factor&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;ClimateIQ&lt;/strong&gt; — an AI-powered climate intelligence platform that combines real-time satellite data, smart agriculture tools, and urban sustainability features into a stunning, cohesive experience. Think of it as a "climate command center" that empowers communities to understand, adapt to, and combat climate change.&lt;/p&gt;

&lt;p&gt;The theme is &lt;strong&gt;environmental sustainability meets modern design&lt;/strong&gt; — using a calming green gradient palette with clean card-based interfaces that make complex climate data accessible and beautiful. Every screen is designed to make users feel empowered rather than overwhelmed by climate information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What makes it special:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;6 Real-Time Data Layers&lt;/strong&gt; on an interactive climate map (Temperature, Air Quality, Flood Risk, Solar Potential, Vegetation Health, Thermal Anomalies)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-Powered Features&lt;/strong&gt; using Google Gemini for personalized climate alerts, crop recommendations, and eco-tips&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production-Quality UI&lt;/strong&gt; with smooth animations, gradient headers, card shadows, and responsive layouts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real API Integrations&lt;/strong&gt; — NASA FIRMS, OpenWeather, NREL Solar, Planet Labs, Storyblok CMS&lt;/li&gt;
&lt;/ul&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/omkardongre/ClimateIQ-App" rel="noopener noreferrer"&gt;https://github.com/omkardongre/ClimateIQ-App&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;Live WebAssembly Demo:&lt;/strong&gt; &lt;a href="https://roaring-gumption-b8bf96.netlify.app/" rel="noopener noreferrer"&gt;roaring-gumption-b8bf96.netlify.app&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Home Page - Feature Discovery
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8n57vftt4nse6ugpbo5m.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%2F8n57vftt4nse6ugpbo5m.png" alt="Home Page" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Interactive Climate Map - 6 Data Layers
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Real-time visualization with NASA FIRMS fire data, air quality, flood risk&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd5ba7r9cpj0nprsq1ma2.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%2Fd5ba7r9cpj0nprsq1ma2.png" alt="Climate Map 1" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frwmh7vojl86xn8rahfyj.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%2Frwmh7vojl86xn8rahfyj.png" alt="Climate Map 2" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e202awpzcqf5zqgyl96.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%2F5e202awpzcqf5zqgyl96.png" alt="Climate Map 3" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Climate Alerts - Gemini Powered
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Personalized alerts with severity indicators and actionable recommendations&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo0odk84nmtv7ovj13u0z.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%2Fo0odk84nmtv7ovj13u0z.png" alt="AI Alerts" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Smart Agriculture Hub - Multi-Agent AI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;AI Crop Advisor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbi8yqajccz6nz39adpnw.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%2Fbi8yqajccz6nz39adpnw.png" alt="Crop Advisor 1" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2g3womz6f8s55wfa1qo.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%2Ft2g3womz6f8s55wfa1qo.png" alt="Crop Advisor 2" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Carbon Calculator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb7t66gp11fjh41gla70i.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%2Fb7t66gp11fjh41gla70i.png" alt="Carbon Calculator 1" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5w9dkbrhg2v7mbyl6eyj.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%2F5w9dkbrhg2v7mbyl6eyj.png" alt="Carbon Calculator 2" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solar Irrigation Calculator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F133ymptxytariomh9xr2.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%2F133ymptxytariomh9xr2.png" alt="Solar Irrigation 1" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmzhl2vjo5mjk2pe1fbzv.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%2Fmzhl2vjo5mjk2pe1fbzv.png" alt="Solar Irrigation 2" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Urban Sustainability Hub
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Waste Scanner, Solar Savings Calculator, AI Eco-Advisor, Smart Home Tracker&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fokzgwrxpbv0noyitipfw.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%2Fokzgwrxpbv0noyitipfw.png" alt="Urban Hub" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Waste Scanner&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvzkj4vl7s4t1s7emo5pp.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%2Fvzkj4vl7s4t1s7emo5pp.png" alt="Waste Scanner" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solar Savings Calculator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxj7y2816uyw36e15jfn2.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%2Fxj7y2816uyw36e15jfn2.png" alt="Solar Savings 1" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fluiy3hcz29i7e7zgudx1.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%2Fluiy3hcz29i7e7zgudx1.png" alt="Solar Savings 2" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI Eco-Advisor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8mqkk4jujbwiqkcz18q.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%2Fy8mqkk4jujbwiqkcz18q.png" alt="Eco Advisor" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Community Hub - Storyblok CMS
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Environmental events, news, learning modules&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqawckol42vufi84npc88.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%2Fqawckol42vufi84npc88.png" alt="Community Hub" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Cross-Platform Testing
&lt;/h2&gt;

&lt;p&gt;ClimateIQ runs natively on &lt;strong&gt;multiple platforms&lt;/strong&gt; from a single C#/XAML codebase. Here's proof of cross-platform functionality:&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux Desktop (Ubuntu)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e4jdhj6rfoouilli85g.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%2F5e4jdhj6rfoouilli85g.png" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;ClimateIQ running as a native desktop app on Ubuntu Linux with Skia renderer&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  WebAssembly (Browser)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99b6blwwytgdem3jcik6.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%2F99b6blwwytgdem3jcik6.png" alt=" " width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Same app running in the browser via WebAssembly, deployed to Netlify&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Platform Support
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;✅ Windows&lt;/td&gt;
&lt;td&gt;Working&lt;/td&gt;
&lt;td&gt;Full desktop experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✅ Linux&lt;/td&gt;
&lt;td&gt;Working&lt;/td&gt;
&lt;td&gt;Skia renderer, tested on Ubuntu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✅ macOS&lt;/td&gt;
&lt;td&gt;Builds&lt;/td&gt;
&lt;td&gt;Native macOS app (same codebase)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;✅ WebAssembly&lt;/td&gt;
&lt;td&gt;Working&lt;/td&gt;
&lt;td&gt;Browser-based, deployed to Netlify&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The Magic Moment:&lt;/strong&gt; I wrote the interactive climate map visualization once — with custom data point rendering, layer toggles, and real-time API calls — and it worked identically across desktop and web. The Uno Platform's Skia renderer ensured pixel-perfect consistency.&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;# Build for any platform from the same codebase&lt;/span&gt;
dotnet run &lt;span class="nt"&gt;-f&lt;/span&gt; net9.0-desktop      &lt;span class="c"&gt;# Linux/Windows/macOS&lt;/span&gt;
dotnet run &lt;span class="nt"&gt;-f&lt;/span&gt; net9.0-browserwasm  &lt;span class="c"&gt;# WebAssembly&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Interactive Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🗺️ Interactive Climate Map
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;6 toggleable data layers&lt;/strong&gt; with real-time API data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Click-to-inspect&lt;/strong&gt; data points with detailed info cards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Analysis button&lt;/strong&gt; generates Gemini-powered climate risk assessment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search area&lt;/strong&gt; to fetch data for any location&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🤖 AI-Powered Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Agent Crop Advisor&lt;/strong&gt; — 3 AI specialists (Soil, Weather, Market) analyze your farm&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Waste Scanner&lt;/strong&gt; — Upload photos to identify waste type and get disposal instructions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Eco-Advisor&lt;/strong&gt; — Personalized eco-tips based on your location and weather&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📊 Calculators &amp;amp; Trackers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Solar Savings Calculator&lt;/strong&gt; — 4-step wizard with NREL data integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Carbon Footprint Calculator&lt;/strong&gt; — Farm emissions tracking with AI recommendations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Home Tracker&lt;/strong&gt; — Electricity and water usage monitoring with appliance breakdown&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solar Irrigation Calculator&lt;/strong&gt; — Pump sizing and cost analysis for farmers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📚 Learning &amp;amp; Community
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Learning Modules&lt;/strong&gt; — Climate basics and sustainability practices with lesson progression&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community Events&lt;/strong&gt; — Storyblok CMS integration with event images and registration&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎨 Visual Polish
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gradient headers&lt;/strong&gt; on every page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Card shadows&lt;/strong&gt; using ThemeShadow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smooth navigation&lt;/strong&gt; with back buttons&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsive layouts&lt;/strong&gt; that adapt to screen size&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styled icon badges&lt;/strong&gt; for cross-platform consistency&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Wow Factor
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The moment that makes people say "Wow":&lt;/strong&gt; Opening the Interactive Climate Map and seeing 6 different real-time data layers — fire hotspots from NASA satellites, air quality readings, flood risk zones, solar potential, vegetation health — all visualized on a single map, fetched from real APIs, running in a browser or on your desktop from the same codebase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I'm most proud of:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Real Data, Real Impact&lt;/strong&gt; — This isn't mock data. Every data point comes from production APIs (NASA FIRMS, OpenWeather, NREL, Planet Labs). Users can actually use this to understand their local climate conditions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI That Helps&lt;/strong&gt; — The Gemini integration provides genuinely useful recommendations. The Multi-Agent Crop Advisor doesn't just give generic advice — it considers your specific location, soil type, and market conditions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Production-Quality UI&lt;/strong&gt; — Every screen looks polished. The gradient headers, card shadows, consistent spacing, and thoughtful color palette create an experience that feels like a commercial product, not a hackathon project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Comprehensive Feature Set&lt;/strong&gt; — 5 major hubs, 10+ individual tools, real API integrations, CMS-powered content — all from a single Uno Platform codebase running on multiple platforms.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The "Wow" is the combination:&lt;/strong&gt; Beautiful design + Real data + AI intelligence + Cross-platform magic = A climate app that actually makes you want to take action.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with Uno Platform, .NET 9, Google Gemini AI, and a passion for climate action. 🌍&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>unoplatformchallenge</category>
      <category>dotnet</category>
      <category>crossplatform</category>
    </item>
    <item>
      <title>From $50K Reports to AI Automation: Securing Multi-Agent ESG Compliance with Auth0</title>
      <dc:creator>omkar</dc:creator>
      <pubDate>Mon, 27 Oct 2025 06:02:08 +0000</pubDate>
      <link>https://forem.com/omkar598/esg-copilot-17fn</link>
      <guid>https://forem.com/omkar598/esg-copilot-17fn</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/auth0-2025-10-08"&gt;Auth0 for AI Agents 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;ESG Copilot&lt;/strong&gt; is an autonomous multi-agent AI system that automates ESG (Environmental, Social, Governance) compliance for small and medium businesses, secured end-to-end with &lt;strong&gt;Auth0 for AI Agents&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;SMBs face a $10K-$50K cost for ESG reports, struggle with complex regulations across jurisdictions, and lack in-house expertise. Manual compliance is time-consuming and error-prone.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solution
&lt;/h3&gt;

&lt;p&gt;An autonomous AI agent system that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔍 &lt;strong&gt;Researches regulations&lt;/strong&gt; via real-time web search (Google Search grounding)&lt;/li&gt;
&lt;li&gt;📊 &lt;strong&gt;Collects ESG data&lt;/strong&gt; from EPA, web scraping, and AI estimation&lt;/li&gt;
&lt;li&gt;🌍 &lt;strong&gt;Calculates emissions&lt;/strong&gt; using Climatiq API (Scope 1, 2, 3)&lt;/li&gt;
&lt;li&gt;📄 &lt;strong&gt;Generates reports&lt;/strong&gt; in GRI, SASB, TCFD formats with iterative refinement&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Answers questions&lt;/strong&gt; via permission-aware RAG (Retrieval-Augmented Generation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;All secured by Auth0&lt;/strong&gt; - every agent action is authenticated, authorized, and audited.&lt;/p&gt;




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

&lt;h3&gt;
  
  
  🔗 GitHub Repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/omkardongre/ESG-Copilot" rel="noopener noreferrer"&gt;github.com/omkardongre/ESG-Copilot&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🔗 Live Demo
&lt;/h3&gt;

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

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

&lt;p&gt;&lt;strong&gt;Homepage&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%2Fftgsxp0xe0f2ps5vi06w.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%2Fftgsxp0xe0f2ps5vi06w.png" alt=" " width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Company Dashboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fud84bac9lvo3xrr8fzbd.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%2Fud84bac9lvo3xrr8fzbd.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regulation Research Agent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F035n3duek7xci38kb4dz.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%2F035n3duek7xci38kb4dz.png" alt=" " width="800" height="934"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ESG Data Collection Agent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsap4u6u0izhu3g1k77bi.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%2Fsap4u6u0izhu3g1k77bi.png" alt=" " width="800" height="934"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Emissions Calculator Agent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1q0ayo22fhzqqp0qhppx.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%2F1q0ayo22fhzqqp0qhppx.png" alt=" " width="752" height="1054"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Report Generator Agent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjzmxfkp3s4xpm19vr43.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%2Fmjzmxfkp3s4xpm19vr43.png" alt=" " width="800" height="708"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chat Agent (RAG)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzn0vrjd48l0oyxl3c1qp.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%2Fzn0vrjd48l0oyxl3c1qp.png" alt=" " width="800" height="516"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Generated Report&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbzd89ek4rp5le58h5of4.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%2Fbzd89ek4rp5le58h5of4.png" alt=" " width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auth0 Users&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6tznmin6ylsej9qx9c88.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%2F6tznmin6ylsej9qx9c88.png" alt=" " width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Token Vault in Action&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzf2jl5k6e669zwg25ikl.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%2Fzf2jl5k6e669zwg25ikl.png" alt=" " width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auth0 FGA Store&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0prvnbowlf03f4jw01bn.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%2F0prvnbowlf03f4jw01bn.png" alt=" " width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  ▶️ Try It Yourself
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Test User Accounts&lt;/strong&gt; (Password: &lt;code&gt;Test@1234&lt;/code&gt;):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Email&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Company&lt;/th&gt;
&lt;th&gt;Agent Access&lt;/th&gt;
&lt;th&gt;Document Access&lt;/th&gt;
&lt;th&gt;Chat Context&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;patagonia@company.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Company Admin&lt;/td&gt;
&lt;td&gt;Patagonia Inc&lt;/td&gt;
&lt;td&gt;All 5 agents&lt;/td&gt;
&lt;td&gt;Own company only&lt;/td&gt;
&lt;td&gt;Patagonia docs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tesla@company.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Company Admin&lt;/td&gt;
&lt;td&gt;Tesla Inc&lt;/td&gt;
&lt;td&gt;All 5 agents&lt;/td&gt;
&lt;td&gt;Own company only&lt;/td&gt;
&lt;td&gt;Tesla docs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;consultant@esgfirm.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ESG Consultant&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;All 5 agents&lt;/td&gt;
&lt;td&gt;All companies&lt;/td&gt;
&lt;td&gt;All docs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;auditor@sustainapilot.com&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Auditor&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Read-only&lt;/td&gt;
&lt;td&gt;All companies&lt;/td&gt;
&lt;td&gt;All docs (read-only)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;regulator@epa.gov&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Regulator&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Read-only&lt;/td&gt;
&lt;td&gt;All companies&lt;/td&gt;
&lt;td&gt;All docs (read-only)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Try Different Scenarios&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Login as Patagonia Admin&lt;/strong&gt; → Execute agents, see only Patagonia data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Login as Tesla Admin&lt;/strong&gt; → Execute agents, see only Tesla data (zero data leakage)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Login as ESG Consultant&lt;/strong&gt; → Execute agents for any company, see all data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Login as Auditor&lt;/strong&gt; → Read-only access, cannot execute agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Login as Regulator&lt;/strong&gt; → Read-only access, view all companies for compliance oversight&lt;/li&gt;
&lt;/ol&gt;


&lt;h3&gt;
  
  
  📋 Complete Access Rules Matrix
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Agent Execution Permissions&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;Company Admin&lt;/th&gt;
&lt;th&gt;ESG Consultant&lt;/th&gt;
&lt;th&gt;Auditor&lt;/th&gt;
&lt;th&gt;Regulator&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Regulation Research&lt;/td&gt;
&lt;td&gt;✅ Own company&lt;/td&gt;
&lt;td&gt;✅ Any company&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESG Data Collection&lt;/td&gt;
&lt;td&gt;✅ Own company&lt;/td&gt;
&lt;td&gt;✅ Any company&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emissions Calculator&lt;/td&gt;
&lt;td&gt;✅ Own company&lt;/td&gt;
&lt;td&gt;✅ Any company&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Report Generator&lt;/td&gt;
&lt;td&gt;✅ Own company&lt;/td&gt;
&lt;td&gt;✅ Any company&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chat Agent (RAG)&lt;/td&gt;
&lt;td&gt;✅ Own docs&lt;/td&gt;
&lt;td&gt;✅ All docs&lt;/td&gt;
&lt;td&gt;✅ All docs&lt;/td&gt;
&lt;td&gt;✅ All docs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Document Access Control&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Document Type&lt;/th&gt;
&lt;th&gt;Company Admin&lt;/th&gt;
&lt;th&gt;ESG Consultant&lt;/th&gt;
&lt;th&gt;Auditor&lt;/th&gt;
&lt;th&gt;Regulator&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Own Company ESG Data&lt;/td&gt;
&lt;td&gt;✅ Read/Write&lt;/td&gt;
&lt;td&gt;✅ Read/Write&lt;/td&gt;
&lt;td&gt;✅ Read-only&lt;/td&gt;
&lt;td&gt;✅ Read-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Other Company ESG Data&lt;/td&gt;
&lt;td&gt;❌ No access&lt;/td&gt;
&lt;td&gt;✅ Read/Write&lt;/td&gt;
&lt;td&gt;✅ Read-only&lt;/td&gt;
&lt;td&gt;✅ Read-only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compliance Reports&lt;/td&gt;
&lt;td&gt;✅ Own company&lt;/td&gt;
&lt;td&gt;✅ All companies&lt;/td&gt;
&lt;td&gt;✅ All companies&lt;/td&gt;
&lt;td&gt;✅ All companies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audit Logs&lt;/td&gt;
&lt;td&gt;✅ Own company&lt;/td&gt;
&lt;td&gt;✅ All companies&lt;/td&gt;
&lt;td&gt;✅ All companies&lt;/td&gt;
&lt;td&gt;✅ All companies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Token Vault API Key Distribution&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API Key&lt;/th&gt;
&lt;th&gt;Company Admin&lt;/th&gt;
&lt;th&gt;ESG Consultant&lt;/th&gt;
&lt;th&gt;Auditor&lt;/th&gt;
&lt;th&gt;Regulator&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Climatiq (Emissions)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pinecone (RAG)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SendGrid (Email)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Example Scenarios&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Company Privacy&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Patagonia Admin asks chat: "Show me Nike's emissions data"&lt;/li&gt;
&lt;li&gt;AI Response: "No relevant documents found" (FGA blocks access)&lt;/li&gt;
&lt;li&gt;Audit: Query logged but no Nike documents accessed&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Role-Based Agent Restrictions&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Auditor tries to execute "Calculate Emissions" agent&lt;/li&gt;
&lt;li&gt;Result: 403 Forbidden (no &lt;code&gt;execute:agents&lt;/code&gt; permission)&lt;/li&gt;
&lt;li&gt;Audit: Attempt logged with failure reason&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Token Vault Security&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Auditor tries to access Climatiq API&lt;/li&gt;
&lt;li&gt;Result: API key not in JWT (Token Vault blocks)&lt;/li&gt;
&lt;li&gt;Audit: No API key injection for read-only roles&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  How I Used Auth0 for AI Agents
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. 🔐 Authenticate the User
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Challenge Requirement&lt;/strong&gt;: Secure the human prompting the agents&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation&lt;/strong&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;// frontend/src/app/api/auth/[auth0]/route.ts&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;handleAuth&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="s2"&gt;@auth0/nextjs-auth0&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;GET&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;handleAuth&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Auth0 Universal Login (no custom auth code)&lt;/li&gt;
&lt;li&gt;✅ JWT tokens with user identity, roles, and permissions&lt;/li&gt;
&lt;li&gt;✅ 4 roles: Company Admin, ESG Consultant, Auditor, Regulator&lt;/li&gt;
&lt;li&gt;✅ 9 permissions: &lt;code&gt;execute:agents&lt;/code&gt;, &lt;code&gt;read:companies&lt;/code&gt;, &lt;code&gt;write:reports&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;✅ Every agent action tied to authenticated user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters&lt;/strong&gt;: Each AI agent execution is traceable to a specific user with specific permissions. No anonymous agent actions.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. 🔑 Control the Tools
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Challenge Requirement&lt;/strong&gt;: Manage which APIs your agents can call&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Auth0 Action: Token Vault (Post-Login)&lt;/span&gt;
&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onExecutePostLogin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;api&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;namespace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://esg-copilot.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// Add email and roles to custom claims&lt;/span&gt;
  &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;accessToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setCustomClaim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/email`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;accessToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setCustomClaim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/roles`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authorization&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;roles&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;

  &lt;span class="c1"&gt;// Check if user has agent execution permission&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;permissions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authorization&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;permissions&lt;/span&gt; &lt;span class="o"&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;roles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authorization&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;roles&lt;/span&gt; &lt;span class="o"&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;hasAccess&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="nx"&gt;permissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;execute:agents&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;roles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ESG Consultant&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;roles&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Company Admin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hasAccess&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Inject API keys into JWT from Auth0 Secrets&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiKeys&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;climatiq_api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;secrets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CLIMATIQ_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;sendgrid_api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;secrets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SENDGRID_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;pinecone_api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;secrets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PINECONE_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;accessToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setCustomClaim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/api_keys`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;apiKeys&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Add company_id for Company Admins&lt;/span&gt;
  &lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;accessToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setCustomClaim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/company_id`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user_metadata&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;company_id&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Backend Extraction &amp;amp; Usage&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/middleware/auth0.js - Extract from JWT&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;extractUserInfo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&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="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiKeys&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://esg-copilot.com/api_keys&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;

    &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&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="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://esg-copilot.com/email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;roles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://esg-copilot.com/roles&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
      &lt;span class="na"&gt;companyId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://esg-copilot.com/company_id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;permissions&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
      &lt;span class="na"&gt;api_keys&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;apiKeys&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// ✅ Available to all agents&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// src/routes/chat.js - Agent retrieves keys from Token Vault&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiKeys&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;api_keys&lt;/span&gt; &lt;span class="o"&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;pineconeApiKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;apiKeys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pinecone_api_key&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;pineconeApiKey&lt;/span&gt;&lt;span class="p"&gt;)&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="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pinecone API key not found in Token Vault&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ 3 API keys secured in Token Vault (Climatiq, SendGrid, Pinecone)&lt;/li&gt;
&lt;li&gt;✅ Keys only injected for authorized users&lt;/li&gt;
&lt;li&gt;✅ No hardcoded credentials anywhere&lt;/li&gt;
&lt;li&gt;✅ Agents retrieve keys from JWT at runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters&lt;/strong&gt;: Agents can only call APIs if the user has permission. A Company Admin can calculate emissions, but an Auditor cannot.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. 🎯 Limit Knowledge
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Challenge Requirement&lt;/strong&gt;: Ensure agents only access authorized data&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/services/fga-store-service.js&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;OpenFgaClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@openfga/sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FGAStoreService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenFgaClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;apiUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FGA_API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;storeId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FGA_STORE_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;client_credentials&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;apiTokenIssuer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;auth.fga.dev&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;apiAudience&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FGA_API_AUDIENCE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FGA_CLIENT_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;clientSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FGA_CLIENT_SECRET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// Check if user can view a document&lt;/span&gt;
  &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;canViewDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;allowed&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;check&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`user:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;relation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;can_view&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;object&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`document:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;documentId&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="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;allowed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Authorization Model&lt;/strong&gt; (FGA Store):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type user

type company
  relations
    define admin: [user]
    define member: [user]
    define viewer: [user] or member or admin

type document
  relations
    define company: [company]
    define owner: [user]
    define viewer: [user] or owner or viewer from company
    define can_view: viewer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;RAG Pipeline with FGA&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/services/rag-service.js - Two-layer authorization&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;queryWithFGAStore&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="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userEmail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;companyId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;topK&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Step 1: Generate embedding&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;queryEmbedding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;embeddings&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;embedQuery&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="c1"&gt;// Step 2: Query Pinecone with company filter (first layer)&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;index&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="na"&gt;vector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;queryEmbedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;topK&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;topK&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="c1"&gt;// Fetch more, then filter by FGA&lt;/span&gt;
    &lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;company_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;$eq&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;companyId&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;includeMetadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="c1"&gt;// Step 3: Filter by FGA Store authorization (second layer)&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;authorizedDocuments&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;documentId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;document_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Real-time FGA check via Auth0 FGA Store API&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;canView&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;fgaStoreService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;canViewDocument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userEmail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;documentId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;canView&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;authorizedDocuments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;authorizedDocuments&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;topK&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Auth0 FGA Store for fine-grained authorization&lt;/li&gt;
&lt;li&gt;✅ Company-level data isolation (Pinecone filters)&lt;/li&gt;
&lt;li&gt;✅ Document-level access control (FGA checks)&lt;/li&gt;
&lt;li&gt;✅ Real-time authorization on every query&lt;/li&gt;
&lt;li&gt;✅ Zero knowledge leakage between companies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6 Authorization Rules&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Company Admin: See only own company documents&lt;/li&gt;
&lt;li&gt;ESG Consultant: See all companies (global viewer)&lt;/li&gt;
&lt;li&gt;Auditor: Read-only access to all documents&lt;/li&gt;
&lt;li&gt;Regulator: Read-only access to all documents&lt;/li&gt;
&lt;li&gt;Document ownership: Creator is owner&lt;/li&gt;
&lt;li&gt;Company-document relationship: Documents belong to companies&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why This Matters&lt;/strong&gt;: A Company Admin for Patagonia cannot see Nike's ESG data. The AI agent respects these boundaries automatically.&lt;/p&gt;




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

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

&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js 14 (App Router)&lt;/li&gt;
&lt;li&gt;Auth0 Next.js SDK (@auth0/nextjs-auth0)&lt;/li&gt;
&lt;li&gt;TailwindCSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js + Express&lt;/li&gt;
&lt;li&gt;Google Gemini 2.5 Flash (with Search grounding)&lt;/li&gt;
&lt;li&gt;LangChain.js (RAG pipeline)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Data &amp;amp; Storage&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BigQuery (agent logs, ESG data, compliance requirements)&lt;/li&gt;
&lt;li&gt;Pinecone (vector database for RAG)&lt;/li&gt;
&lt;li&gt;Auth0 FGA Store (external authorization service)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;External APIs&lt;/strong&gt; (via Token Vault):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Climatiq API (carbon footprint calculations)&lt;/li&gt;
&lt;li&gt;SendGrid API (email delivery)&lt;/li&gt;
&lt;li&gt;Pinecone API (vector search)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Multi-Agent Architecture
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;5 Core Agents&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Regulation Research Agent&lt;/strong&gt; (3 sub-agents in parallel)&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Jurisdiction Analyzer (web search)&lt;/li&gt;
&lt;li&gt;Framework Mapper (GRI/SASB/TCFD)&lt;/li&gt;
&lt;li&gt;Deadline Calculator (compliance dates)&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ESG Data Collection Agent&lt;/strong&gt; (3 sub-agents in parallel)&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;EPA Data Collector (government data)&lt;/li&gt;
&lt;li&gt;Web Scraper (company sustainability pages)&lt;/li&gt;
&lt;li&gt;AI Estimator (industry benchmarks)&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Emissions Calculator Agent&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Scope 1, 2, 3 emissions via Climatiq API&lt;/li&gt;
&lt;li&gt;Activity data extraction from ESG metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Report Generator Agent&lt;/strong&gt; (4 sub-agents + iterative refinement)&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;GRI Writer, SASB Writer, TCFD Writer&lt;/li&gt;
&lt;li&gt;Review &amp;amp; Critique Agent (up to 3 iterations)&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Chat Agent&lt;/strong&gt; (RAG-based)

&lt;ul&gt;
&lt;li&gt;Permission-aware document retrieval&lt;/li&gt;
&lt;li&gt;Company-scoped knowledge base&lt;/li&gt;
&lt;li&gt;Real-time FGA authorization&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Agentic Patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Parallel fan-out/gather (regulation research)&lt;/li&gt;
&lt;li&gt;✅ Iterative refinement (report quality loop)&lt;/li&gt;
&lt;li&gt;✅ Multi-agent orchestration (service-level coordination)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Lessons Learned and Takeaways
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🎓 Key Insights
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Auth0 FGA Store is Production-Ready&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;External authorization service (not just role logic)&lt;/li&gt;
&lt;li&gt;Real-time checks with low latency&lt;/li&gt;
&lt;li&gt;Scales to millions of tuples&lt;/li&gt;
&lt;li&gt;No need to build custom RBAC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Token Vault Simplifies Agent Security&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API keys in JWT = no backend secret management&lt;/li&gt;
&lt;li&gt;Permission-based key injection&lt;/li&gt;
&lt;li&gt;Agents are stateless and secure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Multi-Agent Systems Need Orchestration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service-level coordination &amp;gt; agent-to-agent messaging&lt;/li&gt;
&lt;li&gt;Parallel execution for independent tasks&lt;/li&gt;
&lt;li&gt;Sequential execution for dependent tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🚧 Challenges Faced
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. FGA Store Learning Curve&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understanding tuple relationships took time&lt;/li&gt;
&lt;li&gt;Authorization model design is critical&lt;/li&gt;
&lt;li&gt;Testing with FGA Query Tool was essential&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. RAG Authorization Performance&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Initial approach: Check every document (slow)&lt;/li&gt;
&lt;li&gt;Solution: Pinecone filters + FGA checks (fast)&lt;/li&gt;
&lt;li&gt;Result: Smaller query time with 10+ documents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Agent Debugging&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BigQuery audit trail provides complete action history&lt;/li&gt;
&lt;li&gt;Structured logging helps identify agent execution flow&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💡 Key Takeaways
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;For Developers&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start with Auth0 Universal Login (don't build custom auth)&lt;/li&gt;
&lt;li&gt;Use FGA Store for document-level permissions&lt;/li&gt;
&lt;li&gt;Token Vault is perfect for AI agent API keys&lt;/li&gt;
&lt;li&gt;Audit logging is non-negotiable for production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;For AI Agent Builders&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Permission-aware RAG prevents data leakage&lt;/li&gt;
&lt;li&gt;Multi-agent orchestration needs clear patterns&lt;/li&gt;
&lt;li&gt;Real-time web search &amp;gt; static knowledge bases&lt;/li&gt;
&lt;li&gt;Iterative refinement improves output quality&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎯 What I'm Proud Of
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Agent API keys via Token Vault&lt;/strong&gt; - Climatiq, SendGrid, Pinecone secured in JWT&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Production-ready security&lt;/strong&gt; - FGA Store, audit logs, JWT, environment variables&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Real-world use case&lt;/strong&gt; - solves actual SMB pain point&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;No dummy data&lt;/strong&gt; - live web search, real APIs&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;5 agents + 9 sub-agents&lt;/strong&gt; - complex multi-agent system&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;ESG Copilot demonstrates how &lt;strong&gt;Auth0 for AI Agents&lt;/strong&gt; enables production-ready AI systems with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔐 &lt;strong&gt;User authentication&lt;/strong&gt; (Universal Login + JWT with roles/permissions)&lt;/li&gt;
&lt;li&gt;🔑 &lt;strong&gt;Tool control&lt;/strong&gt; (Token Vault for secure API key management)&lt;/li&gt;
&lt;li&gt;🎯 &lt;strong&gt;Knowledge limits&lt;/strong&gt; (FGA Store + two-layer RAG authorization)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result: An autonomous multi-agent AI system that SMBs can trust with sensitive ESG data, knowing every action is authenticated, authorized, and audited.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;5 core agents + 9 sub-agents&lt;/li&gt;
&lt;li&gt;4 roles with 9 permissions&lt;/li&gt;
&lt;li&gt;3 API keys secured via Token Vault&lt;/li&gt;
&lt;li&gt;2-layer authorization (Pinecone filters + FGA checks)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Try it yourself&lt;/strong&gt;: &lt;a href="https://github.com/omkardongre/ESG-Copilot" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🙏 Acknowledgments
&lt;/h3&gt;

&lt;p&gt;Thanks to Auth0 and DEV Community for this challenge! Building with Auth0 for AI Agents transformed how I think about securing multi-agent systems. The combination of Token Vault and FGA Store makes production-ready AI security achievable without building custom infrastructure.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>auth0challenge</category>
      <category>ai</category>
      <category>authentication</category>
    </item>
    <item>
      <title>MediVision Assistant</title>
      <dc:creator>omkar</dc:creator>
      <pubDate>Sun, 14 Sep 2025 18:28:01 +0000</pubDate>
      <link>https://forem.com/omkar598/medivision-assistant-13go</link>
      <guid>https://forem.com/omkar598/medivision-assistant-13go</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-ai-studio-2025-09-03"&gt;Google AI Studio Multimodal Challenge&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;MediVision Assistant - An AI-powered healthcare companion that makes medical assistance accessible to everyone, especially those with visual impairments or accessibility needs. The app combines computer vision, voice recognition, and AI chat to provide comprehensive health monitoring and assistance.&lt;/p&gt;

&lt;p&gt;Key Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🖼️ AI Skin Analysis - Upload photos and videos for instant skin condition assessment&lt;/li&gt;
&lt;li&gt;🎨 AI Health Infographics - Generate professional medical infographics using Imagen 4.0&lt;/li&gt;
&lt;li&gt;🎤 Voice Symptom Logger - Record and transcribe health symptoms using speech-to-text&lt;/li&gt;
&lt;li&gt;💊 Medication Scanner - OCR-powered medication identification and management&lt;/li&gt;
&lt;li&gt;💬 AI Health Chat - Conversational AI for health questions and guidance&lt;/li&gt;
&lt;li&gt;🔗 Seamless Analysis-to-Chat Integration - Continue conversations with AI based on analysis results&lt;/li&gt;
&lt;li&gt;♿ Full Accessibility Support - Voice navigation, screen reader compatibility, high contrast mode&lt;/li&gt;
&lt;li&gt;📱 Progressive Web App - Works offline, installable on any device&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Live Application: &lt;a href="https://medivision.omkard.site" rel="noopener noreferrer"&gt;https://medivision.omkard.site&lt;/a&gt; (Custom domain mapped via Google Cloud Run)&lt;br&gt;
Backup Link: &lt;a href="https://medivision-assistant-968390101733.us-central1.run.app" rel="noopener noreferrer"&gt;https://medivision-assistant-968390101733.us-central1.run.app&lt;/a&gt;  (Direct Cloud Run URL)&lt;/p&gt;

&lt;p&gt;GitHub Repository: &lt;a href="https://github.com/omkardongre/medi-vision-assistant-ai" rel="noopener noreferrer"&gt;https://github.com/omkardongre/medi-vision-assistant-ai&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Demo : &lt;a href="https://youtu.be/kxGtnp9X_48?si=rvrUcb-HwdogB7pS" rel="noopener noreferrer"&gt;https://youtu.be/kxGtnp9X_48?si=rvrUcb-HwdogB7pS&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Homepage Dashboard: Clean, accessible dashboard with health summary and quick actions&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%2Ft953kyqweffpg7wdiflt.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%2Ft953kyqweffpg7wdiflt.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Skin Analysis: AI-powered skin condition analysis with detailed insights&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%2Fyul1vb2f6ib37v4trlt6.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%2Fyul1vb2f6ib37v4trlt6.png" alt=" "&gt;&lt;/a&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%2Fnpe4ggha14r85n3j9ukw.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%2Fnpe4ggha14r85n3j9ukw.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Voice Logger: Voice-to-text symptom recording with transcription&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%2Fqk52jt47yn8puwqycm2r.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%2Fqk52jt47yn8puwqycm2r.png" alt=" "&gt;&lt;/a&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%2Fqfq5rbes56r917w1vhtm.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%2Fqfq5rbes56r917w1vhtm.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Health Chat: Conversational AI for health questions&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%2Fu589w00ngr8cu5upwl8w.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%2Fu589w00ngr8cu5upwl8w.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI Health Infographics: Professional medical infographics &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fenhn887x4299iredieec.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%2Fenhn887x4299iredieec.png" alt=" "&gt;&lt;/a&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%2Fkylaxqh1cc68u6k7b8sn.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%2Fkylaxqh1cc68u6k7b8sn.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Health Records&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%2F3l9y96zckvbavb7fowvx.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%2F3l9y96zckvbavb7fowvx.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Accessibility Features: Comprehensive accessibility toolbar with voice navigation&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%2F0dayoklfqjd6hgkwki6r.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%2F0dayoklfqjd6hgkwki6r.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Google AI Studio
&lt;/h2&gt;

&lt;p&gt;I leveraged Google AI Studio extensively to power the multimodal capabilities:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Gemini 2.5 Flash for Skin Analysis (Image + Video)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Integrated Gemini's vision capabilities to analyze uploaded skin photos and videos&lt;/li&gt;
&lt;li&gt;Provides detailed assessments of skin conditions, moles, rashes, and other dermatological concerns&lt;/li&gt;
&lt;li&gt;Supports video analysis for dynamic skin condition monitoring and movement patterns&lt;/li&gt;
&lt;li&gt;Returns structured health insights with confidence scores and recommendations&lt;/li&gt;
&lt;li&gt;Supports multiple video formats (MP4, MOV, AVI, WebM) up to 25MB&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Gemini 2.5 Flash for Health Chat
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Powers the conversational AI health assistant&lt;/li&gt;
&lt;li&gt;Processes natural language health questions and provides evidence-based responses&lt;/li&gt;
&lt;li&gt;Maintains conversation context for follow-up questions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Imagen 4.0 for Health Infographics
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Integrated Google Imagen 4.0 for professional medical infographic generation&lt;/li&gt;
&lt;li&gt;Creates medication schedules, health progress charts, and symptom tracking visuals&lt;/li&gt;
&lt;li&gt;Generates accessible, high-contrast infographics with professional medical styling&lt;/li&gt;
&lt;li&gt;Supports download and sharing of AI-generated health content&lt;/li&gt;
&lt;li&gt;Uses latest Imagen for cutting-edge image generation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Multimodal Integration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Combined text, image, video, voice, and AI-generated visual content for comprehensive health monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Multimodal Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🎥 Video + Text Analysis (Skin Analysis Page)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Video Skin Monitoring: Users upload videos for dynamic skin condition analysis and movement patterns&lt;/li&gt;
&lt;li&gt;Symptom Documentation: Video recordings of skin symptoms for detailed medical assessment&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🖼️ Image + Text Analysis
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Skin Photo Analysis: Users upload photos of skin conditions, and Gemini analyzes them for potential health concerns&lt;/li&gt;
&lt;li&gt;Medication OCR: Scans medication labels and bottles to extract drug information, dosages, and instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎤 Voice + Text Processing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Voice Symptom Logger: Records audio descriptions of symptoms and converts them to structured text&lt;/li&gt;
&lt;li&gt;Voice Navigation: Complete app navigation using voice commands ("go home", "skin analysis", "emergency")&lt;/li&gt;
&lt;li&gt;Audio Feedback: Text-to-speech responses for accessibility&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💬 Conversational AI
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Contextual Health Chat: AI remembers previous conversations and provides personalized health guidance&lt;/li&gt;
&lt;li&gt;Seamless Analysis Integration: After any analysis (skin, medication, voice logger), users can click "Discuss with AI Assistant" to continue the conversation with full context of their analysis results&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ♿ Accessibility-First Design
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Screen Reader Compatible: Full ARIA labels and semantic HTML&lt;/li&gt;
&lt;li&gt;Voice Commands: Navigate the entire app using voice ("skin analysis", "medication scanner", "help")&lt;/li&gt;
&lt;li&gt;High Contrast Mode: Enhanced visibility for users with visual impairments&lt;/li&gt;
&lt;li&gt;Font Scaling: Adjustable text size up to 300%&lt;/li&gt;
&lt;li&gt;Keyboard Navigation: Complete app functionality without mouse&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🎨 AI-Generated Visual Content
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Health Infographics: Professional medical charts and schedules generated by Imagen 4.0&lt;/li&gt;
&lt;li&gt;Medication Schedules: Visual medication timing and dosage charts&lt;/li&gt;
&lt;li&gt;Progress Tracking: Health milestone and achievement visualizations&lt;/li&gt;
&lt;li&gt;Symptom Charts: Color-coded symptom monitoring and tracking graphics&lt;/li&gt;
&lt;li&gt;Download &amp;amp; Share: Export AI-generated infographics for medical consultations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔄 Data Integration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Health Records: All multimodal inputs (videos, images, voice, chat, infographics) are stored and organized&lt;/li&gt;
&lt;li&gt;Export Capabilities: Users can export their health data and AI-generated infographics for medical consultations&lt;/li&gt;
&lt;li&gt;Video Storage: Secure video analysis results&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technical Implementation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: Next.js 15 with TypeScript and Tailwind CSS&lt;/li&gt;
&lt;li&gt;AI Integration: Google AI Studio with Gemini 2.5 Flash (video, image, text, audio) and Imagen 4.0 (infographics)&lt;/li&gt;
&lt;li&gt;Voice Processing: Web Speech API for speech-to-text and text-to-speech&lt;/li&gt;
&lt;li&gt;Image Processing: Canvas API for image optimization and preprocessing&lt;/li&gt;
&lt;li&gt;Deployment: Google Cloud Run with automatic scaling&lt;/li&gt;
&lt;li&gt;Database: Supabase for health records and user data&lt;/li&gt;
&lt;li&gt;Accessibility: WCAG 2.1 AA compliant with comprehensive testing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Impact &amp;amp; Accessibility
&lt;/h2&gt;

&lt;p&gt;This project demonstrates how AI can make healthcare more accessible to everyone, particularly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visually impaired users who can navigate entirely by voice&lt;/li&gt;
&lt;li&gt;Elderly users who may have difficulty with complex interfaces&lt;/li&gt;
&lt;li&gt;Users with motor disabilities who rely on voice commands&lt;/li&gt;
&lt;li&gt;Non-native speakers who can describe symptoms in their own words&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The multimodal approach ensures that health monitoring is not limited by traditional input methods, making medical assistance truly inclusive.&lt;/p&gt;




&lt;p&gt;Built with ❤️ for the Google AI Studio Multimodal Challenge&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>ai</category>
      <category>gemini</category>
    </item>
  </channel>
</rss>
