<?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: Tushar Khadde</title>
    <description>The latest articles on DEV Community by Tushar Khadde (@devtushark).</description>
    <link>https://dev.to/devtushark</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%2F4157186%2Fe4c7dd81-1186-452c-84bd-78d4ebb166f5.png</url>
      <title>DEV Community: Tushar Khadde</title>
      <link>https://dev.to/devtushark</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/devtushark"/>
    <language>en</language>
    <item>
      <title>🦥 DrawBoard: Letting an Open-Weight Agent Do the Drawing So You Don't Have To</title>
      <dc:creator>Tushar Khadde</dc:creator>
      <pubDate>Sat, 24 Oct 2026 17:43:14 +0000</pubDate>
      <link>https://dev.to/devtushark/drawboard-letting-an-open-weight-agent-do-the-drawing-so-you-dont-have-to-1bnb</link>
      <guid>https://dev.to/devtushark/drawboard-letting-an-open-weight-agent-do-the-drawing-so-you-dont-have-to-1bnb</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Tusharkhadde/draw-board" rel="noopener noreferrer"&gt;DrawBoard&lt;/a&gt; is a real-time collaborative whiteboard — sketch, diagram, and think together in the browser, with live shape sync, room-based access control, and in-board chat.&lt;/p&gt;

&lt;p&gt;But the laziness story runs on two levels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For users:&lt;/strong&gt; DrawBoard rewards the lazy visitor. You open the &lt;code&gt;/canvas/guest&lt;/code&gt; page and you're drawing — no signup, no email, no onboarding wizard. One share link and anyone can join your board. When you're done, export the whole thing as PNG or SVG instead of screenshotting your sketch in four torn pieces. Keyboard shortcuts for every tool (&lt;code&gt;V&lt;/code&gt; for select, &lt;code&gt;P&lt;/code&gt; for pencil, &lt;code&gt;Ctrl+K&lt;/code&gt; for the command palette) mean your hands never leave home row.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For me:&lt;/strong&gt; the honest confession is that the sloth was the developer. I wanted a collaborative whiteboard for my own project discussions — Excalidraw-style, but the kind I fully understand because I built it. Setting aside weekend after weekend to hand-write a canvas engine, a WebSocket sync layer, and an auth flow across three services was exactly the task I kept putting off. So I didn't do it myself. An open-source AI agent did the heavy lifting, reviewed every plan with me, and I shipped the whole thing in the challenge window instead of someday/Maybe Land. Every file in this repo started as a conversation with an agent running an open-weight model.&lt;/p&gt;

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

&lt;p&gt;▶️ &lt;strong&gt;Video demo:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/1NlqsaNyJ83OPrud5zU9zLfd_qvHFIkZq/view?usp=sharing" rel="noopener noreferrer"&gt;Watch DrawBoard in action&lt;/a&gt; &lt;em&gt;(Google Drive)&lt;/em&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://drive.google.com/file/d/1NlqsaNyJ83OPrud5zU9zLfd_qvHFIkZq/view" rel="noopener noreferrer" class="c-link"&gt;
            drawrboard-1.mp4 - Google Drive
          &lt;/a&gt;
        &lt;/h2&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fssl.gstatic.com%2Fdocs%2Fdoclist%2Fimages%2Fdrive_favicon_2026_32dp.png" width="32" height="32"&gt;
          drive.google.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;🌐 &lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://drawboard-peach.vercel.app/" rel="noopener noreferrer"&gt;drawboard-peach.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The guest board at &lt;code&gt;/canvas/guest&lt;/code&gt; is the fastest way in — no account needed. Create a room as a signed-in user, share the link, and watch shapes sync in real time.&lt;/p&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Tusharkhadde" rel="noopener noreferrer"&gt;
        Tusharkhadde
      &lt;/a&gt; / &lt;a href="https://github.com/Tusharkhadde/draw-board" rel="noopener noreferrer"&gt;
        draw-board
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🎨 Drawboard&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A real-time collaborative whiteboard.&lt;/strong&gt; Sketch, diagram, and think together — right in the browser.&lt;/p&gt;
&lt;p&gt;🌐 &lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://drawboard-peach.vercel.app/" rel="nofollow noopener noreferrer"&gt;drawboard-peach.vercel.app&lt;/a&gt;
📦 &lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/Tusharkhadde/Excalidraw" rel="noopener noreferrer"&gt;github.com/Tusharkhadde/Excalidraw&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Drawboard is a collaborative whiteboard built as a &lt;strong&gt;pnpm + Turborepo monorepo&lt;/strong&gt; with three services:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Next.js frontend&lt;/strong&gt; — landing page, auth, workspace dashboard, and the canvas board&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Express HTTP API&lt;/strong&gt; — auth, rooms, room access requests, chat history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebSocket server&lt;/strong&gt; — live drawing sync + in-room chat&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Data is stored in &lt;strong&gt;PostgreSQL&lt;/strong&gt; via &lt;strong&gt;Prisma&lt;/strong&gt;. You can draw as a &lt;strong&gt;guest&lt;/strong&gt; (no account), or sign up to create shared rooms, request/approve access, chat while drawing, and export the board.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Table of contents&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Tusharkhadde/draw-board#tech-stack" rel="noopener noreferrer"&gt;Tech stack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Tusharkhadde/draw-board#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Tusharkhadde/draw-board#getting-started" rel="noopener noreferrer"&gt;Getting started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Tusharkhadde/draw-board#environment-variables" rel="noopener noreferrer"&gt;Environment variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Tusharkhadde/draw-board#scripts" rel="noopener noreferrer"&gt;Scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Tusharkhadde/draw-board#architecture" rel="noopener noreferrer"&gt;Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Tusharkhadde/draw-board#api-reference" rel="noopener noreferrer"&gt;API reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Tusharkhadde/draw-board#websocket-messages" rel="noopener noreferrer"&gt;WebSocket messages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Tusharkhadde/draw-board#database" rel="noopener noreferrer"&gt;Database&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Tusharkhadde/draw-board#deployment" rel="noopener noreferrer"&gt;Deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Tusharkhadde/draw-board#license" rel="noopener noreferrer"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Tech stack&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Monorepo&lt;/td&gt;
&lt;td&gt;Turborepo + pnpm workspaces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frontend&lt;/td&gt;
&lt;td&gt;Next.js 15 (App Router), React 19, TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI&lt;/td&gt;
&lt;td&gt;Tailwind CSS, shadcn/ui (Radix), Lucide, sonner&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Canvas&lt;/td&gt;
&lt;td&gt;Custom HTML5 Canvas&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Tusharkhadde/draw-board" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;It's a &lt;strong&gt;pnpm + Turborepo monorepo&lt;/strong&gt; with three deployable services:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;drawboard-frontend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Next.js 15 / React 19 — landing, auth, dashboard, and the canvas board (&lt;code&gt;/canvas/[roomId]&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;http-backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Express REST API — auth (email + Google OAuth), rooms, access requests, chat history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ws-backend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ws&lt;/code&gt; WebSocket server — live draw / update / erase / sync / clear / chat messages&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Plus shared packages: &lt;code&gt;@repo/db&lt;/code&gt; (Prisma + PostgreSQL), &lt;code&gt;@repo/common&lt;/code&gt; (Zod schemas for shapes and auth payloads), &lt;code&gt;@repo/ui&lt;/code&gt;, &lt;code&gt;@repo/backend-common&lt;/code&gt; (JWT helpers). One command — &lt;code&gt;pnpm start:unix&lt;/code&gt; — frees ports 3000/3001/8080 and boots all three services together. There's no token in the codebase you can't audit and no behavior you can't change.&lt;/p&gt;

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

&lt;p&gt;The open-source AI is in the &lt;em&gt;process&lt;/em&gt; as much as the product: I built DrawBoard entirely inside &lt;strong&gt;OpenCode&lt;/strong&gt;, an open-source agent harness, running &lt;strong&gt;GLM, an open-weight model&lt;/strong&gt;. No paid API key, no proprietary assistant in the loop — the same agent harness pattern anyone can clone from a public repo and run today, pointed at a model whose weights are published.&lt;/p&gt;

&lt;p&gt;How that actually played out across the build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The canvas engine&lt;/strong&gt; — a custom HTML5 Canvas layer, not a giant dependency. I went into it knowing the real-time sync protocol decisions matter more than the drawing code, and the community thread I leaned on here was &lt;a class="mentioned-user" href="https://dev.to/harshattray"&gt;@harshattray&lt;/a&gt;'s &lt;a href="https://dev.to/harshattray/system-design-a-frontend-engineers-deep-dive-nh5"&gt;"Frontend System Design: Designing a Collaborative Whiteboard"&lt;/a&gt;, which walks from blank page to production architecture — I'd been priced by my own past attempts at hand-rolling this; reading someone else's take made it concrete.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The realtime layer&lt;/strong&gt; — the agent and I settled on a plain &lt;code&gt;ws&lt;/code&gt; server with explicit JSON message types (&lt;code&gt;join_room&lt;/code&gt;, &lt;code&gt;draw&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;erase&lt;/code&gt;, &lt;code&gt;sync&lt;/code&gt;, &lt;code&gt;clear&lt;/code&gt;, &lt;code&gt;chat&lt;/code&gt;) rather than a framework. The tradeoff discussion borrowed from &lt;a class="mentioned-user" href="https://dev.to/kalevski"&gt;@kalevski&lt;/a&gt;'s &lt;a href="https://dev.to/kalevski/building-real-time-apps-in-nodejs-with-rivalis-websockets-rooms-actors-and-a-binary-wire-ii8b"&gt;"Building Real-Time Apps in Node.js with Rivalis: WebSockets, Rooms, Actors, and a Binary Wire"&lt;/a&gt; — explicit message types keep the server auditable in an afternoon, which mattered because this whole codebase's selling point is that you can read it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Realtime architecture posture&lt;/strong&gt; — &lt;a class="mentioned-user" href="https://dev.to/iammuhammadarslan"&gt;@iammuhammadarslan&lt;/a&gt;'s &lt;a href="https://dev.to/iammuhammadarslan/building-scalable-real-time-applications-with-nodejs-socketio-and-react-24b5"&gt;"Building Scalable Real-Time Applications with Node.js, Socket.io, and React"&lt;/a&gt; was a useful sanity-check on Socket.io vs raw &lt;code&gt;ws&lt;/code&gt; for this scale; we chose the thinner dependency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Working with the agent&lt;/strong&gt; — the workflow that stuck: I asked it to read the code and &lt;em&gt;verify&lt;/em&gt; its claims against the actual repo rather than repeat conventions from memory. That discipline bit already once: this week the agent found the README had been saved with broken encoding (mojibake diagrams + null bytes), documented a start script that didn't exist, and was missing an entire room access-request flow from the docs — rewrite it against the real schema (&lt;a href="https://github.com/Tusharkhadde/draw-board/blob/main/packages/db/prisma/schema.prisma" rel="noopener noreferrer"&gt;User → RoomAccess / AccessRequest → Chat in Prisma&lt;/a&gt;) instead of trusting my description of it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything ships with a permissive license, a plain-language README, and an &lt;code&gt;.env.example&lt;/code&gt; — so a reader can clone, set two variables, and have the full three-service stack running locally on Node 18 and Postgres.&lt;/p&gt;

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

&lt;p&gt;Three concrete reasons it made THIS build possible, not just a nicer flavor of it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Zero marginal cost to iterate.&lt;/strong&gt; An open-weight model cost me nothing per token. I could burn through dozens of agentic sessions — regenerate the tool-dock UI, redo the sync message schema, restructure the monorepo — with no pricing anxiety. A metered closed API quietly pushes you toward &lt;em&gt;fewer&lt;/em&gt; attempts, and fewer attempts means a worse product. With GLM's open weights I never once thought "I shouldn't ask that again."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The process is inspectable, so the product is trustworthy.&lt;/strong&gt; Because the harness is open source and the model is open-weight, I can see &lt;em&gt;how&lt;/em&gt; the agent works, pin its behavior, and hold it to what it writes. When I tell readers "the codebase has no black box in it," I can say the same about the tooling that produced it. A closed API is a black box inside a black box.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The stack stays fully open, end to end.&lt;/strong&gt; Next.js, React, Tailwind, shadcn/ui, Express, &lt;code&gt;ws&lt;/code&gt;, Prisma, PostgreSQL, Turborepo — every layer is something a 16-year-old in a small town with no cloud budget can clone and run. That's who open innovation is for: the person this challenge's sloth would want behind the keyboard. Nobody needs my permission to fork DrawBoard, self-host it behind their own firewall, and delete the parts they don't want.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;The full working session — from diagnosing the corrupted README, to challenging the agent's stale claims against the real Prisma schema and Express routes, to preparing this submission — is embedded below. It also shows the discipline I'd recommend to anyone vibe-building with agents: &lt;strong&gt;make it re-read the repo instead of quoting its memory.&lt;/strong&gt;&lt;/p&gt;


&lt;div class="ltag-agent-session"&gt;
  &lt;div class="agent-session-header"&gt;
    
    &lt;span class="agent-session-tool-icon-badge" title="OpenCode"&gt;
&lt;/span&gt;
    &lt;span class="agent-session-title"&gt;DrawBoard: reviving a corrupted README and shipping a Hacktoberfest entry with an open-source agent&lt;/span&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-scroll"&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;make readme file better&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Let me check the README first to see what needs improving.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-read"&gt;read&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;README.md&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight markdown"&gt;&lt;code&gt;README.md&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight markdown"&gt;&lt;code&gt;Cannot read binary file: README.md&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Interesting — the README can't even be read as text. Let me inspect the raw bytes.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;Get-Content README.md -Raw&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ Get-Content README.md -Raw&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;# Drawboard ... mojibake box-drawing diagrams ... trailing line: '#' d r a w - b o a r d' with null bytes&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Found it: the file was saved with broken encoding — mojibake in the ASCII diagrams and null bytes at the end. I also need to verify its claims before rewriting.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-shell"&gt;shell&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;package.json / .env.example / prisma schema / http routes / ws message types&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre agent-session-terminal"&gt;&lt;code&gt;$ package.json / .env.example / prisma schema / http routes / ws message types&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;pnpm start -&amp;gt; scripts/start.ps1 (missing); routes: /signup /signin /auth/google /me /room /rooms /room/:key /rooms/:key/access-requests +approve /chats/:key /users/search; models: User Room RoomAccess AccessRequest Chat; ws types: join_room leave_room draw update erase sync clear chat&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;The README is outdated too: it documents a Windows start.ps1 flow that doesn't exist, a legacy &lt;code&gt;web&lt;/code&gt; app that was removed, and never mentions the room access-request flow. Rewriting it clean UTF-8 with corrected endpoints and scripts.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-write"&gt;write&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;README.md&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight markdown"&gt;&lt;code&gt;README.md&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre highlight markdown"&gt;&lt;code&gt;wrote clean, verified README with architecture diagram, accurate API table, correct pnpm start:unix instructions&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;just make more readable readme files&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Done — replaced the sprawling mojibake diagrams with one compact diagram and clean tables, and corrected all the stale claims.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;[Hacktoberfest Week 3 template] this is the submission template give me post i have no teammates&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Fetching the challenge's full_details first.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-getchallenges"&gt;get_challenges&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;page 1&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;page 1&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;Week 3 'Slow and Steady' (id 81): open-source AI that rewards laziness; theme honors Sloth Day; required tag #hf26challenge; due Oct 25 11:59 PM PDT; judging weighted toward writing quality; 20 partner prize categories&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Checking what the dev.to community has already written about collaborative whiteboards so the post joins the ongoing thread.&lt;/p&gt;

                &lt;/div&gt;
              &lt;div class="agent-session-tool-call"&gt;
                
                  &lt;span class="agent-session-chevron"&gt;▸&lt;/span&gt;
                  &lt;span class="tool-name tool-name-searchdevtosemantic"&gt;search_dev_to_semantic&lt;/span&gt;
                    &lt;span class="tool-input-preview"&gt;real-time collaborative whiteboard WebSockets canvas&lt;/span&gt;
                
                &lt;div class="agent-session-tool-detail"&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Input&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;real-time collaborative whiteboard WebSockets canvas&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                    &lt;div class="tool-section"&gt;
                      &lt;div class="tool-section-label"&gt;Output&lt;/div&gt;
                      &lt;pre class="agent-session-pre"&gt;&lt;code&gt;10 posts: system design walkthroughs, React+Go live diagram canvas, 60fps live cursors, Socket.io realtime architecture&lt;/code&gt;&lt;/pre&gt;
                    &lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-assistant"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-assistant"&gt;
          Agent
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;Confirmed with the author: project was built with the OpenCode agent harness on the open-weight GLM model; no partner tech used, so no prize categories; session will be embedded. Drafting the submission to DEV drafts.&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="agent-session-message agent-session-user"&gt;
        &lt;div class="agent-session-role-badge agent-session-role-user"&gt;
          You
        &lt;/div&gt;
        &lt;div class="agent-session-content"&gt;
                &lt;div class="agent-session-text"&gt;
                  &lt;p&gt;yes — save &amp;amp; embed the session, and stage the post as a draft&lt;/p&gt;

                &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class="agent-session-footer"&gt;
    &lt;span class="agent-session-meta"&gt;
        12 of 11 messages
    &lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;Real numbers, no exaggeration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ship time:&lt;/strong&gt; this monorepo — a canvas engine, a REST API, a WebSocket sync server, auth with Google OAuth, room ACLs with approve/reject logic, chat, PNG/SVG export — went from "someday" idea running in my head to a deployed app with a &lt;a href="https://drawboard-peach.vercel.app/" rel="noopener noreferrer"&gt;live demo&lt;/a&gt;, inside one challenge window. Hand-rolling that used to translate into multiple abandoned weekends of mine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setup time:&lt;/strong&gt; clone + two env vars + &lt;code&gt;pnpm start:unix&lt;/code&gt; and all three services are up with correct ports. Before this repo had a decent README, an agent literally diagnosing a corrupted README with null bytes was the debugging tax I was still paying this week — that friction is now zero for the next person.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guest path:&lt;/strong&gt; zero signup for a first draw. Share-link join with owner-approved access requests. If someone just wants to sketch with a friend for five minutes, the entire cost is opening a URL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The sloth won this week, and it won honestly: the open agent did the work, and I stayed steady while it did it.&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>hacktoberfest</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>MenuPage: Helping Small Restaurants Go Digital with AI 🍽️</title>
      <dc:creator>Tushar Khadde</dc:creator>
      <pubDate>Sun, 18 Oct 2026 06:18:09 +0000</pubDate>
      <link>https://dev.to/devtushark/menupage-helping-small-restaurants-go-digital-with-ai-3gmo</link>
      <guid>https://dev.to/devtushark/menupage-helping-small-restaurants-go-digital-with-ai-3gmo</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  🍽️ MenuPage — A Digital Menu Platform for Small Restaurants
&lt;/h1&gt;

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

&lt;p&gt;I built &lt;strong&gt;MenuPage&lt;/strong&gt;, a digital menu platform designed to help small restaurants, cafés, and food stalls establish an online presence and simplify their ordering process.&lt;/p&gt;

&lt;p&gt;Many small food businesses still rely on printed menus and manual order management. Updating menus, sharing prices, and handling customer orders can become unnecessarily complicated.&lt;/p&gt;

&lt;p&gt;MenuPage aims to make these tasks easier by bringing essential restaurant tools together in one place.&lt;/p&gt;

&lt;p&gt;With MenuPage, restaurant owners can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📱 Create digital menus that customers can access through QR codes.&lt;/li&gt;
&lt;li&gt;🍔 Manage dishes, prices, and menu availability.&lt;/li&gt;
&lt;li&gt;📲 Simplify ordering through WhatsApp.&lt;/li&gt;
&lt;li&gt;🪑 Generate QR codes for individual restaurant tables.&lt;/li&gt;
&lt;li&gt;📊 Manage orders through a restaurant dashboard.&lt;/li&gt;
&lt;li&gt;💳 Support direct UPI payments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who would pay for it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Independent restaurants, cafés, food stalls, and small restaurant chains that want a digital presence without the complexity of building their own website or depending entirely on third-party food delivery platforms.&lt;/p&gt;

&lt;p&gt;My goal is to make digital restaurant tools more accessible and affordable for small businesses.&lt;/p&gt;

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

&lt;p&gt;🚀 &lt;strong&gt;Live Website:&lt;/strong&gt; &lt;a href="https://menupage-topaz.vercel.app/" rel="noopener noreferrer"&gt;https://menupage-topaz.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎥 &lt;strong&gt;Video Demo:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/1w4kGweUDNaAlL4FY9K6ZOKWTF3Ub_7A5/view?usp=sharing" rel="noopener noreferrer"&gt;Watch the demo &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The demo showcases the product and its approach to making restaurant menus and ordering more accessible.&lt;/p&gt;

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

&lt;p&gt;💻 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/Tusharkhadde/MenuPgae" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm building MenuPage as a practical product focused on real business needs, rather than just another portfolio project.&lt;/p&gt;

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

&lt;p&gt;I built MenuPage as a web application with a customer-facing digital menu and restaurant management workflows.&lt;/p&gt;

&lt;p&gt;The core idea is to connect menu management, QR-based access, customer ordering, and restaurant operations in one experience.&lt;/p&gt;

&lt;p&gt;I'm exploring how open-source AI can make these workflows even more useful, particularly for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 Translating menus into multiple languages.&lt;/li&gt;
&lt;li&gt;📸 Extracting dish names and prices from menu photos.&lt;/li&gt;
&lt;li&gt;📈 Helping restaurants understand demand and plan food preparation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are areas where open-weight AI models could help reduce repetitive work and make useful technology more accessible to small businesses.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;[Update this section with the exact AI models, frameworks, and inference provider used in the submitted version.]&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I believe small businesses should be able to benefit from AI without being locked into expensive proprietary services.&lt;/p&gt;

&lt;p&gt;Open-weight models give developers the flexibility to experiment, compare approaches, customize workflows, and choose inference options that suit their budgets.&lt;/p&gt;

&lt;p&gt;For MenuPage, open innovation creates opportunities to make multilingual menus and menu digitization more accessible to restaurants that may not have the resources to invest in custom software.&lt;/p&gt;

&lt;p&gt;It also allows other developers to contribute, improve the implementation, and build new features on top of existing work.&lt;/p&gt;

&lt;p&gt;The bigger idea is simple: &lt;strong&gt;AI should solve practical problems for everyday businesses, not just power impressive demos.&lt;/strong&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Hacktoberfest Open-Source AI Challenge — Week 2: Side Hustle&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>🌿 Side Quest: An Open-Source AI Agent That Turns Screen Time into Real-World Adventures</title>
      <dc:creator>Tushar Khadde</dc:creator>
      <pubDate>Sun, 11 Oct 2026 02:27:05 +0000</pubDate>
      <link>https://dev.to/devtushark/side-quest-an-open-source-ai-agent-that-turns-screen-time-into-real-world-adventures-3c9p</link>
      <guid>https://dev.to/devtushark/side-quest-an-open-source-ai-agent-that-turns-screen-time-into-real-world-adventures-3c9p</guid>
      <description>&lt;h1&gt;
  
  
  🌿 Side Quest: An Open-Source AI Agent That Gets You Off Your Screen
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;We spend hours staring at screens, often forgetting to step outside, take a walk, or notice the world around us.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Side Quest is an open-source AI-powered outdoor companion that turns excessive screen time into small real-world adventures.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of simply telling you to take a break, Side Quest creates a personalized 20-minute quest based on your local weather, sunset time, and nearby green spaces.&lt;/p&gt;

&lt;p&gt;🌱 &lt;strong&gt;What it does:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detects screen time:&lt;/strong&gt; Tracks activity inside the PWA, with an optional lightweight desktop watcher for system-wide activity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generates outdoor quests:&lt;/strong&gt; Uses open-weight AI models to suggest simple activities, like finding three different red leaves or exploring a nearby park.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adapts to conditions:&lt;/strong&gt; Checks weather, temperature, rain, storms, and sunset before suggesting a quest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gets you away from the screen:&lt;/strong&gt; Switches to a dark, voice-friendly interface so you can complete your quest without constantly looking at your phone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verifies your adventure:&lt;/strong&gt; Lets you submit a proof photo for AI-assisted verification and earn a stamp.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keeps your memories local:&lt;/strong&gt; Stores your quest history, photos, and statistics in your browser.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When outdoor conditions aren't suitable, Side Quest suggests a safer indoor-adjacent alternative, such as a balcony or covered area.&lt;/p&gt;

&lt;p&gt;The goal is simple: &lt;strong&gt;less scrolling, more exploring.&lt;/strong&gt;&lt;/p&gt;

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

&lt;p&gt;🎥 &lt;strong&gt;Watch the Demo:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/11b1K16Fhwq8H5gl1jp0mJgcmzSb7dKc9/view" rel="noopener noreferrer"&gt;Side Quest — Video Demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/Tusharkhadde/side-quest" rel="noopener noreferrer"&gt;Tusharkhadde/side-quest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/Tusharkhadde/side-quest" rel="noopener noreferrer"&gt;Tusharkhadde/side-quest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project is open source under the MIT License. You can run it locally, experiment with different open-weight models, or self-host the inference layer.&lt;/p&gt;

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

&lt;p&gt;Side Quest is built with Next.js, TypeScript, browser APIs, and an AI agent pipeline designed to work with multiple model providers.&lt;/p&gt;

&lt;h3&gt;
  
  
  The open-source AI stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 26B A4B:&lt;/strong&gt; The default model for generating quests and checking proof photos through the Gemini API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 31B:&lt;/strong&gt; A text-generation fallback through DigitalOcean's serverless inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NVIDIA Nemotron Nano 12B v2 VL:&lt;/strong&gt; An open-weight vision-language model for photo verification through DigitalOcean.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama:&lt;/strong&gt; An optional route for running compatible models locally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN:&lt;/strong&gt; An optional experiment that predicts when a user is most likely to accept a quest based on their exported journal data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How the agent works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Gather local context, including approximate location, weather, sunset time, and nearby parks or paths.&lt;/li&gt;
&lt;li&gt;Apply code-based safety rules to determine which types of quests are appropriate.&lt;/li&gt;
&lt;li&gt;Ask the selected open-weight model to generate a structured quest with clear steps and a safety note.&lt;/li&gt;
&lt;li&gt;Validate the response and retry or switch providers if generation fails.&lt;/li&gt;
&lt;li&gt;Let the user complete the quest, submit a photo if they choose, and earn a stamp.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The application uses Open-Meteo for weather information and OpenStreetMap data for nearby places.&lt;/p&gt;

&lt;p&gt;It also includes a lightweight desktop watcher that detects extended periods of computer activity without sending activity data to a remote server.&lt;/p&gt;

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

&lt;p&gt;For a project focused on personal habits and privacy, having control over the AI stack matters.&lt;/p&gt;

&lt;p&gt;Open-weight models make it possible to experiment with different inference providers, change models without rebuilding the application, and eventually run inference entirely on local hardware.&lt;/p&gt;

&lt;p&gt;With Side Quest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No single-provider lock-in:&lt;/strong&gt; The provider chain can switch between hosted inference, compatible endpoints, Ollama, and a deterministic demo fallback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More control over privacy:&lt;/strong&gt; Location processing happens on the device, and self-hosted inference can keep model inputs on your own hardware.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparent experimentation:&lt;/strong&gt; Developers can inspect the prompts, validation schemas, provider integrations, and safety logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Room to improve:&lt;/strong&gt; Quest completion history can support future experiments with personalization and fine-tuning.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One important distinction: open weights don't automatically make hosted inference private. When a hosted provider is used, some information is sent to that provider. Side Quest documents these data flows and provides configuration options for developers who want more control.&lt;/p&gt;

&lt;p&gt;Open innovation makes this project adaptable, inspectable, and easier for the community to build upon.&lt;/p&gt;

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

&lt;p&gt;The agent pipeline, provider fallback logic, and quest-generation implementation are available in the repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explore the implementation:&lt;/strong&gt; &lt;a href="https://github.com/Tusharkhadde/side-quest" rel="noopener noreferrer"&gt;Side Quest on GitHub&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;This project is submitted for the &lt;strong&gt;Hacktoberfest Open-Source AI Challenge — Week 1: Touch Grass&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Additional partner prize categories should be listed here only if Side Quest meets their specific eligibility requirements.&lt;/p&gt;




&lt;p&gt;Built with open-source AI, a little curiosity, and the belief that the best quest sometimes starts by putting your phone down. 🌿&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>CI Watchdog — The Autonomous CI Minutes &amp; Spend Sentinel with Open AI Failure Triage</title>
      <dc:creator>Tushar Khadde</dc:creator>
      <pubDate>Mon, 05 Oct 2026 03:38:55 +0000</pubDate>
      <link>https://dev.to/devtushark/ci-watchdog-the-autonomous-ci-minutes-spend-sentinel-with-open-ai-failure-triage-43gd</link>
      <guid>https://dev.to/devtushark/ci-watchdog-the-autonomous-ci-minutes-spend-sentinel-with-open-ai-failure-triage-43gd</guid>
      <description>&lt;h1&gt;
  
  
  CI Watchdog
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;An autonomous GitHub App and SaaS platform that stops wasted CI spend before it hits your invoice, and automatically diagnoses broken builds using open-weight AI.&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;Every developer has that one friend or team lead who dreads the 20th of the month: the day GitHub sends the notification:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"You have used 100% of your included GitHub Actions minutes."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I built &lt;strong&gt;CI Watchdog&lt;/strong&gt; for my friend and engineering teammate, who was constantly battling ballooning CI bills and jammed pipeline queues on open-source and startup projects.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Developers push 4 quick commits to a PR, and GitHub blindly spawns 4 redundant 15-minute test suites in parallel on expensive runners (Ubuntu, macOS, Windows).&lt;/li&gt;
&lt;li&gt;When a build fails after 20 minutes, developers have to dig through 30,000 lines of terminal logs just to discover a blocked database container port or a missing env variable.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Autonomous Waste Prevention:&lt;/strong&gt; Detects and cancels superseded runs, runaway jobs exceeding historical p95 execution baselines, and PR workflows left running on closed branches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proactive Workflow Hygiene:&lt;/strong&gt; Audits repository workflows for missing &lt;code&gt;concurrency&lt;/code&gt; blocks and generates 1-click YAML fixes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Failure Investigation:&lt;/strong&gt; The moment a build fails, an integrated AI agent pulls the raw runner logs, redacts secrets, diagnoses the exact root cause, pinpoints the failed step, categorizes the bug, and provides copy-paste solutions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human-in-the-Loop Control Plane:&lt;/strong&gt; Includes a kill switch, dry-run observation safety rails, team approvals for cancellations, and interactive ROI spend simulators.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live Dashboard:&lt;/strong&gt; &lt;a href="https://ci-watchdog.vercel.app" rel="noopener noreferrer"&gt;ci-watchdog.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🧪 &lt;strong&gt;Live Demo Pull Request:&lt;/strong&gt; &lt;a href="https://drive.google.com/file/d/1NgK95ftACly7ZpQnTOCnFLfNkLO0kkXM/view?usp=sharing" rel="noopener noreferrer"&gt;Live Demo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Features to Explore
&lt;/h3&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;Feature&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/app&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Control Room Overview&lt;/td&gt;
&lt;td&gt;Live and dry-run minutes-saved counters, real-time system status indicators, and weekly savings charts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/app/investigations&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;AI Investigations&lt;/td&gt;
&lt;td&gt;Instant root-cause diagnostic cards generated by Gemma / Gemini 3.8 Flash, with failure hypotheses, log evidence snippets, and recommended next steps.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/app/decisions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Decision Engine &amp;amp; CSV Export&lt;/td&gt;
&lt;td&gt;Full searchable decision history with rule and status filters, plus 1-click CSV download for engineering management reports.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/app/approvals&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Human Approval Queue&lt;/td&gt;
&lt;td&gt;First-N quota approval flow with 1-click &lt;strong&gt;Approve&lt;/strong&gt; and &lt;strong&gt;Deny&lt;/strong&gt; buttons.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/app/digest&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Interactive ROI Calculator&lt;/td&gt;
&lt;td&gt;Real-time savings simulator modeling monthly minute volume and runner tiers (see pricing below).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Runner pricing used in the ROI calculator:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Runner&lt;/th&gt;
&lt;th&gt;Cost per minute&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ubuntu&lt;/td&gt;
&lt;td&gt;$0.008&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;$0.016&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;macOS&lt;/td&gt;
&lt;td&gt;$0.080&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apple Silicon (M-series)&lt;/td&gt;
&lt;td&gt;$0.160&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;p&gt;The entire codebase is open-source and structured as a high-performance TypeScript monorepo using &lt;strong&gt;Turborepo&lt;/strong&gt; and &lt;strong&gt;pnpm&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/Tusharkhadde/CI-watchdog" rel="noopener noreferrer"&gt;Tusharkhadde/CI-watchdog&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;apps/watchdog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Event-driven Node.js background service deployed on Render. Connects to the GitHub App webhook stream, processes workflow states, runs the pure rule engine, and coordinates AI triage.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;apps/dashboard&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Next.js 16 (Turbopack) dashboard deployed on Vercel with Shadcn UI, Auth.js (OAuth with GitHub &amp;amp; Google), and real-time state synchronization.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;config/watchdog.yml&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Declarative team policies with per-repository overrides.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

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

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

&lt;h3&gt;
  
  
  1. Pure, Deterministic Rule Engine
&lt;/h3&gt;

&lt;p&gt;The rule engine (&lt;code&gt;apps/watchdog/src/rules/&lt;/code&gt;) was designed to be 100% pure with zero side effects. Given the current run, sibling runs, historical durations, and workflow YAML, it evaluates four rules:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;th&gt;Behavior&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SUPERSEDED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cancels older runs queued on the same ref when a newer commit arrives.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;RUNAWAY_DURATION&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Compares running jobs against historical p95 execution times and alerts/cancels if a job hangs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MISSING_CONCURRENCY&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scans workflow ASTs and alerts if jobs lack top-level concurrency cancellation blocks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;STALE_ON_CLOSE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Immediately terminates active pipelines when a PR is merged or closed.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Intelligent AI Failure Triage
&lt;/h3&gt;

&lt;p&gt;When a workflow concludes with a failure, CI Watchdog activates the AI investigator:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fetches the raw runner logs via the GitHub API.&lt;/li&gt;
&lt;li&gt;Runs pattern redaction to scrub tokens and sensitive credentials.&lt;/li&gt;
&lt;li&gt;Dispatches the condensed failure excerpt to open-weight models (Google Gemma / Gemini 3.8 Flash via OpenAI-compatible endpoints).&lt;/li&gt;
&lt;li&gt;Validates the output with &lt;strong&gt;Zod&lt;/strong&gt;, enforcing structured JSON containing:&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rootCause&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Explicit technical diagnosis (e.g., missing Docker service container, database port refusal).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;failedStep&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Exact bash command or step name that exited non-zero.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;category&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;One of: Infrastructure, Configuration, Test, or Code.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;nextSteps&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Concrete remediation actions.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3. Safety Rails &amp;amp; Human-in-the-Loop
&lt;/h3&gt;

&lt;p&gt;Automated cancellation can be intimidating for developers, so I implemented strict safety rails:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Default Dry-Run Mode:&lt;/strong&gt; Repositories begin in observation mode so teams can review what &lt;em&gt;would&lt;/em&gt; have been canceled without impacting active builds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;48-Hour Observation Window:&lt;/strong&gt; Go-live can only be unlocked after a repository has been observed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First-N Live Approval Quota:&lt;/strong&gt; The first cancellations require explicit human confirmation via dashboard or Slack buttons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protected Branch Immunity:&lt;/strong&gt; Never cancels &lt;code&gt;main&lt;/code&gt;, &lt;code&gt;master&lt;/code&gt;, or &lt;code&gt;release/*&lt;/code&gt; branches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global Kill Switch:&lt;/strong&gt; Instantly pauses all active cancellations across all repositories.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;p&gt;Open innovation is what makes a tool like CI Watchdog possible without compromising developer trust:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Sovereignty &amp;amp; Privacy:&lt;/strong&gt; Build logs often contain internal paths, dependencies, proprietary package names, and sensitive environment details. Relying on closed, proprietary cloud AI black boxes creates data-leakage risks for enterprise codebases. Open-weight models like Gemma enable teams to run AI failure analysis locally or within their own private infrastructure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic Customization:&lt;/strong&gt; Open tooling and open protocols allow developers to customize rule thresholds, inspect prompts, tune temperature, and swap backend models based on compute constraints.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Vendor Lock-In:&lt;/strong&gt; Developers shouldn't need a six-figure enterprise contract just to know why their CI pipeline broke or to prevent redundant job execution. Open innovation democratizes cost control for individual creators, open-source maintainers, and startups alike.&lt;/li&gt;
&lt;/ul&gt;




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

&lt;ul&gt;
&lt;li&gt;Build for a Friend&lt;/li&gt;
&lt;li&gt;Open Innovation &amp;amp; Open-Weight AI&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ during Hacktoberfest. If your team is burning minutes on redundant CI runs, give CI Watchdog a spin!&lt;/em&gt;&lt;/p&gt;

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