<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ABINJITH TK</title>
    <description>The latest articles on DEV Community by ABINJITH TK (@abinjith_tk_e85889d1609a4).</description>
    <link>https://dev.to/abinjith_tk_e85889d1609a4</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%2F3358646%2F09d4f406-f3cd-4d87-bcdf-ee5e304f3214.png</url>
      <title>DEV Community: ABINJITH TK</title>
      <link>https://dev.to/abinjith_tk_e85889d1609a4</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abinjith_tk_e85889d1609a4"/>
    <language>en</language>
    <item>
      <title>Google I/O 2026: The Entire Stack Is Now Built for Agents — An Indie Dev's Honest Take</title>
      <dc:creator>ABINJITH TK</dc:creator>
      <pubDate>Sun, 24 May 2026 12:33:26 +0000</pubDate>
      <link>https://dev.to/abinjith_tk_e85889d1609a4/google-io-2026-the-entire-stack-is-now-built-for-agents-an-indie-devs-honest-take-3b2j</link>
      <guid>https://dev.to/abinjith_tk_e85889d1609a4/google-io-2026-the-entire-stack-is-now-built-for-agents-an-indie-devs-honest-take-3b2j</guid>
      <description>&lt;h2&gt;
  
  
  93 Agents. One OS. Twelve Hours. Under $1,000.
&lt;/h2&gt;

&lt;p&gt;I need to tell you something before we get into the announcements.&lt;/p&gt;

&lt;p&gt;For months, I've been building an app — a kind of AI operating system where specialized agents each own a domain. A coding agent. A design agent. A research agent. Each one has real programming functions as its tools. They don't just answer questions — they &lt;em&gt;do things&lt;/em&gt;. And the core idea? Put them in a shared space where they collaborate, challenge each other, and make better decisions together than any single agent could alone.&lt;/p&gt;

&lt;p&gt;Then Google I/O 2026 happened.&lt;/p&gt;

&lt;p&gt;I sat through the keynote, the developer keynote, the Firebase session, the Flutter session, the AI deep-dive — and kept seeing my own architecture reflected back at me. Multi-agent parallelism. Specialized sub-agents spawning on demand. Agents triggering backend functions. Agents building UI in real time.&lt;/p&gt;

&lt;p&gt;It wasn't a "they stole my idea" moment. It was a "the entire industry is converging on this pattern" moment. And that's way more interesting. 😅&lt;/p&gt;

&lt;p&gt;Let me walk you through what Google actually shipped, why it matters, and the one thing I think they're still missing.&lt;/p&gt;




&lt;h2&gt;
  
  
  Google Didn't Ship Features. They Shipped an Architecture.
&lt;/h2&gt;

&lt;p&gt;Here's what most coverage will miss: the individual announcements aren't the story. The &lt;em&gt;connection between them&lt;/em&gt; is.&lt;/p&gt;

&lt;p&gt;Google rebuilt every layer of their platform around one assumption — &lt;strong&gt;agents are the new primary users of software infrastructure&lt;/strong&gt;. Not humans clicking buttons. Agents making API calls, triggering functions, rendering UI, and executing transactions.&lt;/p&gt;

&lt;p&gt;Once you see it, you can't unsee it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Foundation: Models That Execute, Not Just Respond
&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%2F7vbgqs0d7157lc46fuk2.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%2F7vbgqs0d7157lc46fuk2.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Three model drops. One common thread: they're built for &lt;em&gt;doing&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini Omni&lt;/strong&gt; — a multimodal family that takes any input and produces any output. It understands physics. It edits video through conversation. It reasons about the real world spatially. The first variant, Omni Flash, shipped the same day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini 3.5 Flash&lt;/strong&gt; — frontier-class, 4x faster than comparable models, aggressively cost-optimized. Why does speed matter this much? Because when an agent makes 200 API calls to complete one task, latency compounds. Fast and cheap isn't a nice-to-have. It's the difference between agents being viable and agents being a toy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemma 4&lt;/strong&gt; — open-source under Apache 2, 100 million downloads in month one. Runs offline on mobile. Optimized for reasoning and agentic workflows. This is the model that keeps working when your connection drops.&lt;/p&gt;

&lt;p&gt;And underneath all of it: &lt;strong&gt;8th-gen TPUs&lt;/strong&gt; split into dedicated training (TPU 8) and inference (TPU 8i) chips, deployed across a million+ units globally. They're not just building models for agents. They're building &lt;em&gt;silicon&lt;/em&gt; for agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Dev Layer: Anti-Gravity 2.0 Is Not an IDE
&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%2F82ppk8py9xcv3lfnu5zl.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%2F82ppk8py9xcv3lfnu5zl.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is where I started taking notes furiously.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Anti-Gravity 2.0&lt;/strong&gt; isn't a code editor with AI bolted on. It's a standalone desktop application — a mission-control hub where multiple agents work on your project simultaneously.&lt;/p&gt;

&lt;p&gt;One agent writes frontend code. Another generates design assets. A third reviews architecture decisions. They don't step on each other because the system manages git branching automatically.&lt;/p&gt;

&lt;p&gt;The headline demo: &lt;strong&gt;93 autonomous sub-agents built a functioning operating system in 12 hours for under $1,000 in API credits.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let that sink in. Not $1,000 per agent. $1,000 total. For an OS. 💀&lt;/p&gt;

&lt;p&gt;Now — is that OS production-ready? Almost certainly not. 🙃 But the economics are the point. The cost floor for complex software just dropped through the floor.&lt;/p&gt;

&lt;p&gt;What makes Anti-Gravity genuinely different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic sub-agents&lt;/strong&gt; — your primary agent spawns temporary specialists (QA, data science, security audit) when it needs them, then dismisses them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cron scheduling&lt;/strong&gt; — agents on autopilot. Scan PRs every morning. Monitor cloud health hourly. Run regression tests at midnight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown orchestration&lt;/strong&gt; — define multi-agent workflows in &lt;code&gt;.md&lt;/code&gt; files. No pipeline code. No YAML hell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Managed agents via API&lt;/strong&gt; — one API call spins up an isolated agent with its own secure Linux sandbox&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise mapping&lt;/strong&gt; — connects directly to corporate Google Cloud projects under existing compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Gemini CLI got folded into the &lt;strong&gt;Anti-Gravity CLI&lt;/strong&gt;, so terminal-native developers get the same backend without leaving their workflow.&lt;/p&gt;

&lt;p&gt;This is the pattern I've been building. Specialized agents, real tools, parallel execution. Seeing it at Google scale tells me the architecture works. 😳👍&lt;/p&gt;




&lt;h2&gt;
  
  
  The Backend: Firebase Now Serves Agents as First-Class Citizens
&lt;/h2&gt;

&lt;p&gt;This one flew under the radar, but it might be the most important infrastructure shift for anyone building agent-powered apps.&lt;/p&gt;

&lt;p&gt;Firebase is no longer just "a backend for mobile apps." It's now explicitly &lt;strong&gt;a backend for autonomous agents&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent-Triggered Cloud Functions&lt;/strong&gt; — functions fire when an agent does something, not just when a human taps a button. Your agent completes a research task? That triggers a function to store results, notify the user, and queue the next step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delegated Authorization&lt;/strong&gt; — Firebase Auth now handles agent identity. An AI acts on your behalf with explicit, scoped permissions. This is the plumbing that makes "hey Gemini, book me a flight" actually work without giving the agent your entire Google account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hybrid Inference&lt;/strong&gt; — models run locally on-device (expanding to Gemma 4), falling back to cloud only when needed. This isn't just about cost. It's privacy architecture. Your personal data stays on your device unless it absolutely has to leave.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security That Actually Thinks About Agents
&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%2Fzoit0hnqr8amy6dp09ii.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%2Fzoit0hnqr8amy6dp09ii.png" alt=" " width="800" height="450"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Google shipped three security features that tell me they've thought hard about the attack surface:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Template-Only Mode&lt;/strong&gt; — Firebase AI Logic only executes prompt templates stored on your server. If a malicious client tries to inject custom prompts? Ignored. Completely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication-Mode&lt;/strong&gt; — every Gemini API call requires a valid Firebase token. No token, no execution. Period.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App Check Replay Protection&lt;/strong&gt; — one-time tokens prevent attackers from replaying valid requests to drain your AI quota.&lt;/p&gt;

&lt;p&gt;These aren't afterthoughts bolted on after a security review. They shipped alongside the agent features. That's a good sign.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Frontend: UI That Builds Itself
&lt;/h2&gt;

&lt;p&gt;Two threads here, both wild.&lt;/p&gt;

&lt;h3&gt;
  
  
  Flutter Agents
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Agentic Hot Reload&lt;/strong&gt; — AI coding agents can discover your running Flutter app, connect to it, and hot-reload changes as they write code. You watch your app transform in real time while the agent works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GenUI + A2UI Protocol&lt;/strong&gt; — instead of returning text, AI composes actual interactive Flutter widgets on the fly. They're exploring interpreted bytecode delivery — your app's UI evolves without an app store update.&lt;/p&gt;

&lt;p&gt;Oh, and &lt;strong&gt;Flutter now powers the 2026 Toyota RAV4 infotainment system&lt;/strong&gt;. Not a demo. Not a concept car. A mass-market production vehicle. That's a credibility milestone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Canonical&lt;/strong&gt; (the Ubuntu company) officially took over as lead maintainer for Flutter Desktop across Linux, Windows, and macOS. The "will Flutter desktop survive?" question is answered.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Web Gets Agent-Aware
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;WebMCP&lt;/strong&gt; — a proposed standard where websites declare tools and capabilities directly to browser-based agents. Think of it like &lt;code&gt;robots.txt&lt;/code&gt; for the agent era. Instead of telling crawlers what to &lt;em&gt;avoid&lt;/em&gt;, you tell agents what they &lt;em&gt;can do&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Origin trials in Chrome 149. If this gets adoption, it rewrites how agents interact with the entire web.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chrome DevTools for Agents&lt;/strong&gt; — a new "Agentic Browsing" category in Lighthouse. Agents self-audit accessibility, validate discovery maps, catch errors, and deploy their own fixes. The browser becomes the agent's workspace.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Consumer Layer: Agents in the Wild
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Gemini Spark&lt;/strong&gt; — a 24/7 personal agent running on dedicated cloud VMs. It works while you sleep. Close your laptop, the agent keeps going.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agentic Commerce&lt;/strong&gt; — three building blocks for agents that buy things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Universal Commerce Protocol (UCP)&lt;/strong&gt; — an open standard backed by Amazon, Meta, and Microsoft for agent-to-merchant communication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Payments Protocol (AP2)&lt;/strong&gt; — secure payment tracking with strict guardrails&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Universal Cart&lt;/strong&gt; — cross-merchant intelligence that catches compatibility errors (mismatched PC parts) and tracks price drops&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon and Microsoft signing onto UCP is the real signal. This isn't Google going solo. It's an industry bet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audio Glasses&lt;/strong&gt; — launching Fall 2026 with Samsung, Qualcomm, Warby Parker, and Gentle Monster. Gemini whispers in your ear. Orders your coffee through DoorDash. No screen. No phone. Just voice. 👀✨&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Think Is Still Missing (And Why It Matters)
&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%2Fqhsghr9b71zip49fk0k9.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%2Fqhsghr9b71zip49fk0k9.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's my genuine take — the part that goes beyond reporting.&lt;/p&gt;

&lt;p&gt;Google showed agents working &lt;strong&gt;in parallel&lt;/strong&gt;. That's powerful. But parallel isn't the same as &lt;strong&gt;collaborative&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What I mean: Anti-Gravity has one agent on frontend, another on design, another on architecture. They work simultaneously. Great. But are they &lt;em&gt;talking to each other&lt;/em&gt;? Are they debating tradeoffs? Is the architecture agent pushing back when the frontend agent makes a decision that creates tech debt?&lt;/p&gt;

&lt;p&gt;The pattern I keep coming back to — and the one I've been building toward — is &lt;strong&gt;agent deliberation&lt;/strong&gt;. A group conversation where specialized agents don't just execute in their lane, but actively challenge each other.&lt;/p&gt;

&lt;p&gt;Picture it: a coding agent proposes an implementation. A QA agent immediately flags three edge cases. A design agent says the UX flow doesn't work. An architecture agent weighs in on system-wide implications. They go back and forth. They converge on a decision that's better than any single agent would produce alone.&lt;/p&gt;

&lt;p&gt;This isn't parallel execution. It's &lt;strong&gt;peer review at machine speed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Google has all the pieces — the models are fast enough, the sandboxing works, the infrastructure scales. But the "agents arguing productively in a room" pattern? I haven't seen anyone ship that at scale yet.&lt;/p&gt;

&lt;p&gt;I think that's the next frontier. And I think whoever cracks it — whether it's Google, an open-source project, or an indie dev working late at night 😢 — unlocks a step-change in output quality that parallel execution alone can't match.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Honest Concerns
&lt;/h2&gt;

&lt;p&gt;I'm excited. I'm not blind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lock-in is the business model.&lt;/strong&gt; Anti-Gravity + Firebase + Gemini API + Cloud Run + TPUs. Once you build on this stack, leaving is expensive. Google knows exactly what they're doing. 🙂‍↔️&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 93-agent OS is a headline, not a benchmark.&lt;/strong&gt; We don't know what "functioning" means. Can it handle edge cases? Run real applications? The economics are compelling, but the quality bar is undefined.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent commerce trust doesn't exist yet.&lt;/strong&gt; People barely trust chatbots to summarize a Wikipedia article correctly. Handing them a credit card is a different conversation. 😬 UCP and AP2 are technically sound. Consumer trust is years behind the technology.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security is necessary but not sufficient.&lt;/strong&gt; Template-Only Mode is clever. But the attack surface of agents with autonomous backend access is enormous. What about prompt injection through data they process? What about agents that need dynamic prompting by design? The tension between capability and safety isn't resolved — it's just acknowledged.&lt;/p&gt;




&lt;h2&gt;
  
  
  So What Does This All Mean?
&lt;/h2&gt;

&lt;p&gt;Google I/O 2026 told one story across six hours of content: &lt;strong&gt;agents are becoming the primary consumers of software infrastructure.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every layer got rebuilt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Models optimized for speed and tool use&lt;/li&gt;
&lt;li&gt;Developer tools that treat agents as builders&lt;/li&gt;
&lt;li&gt;Backends that authenticate and authorize agent actions&lt;/li&gt;
&lt;li&gt;Frontends that declare capabilities to agents&lt;/li&gt;
&lt;li&gt;Consumer products where agents act autonomously&lt;/li&gt;
&lt;li&gt;Hardware that puts agents in your ear&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As someone building multi-agent architecture independently, this week felt like validation. The patterns work. The economics are arriving. The infrastructure exists.&lt;/p&gt;

&lt;p&gt;But the most interesting problem is still open: how do you get agents to &lt;em&gt;think together&lt;/em&gt;, not just work side by side?&lt;/p&gt;

&lt;p&gt;That's what I'm chasing. And after watching Google put the foundation in place, I'm more convinced than ever that collaborative agent reasoning — not just parallel execution — is where the real unlock lives.&lt;/p&gt;

&lt;p&gt;The agentic era isn't coming. It showed up on May 19, 2026, wearing a Google badge. 🎫&lt;/p&gt;

&lt;p&gt;Now the question is: what do we build on top of it?&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleiochallenge</category>
    </item>
    <item>
      <title>Thuna (തുണ) — Offline AI Health Companion for Elderly, Powered by Gemma 4 E2B</title>
      <dc:creator>ABINJITH TK</dc:creator>
      <pubDate>Sat, 23 May 2026 13:17:50 +0000</pubDate>
      <link>https://dev.to/abinjith_tk_e85889d1609a4/thuna-tunn-offline-ai-health-companion-for-elderly-powered-by-gemma-4-e2b-j03</link>
      <guid>https://dev.to/abinjith_tk_e85889d1609a4/thuna-tunn-offline-ai-health-companion-for-elderly-powered-by-gemma-4-e2b-j03</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Build with Gemma 4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Thuna (തുണ)&lt;/strong&gt; is a voice-first AI health companion that runs 100% offline on Android, built for elderly people in rural India who can't read, can't type, and have no reliable internet.&lt;/p&gt;

&lt;p&gt;My grandmother takes diabetes medication daily. One month, the pharmacy changed her tablet strength. She got confused and took double the dose for 30 days. She developed hypoglycemia. Nobody noticed until she started fainting.&lt;/p&gt;

&lt;p&gt;My other grandmother has polio — she walks with a walker, lives with chronic pain, and can't access hospitals easily. She can't read English. She gets health advice from neighbors — often wrong, sometimes dangerous.&lt;/p&gt;

&lt;p&gt;We live in Poothampara, a rural village in Kerala, India. Internet is limited and unreliable. These aren't edge cases — 240 million elderly people globally manage chronic conditions alone.&lt;/p&gt;

&lt;p&gt;Thuna solves this with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Voice-first Malayalam interaction&lt;/strong&gt; — speak naturally, hear responses. No typing, no reading needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medication safety&lt;/strong&gt; — tracks exact dosages, detects 15 dangerous drug interactions, prevents overdoses with scheduled TTS reminders&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Health monitoring&lt;/strong&gt; — say "BP 140/90" or "ഷുഗർ 180" and it saves, tracks trends, alerts on danger&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prescription scanning&lt;/strong&gt; — photograph a prescription, Gemma 4 vision extracts all medications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Companion personality&lt;/strong&gt; — fights loneliness by talking about movies, cooking, family. Offers to call family members.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Family status sharing&lt;/strong&gt; — one tap sends daily health update to family WhatsApp&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Health report&lt;/strong&gt; — structured summary for doctor/health worker visits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SOS emergency&lt;/strong&gt; — one-tap call for help&lt;/li&gt;
&lt;/ul&gt;

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

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

&lt;p&gt;&lt;strong&gt;APK Download:&lt;/strong&gt; &lt;a href="https://drive.google.com/drive/folders/17SjktvnP5EXh-kDmtXxRWF73h8EdzWrG?usp=sharing" rel="noopener noreferrer"&gt;Google Drive&lt;/a&gt;&lt;/p&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/AbinjithTK" rel="noopener noreferrer"&gt;
        AbinjithTK
      &lt;/a&gt; / &lt;a href="https://github.com/AbinjithTK/Thuna" rel="noopener noreferrer"&gt;
        Thuna
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Offline AI Health Companion for the Elderly — Gemma 4 on-device via Cactus
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Thuna (തുണ) — Your Health Companion&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Offline AI health assistant for elderly people in remote areas, powered by Gemma 4 E2B on-device.&lt;/strong&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick Start&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install
npx react-native run-android&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Architecture&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;Voice/Text Input → IntentParser (deterministic) → AgentEngine (DB ops) → Gemma 4 E2B (response) → Malayalam TTS
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IntentParser&lt;/strong&gt;: Regex-based extraction for medications, vitals, conditions, lab results (100% reliable)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AgentEngine&lt;/strong&gt;: Executes tools against WatermelonDB (save_vital, save_medication, schedule_reminder, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 E2B&lt;/strong&gt;: Generates natural Malayalam responses only (not used for data extraction)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cactus v1.7&lt;/strong&gt;: On-device inference engine with zero-copy memory mapping&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Tech Stack&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LLM&lt;/td&gt;
&lt;td&gt;Gemma 4 E2B INT4 via Cactus v1.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;STT&lt;/td&gt;
&lt;td&gt;Cactus Whisper (Malayalam) + Android SpeechRecognizer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TTS&lt;/td&gt;
&lt;td&gt;Android TextToSpeech (ml-IN)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;WatermelonDB + openEHR Flat JSON&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Framework&lt;/td&gt;
&lt;td&gt;React Native 0.82 (New Architecture)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Navigation&lt;/td&gt;
&lt;td&gt;React Navigation 7 (tabs + stack)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Voice-first Malayalam interaction&lt;/li&gt;
&lt;li&gt;BP, sugar, SpO2, temperature, heart rate tracking with critical alerts&lt;/li&gt;
&lt;li&gt;Medication…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/AbinjithTK/Thuna" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;h3&gt;
  
  
  Model: Gemma 4 E2B (2B effective parameters, INT4 quantization via Cactus v1.7)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why E2B?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My grandmother's phone has 6GB RAM. The E2B INT4 model fits in ~1.5GB, runs inference in ~2 seconds, and works completely offline. In Poothampara, internet drops for hours. A cloud API would be useless. Gemma 4 E2B running on-device through Cactus means the app works every single time — no connectivity required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Gemma 4 does in Thuna:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Malayalam response generation&lt;/strong&gt; — warm, conversational responses in the user's native language. The system prompt is entirely in Malayalam with explicit grammar rules and examples.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multimodal prescription OCR&lt;/strong&gt; — user photographs a prescription → Gemma 4 vision extracts medication names, dosages, frequencies → all saved with auto-reminders. One photo replaces 10 minutes of confused explanation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Companion conversation&lt;/strong&gt; — talks about anything (movies, cooking, memories). Detects loneliness and offers to call family. This is what makes it a companion, not just a health tool.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Context-aware responses&lt;/strong&gt; — uses conversation history to give personalized, relevant answers.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What Gemma 4 does NOT do (intentionally):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Health data extraction (BP values, medication names, dosages) uses a deterministic regex parser — not the LLM. Why? My grandmother's overdose happened because of confusion. A regex will NEVER confuse "2mg twice daily" with "two 2mg tablets." For health-critical data, reliability beats flexibility. Gemma 4 handles the warmth; regex handles the precision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture:&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;Voice → Regex IntentParser (&amp;lt;1ms, 100% reliable) → AgentEngine (23 tools, DB ops) → Gemma 4 E2B (Malayalam response) → TTS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This hybrid approach gives us the best of both: instant reliable tool execution + warm natural conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;23 agent tools (save_vital, drug_interaction_check, schedule_reminder, prescription_ocr, compound_risk_alert, etc.)&lt;/li&gt;
&lt;li&gt;WatermelonDB with openEHR standard for health records&lt;/li&gt;
&lt;li&gt;Post-processing filter strips Hindi/Manglish from model output&lt;/li&gt;
&lt;li&gt;In-app TTS reminder system that speaks Malayalam at scheduled times&lt;/li&gt;
&lt;li&gt;Proactive health alerts (diabetes + high sugar + high BP = critical warning)&lt;/li&gt;
&lt;li&gt;FHIR R4 cloud sync when internet is available (optional)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built and tested with my actual grandmother in our village. When she said "ഷുഗർ ഗുളിക കഴിച്ചു" (took sugar tablet) and Thuna confirmed in Malayalam, she understood immediately. That's the moment I knew it worked.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
    </item>
    <item>
      <title>Jems - Your life, brilliantly organized</title>
      <dc:creator>ABINJITH TK</dc:creator>
      <pubDate>Sun, 29 Mar 2026 11:15:20 +0000</pubDate>
      <link>https://dev.to/abinjith_tk_e85889d1609a4/jems-your-life-brilliantly-organized-4anb</link>
      <guid>https://dev.to/abinjith_tk_e85889d1609a4/jems-your-life-brilliantly-organized-4anb</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/notion-2026-03-04"&gt;Notion MCP Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;Most AI assistants are a single chatbot trying to do everything. Jems flips that — it's a &lt;strong&gt;group chat of four specialist AI agents&lt;/strong&gt; that collaborate in real time, and they use &lt;strong&gt;Notion as their shared workspace&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You send one message. All four agents see it, discuss it internally, and the most relevant one responds — like a WhatsApp group, except your friends are AI experts who never forget and always coordinate.&lt;/p&gt;

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

&lt;p&gt;🟢 &lt;strong&gt;Noor&lt;/strong&gt; — The Orchestrator. Your main point of contact. Routes messages, synthesizes responses, handles real-time voice streaming. Reads your Notion workspace for context — meeting notes, project docs, personal wiki — to ground every response in your actual life.&lt;/p&gt;

&lt;p&gt;🟡 &lt;strong&gt;Kai&lt;/strong&gt; — The Planner. Owns your schedule, tasks, and reminders. When you say "plan my week," Kai creates structured task entries directly in your Notion Tasks database — with due dates, priorities, time estimates, and status tracking. Not a text dump — real, filterable, sortable database rows.&lt;/p&gt;

&lt;p&gt;🩷 &lt;strong&gt;Sage&lt;/strong&gt; — The Growth Coach. Tracks goals, monitors progress, nudges when things stall. Maintains a Goals dashboard in Notion with milestones, completion percentages, and weekly progress updates. Surfaces social briefings and peer accountability.&lt;/p&gt;

&lt;p&gt;🟣 &lt;strong&gt;Echo&lt;/strong&gt; — The Memory Keeper. Journals your thoughts, remembers what you said weeks ago, spots mood patterns. Creates rich Notion pages for journal entries with metadata tags — timestamps, mood indicators, topics — making your inner life searchable and reflective.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The magic is shared context.&lt;/strong&gt; When Kai creates a task, Echo remembers it. When Sage updates a goal, Kai adjusts the plan. And all of it is visible as structured data in Notion — full transparency into how your AI team thinks and acts.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Spatial UI
&lt;/h3&gt;

&lt;p&gt;This isn't a chat app — it's an operating system. Five screens connected by a floating glassmorphism dock:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;th&gt;Screen&lt;/th&gt;
&lt;th&gt;Agent&lt;/th&gt;
&lt;th&gt;What Happens in Notion&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/hub&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Command Hub&lt;/td&gt;
&lt;td&gt;Noor&lt;/td&gt;
&lt;td&gt;Reads Notion context for grounded responses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/schedule&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Planner&lt;/td&gt;
&lt;td&gt;Kai&lt;/td&gt;
&lt;td&gt;Creates/updates tasks and reminders in Notion DBs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/journal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Infinite Board&lt;/td&gt;
&lt;td&gt;Echo&lt;/td&gt;
&lt;td&gt;Writes journal entries as rich Notion pages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/lounge&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Social Room&lt;/td&gt;
&lt;td&gt;Sage&lt;/td&gt;
&lt;td&gt;Tracks goals and progress in Notion dashboards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/ecosystem&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Connections&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Manage Notion MCP connection with guided setup&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pure white aesthetic. Glassmorphism. 3D clay-style agent spheres with kawaii faces. No dark mode. No clutter. Just flow.&lt;/p&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────────────────────────────────────────────┐
│                    📱 Flutter App                         │
│          Spatial UI · Glassmorphism · 3D Spheres          │
│                                                           │
│   /hub      /schedule     /journal     /lounge            │
│   Noor       Kai           Echo         Sage              │
│                                                           │
│   /ecosystem → MCP Connections (Notion setup UI)          │
└────────────────────┬─────────────────────────────────────┘
                     │ WebSocket bidi-streaming
                     │ (real-time voice + text)
                     ▼
┌──────────────────────────────────────────────────────────┐
│               ☁️ FastAPI on Cloud Run                     │
│            Google ADK Multi-Agent Runtime                  │
│                                                           │
│   🟢 Noor ←→ 🟡 Kai ←→ 🩷 Sage ←→ 🟣 Echo              │
│          (Live Bidi Agent Loop — Group Chat)               │
│                                                           │
│   Gemini 2.5 Flash (voice) + Pro (reasoning + tools)      │
│                                                           │
│   Tools: Firestore · Google Search · MCP · A2A            │
│   Infra: Terraform · 7 Cloud Scheduler cron jobs          │
└────────────────────┬─────────────────────────────────────┘
                     │ MCP (Model Context Protocol)
                     ▼
┌──────────────────────────────────────────────────────────┐
│               📓 Notion Workspace                         │
│                                                           │
│   📋 Tasks DB       → Kai writes/reads/updates tasks      │
│   🎯 Goals DB       → Sage tracks milestones + progress   │
│   📔 Journal Pages  → Echo creates rich entries           │
│   📡 Agent Log      → All agents log their activity       │
│   📄 Context Pages  → Noor reads for grounded responses   │
└──────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Flutter · Custom spatial design system · Glassmorphism · 3D agent spheres&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backend&lt;/td&gt;
&lt;td&gt;FastAPI on Google Cloud Run · Google ADK multi-agent orchestration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI Models&lt;/td&gt;
&lt;td&gt;Gemini 2.5 Flash (voice + streaming) · Gemini 2.5 Pro (reasoning + tools)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;td&gt;Firestore (users, tasks, goals, reminders, journal, messages, connections)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;Google Cloud Storage (proof uploads, memory files)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;Firebase Auth (JWT tokens) · Per-request ID token verification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Protocols&lt;/td&gt;
&lt;td&gt;MCP (Notion + extensible tools) · A2A (agent-to-agent social) · WebSocket bidi-streaming&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infra&lt;/td&gt;
&lt;td&gt;Terraform-managed · Artifact Registry · Secret Manager · 7 Cloud Scheduler cron jobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payments&lt;/td&gt;
&lt;td&gt;RevenueCat (subscriptions)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Notion&lt;/td&gt;
&lt;td&gt;Notion MCP Server — agents read/write databases and pages in real time&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  Video Demo
&lt;/h2&gt;



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



&lt;p&gt;&lt;strong&gt;Demo flow:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User opens Jems → Noor greets with a morning briefing pulled from Notion context&lt;/li&gt;
&lt;li&gt;User says "Plan my week around the marathon" → message enters the agent loop&lt;/li&gt;
&lt;li&gt;Kai creates structured tasks in the Notion Tasks DB (visible in real time)&lt;/li&gt;
&lt;li&gt;Echo logs a journal entry about the marathon goal as a Notion page&lt;/li&gt;
&lt;li&gt;Sage checks goal alignment and updates the Goals dashboard in Notion&lt;/li&gt;
&lt;li&gt;Noor synthesizes everything into one response — streamed live over WebSocket&lt;/li&gt;
&lt;li&gt;User swipes to &lt;code&gt;/ecosystem&lt;/code&gt; → Notion MCP connection shown as active with guided setup UI&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Find the code and MVP apk here
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/AbinjithTK" rel="noopener noreferrer"&gt;
        AbinjithTK
      &lt;/a&gt; / &lt;a href="https://github.com/AbinjithTK/Jems" rel="noopener noreferrer"&gt;
        Jems
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;The codebase spans three layers. Here's how they connect through Notion MCP:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Flutter App — MCP Connection Management
&lt;/h3&gt;

&lt;p&gt;Users connect Notion from the Ecosystem screen (&lt;code&gt;/ecosystem&lt;/code&gt;). The MCP connections page provides a native UI for managing servers, with Notion getting a dedicated guided setup flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// mcp_connections_page.dart — Notion-specific token setup&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;isNotion&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;...[&lt;/span&gt;
  &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;padding:&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;EdgeInsets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nl"&gt;decoration:&lt;/span&gt; &lt;span class="n"&gt;BoxDecoration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;SpatialColors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;surfaceSubtle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;borderRadius:&lt;/span&gt; &lt;span class="n"&gt;BorderRadius&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;circular&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;crossAxisAlignment:&lt;/span&gt; &lt;span class="n"&gt;CrossAxisAlignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Quick steps:'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="s"&gt;'1. Go to notion.so/profile/integrations&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;
          &lt;span class="s"&gt;'2. Click "New integration"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;
          &lt;span class="s"&gt;'3. Give it a name and select a workspace&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;
          &lt;span class="s"&gt;'4. Copy the Internal Integration Secret&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;
          &lt;span class="s"&gt;'5. Share pages/databases with the integration'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The token is stored securely via the backend and immediately activates the Notion MCP toolset for all four agents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// mcp_provider.dart — Token management&lt;/span&gt;
&lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;updateToken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;serverId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;async&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_api&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'/api/mcp/servers/&lt;/span&gt;&lt;span class="si"&gt;$serverId&lt;/span&gt;&lt;span class="s"&gt;/token'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nl"&gt;body:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'token'&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;load&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Refresh server list — agents now have Notion access&lt;/span&gt;
  &lt;span class="k"&gt;return&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Backend — Agent Loop with MCP Tool Access
&lt;/h3&gt;

&lt;p&gt;The backend runs on FastAPI with Google ADK orchestrating four Gemini-powered agents in a live bidi-streaming loop. Each agent has access to MCP tools — including Notion — through ADK's tool framework:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Agent tool call flow (simplified)
# When Kai decides to create a task, it calls the Notion MCP tool:
&lt;/span&gt;
&lt;span class="c1"&gt;# 1. User says "Plan my week"
# 2. Message enters the agent loop via WebSocket
# 3. Noor routes to Kai (scheduling topic detected)
# 4. Kai calls create_page via Notion MCP:
&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;mcp_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;call_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;notion&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;create_page&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;parent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;database_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_tasks_db_id&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;properties&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Morning run — marathon prep&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}}]},&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Due Date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;date&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;start&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2026-03-31&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Priority&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;select&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;High&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;select&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Not started&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;select&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Kai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The WebSocket service streams responses token-by-token back to the Flutter app, with agent attribution so the UI knows which sphere to animate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ws_chat_service.dart — Real-time bidi streaming&lt;/span&gt;
&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="s"&gt;'event'&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'text'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;author&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;'author'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="o"&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="n"&gt;author&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;author&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isNotEmpty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;_streamingAuthor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;author&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// UI animates the correct agent sphere&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="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isNotEmpty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;_streamBuffer&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Token-by-token streaming&lt;/span&gt;
    &lt;span class="n"&gt;notifyListeners&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Infrastructure — Proactive Agents via Cloud Scheduler
&lt;/h3&gt;

&lt;p&gt;Seven Terraform-managed cron jobs trigger agents to proactively read from and write to Notion — even when the user isn't in the app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="c1"&gt;# deploy/main.tf — 7 proactive agent jobs&lt;/span&gt;
&lt;span class="nx"&gt;locals&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;scheduler_jobs&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;morning_briefing&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;schedule&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"0 7 * * *"&lt;/span&gt;   &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;# Kai reads Notion tasks, briefs user&lt;/span&gt;
    &lt;span class="nx"&gt;evening_journal&lt;/span&gt;      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;schedule&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"0 21 * * *"&lt;/span&gt;  &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;# Echo writes daily journal to Notion&lt;/span&gt;
    &lt;span class="nx"&gt;reminder_check&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;schedule&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"*/5 * * * *"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;# Check due reminders&lt;/span&gt;
    &lt;span class="nx"&gt;plan_review&lt;/span&gt;          &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;schedule&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"0 18 * * *"&lt;/span&gt;  &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;# Sage reviews goals in Notion&lt;/span&gt;
    &lt;span class="nx"&gt;smart_suggestions&lt;/span&gt;    &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;schedule&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"0 10,15 * * *"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;# Proactive suggestions&lt;/span&gt;
    &lt;span class="nx"&gt;memory_consolidation&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;schedule&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"0 3 * * *"&lt;/span&gt;   &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;# Echo consolidates memory patterns&lt;/span&gt;
    &lt;span class="nx"&gt;goal_nudge&lt;/span&gt;           &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;schedule&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"0 12 * * *"&lt;/span&gt;  &lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;# Sage nudges stalled goals&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means your Notion workspace stays alive — agents update it on schedule, not just when you're chatting.&lt;/p&gt;

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

&lt;p&gt;Notion MCP isn't a bolt-on feature in Jems — it's the &lt;strong&gt;external workspace layer&lt;/strong&gt; that makes the multi-agent architecture tangible. Here's exactly what it unlocks:&lt;/p&gt;

&lt;h3&gt;
  
  
  Agents write structured data, not text dumps
&lt;/h3&gt;

&lt;p&gt;When you tell Jems "plan my week," the message enters the four-agent loop. Kai generates a plan and writes each task as a database row in your Notion Tasks DB — with typed properties for due date, priority, time estimate, status, and which agent created it. This is real structured data you can filter, sort, group, and view in Notion's native UI. It's not a markdown blob pasted into a page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agents read your workspace for context
&lt;/h3&gt;

&lt;p&gt;When Noor needs to answer a question, it queries your Notion workspace via MCP — searching pages, reading database entries, pulling context from your meeting notes, project docs, or personal wiki. Your Notion workspace becomes a knowledge base that makes every agent response smarter and more grounded in your actual life.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bidirectional — changes flow both ways
&lt;/h3&gt;

&lt;p&gt;Update a task status in Notion? The agents see it next time they check. Agents create a journal entry? It appears as a rich Notion page you can edit, share, or embed anywhere. Notion isn't a write-only destination — it's a living collaboration surface between you and your AI team.&lt;/p&gt;

&lt;h3&gt;
  
  
  Multi-agent coordination is visible in Notion
&lt;/h3&gt;

&lt;p&gt;This is the most powerful pattern. When you say "I've been stressed about the marathon":&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Kai&lt;/strong&gt; checks your training schedule in the Notion Tasks DB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sage&lt;/strong&gt; reviews your fitness goal progress in the Goals DB&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Echo&lt;/strong&gt; recalls that journal entry about knee pain from last week&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Noor&lt;/strong&gt; synthesizes it all into one thoughtful response&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each agent's contribution is logged in Notion — you can see exactly what your AI team considered, what tools they called, and what data they used. Full transparency.&lt;/p&gt;

&lt;h3&gt;
  
  
  Proactive agents keep Notion alive
&lt;/h3&gt;

&lt;p&gt;The 7 Cloud Scheduler cron jobs mean agents don't wait for you to open the app. Every morning, Kai reads your Notion tasks and prepares a briefing. Every evening, Echo writes a journal summary. Every noon, Sage checks if your goals are stalling. Your Notion workspace evolves on its own — like having a team that works while you sleep.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP as a first-class, user-facing feature
&lt;/h3&gt;

&lt;p&gt;In the Ecosystem screen (&lt;code&gt;/ecosystem&lt;/code&gt;), users manage their MCP connections with a native Flutter UI. Notion has a dedicated setup flow with step-by-step instructions for creating an integration and sharing pages. Add your token, and all four agents immediately gain workspace access. The MCP protocol means this isn't a hardcoded Notion integration — it's a standard that works with any MCP-compatible server. Users can add GitHub, Calendar, or any other MCP server the same way.&lt;/p&gt;

&lt;h3&gt;
  
  
  What this creates
&lt;/h3&gt;

&lt;p&gt;The combination of multi-agent AI + Notion MCP + proactive scheduling creates something that doesn't exist yet: &lt;strong&gt;an AI operating system that lives inside your real workspace&lt;/strong&gt;. Your agents don't operate in a silo — they operate in Notion, alongside your real documents, real projects, and real life. You get the intelligence of four specialist AIs with the transparency and control of Notion.&lt;/p&gt;

&lt;p&gt;That's not a chatbot. That's a team.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>notionchallenge</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>We built an OS for your life — and it actually gets you.</title>
      <dc:creator>ABINJITH TK</dc:creator>
      <pubDate>Mon, 16 Mar 2026 21:17:10 +0000</pubDate>
      <link>https://dev.to/abinjith_tk_e85889d1609a4/we-built-an-os-for-your-life-and-it-actually-gets-you-4lm8</link>
      <guid>https://dev.to/abinjith_tk_e85889d1609a4/we-built-an-os-for-your-life-and-it-actually-gets-you-4lm8</guid>
      <description>&lt;p&gt;You don't need another to-do app. You don't need another journal you'll abandon in two weeks. And you definitely don't need another "AI assistant" that forgets who you are every time you close the tab.&lt;/p&gt;

&lt;p&gt;We built Jumns because we were tired of duct-taping 14 apps together just to keep our lives on track.&lt;/p&gt;

&lt;p&gt;So what is it?&lt;/p&gt;

&lt;p&gt;Jumns is a personal AI operating system. Four AI agents — we call them jems — that actually know your life. Your goals, your habits, your patterns. You talk to them like you'd talk to a friend, and they handle the rest.&lt;/p&gt;

&lt;p&gt;🟢 Noor is your main jem. She lives in the Hub — a group chat where you just say what's on your mind. "I need to get back in shape and stop forgetting to call my mom." You don't pick who to talk to. Noor figures out the intent and routes it.&lt;/p&gt;

&lt;p&gt;🟡 Kai is the planner. He takes that message and builds your gym blocks, sets a weekly "Call Mom" reminder, and lays out your week — not as a boring list, but as actual time-blocked priorities. Some tasks even ask for proof. A gym selfie. A check-in. Not because we're your boss — because three months from now, you'll want the receipts.&lt;/p&gt;

&lt;p&gt;🟣 Echo is the journal jem. Everything you do quietly becomes your journal. Voice notes, photos, random 2am thoughts, sticky notes. Echo organizes it all into a beautiful masonry grid without you lifting a finger. No tagging. No sorting. It just happens.&lt;/p&gt;

&lt;p&gt;🩷 Sage handles your social layer. Not a feed. Not a scroll trap. Just summarized updates from the people you actually care about — pulled from what they've chosen to share from their own journals. Tap in, see specifics, or just ask Sage what your friend's been up to lately.&lt;/p&gt;

&lt;p&gt;The vibe?&lt;/p&gt;

&lt;p&gt;Pure white spatial UI. Glassmorphism. Soft 3D agent spheres with kawaii faces that glow and pulse. A&lt;/p&gt;

</description>
      <category>gcp</category>
      <category>gemini</category>
      <category>geminilive</category>
      <category>ailifeassistant</category>
    </item>
    <item>
      <title>🚀 From Bugs to Breakthroughs: My Full-Stack Journey with JetBrains &amp; Junie</title>
      <dc:creator>ABINJITH TK</dc:creator>
      <pubDate>Tue, 03 Feb 2026 18:04:40 +0000</pubDate>
      <link>https://dev.to/abinjith_tk_e85889d1609a4/from-bugs-to-breakthroughs-my-full-stack-journey-with-jetbrains-junie-3p1f</link>
      <guid>https://dev.to/abinjith_tk_e85889d1609a4/from-bugs-to-breakthroughs-my-full-stack-journey-with-jetbrains-junie-3p1f</guid>
      <description>&lt;p&gt;The dream of "autonomous development" has always felt just out of reach—until I paired JetBrains’ world-class IDEs with Junie, their AI-powered programmer. This is the story of how we tackled a complex, multi-layered bug in our "Rift Rewind" project, and why this duo is changing the game for developers.&lt;br&gt;
🔍 The Challenge: A Silent Failure across Continents&lt;br&gt;
Our project, a Riot Games match aggregator, was working perfectly for North American players. But when we tried to fetch data for the legendary "Hide on bush#KR1" (Faker) in Korea, the system returned nothing but silence.&lt;br&gt;
The problem wasn't just a simple typo. It was a classic "Full-Stack Puzzle":&lt;br&gt;
1.&lt;br&gt;
Backend: Hardcoded regional routing (everything sent to americas.api).&lt;br&gt;
2.&lt;br&gt;
API Logic: Missing mappings for Asia and Europe.&lt;br&gt;
3.&lt;br&gt;
Frontend: A UI that collected regions but forgot to tell the backend about them.&lt;br&gt;
In a traditional setup, fixing this would mean jumping between three files, manually tracing data flow, and likely breaking a test or two along the way.&lt;br&gt;
🤖 The Solution: Junie’s "Inside-Out" Approach&lt;br&gt;
Instead of just asking for a snippet of code, I gave Junie the high-level issue. Using the JetBrains Toolset, Junie didn't just guess—it explored:&lt;br&gt;
•&lt;br&gt;
Project Awareness: Junie used search_project to find every instance of the Riot API URL.&lt;br&gt;
•&lt;br&gt;
The Surgical Fix: It modified the Python backend (fetch_api.py) to handle regional mapping, updated the Lambda handlers, and then—crucially—bridged the gap to the Next.js frontend (page.tsx) to ensure the region parameter was passed correctly.&lt;br&gt;
•&lt;br&gt;
Safety First: Because Junie operates with a mandatory planning phase, I could see the proposed changes before a single line was written.&lt;br&gt;
The result? "Hide on bush#KR1" was live, the routing was dynamic, and the code was cleaner than we found it.&lt;br&gt;
✨ The "Aha!" Moment: The JetBrains Synergy&lt;br&gt;
What makes this experience unique isn't just the AI—it’s the integration.&lt;br&gt;
•&lt;br&gt;
Context is King: Junie lives inside the IDE. It knows my folder structure, my naming conventions, and my dependencies.&lt;br&gt;
•&lt;br&gt;
Autonomous but Accountable: I didn't have to copy-paste code. Junie performed atomic renames and multi-file edits while I supervised, acting as the "Architect" while Junie acted as the "Lead Developer."&lt;br&gt;
🛠️ Looking Ahead: The "Skill Booster" Revolution&lt;br&gt;
While the experience was transformative, our journey highlighted the next frontier: Multi-MCP (Model Context Protocol) Support.&lt;br&gt;
Imagine Junie being able to connect to an AWS MCP for infrastructure, a Database MCP for schema validation, and a Custom Documentation MCP all at once. Coding without these "Skill Boosters" feels like working with one hand tied behind your back.&lt;br&gt;
Expanding this connectivity will turn Junie from a "Code Assistant" into a "Domain Expert" for any stack.&lt;br&gt;
🏆 Conclusion: The Future is Here&lt;br&gt;
Working with JetBrains and Junie on this project proved that the barrier between "Idea" and "Implementation" is finally dissolving. We aren't just writing code anymore; we are orchestrating solutions.&lt;br&gt;
If you haven't tried building a full-stack feature with Junie yet, you’re missing out on the most thoughtful, concise, and powerful development experience available today.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>ABINJITH TK</dc:creator>
      <pubDate>Wed, 03 Dec 2025 10:07:13 +0000</pubDate>
      <link>https://dev.to/abinjith_tk_e85889d1609a4/-3ddk</link>
      <guid>https://dev.to/abinjith_tk_e85889d1609a4/-3ddk</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/abinjith_tk_e85889d1609a4" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F3358646%2F09d4f406-f3cd-4d87-bcdf-ee5e304f3214.png" alt="abinjith_tk_e85889d1609a4"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/abinjith_tk_e85889d1609a4/building-necroos-a-horror-themed-windows-95-simulator-with-kiro-ai-3m4d" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Building NecroOS: A Horror-Themed Windows 95 Simulator with Kiro AI&lt;/h2&gt;
      &lt;h3&gt;ABINJITH TK ・ Dec 3&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#kiro&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#kiroween&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#kiroweenhackathon&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>kiro</category>
      <category>kiroween</category>
      <category>kiroweenhackathon</category>
    </item>
    <item>
      <title>Building NecroOS: A Horror-Themed Windows 95 Simulator with Kiro AI</title>
      <dc:creator>ABINJITH TK</dc:creator>
      <pubDate>Wed, 03 Dec 2025 03:25:45 +0000</pubDate>
      <link>https://dev.to/abinjith_tk_e85889d1609a4/building-necroos-a-horror-themed-windows-95-simulator-with-kiro-ai-3m4d</link>
      <guid>https://dev.to/abinjith_tk_e85889d1609a4/building-necroos-a-horror-themed-windows-95-simulator-with-kiro-ai-3m4d</guid>
      <description>&lt;h1&gt;
  
  
  Building NecroOS: A Horror-Themed Windows 95 Simulator with Kiro AI
&lt;/h1&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%2Fjor8knkf1b24bvnyac06.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%2Fjor8knkf1b24bvnyac06.png" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge: Creating Nostalgia with a Twist
&lt;/h2&gt;

&lt;p&gt;When I set out to build NecroOS for the Kiro hackathon, I wanted to create something that blended nostalgia with horror—a browser-based Windows 95 simulator that progressively becomes more unsettling as users interact with it. The scope was ambitious: draggable windows, multiple applications, glitch effects, audio management, and a "haunt level" system that orchestrates the descent into digital madness.&lt;/p&gt;

&lt;p&gt;The twist? I'd be building it with Kiro, an AI-powered IDE assistant that promised to accelerate development while maintaining code quality.&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%2Fuxzbyzz8ard47knnwxcc.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%2Fuxzbyzz8ard47knnwxcc.png" alt=" " width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is NecroOS?
&lt;/h2&gt;

&lt;p&gt;NecroOS is a fully functional Windows 95 desktop environment that runs in your browser. It features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authentic retro UI&lt;/strong&gt; using the react95 component library&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple applications&lt;/strong&gt;: Notepad, Minesweeper, Portfolio Manager, Terminal, and some... darker surprises&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progressive horror mechanics&lt;/strong&gt; through a haunt level system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual effects&lt;/strong&gt;: CRT monitor simulation, glitch effects, and screen distortions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio atmosphere&lt;/strong&gt;: Ambient sounds and effects that intensify with interaction&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Corrupted Clippy&lt;/strong&gt;: Everyone's favorite assistant, but something's very wrong&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The technical stack includes React 19, TypeScript with strict mode, Zustand for state management, and Vite for blazing-fast development.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Kiro Experience: From Skeptic to Believer
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Starting with Structure
&lt;/h3&gt;

&lt;p&gt;My first interaction with Kiro set the tone for the entire project. Instead of diving straight into code, I used Kiro's &lt;strong&gt;spec system&lt;/strong&gt; to formalize my requirements and design. This turned out to be a game-changer.&lt;/p&gt;

&lt;p&gt;I created a spec document outlining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acceptance criteria for each feature&lt;/li&gt;
&lt;li&gt;Correctness properties that needed to be maintained&lt;/li&gt;
&lt;li&gt;Implementation tasks broken down into manageable chunks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kiro helped me iterate on these specs, catching edge cases I hadn't considered. For example, when designing the window management system, Kiro suggested properties like "windows should never overlap the taskbar" and "minimized windows should restore to their previous position"—details that would have caused bugs later.&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%2Fuulklwojjip44o7qwqm6.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%2Fuulklwojjip44o7qwqm6.png" alt=" " width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Property-Based Testing: The Secret Weapon
&lt;/h3&gt;

&lt;p&gt;One of Kiro's most impressive capabilities was its understanding of property-based testing with fast-check. Rather than writing dozens of individual test cases, Kiro helped me define properties that should always hold true.&lt;/p&gt;

&lt;p&gt;For the window manager:&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="nx"&gt;fc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;fc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;property&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;fc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;windowArbitrary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;minLength&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;maxLength&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;windows&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// Property: focused window should always have highest z-index&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;focusedWindow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;windows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isFocused&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;focusedWindow&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;focusedWindow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;zIndex&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toBeGreaterThanOrEqual&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;windows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;w&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;zIndex&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;numRuns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&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;Kiro generated these property tests for nearly every component, catching edge cases that traditional unit tests would have missed. The glitch system, audio management, and haunt level orchestration all benefited from this approach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Steering Rules: Teaching Kiro My Preferences
&lt;/h3&gt;

&lt;p&gt;Early on, I discovered Kiro's &lt;strong&gt;steering system&lt;/strong&gt;—markdown files that provide context and conventions for the entire project. I created three steering documents:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;tech.md&lt;/strong&gt;: Defined the technology stack, common commands, and TypeScript configuration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;structure.md&lt;/strong&gt;: Outlined directory organization, naming conventions, and import patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;product.md&lt;/strong&gt;: Described the core concept and key features&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once these were in place, Kiro consistently generated code that matched my project's conventions. No more explaining "use Zustand for state" or "place tests alongside components" in every prompt. Kiro just knew.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Flow: Rapid Iteration Without Sacrificing Quality
&lt;/h3&gt;

&lt;p&gt;The development rhythm with Kiro was unlike anything I'd experienced:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Define the feature&lt;/strong&gt; in natural language&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kiro generates implementation&lt;/strong&gt; with proper TypeScript types, error handling, and tests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review and refine&lt;/strong&gt; using Kiro's diagnostic tools&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Move to the next feature&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For the haunting orchestrator—a complex service that manages progressive horror effects—Kiro generated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The core service class with proper TypeScript interfaces&lt;/li&gt;
&lt;li&gt;Unit tests covering all methods&lt;/li&gt;
&lt;li&gt;Property-based tests for state transitions&lt;/li&gt;
&lt;li&gt;Error boundary integration&lt;/li&gt;
&lt;li&gt;Performance optimizations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All in a single iteration. What would have taken me hours of careful coding and testing happened in minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-World Example: The Glitch System
&lt;/h3&gt;

&lt;p&gt;The glitch system was one of the most complex features. It needed to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apply visual distortions to windows based on haunt level&lt;/li&gt;
&lt;li&gt;Coordinate with audio effects&lt;/li&gt;
&lt;li&gt;Handle performance constraints&lt;/li&gt;
&lt;li&gt;Provide smooth animations&lt;/li&gt;
&lt;li&gt;Work across different browsers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I described the requirements to Kiro, and it generated:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;GlitchableWindow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;FC&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;GlitchableWindowProps&lt;/span&gt;&lt;span class="o"&gt;&amp;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;children&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;windowId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;intensity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="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;glitchLevel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useStore&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;glitchLevel&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;effectiveIntensity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;intensity&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;glitchLevel&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Kiro added proper memoization for performance&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;glitchStyle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useMemo&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="na"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`hue-rotate(&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;effectiveIntensity&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;deg) 
             contrast(&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;effectiveIntensity&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;)`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;effectiveIntensity&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; 
      &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`glitch &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;effectiveIntensity&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;s infinite`&lt;/span&gt; 
      &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;effectiveIntensity&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;glitchable-window&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;glitchStyle&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="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;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;Complete with property tests verifying that intensity values always stayed within bounds and that performance remained smooth even with multiple glitching windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Debugging with Context
&lt;/h3&gt;

&lt;p&gt;When I encountered a bug where audio wouldn't play in certain browsers, I used Kiro's context system to share the error. Kiro immediately:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identified it as an autoplay policy issue&lt;/li&gt;
&lt;li&gt;Generated a robust audio service with user interaction detection&lt;/li&gt;
&lt;li&gt;Added fallback mechanisms&lt;/li&gt;
&lt;li&gt;Created comprehensive error handling&lt;/li&gt;
&lt;li&gt;Wrote tests covering the edge cases&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The fix was production-ready, not a quick hack.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results: Quality at Speed
&lt;/h2&gt;

&lt;p&gt;After two weeks of development with Kiro, NecroOS includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;15+ React components&lt;/strong&gt;, each with unit and property-based tests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;95%+ test coverage&lt;/strong&gt; across the codebase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero TypeScript errors&lt;/strong&gt; in strict mode&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Comprehensive error handling&lt;/strong&gt; with graceful degradation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance optimizations&lt;/strong&gt; for smooth 60fps animations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-browser compatibility&lt;/strong&gt; with proper fallbacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The codebase is maintainable, well-documented, and follows consistent patterns throughout. This isn't just a hackathon project—it's production-quality code.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Kiro Excels At:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Structured development&lt;/strong&gt;: The spec system keeps complex projects organized&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Property-based testing&lt;/strong&gt;: Catches edge cases traditional tests miss&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency&lt;/strong&gt;: Steering rules ensure uniform code across the project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context awareness&lt;/strong&gt;: Kiro understands the entire project, not just individual files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best practices&lt;/strong&gt;: Generated code follows modern patterns and conventions&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Human Touch Still Matters:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Creative direction&lt;/strong&gt;: Kiro implements, but you define the vision&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Architecture decisions&lt;/strong&gt;: High-level structure benefits from human insight&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User experience&lt;/strong&gt;: Kiro can't feel the horror atmosphere—that's on you&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Final polish&lt;/strong&gt;: The subtle touches that make it special&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tips for Using Kiro Effectively
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with specs&lt;/strong&gt;: Invest time in requirements and design documents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create steering rules early&lt;/strong&gt;: Teach Kiro your preferences upfront&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embrace property-based testing&lt;/strong&gt;: Let Kiro generate comprehensive test suites&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use context liberally&lt;/strong&gt;: Share errors, file structures, and related code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterate in conversation&lt;/strong&gt;: Kiro learns from your feedback&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Building NecroOS with Kiro transformed my development process. I shipped a complex, well-tested application in a fraction of the time it would have taken solo, without sacrificing code quality. The combination of AI assistance and human creativity is powerful—Kiro handles the tedious implementation details while I focus on the experience and architecture.&lt;/p&gt;

&lt;p&gt;If you're skeptical about AI-assisted development, I get it. I was too. But Kiro isn't trying to replace developers—it's amplifying what we can build. And for a solo developer tackling an ambitious project, that amplification is the difference between "maybe someday" and "shipped today."&lt;/p&gt;

&lt;p&gt;Try NecroOS if you dare: [(&lt;a href="https://main.d3o8c3ri5rcch8.amplifyapp.com/)" rel="noopener noreferrer"&gt;https://main.d3o8c3ri5rcch8.amplifyapp.com/)&lt;/a&gt;]&lt;br&gt;
Check out the code: [(&lt;a href="https://github.com/AbinjithTK/necroOS)" rel="noopener noreferrer"&gt;https://github.com/AbinjithTK/necroOS)&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Built with Kiro. Haunted by design. 👻&lt;/p&gt;

&lt;h1&gt;
  
  
  kiro #hackathon #react #typescript #horror #webdev #ai
&lt;/h1&gt;

</description>
      <category>kiro</category>
      <category>kiroween</category>
      <category>kiroweenhackathon</category>
    </item>
  </channel>
</rss>
