<?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>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>
