<?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: swatiicfai</title>
    <description>The latest articles on DEV Community by swatiicfai (@swatiicfai).</description>
    <link>https://dev.to/swatiicfai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3562918%2Fb497f52e-e200-49ce-a6b1-d1f84338d13f.png</url>
      <title>DEV Community: swatiicfai</title>
      <link>https://dev.to/swatiicfai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/swatiicfai"/>
    <language>en</language>
    <item>
      <title>How I Built an Autonomous SRE War Room with Switch AI, OpenCode &amp; Wispr Flow</title>
      <dc:creator>swatiicfai</dc:creator>
      <pubDate>Thu, 05 Nov 2026 22:03:47 +0000</pubDate>
      <link>https://dev.to/swatiicfai/how-i-built-an-autonomous-sre-war-room-with-switch-ai-opencode-wispr-flow-1di1</link>
      <guid>https://dev.to/swatiicfai/how-i-built-an-autonomous-sre-war-room-with-switch-ai-opencode-wispr-flow-1di1</guid>
      <description>&lt;p&gt;When a production outage hits at 2 AM, every second counts. I built &lt;strong&gt;IncidentRoom&lt;/strong&gt; — an autonomous SRE war room that turns any team chat channel into a self-coordinating incident response system using &lt;strong&gt;Switch AI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's what actually happened during our live demo: a SEV-1 alert fired, three AI agents collaborated in a shared Mattermost room, identified the root cause commit in under 60 seconds, ran real bash commands to prepare a rollback, waited for a single human &lt;code&gt;APPROVE&lt;/code&gt; command (voice-dictated via Wispr Flow), executed the fix, and auto-generated a full post-mortem — all in under 2 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem We Solved
&lt;/h2&gt;

&lt;p&gt;Traditional incident response is chaotic:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Context is fragmented across monitoring tools, Slack threads, and git history&lt;/li&gt;
&lt;li&gt;Engineers waste precious minutes manually correlating stack traces to recent PRs&lt;/li&gt;
&lt;li&gt;Stakeholder updates distract the on-call engineer from actually fixing the issue&lt;/li&gt;
&lt;li&gt;Post-mortems are written hours or days later from memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MTTR (Mean Time to Resolution) suffers not because engineers are slow — but because &lt;strong&gt;coordination is broken&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Switch AI
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/sandbox-quantum/switch" rel="noopener noreferrer"&gt;Switch&lt;/a&gt; is an open-source platform that connects AI coding agents (Claude Code, Codex, OpenCode, Cursor, Antigravity) into team chat channels as first-class participants. Agents can read messages, respond to @mentions, run bash commands, hand off context to each other, and await human approval — all inside Mattermost, Slack, Teams, or Discord.&lt;/p&gt;

&lt;p&gt;This is the missing piece for incident response.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture: 3 Agents, 1 Room, Zero Chaos
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;📢 Alert fires in #incident-war-room
       │
       ▼
@triage-agent ──→ 11 tool calls ──→ Root cause: commit 8f2b31a
       │
       ▼ HANDOFF
@sre-agent ──→ npm pack stripe@3.4.0 ──→ "Awaiting APPROVE"
       │
       ▼ Human: "APPROVE" (via Wispr Flow voice)
@sre-agent ──→ Rollback executed ✅
       │
       ▼
@comms-agent ──→ Post-mortem generated 📄
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Three Agents
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;@triage-agent&lt;/code&gt; — The Incident Detective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Receives the alert via @mention, parses the stack trace, correlates against recent git commits, and isolates the root cause. In our live demo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;triage-agent BOT · Worked for 3m 16s. 11 tool calls.

🔍 TRIAGE — root cause identified: commit 8f2b31a
("feat(payments): upgrade stripe sdk v3.4")

Root cause: services/payments/stripe_gateway.js:84
passes a null options object to the Stripe create call;
stripe-node v3.4 now unconditionally reads options.idempotency_key,
so createSession throws before reaching Stripe.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;@sre-agent&lt;/code&gt; — The Remediation Specialist&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Receives the handoff, evaluates blast radius, executes real bash commands to prepare the rollback — but &lt;strong&gt;never deploys without human approval&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Actual command run by @sre-agent&lt;/span&gt;
npm pack stripe@3.4.0 &lt;span class="nt"&gt;--pack-destination&lt;/span&gt; /tmp/opencode/stripe340
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then waits. No autonomous deployment. Human-in-the-loop is non-negotiable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;@comms-agent&lt;/code&gt; — The Incident Commander &amp;amp; Scribe&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Handles stakeholder communication and auto-generates the post-mortem with MTTR, timeline, root cause, and action items.&lt;/p&gt;

&lt;h2&gt;
  
  
  Voice-Powered with Wispr Flow
&lt;/h2&gt;

&lt;p&gt;Here's the detail that makes this truly hands-free: I used &lt;strong&gt;Wispr Flow&lt;/strong&gt; to voice-dictate every incident command without touching the keyboard.&lt;/p&gt;

&lt;p&gt;While monitoring dashboards, I spoke:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Alert: Save one HTTP 500 error spike in checkout payment gateway at triage agent. Please investigate the root cause. Commit. Approve, roll back, and notify all stakeholders. @Comms agent generate the postmortem report."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Wispr Flow transcribed this at &lt;strong&gt;100 wpm&lt;/strong&gt;, &lt;strong&gt;405 total words&lt;/strong&gt; across the incident session. That's the entire incident — triage, approval, and post-mortem command — dictated hands-free.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9tibmseukg0kc1n7h0y1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9tibmseukg0kc1n7h0y1.png" alt="Wispr Flow scorecard showing 405 words, 100 wpm, 1 day streak" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Live Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Time from alert to root cause&lt;/td&gt;
&lt;td&gt;&amp;lt; 60 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Triage agent tool calls&lt;/td&gt;
&lt;td&gt;11 calls, 3m 16s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human touch-points&lt;/td&gt;
&lt;td&gt;1 (&lt;code&gt;APPROVE&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wispr Flow words dictated&lt;/td&gt;
&lt;td&gt;405 words @ 100 wpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MTTR&lt;/td&gt;
&lt;td&gt;Under 2 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Post-mortem generation&lt;/td&gt;
&lt;td&gt;Automatic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Community Wisdom That Shaped This
&lt;/h2&gt;

&lt;p&gt;Building this, I learned from the community:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/pvgomes/agentic-incident-response-is-where-autonomy-meets-the-pager-31h5"&gt;Agentic incident response is where autonomy meets the pager&lt;/a&gt; — reinforced that read-only defaults and approval gates are non-negotiable&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/sumanth_gadiparthi/nexusops-multi-agent-sre-company-brain-command-center-powered-by-falkordb-3o6l"&gt;NexusOps: Multi-Agent SRE Command Center&lt;/a&gt; — validated the multi-agent pattern for SRE workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key insight both posts validate: &lt;strong&gt;agents need approval gates before any write operation in production&lt;/strong&gt;. We enforced this strictly — &lt;code&gt;@sre-agent&lt;/code&gt; never executes a deployment without an explicit human &lt;code&gt;APPROVE&lt;/code&gt; in the room.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Run It Yourself
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/swatiicfai/IncidentRoom
&lt;span class="nb"&gt;cd &lt;/span&gt;IncidentRoom
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env  &lt;span class="c"&gt;# Add your Switch server URL&lt;/span&gt;
npm &lt;span class="nb"&gt;install
&lt;/span&gt;node src/simulate.js  &lt;span class="c"&gt;# Trigger a live SEV-1 simulation&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/sandbox-quantum/switch" rel="noopener noreferrer"&gt;Switch Console&lt;/a&gt; running locally&lt;/li&gt;
&lt;li&gt;OpenCode (or any Switch-compatible agent) installed&lt;/li&gt;
&lt;li&gt;Mattermost running in Docker (Switch provides this out of the box)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Webhook integration&lt;/strong&gt; — Datadog/Sentry/PagerDuty alerts fire directly into the room&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canary verification&lt;/strong&gt; — &lt;code&gt;@sre-agent&lt;/code&gt; checks error rate baseline post-rollback before declaring resolution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-room escalation&lt;/strong&gt; — auto-create a dedicated room per SEV-1 instead of using a standing channel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent memory&lt;/strong&gt; — triage agent remembers past incidents to pattern-match faster&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🔗 Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/swatiicfai/IncidentRoom" rel="noopener noreferrer"&gt;https://github.com/swatiicfai/IncidentRoom&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demo video:&lt;/strong&gt; &lt;a href="https://youtu.be/gvqgkVetPTc" rel="noopener noreferrer"&gt;https://youtu.be/gvqgkVetPTc&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch AI:&lt;/strong&gt; &lt;a href="https://github.com/sandbox-quantum/switch" rel="noopener noreferrer"&gt;https://github.com/sandbox-quantum/switch&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Post-mortem:&lt;/strong&gt; See &lt;a href="https://github.com/swatiicfai/IncidentRoom/blob/main/POSTMORTEM_LIVE.md" rel="noopener noreferrer"&gt;POSTMORTEM_LIVE.md&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Built for the &lt;a href="https://wemakedevs.org/hackathons/switch" rel="noopener noreferrer"&gt;Flip the Switch Hackathon&lt;/a&gt; by WeMakeDevs × Switch AI.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post was written with AI assistance (Antigravity/Gemini) during the hackathon session.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>ResQAlert: Offline-First Community Disaster &amp; Resource Dispatcher</title>
      <dc:creator>swatiicfai</dc:creator>
      <pubDate>Sat, 31 Oct 2026 14:51:08 +0000</pubDate>
      <link>https://dev.to/swatiicfai/resqalert-offline-first-community-disaster-resource-dispatcher-4oil</link>
      <guid>https://dev.to/swatiicfai/resqalert-offline-first-community-disaster-resource-dispatcher-4oil</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/mlh-hackathon"&gt;MLH x DEV Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  ResQAlert: Offline-First Community Disaster &amp;amp; Mutual-Aid Resource Dispatcher
&lt;/h1&gt;

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

&lt;p&gt;During natural disasters—such as tropical storms, flash floods, and severe grid blackouts—centralized emergency services are quickly inundated. Worse, cellular data (4G/5G) and home Wi-Fi frequently go down, cutting off affected families from emergency coordination.&lt;/p&gt;

&lt;p&gt;However, basic 2G/cellular SMS signals often remain active across cell towers even when data throughput drops to zero.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ResQAlert&lt;/strong&gt; is an offline-first disaster mutual-aid platform built to solve this communication breakdown. It allows individuals stranded in crisis zones to broadcast urgent distress signals (medical emergencies, flood rescue, drinking water shortages) or volunteer resource offers using either a web dashboard or plain &lt;strong&gt;offline SMS text messages&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Highlights:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dual-Channel Reporting&lt;/strong&gt;: File rescue requests through an interactive web app or by sending an SMS (&lt;code&gt;NEED WATER at 450 Lexington Ave&lt;/code&gt;) with zero data connectivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Geospatial Discovery &amp;amp; Radius Matching&lt;/strong&gt;: Responders can view live tactical heatmaps and query relief requests within a 5–50 km radius.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated Two-Way SMS Updates&lt;/strong&gt;: When an aid ticket is claimed or resolved, the requester receives an automated SMS update with responder details and ETA.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in SMS Simulator&lt;/strong&gt;: A testing sandbox on the frontend that allows judges and reviewers to simulate incoming SMS messages and observe real-time pins drop on the map without needing live phone credits.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/swatiicfai/ResQAlert" rel="noopener noreferrer"&gt;github.com/swatiicfai/ResQAlert&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Deployment&lt;/strong&gt;: &lt;a href="https://resqalert-omega.vercel.app/" rel="noopener noreferrer"&gt;https://resqalert-omega.vercel.app/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Project Highlights:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Disaster Radar&lt;/strong&gt;: Real-time Leaflet map displaying active incident pins color-coded by urgency (Red for critical medical/rescue, Amber for food/water, Green for volunteer shelters).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline SMS Ingestion&lt;/strong&gt;: When an SMS message is sent to our Twilio gateway, the backend extracts the category, severity, and location, performs spatial geocoding, stores the ticket, and replies with a tracking ID (&lt;code&gt;REQ-XXXX&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verified Responder Dispatch&lt;/strong&gt;: Field teams can claim open requests, coordinate dispatches, and mark incidents as resolved in real time.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Partner Technologies
&lt;/h2&gt;

&lt;p&gt;To make ResQAlert reliable and responsive under real-world crisis constraints, I integrated three primary partner technologies:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. MongoDB Atlas (2dsphere Geospatial Indexing)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Implementation&lt;/strong&gt;: Utilized MongoDB's native &lt;strong&gt;&lt;code&gt;2dsphere&lt;/code&gt; spatial index&lt;/strong&gt; on the &lt;code&gt;location.coordinates&lt;/code&gt; field (&lt;code&gt;[longitude, latitude]&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters&lt;/strong&gt;: In an emergency, volunteers cannot sift through an unorganized database. By leveraging MongoDB's &lt;code&gt;$near&lt;/code&gt; operator, the platform queries and sorts nearby relief requests by physical proximity in milliseconds:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nearbyRequests&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;collection&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;requests&lt;/span&gt;&lt;span class="dl"&gt;"&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="na"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;$near&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;$geometry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Point&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;coordinates&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;userLng&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userLat&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;$maxDistance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;radiusInMeters&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// e.g., 25000 (25km)&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OPEN&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="nf"&gt;toArray&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Twilio Programmable SMS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Implementation&lt;/strong&gt;: Built an inbound webhook endpoint (&lt;code&gt;/api/sms&lt;/code&gt;) that parses incoming SMS traffic and responds with automated TwiML messages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters&lt;/strong&gt;: When users have no cellular data or internet, SMS is their sole lifeline. Victims text &lt;code&gt;NEED [Category] at [Address]&lt;/code&gt;, the backend parses the urgency, pins the location, and sends back immediate confirmation and status alerts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Auth0 by Okta
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Implementation&lt;/strong&gt;: Structured user authentication and Role-Based Access Control (RBAC).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why it matters&lt;/strong&gt;: In disaster mutual aid, trust and security are vital. Auth0 enables quick, frictionless sign-in for community members while protecting dispatch features with scoped roles (&lt;code&gt;role:responder&lt;/code&gt;, &lt;code&gt;role:admin&lt;/code&gt;), ensuring only verified teams can claim sensitive medical tickets.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Hackathon Experience
&lt;/h2&gt;

&lt;p&gt;Building ResQAlert was an intense and deeply rewarding experience. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Biggest Technical Challenge&lt;/strong&gt;: Designing a tolerant parsing algorithm for incoming SMS messages. In an emergency, people text under extreme stress with unpredictable abbreviations and formatting. Developing a flexible keyword and landmark extractor with automatic fallback prompts required careful testing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Favorite Moment&lt;/strong&gt;: Watching the built-in SMS simulator trigger an incoming text and immediately seeing the glowing red marker pop up on the live Leaflet map within milliseconds!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next Steps&lt;/strong&gt;: Adding multi-lingual NLP translation using the Gemini API so non-English speakers can text in their native language, and implementing Progressive Web App (PWA) offline service-worker caching for field volunteers.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mlhacks</category>
      <category>devchallenge</category>
      <category>mongodb</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>Ofrenda Viva: Honoring Ancestors with Gemma 2 and the Sacred Privacy of Grief</title>
      <dc:creator>swatiicfai</dc:creator>
      <pubDate>Sat, 31 Oct 2026 09:56:01 +0000</pubDate>
      <link>https://dev.to/swatiicfai/ofrenda-viva-honoring-ancestors-with-gemma-2-and-the-sacred-privacy-of-grief-1anj</link>
      <guid>https://dev.to/swatiicfai/ofrenda-viva-honoring-ancestors-with-gemma-2-and-the-sacred-privacy-of-grief-1anj</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F16rl8joe0zx4itsg64yh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F16rl8joe0zx4itsg64yh.png" alt=" " width="800" height="557"&gt;&lt;/a&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week4-2026-10-26"&gt;Hacktoberfest Open-Source AI Challenge: Week 4 — Ghost in the Machine&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🌼 What I Built
&lt;/h3&gt;

&lt;p&gt;Every autumn between October 31 and November 2, the boundary between the living world and the spirit realm grows soft. In Mexican tradition and across the diaspora, &lt;strong&gt;Día de los Muertos&lt;/strong&gt; is not a season of sorrow; it is a celebration of warmth, music, and love. We build &lt;em&gt;ofrendas&lt;/em&gt; (altars) decorated with golden marigolds (&lt;em&gt;cempasúchil&lt;/em&gt;), beeswax candles, sugar skulls (&lt;em&gt;calaveritas&lt;/em&gt;), and the favorite foods, drinks, and melodies of those who walked before us.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/swatiicfai/ofrenda-viva" rel="noopener noreferrer"&gt;Ofrenda Viva (Living Altar)&lt;/a&gt;&lt;/strong&gt; is an open-source, local-first digital memorial sanctuary built around this tradition.&lt;/p&gt;

&lt;p&gt;It invites you to construct an intimate, 3-tier ofrenda for a departed family member, mentor, or friend:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tier I (The Heavens &amp;amp; Memory)&lt;/strong&gt;: A portrait framed in vintage gold leaf, flanked by interactive beeswax candles you can light and snuff with a click, alongside biographical reflections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier II (The Earthly Joys)&lt;/strong&gt;: A collection of favorite offerings—pan de muerto, spiced hot chocolate, embroidered shawls, beloved acoustic records, and cempasúchil crosses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier III (Voices of the Spirit)&lt;/strong&gt;: Two specialized open-AI tools powered by &lt;strong&gt;Gemma 2&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Calaveritas Literarias Generator&lt;/strong&gt;: Composes traditional, affectionate 4-stanza rhyming verses where &lt;em&gt;La Calaca / La Catrina&lt;/em&gt; playfully celebrates the departed person's quirks, humor, and spirit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Living Memory Chronicle &amp;amp; Altar Blessing&lt;/strong&gt;: Crafts a moving eulogy and sacred welcome home blessing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Whispers of the Altar&lt;/strong&gt;: Candlelight voice synthesis reading the verses aloud with an ambient ceremonial rhythm (via &lt;strong&gt;ElevenLabs&lt;/strong&gt; or client-side speech synthesis).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  🛡️ Why Open Innovation Matters for What I Built
&lt;/h3&gt;

&lt;p&gt;The challenge prompt asked:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Tell us why open innovation matters for what you built. Does running your own model mean your project works with the lights (and the internet) off? Keep someone's data off a server they don't control? Make sure what you build isn't locked inside a service that might disappear someday?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For &lt;strong&gt;Ofrenda Viva&lt;/strong&gt;, this question is not an abstract architectural choice—it is the moral heart of the project.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. The Sacred Privacy of Personal Grief
&lt;/h4&gt;

&lt;p&gt;Grief is the most vulnerable experience in human life. When you write about an abuela's secret recipe, upload a parent's handwriting, or recount family stories, that information represents sacred ancestral memory. &lt;/p&gt;

&lt;p&gt;If this app used a proprietary commercial cloud API:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Those intimate memories could be harvested for ad-targeting profiling or scraped into commercial training sets.&lt;/li&gt;
&lt;li&gt;If the company updates its Terms of Service, your memories are subject to arbitrary corporate surveillance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By running &lt;strong&gt;Google's Gemma 2 locally&lt;/strong&gt; (via Ollama or an embedded open prompt harness), &lt;strong&gt;your data never leaves your laptop&lt;/strong&gt;. No telemetry, no cloud tokens, no corporate surveillance. It is completely sovereign.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Digital Immortality Without Subscription Paywalls
&lt;/h4&gt;

&lt;p&gt;We have all seen SaaS products shut down, pivot, or introduce prohibitive monthly tiers. If a memorial tool is hosted on a proprietary subscription platform, what happens when a credit card expires or the company is acquired? &lt;strong&gt;The altar vanishes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With open innovation and open-weight models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero Ongoing Cost&lt;/strong&gt;: Running Gemma 2 locally costs zero dollars.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline Forever&lt;/strong&gt;: Ofrenda Viva includes an &lt;strong&gt;Export Private Vault&lt;/strong&gt; feature. You can download your entire memorial into a single standalone JSON/HTML archive, put it on an air-gapped USB flash drive, and hand it to your grandchildren 40 years from now. It will still open and run without internet access.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Cultural Nuance Without Monolithic Gatekeeping
&lt;/h4&gt;

&lt;p&gt;Open models allow us to tailor prompts, temperature parameters, and emotional pacing to honor delicate cultural rituals like &lt;em&gt;Día de los Muertos&lt;/em&gt; with reverence, avoiding generic corporate boilerplate.&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠️ Architecture &amp;amp; Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-Weight AI&lt;/strong&gt;: &lt;strong&gt;Google Gemma 2&lt;/strong&gt; (&lt;code&gt;gemma2:2b&lt;/code&gt; / &lt;code&gt;gemma2:9b&lt;/code&gt;). Lightweight, blazingly fast on consumer laptops, and poetic in multilingual Spanish/English synthesis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice Narration&lt;/strong&gt;: &lt;strong&gt;ElevenLabs&lt;/strong&gt; API integration with fallback to Web Audio / SpeechSynthesis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Pure, zero-dependency &lt;strong&gt;Node.js native HTTP server&lt;/strong&gt; (&lt;code&gt;node:http&lt;/code&gt;, &lt;code&gt;node:fs&lt;/code&gt;). No &lt;code&gt;node_modules&lt;/code&gt; vulnerabilities, instant 10ms startup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visuals&lt;/strong&gt;: Hand-crafted CSS animations (flickering candle flames, fluttering papel picado garland, and an interactive 2D canvas particle engine rendering falling cempasúchil petals).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Preservation Engine&lt;/strong&gt;: Client-side vault export generating self-contained offline backup archives.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Source Code&lt;/strong&gt;: &lt;a href="https://github.com/swatiicfai/ofrenda-viva" rel="noopener noreferrer"&gt;https://github.com/swatiicfai/ofrenda-viva&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Try It Yourself (Zero Setup):
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone the repository&lt;/span&gt;
git clone https://github.com/swatiicfai/ofrenda-viva.git
&lt;span class="nb"&gt;cd &lt;/span&gt;ofrenda-viva

&lt;span class="c"&gt;# 2. Launch the altar (Zero npm dependencies needed!)&lt;/span&gt;
node server.js

&lt;span class="c"&gt;# 3. Open in your browser&lt;/span&gt;
&lt;span class="c"&gt;# http://localhost:3000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  🌟 Reflections &amp;amp; Community Takeaways
&lt;/h3&gt;

&lt;p&gt;Building &lt;strong&gt;Ofrenda Viva&lt;/strong&gt; reminded me that open-source AI is not just about compute benchmarks or parameter counts. &lt;strong&gt;It is about autonomy.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When technology deals with memory, love, and loss, open innovation is the only paradigm that respects human dignity. It gives families the power to keep their ghosts close, their memories private, and their altars alight—long after the servers of our time have turned to dust.&lt;/p&gt;

&lt;p&gt;¡Feliz Día de los Muertos, y que viva la memoria! 🕯️🌼💀&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gemma</category>
      <category>opensource</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Building a DEV.to Connector for Cognee: Giving AI Agents a Developer Knowledge Base</title>
      <dc:creator>swatiicfai</dc:creator>
      <pubDate>Fri, 30 Oct 2026 19:16:34 +0000</pubDate>
      <link>https://dev.to/swatiicfai/building-a-devto-connector-for-cognee-giving-ai-agents-a-developer-knowledge-base-1d68</link>
      <guid>https://dev.to/swatiicfai/building-a-devto-connector-for-cognee-giving-ai-agents-a-developer-knowledge-base-1d68</guid>
      <description>&lt;p&gt;How we built an open-source DEV.to data-source connector for Cognee to ingest developer tutorials, engineering insights, and technical documentation into an AI agent's memory graph.&lt;br&gt;
Building a DEV.to Connector for Cognee: Giving AI Agents a Developer Knowledge Base&lt;/p&gt;

&lt;p&gt;AI coding assistants and autonomous developer agents are rapidly becoming everyday teammates for engineering teams. However, agents often suffer from stale context, shallow search, and fragmented recall when asked nuanced questions about real-world software practices.&lt;/p&gt;

&lt;p&gt;As part of Mergetober, I built the DEV.to Data-Source Connector for Cognee&lt;br&gt;
, the open-source memory engine for AI agents.&lt;/p&gt;

&lt;p&gt;In this article, I will walk through why this integration is valuable, how Cognee’s graph-memory architecture works, how the connector is built, and how you can use it to build your own Developer Knowledge Base AI Agent.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is Cognee?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Traditional Retrieval-Augmented Generation (RAG) often flattens documents into isolated vector chunks. When an agent queries a RAG system, it retrieves disparate chunks but misses the relationships between tools, concepts, and authors.&lt;/p&gt;

&lt;p&gt;Cognee&lt;br&gt;
 solves this by organizing information into a knowledge graph augmented with semantic vectors:&lt;/p&gt;

&lt;p&gt;add(): Ingests raw text, codebases, or SaaS data feeds into a named dataset.&lt;/p&gt;

&lt;p&gt;cognify(): Uses an LLM to extract entities, map conceptual connections, generate summaries, and build a unified graph memory.&lt;/p&gt;

&lt;p&gt;search(): Queries the graph to retrieve interconnected answers that help agents reason with precision.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Why Connect DEV.to to Cognee?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;DEV.to&lt;br&gt;
 is one of the most vibrant technical communities on the web, hosting tens of thousands of practical tutorials, architecture comparisons, debugging guides, and deep-dives written by working developers.&lt;/p&gt;

&lt;p&gt;By connecting DEV.to directly into Cognee's memory:&lt;/p&gt;

&lt;p&gt;Engineering Teams can ingest articles about their chosen tech stacks (e.g. FastAPI, Kubernetes, LangChain) into a local AI assistant.&lt;/p&gt;

&lt;p&gt;Coding Agents can recall up-to-date best practices, community tips, and common pitfalls directly inside their reasoning loop.&lt;/p&gt;

&lt;p&gt;Developers can create personalized memory layers that index their own bookmarked or published reading lists.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Architecture of the DEV.to Connector&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The connector resides in cognee-community under packages/connector/devto:&lt;/p&gt;

&lt;p&gt;text&lt;br&gt;
cognee-community/&lt;br&gt;
└── packages/&lt;br&gt;
    └── connector/&lt;br&gt;
        └── devto/&lt;br&gt;
            ├── cognee_community_connector_devto/&lt;br&gt;
            │   ├── &lt;strong&gt;init&lt;/strong&gt;.py&lt;br&gt;
            │   └── devto.py              # Ingestion logic &amp;amp; DLT source&lt;br&gt;
            ├── examples/&lt;br&gt;
            │   └── example.py            # Complete runnable demo&lt;br&gt;
            ├── tests/&lt;br&gt;
            │   └── test_devto.py         # Pytest test suite with mocks&lt;br&gt;
            ├── pyproject.toml            # Poetry packaging&lt;br&gt;
            └── README.md                 # Setup and documentation&lt;/p&gt;

&lt;p&gt;Key Technical Highlights:&lt;/p&gt;

&lt;p&gt;Tag &amp;amp; Author Filtering: Developers can ingest articles filtered by tags (e.g., python, ai, beginners) or by author username.&lt;/p&gt;

&lt;p&gt;Dual-Mode Ingestion:&lt;/p&gt;

&lt;p&gt;Document Mode (fetch_devto_documents): Formats articles with author metadata, tags, reading time, and markdown bodies so that cognee.cognify() can build deep knowledge graphs.&lt;/p&gt;

&lt;p&gt;DLT Source Mode (devto_source): Integrates seamlessly with Cognee’s underlying dlt (data load tool) pipelines via cognee.remember().&lt;/p&gt;

&lt;p&gt;Resilience &amp;amp; Rate Limits: Gracefully supports public unauthenticated access and optional API key authentication (api-key).&lt;/p&gt;

&lt;p&gt;Unit Tested: Fully tested using mocked HTTP endpoints to ensure bulletproof CI/CD runs.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How It Works in Practice&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is how simple it is to turn DEV.to articles into a queryable AI memory brain:&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
import asyncio&lt;br&gt;
import os&lt;br&gt;
import cognee&lt;br&gt;
from cognee_community_connector_devto import fetch_devto_documents&lt;br&gt;
os.environ["LLM_API_KEY"] = "your-api-key"&lt;br&gt;
async def main():&lt;br&gt;
    # 1. Fetch the latest technical articles tagged with 'python'&lt;br&gt;
    print("Fetching DEV.to technical articles...")&lt;br&gt;
    documents = fetch_devto_documents(&lt;br&gt;
        tag="python",&lt;br&gt;
        per_page=5,&lt;br&gt;
        fetch_full_content=False,&lt;br&gt;
    )&lt;br&gt;
    # 2. Add into Cognee's dataset&lt;br&gt;
    print(f"Adding {len(documents)} articles into Cognee memory...")&lt;br&gt;
    await cognee.add(documents, dataset_name="devto_knowledge_base")&lt;br&gt;
    # 3. Cognify into an interconnected knowledge graph&lt;br&gt;
    print("Cognifying articles into graph memory...")&lt;br&gt;
    await cognee.cognify(datasets=["devto_knowledge_base"])&lt;br&gt;
    # 4. Search and reason over the memory&lt;br&gt;
    query = "What Python libraries and patterns were recommended in the community?"&lt;br&gt;
    results = await cognee.search(query, datasets=["devto_knowledge_base"])&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;print("\nAI Agent Answer:")
print(results)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;if &lt;strong&gt;name&lt;/strong&gt; == "&lt;strong&gt;main&lt;/strong&gt;":&lt;br&gt;
    asyncio.run(main())&lt;/p&gt;

&lt;p&gt;When Cognee runs cognify(), it doesn't just store the text—it creates nodes for the authors, the libraries mentioned, and the concepts discussed, connecting them in a graph!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Real-World Use Cases&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Company Brain for Developer Tools: An AI agent that stays up-to-date with tutorials and announcements from developer tooling teams.&lt;/p&gt;

&lt;p&gt;Onboarding Assistant for Junior Devs: An internal chatbot grounded with curated DEV.to guides on clean code, Git workflows, and architecture patterns.&lt;/p&gt;

&lt;p&gt;Personalized Research Companion: Ingesting your personal reading list so your local AI assistant remembers everything you read.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Links &amp;amp; Resources&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pull Request: topoteretes/cognee-community#578&lt;/p&gt;

&lt;p&gt;Cognee Community Repo: topoteretes/cognee-community&lt;/p&gt;

&lt;p&gt;Mergetober Hackathon: WeMakeDevs Mergetober&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>python</category>
      <category>mergetober</category>
    </item>
    <item>
      <title>Building a DEV.to Connector for Cognee: Giving AI Agents a Developer Knowledge Base</title>
      <dc:creator>swatiicfai</dc:creator>
      <pubDate>Fri, 30 Oct 2026 18:23:18 +0000</pubDate>
      <link>https://dev.to/swatiicfai/building-a-devto-connector-for-cognee-giving-ai-agents-a-developer-knowledge-base-4nm1</link>
      <guid>https://dev.to/swatiicfai/building-a-devto-connector-for-cognee-giving-ai-agents-a-developer-knowledge-base-4nm1</guid>
      <description>&lt;h1&gt;
  
  
  Building a DEV.to Connector for Cognee: Giving AI Agents a Developer Knowledge Base
&lt;/h1&gt;

&lt;p&gt;AI coding assistants and autonomous developer agents are rapidly becoming everyday teammates for engineering teams. However, agents often suffer from stale context, shallow search, and fragmented recall when asked nuanced questions about real-world software practices.&lt;/p&gt;

&lt;p&gt;As part of &lt;strong&gt;Mergetober&lt;/strong&gt;, I built the &lt;strong&gt;DEV.to Data-Source Connector&lt;/strong&gt; for &lt;a href="https://github.com/topoteretes/cognee" rel="noopener noreferrer"&gt;Cognee&lt;/a&gt;, the open-source memory engine for AI agents. &lt;/p&gt;

&lt;p&gt;In this article, I will walk through why this integration is valuable, how Cognee’s graph-memory architecture works, how the connector is built, and how you can use it to build your own &lt;strong&gt;Developer Knowledge Base AI Agent&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. What is Cognee?
&lt;/h2&gt;

&lt;p&gt;Traditional Retrieval-Augmented Generation (RAG) often flattens documents into isolated vector chunks. When an agent queries a RAG system, it retrieves disparate chunks but misses the relationships between tools, concepts, and authors.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/topoteretes/cognee" rel="noopener noreferrer"&gt;Cognee&lt;/a&gt; solves this by organizing information into a &lt;strong&gt;knowledge graph&lt;/strong&gt; augmented with semantic vectors:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;add()&lt;/code&gt;&lt;/strong&gt;: Ingests raw text, codebases, or SaaS data feeds into a named dataset.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;cognify()&lt;/code&gt;&lt;/strong&gt;: Uses an LLM to extract entities, map conceptual connections, generate summaries, and build a unified graph memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;search()&lt;/code&gt;&lt;/strong&gt;: Queries the graph to retrieve interconnected answers that help agents reason with precision.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  2. Why Connect DEV.to to Cognee?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to"&gt;DEV.to&lt;/a&gt; is one of the most vibrant technical communities on the web, hosting tens of thousands of practical tutorials, architecture comparisons, debugging guides, and deep-dives written by working developers.&lt;/p&gt;

&lt;p&gt;By connecting DEV.to directly into Cognee's memory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Engineering Teams&lt;/strong&gt; can ingest articles about their chosen tech stacks (e.g. FastAPI, Kubernetes, LangChain) into a local AI assistant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding Agents&lt;/strong&gt; can recall up-to-date best practices, community tips, and common pitfalls directly inside their reasoning loop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developers&lt;/strong&gt; can create personalized memory layers that index their own bookmarked or published reading lists.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Architecture of the DEV.to Connector
&lt;/h2&gt;

&lt;p&gt;The connector resides in &lt;code&gt;cognee-community&lt;/code&gt; under &lt;code&gt;packages/connector/devto&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cognee-community/
└── packages/
    └── connector/
        └── devto/
            ├── cognee_community_connector_devto/
            │   ├── __init__.py
            │   └── devto.py              # Ingestion logic &amp;amp; DLT source
            ├── examples/
            │   └── example.py            # Complete runnable demo
            ├── tests/
            │   └── test_devto.py         # Pytest test suite with mocks
            ├── pyproject.toml            # Poetry packaging
            └── README.md                 # Setup and documentation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key Technical Highlights:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tag &amp;amp; Author Filtering&lt;/strong&gt;: Developers can ingest articles filtered by tags (e.g., &lt;code&gt;python&lt;/code&gt;, &lt;code&gt;ai&lt;/code&gt;, &lt;code&gt;beginners&lt;/code&gt;) or by author username.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dual-Mode Ingestion&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Document Mode (&lt;code&gt;fetch_devto_documents&lt;/code&gt;)&lt;/strong&gt;: Formats articles with author metadata, tags, reading time, and markdown bodies so that &lt;code&gt;cognee.cognify()&lt;/code&gt; can build deep knowledge graphs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DLT Source Mode (&lt;code&gt;devto_source&lt;/code&gt;)&lt;/strong&gt;: Integrates seamlessly with Cognee’s underlying &lt;code&gt;dlt&lt;/code&gt; (data load tool) pipelines via &lt;code&gt;cognee.remember()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resilience &amp;amp; Rate Limits&lt;/strong&gt;: Gracefully supports public unauthenticated access and optional API key authentication (&lt;code&gt;api-key&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unit Tested&lt;/strong&gt;: Fully tested using mocked HTTP endpoints to ensure bulletproof CI/CD runs.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  4. How It Works in Practice
&lt;/h2&gt;

&lt;p&gt;Here is how simple it is to turn DEV.to articles into a queryable AI memory brain:&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="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;cognee&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;cognee_community_connector_devto&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;fetch_devto_documents&lt;/span&gt;

&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LLM_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="c1"&gt;# 1. Fetch the latest technical articles tagged with 'python'
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fetching DEV.to technical articles...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;documents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetch_devto_documents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;per_page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;fetch_full_content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 2. Add into Cognee's dataset
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Adding &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;documents&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; articles into Cognee memory...&lt;/span&gt;&lt;span class="sh"&gt;"&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;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;documents&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dataset_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;devto_knowledge_base&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# 3. Cognify into an interconnected knowledge graph
&lt;/span&gt;    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cognifying articles into graph memory...&lt;/span&gt;&lt;span class="sh"&gt;"&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;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cognify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;datasets&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;devto_knowledge_base&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="c1"&gt;# 4. Search and reason over the memory
&lt;/span&gt;    &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What Python libraries and patterns were recommended in the community?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;datasets&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;devto_knowledge_base&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;AI Agent Answer:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When Cognee runs &lt;code&gt;cognify()&lt;/code&gt;, it doesn't just store the text—it creates nodes for the authors, the libraries mentioned, and the concepts discussed, connecting them in a graph!&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Real-World Use Cases
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Company Brain for Developer Tools&lt;/strong&gt;: An AI agent that stays up-to-date with tutorials and announcements from developer tooling teams.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Onboarding Assistant for Junior Devs&lt;/strong&gt;: An internal chatbot grounded with curated DEV.to guides on clean code, Git workflows, and architecture patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personalized Research Companion&lt;/strong&gt;: Ingesting your personal reading list so your local AI assistant remembers everything you read.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. Links &amp;amp; Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pull Request:&lt;/strong&gt; &lt;a href="https://github.com/topoteretes/cognee-community/pull/578" rel="noopener noreferrer"&gt;topoteretes/cognee-community#578&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cognee Community Repo:&lt;/strong&gt; &lt;a href="https://github.com/topoteretes/cognee-community" rel="noopener noreferrer"&gt;topoteretes/cognee-community&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mergetober Hackathon:&lt;/strong&gt; &lt;a href="https://wemakedevs.org/hackathons/mergetober" rel="noopener noreferrer"&gt;WeMakeDevs Mergetober&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>python</category>
      <category>mergetober</category>
    </item>
    <item>
      <title>🍲 Just built Cozy Hearth for the Comfort Food Challenge! 
Pure CSS Art ramen, hot cocoa &amp; grilled cheese with live 
interactive controls — no libraries, no frameworks, just 
HTML + CSS + vanilla JS. Come cook with me! 🍜☕🥪</title>
      <dc:creator>swatiicfai</dc:creator>
      <pubDate>Sun, 16 Aug 2026 11:54:05 +0000</pubDate>
      <link>https://dev.to/swatiicfai/just-built-cozy-hearth-for-the-comfort-food-challenge-pure-css-art-ramen-hot-cocoa-grilled-2h79</link>
      <guid>https://dev.to/swatiicfai/just-built-cozy-hearth-for-the-comfort-food-challenge-pure-css-art-ramen-hot-cocoa-grilled-2h79</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/swatiicfai/cozy-hearth-an-interactive-comfort-food-sanctuary-css-art-kitchen-1cj2" class="crayons-story__hidden-navigation-link"&gt;Cozy Hearth: An Interactive Comfort Food Sanctuary &amp;amp; CSS Art Kitchen 🍲&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/swatiicfai/cozy-hearth-an-interactive-comfort-food-sanctuary-css-art-kitchen-1cj2" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Frontend Challenge Perfect Landing Submission 🍲🥧&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/swatiicfai" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3562918%2Fb497f52e-e200-49ce-a6b1-d1f84338d13f.png" alt="swatiicfai profile" class="crayons-avatar__image" width="420" height="420"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/swatiicfai" class="crayons-story__secondary fw-medium m:hidden"&gt;
              swatiicfai
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                swatiicfai
                
                
              
              &lt;div id="story-author-preview-content-4409882" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/swatiicfai" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3562918%2Fb497f52e-e200-49ce-a6b1-d1f84338d13f.png" class="crayons-avatar__image" alt="" width="420" height="420"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;swatiicfai&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/swatiicfai/cozy-hearth-an-interactive-comfort-food-sanctuary-css-art-kitchen-1cj2" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 16&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/swatiicfai/cozy-hearth-an-interactive-comfort-food-sanctuary-css-art-kitchen-1cj2" id="article-link-4409882"&gt;
          Cozy Hearth: An Interactive Comfort Food Sanctuary &amp;amp; CSS Art Kitchen 🍲
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/frontendchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;frontendchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/swatiicfai/cozy-hearth-an-interactive-comfort-food-sanctuary-css-art-kitchen-1cj2" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/swatiicfai/cozy-hearth-an-interactive-comfort-food-sanctuary-css-art-kitchen-1cj2#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>css</category>
      <category>devchallenge</category>
      <category>frontend</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Cozy Hearth: An Interactive Comfort Food Sanctuary &amp; CSS Art Kitchen 🍲</title>
      <dc:creator>swatiicfai</dc:creator>
      <pubDate>Sun, 16 Aug 2026 11:52:12 +0000</pubDate>
      <link>https://dev.to/swatiicfai/cozy-hearth-an-interactive-comfort-food-sanctuary-css-art-kitchen-1cj2</link>
      <guid>https://dev.to/swatiicfai/cozy-hearth-an-interactive-comfort-food-sanctuary-css-art-kitchen-1cj2</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, Perfect Landing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Cozy Hearth&lt;/strong&gt; is a digital sanctuary dedicated to the foods that make us feel at home. It combines both challenge prompts (&lt;strong&gt;CSS Art&lt;/strong&gt; and a &lt;strong&gt;Perfect Landing Page&lt;/strong&gt;) into a highly polished, interactive experience.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive CSS Art Canvas&lt;/strong&gt;: Three beautiful, pure CSS graphics representing comfort classics—a steaming bowl of &lt;strong&gt;Ramen&lt;/strong&gt;, a warm cup of &lt;strong&gt;Hot Cocoa&lt;/strong&gt;, and a golden toasted &lt;strong&gt;Grilled Cheese Sandwich&lt;/strong&gt; with tomato soup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Kitchen Playground&lt;/strong&gt;: Users can customize their dishes in real-time! Toggle toppings (egg, nori, green onions, marshmallows), adjust steam speed, change mug colors, choose soup broths, or pull the grilled cheese to adjust elasticity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time CSS Variables Viewer&lt;/strong&gt;: A built-in terminal block showing exactly how CSS Custom Properties (variables) update dynamically inside &lt;code&gt;:root&lt;/code&gt; as you interact with the controls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive Cooking Tracker&lt;/strong&gt;: Clicking "Cook This Dish" slides out a dynamic recipe drawer. It features an interactive checklist to tick off prep ingredients and a step-by-step progress cards to guide you through the cooking process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community Recipe Vault&lt;/strong&gt;: A fully validated, local-storage-backed form allowing users to publish their own custom comfort recipes, which instantly render into the visual catalog.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility First&lt;/strong&gt;: Designed with fluid layouts, semantic HTML5 structure, full keyboard navigability, and ARIA attributes.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🐙 GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/swatiicfai/Cozy-Hearth" rel="noopener noreferrer"&gt;https://github.com/swatiicfai/Cozy-Hearth&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌐 Live Demo&lt;/strong&gt;: &lt;a href="https://swatiicfai.github.io/Cozy-Hearth/" rel="noopener noreferrer"&gt;https://swatiicfai.github.io/Cozy-Hearth/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;My goal was to prove that &lt;strong&gt;CSS Art&lt;/strong&gt; doesn't have to be static. By tying pure CSS graphics to user-controlled JavaScript state, the food actually comes alive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ramen&lt;/strong&gt;: Constructed using organic, multi-layered &lt;code&gt;border-radius&lt;/code&gt; values (like &lt;code&gt;50% 50% 50% 50% / 60% 60% 40% 40%&lt;/code&gt; for egg-whites) and keyframes that wiggle noodles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hot Cocoa&lt;/strong&gt;: Modeled bobbing marshmallows using independent &lt;code&gt;@keyframes&lt;/code&gt; delays to simulate natural floating on dark cocoa liquid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grilled Cheese&lt;/strong&gt;: Created stretchable cheese strings using CSS border parameters and scaling transforms controlled dynamically.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I'm incredibly proud of the &lt;strong&gt;Recipe Drawer and Step Tracker&lt;/strong&gt;. By breaking down recipes into interactive steps, the landing page is not just beautiful to look at, but genuinely useful. Coding the real-time CSS variables viewer was also a fun challenge—it turns the playground into a mini educational sandbox demonstrating how CSS custom properties react dynamically to JavaScript events!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
