<?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: SUNNY TIWARI</title>
    <description>The latest articles on DEV Community by SUNNY TIWARI (@sunny_tiwari_1921).</description>
    <link>https://dev.to/sunny_tiwari_1921</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%2F4177696%2Ff301d96d-aa9f-4545-918b-6bc0256c96fe.jpg</url>
      <title>DEV Community: SUNNY TIWARI</title>
      <link>https://dev.to/sunny_tiwari_1921</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sunny_tiwari_1921"/>
    <language>en</language>
    <item>
      <title>LeaveNote: an AI that writes your handover note so tomorrow-you can be lazy</title>
      <dc:creator>SUNNY TIWARI</dc:creator>
      <pubDate>Sun, 25 Oct 2026 13:11:23 +0000</pubDate>
      <link>https://dev.to/sunny_tiwari_1921/leavenote-an-ai-that-writes-your-handover-note-so-tomorrow-you-can-be-lazy-p62</link>
      <guid>https://dev.to/sunny_tiwari_1921/leavenote-an-ai-that-writes-your-handover-note-so-tomorrow-you-can-be-lazy-p62</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;LeaveNote is for the moment you stop coding mid-task. You paste your &lt;code&gt;git diff&lt;/code&gt; plus one line about what you were doing, and it writes the handover note: what changed, what's unfinished, the first thing to do tomorrow, and what to watch out for - leftover TODOs and debug lines included.&lt;/p&gt;

&lt;p&gt;Rebuilding your own context the next morning is the most boring part of coding. LeaveNote captures it before you close the laptop, so tomorrow-you reads one note and starts. That is the laziness this week asked for.&lt;/p&gt;

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

&lt;p&gt;Live: &lt;a href="https://leavenote-app.netlify.app" rel="noopener noreferrer"&gt;https://leavenote-app.netlify.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The AI needs WebGPU (a recent Chrome or Edge on a device with a supported GPU). Devices without it get an honest message and a manual template - never a fake demo. The model downloads once (a few hundred MB) and then stays cached in the browser.&lt;/p&gt;

&lt;p&gt;Note: the live demo currently serves the first version, where the model writes all four sections. The v2 redesign described below is on a pull request and the demo updates when it lands.&lt;/p&gt;

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

&lt;p&gt;The current live demo (v1), on desktop and on a phone:&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%2F7a29lhc4ni6fb2lghatd.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%2F7a29lhc4ni6fb2lghatd.png" alt="LeaveNote live demo (v1) on desktop" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnbow6txfkdaju5mb51ay.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%2Fnbow6txfkdaju5mb51ay.png" alt="LeaveNote live demo (v1) on mobile" width="390" height="844"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The v2 code on PR #1 (not merged yet - its prompt is validated against the real model weights on CPU, but it has not run in a browser end-to-end):&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%2F08u5bg39iuwtaema56v5.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%2F08u5bg39iuwtaema56v5.png" alt="PR #1 diff with the v2 changes" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Repo: &lt;a href="https://github.com/Sanny1921/leavenote" rel="noopener noreferrer"&gt;https://github.com/Sanny1921/leavenote&lt;/a&gt; - the v2 rework is on PR #1: &lt;a href="https://github.com/Sanny1921/leavenote/pull/1" rel="noopener noreferrer"&gt;https://github.com/Sanny1921/leavenote/pull/1&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The whole app is one &lt;code&gt;index.html&lt;/code&gt; plus a two-line WebLLM worker. The heart of v2 is this split:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// The app, not the AI, finds the facts in your diff.&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;todosOf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;f&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;l&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;added&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\b(&lt;/span&gt;&lt;span class="sr"&gt;TODO|FIXME|HACK|XXX&lt;/span&gt;&lt;span class="se"&gt;)\b&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;: &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// UNFINISHED and WATCH OUT are built from these, never from the model.&lt;/span&gt;
&lt;span class="c1"&gt;// The model only phrases CHANGED and a suggested TOMORROW first step.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;The AI is Qwen2.5-0.5B-Instruct (Apache 2.0) running fully in the browser through WebLLM (Apache 2.0). No server, no API key, no account, no analytics. Your code never leaves your device.&lt;/p&gt;

&lt;p&gt;The first version asked the small model to read a raw diff and write all four sections. It failed the way small models do: it once reported a leftover TODO as done. A bigger model might fix that, but I wanted to keep the download at a few hundred MB, so I shrank the model's job instead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Plain JavaScript parses the diff first: file names, added and removed line counts, &lt;code&gt;TODO&lt;/code&gt;/&lt;code&gt;FIXME&lt;/code&gt; markers, &lt;code&gt;console.log&lt;/code&gt; and &lt;code&gt;debugger&lt;/code&gt; lines.&lt;/li&gt;
&lt;li&gt;The UNFINISHED and WATCH OUT sections are built from that direct reading: they quote recognized markers (TODO/FIXME, console.log, debugger) verbatim instead of letting the model paraphrase them. The parser only recognizes those markers, so unmarked half-done work can still slip past it - the note is a memory aid, not a guarantee.&lt;/li&gt;
&lt;li&gt;The model only writes the two lines it handles well: a plain-English summary of what changed, and a suggested first step for tomorrow, phrased from the facts it is handed.&lt;/li&gt;
&lt;li&gt;Checks reject malformed answers and "nothing to do" replies when TODO flags exist. Each line falls back to the parsed version if needed, and the note's footer says exactly which lines are AI-written and which are parsed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I validated the prompt pipeline against the real Qwen2.5-0.5B-Instruct weights on CPU: 3 out of 3 test diffs produced the required two-line format. The in-browser inference path (WebLLM on WebGPU) is unchanged from the first version, which ran on my phone.&lt;/p&gt;

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

&lt;p&gt;The whole point of LeaveNote is that your code stays yours. A closed API means pasting your private repo's diff onto someone else's server and trusting their retention policy. Because the model is open-weight and runs locally, the diff never leaves the device - no account, no logs, nothing to leak. It costs nothing to run, works offline after the first download, and anyone can swap Qwen2.5 for another open model by changing one constant.&lt;/p&gt;

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

&lt;p&gt;Five to ten minutes of "wait, what was I doing?" saved every time you pick a project back up, and fewer debug lines surviving into the next session because the note calls them out.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>CutBrief: the paid edit should not start with a guessing game</title>
      <dc:creator>SUNNY TIWARI</dc:creator>
      <pubDate>Fri, 16 Oct 2026 21:30:00 +0000</pubDate>
      <link>https://dev.to/sunny_tiwari_1921/cutbrief-the-paid-edit-should-not-start-with-a-guessing-game-1l8l</link>
      <guid>https://dev.to/sunny_tiwari_1921/cutbrief-the-paid-edit-should-not-start-with-a-guessing-game-1l8l</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;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;"Make it engaging. Add captions. Something clean."&lt;/p&gt;

&lt;p&gt;That is a message, not an editing brief. It does not tell an editor which footage to use, what the opening should do, or what the viewer should do next. When the first cut fills those gaps differently from the client, the revision starts before the real work has settled.&lt;/p&gt;

&lt;p&gt;I run a short-form editing agency. For this week's Side Hustle theme, I chose a problem close to the work: getting from a rough client request to a handoff an editor can actually use.&lt;/p&gt;

&lt;p&gt;CutBrief is a small browser tool. Paste a request, select an editing direction, and a local open-weight model suggests a hook, cut plan, caption notes and a CTA check. The result is editable and downloadable as plain text.&lt;/p&gt;

&lt;p&gt;The important choice is what it &lt;strong&gt;does not&lt;/strong&gt; blend together:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The client's exact request stays at the top.&lt;/li&gt;
&lt;li&gt;AI ideas are labeled as suggestions, not client instructions.&lt;/li&gt;
&lt;li&gt;A fixed checklist asks about assets, deadlines, scope, revisions, rights and fees.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model does not quote a price, promise results, contact the client or edit the video. It helps prepare the brief. The editor still owns the decisions.&lt;/p&gt;

&lt;p&gt;The buyer hypothesis is a freelance editor or small editing studio doing repeated short-form work. They would pay for a better handoff if it reduces clarification and rework. I have not validated that hypothesis with a paying customer. A plausible product is a one-time studio setup with its own brief format and vocabulary, rather than another per-token subscription. That is a business idea to test, not revenue I have earned.&lt;/p&gt;

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

&lt;p&gt;Try it here: &lt;a href="https://sanny1921.github.io/cutbrief/" rel="noopener noreferrer"&gt;https://sanny1921.github.io/cutbrief/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first load downloads model files (hundreds of MB) and needs a WebGPU-capable browser, so older phones may not work. Nothing is sent to an inference server.&lt;/p&gt;

&lt;p&gt;The included cafe request is fictional. It asks for a 30-second brunch reel, a warm style, food close-ups, licensed music and a visit-us CTA. It is example input, not customer feedback.&lt;/p&gt;

&lt;p&gt;The intended flow is: load model, paste request, generate, review against the original, edit, then export. The two review boxes are a reminder to check facts and the final agreement, not a claim that the model can verify them.&lt;/p&gt;

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

&lt;p&gt;Repo: &lt;a href="https://github.com/Sanny1921/cutbrief" rel="noopener noreferrer"&gt;https://github.com/Sanny1921/cutbrief&lt;/a&gt; (public, MIT). The README lists the limits.&lt;/p&gt;

&lt;p&gt;The app code is MIT licensed. Qwen and WebLLM have their own Apache 2.0 licenses and are credited below. CutBrief is a new Week 2 project, not a change to my Week 1 app.&lt;/p&gt;

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

&lt;p&gt;The UI is HTML, CSS and JavaScript, with inference in a module worker so model work does not need to block the interface. It uses &lt;strong&gt;Qwen2.5-0.5B-Instruct&lt;/strong&gt;, an open-weight model from the Qwen team, through &lt;strong&gt;WebLLM 0.2.84&lt;/strong&gt;, MLC's open-source in-browser inference engine. The selected MLC build is &lt;code&gt;Qwen2.5-0.5B-Instruct-q4f32_1-MLC&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The prompt is deliberately narrow. It asks for four short sections and tells the model not to invent client facts, prices, offers or guarantees. User input is marked as request data. That reduces accidental instruction mixing, but it is not a guarantee against bad output. The app keeps the original source visible so the person reviewing has something to check.&lt;/p&gt;

&lt;p&gt;A small model is a tradeoff. It is cheaper to load than a much larger model, but it is not a reliable substitute for an experienced editor. The product is useful only if reviewing its ideas is less work than writing the handoff from scratch.&lt;/p&gt;

&lt;h3&gt;
  
  
  What has actually been tested
&lt;/h3&gt;

&lt;p&gt;The responsive UI was checked at 320px, 390px and desktop widths. Example loading and clearing work. In a test with an explicitly labeled model substitute, edited output exported exactly and the review gate blocked unchecked export. That checks the app mechanics, &lt;strong&gt;not&lt;/strong&gt; the quality of AI.&lt;/p&gt;

&lt;p&gt;I also ran it on a real phone: a Motorola edge 60 pro in Chrome on Android. The model downloaded and loaded, and I loaded the fictional cafe example and tapped "Make an editing brief". It produced a real AI-generated brief with the client's exact request at the top, the selected direction, and a separate "AI SUGGESTIONS (not confirmed client instructions)" section. The screenshots below are from that run.&lt;/p&gt;

&lt;p&gt;That is one device and one fictional example. It shows the whole local flow can work on a current Android phone. It does not show that the suggestions are good, that other phones will cope, or how fast it runs on them. I did not benchmark it. Earlier, on a software GPU, completion did not finish within my bounded test, so hardware matters.&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%2F688hceg2azx3mdo035y3.jpg" 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%2F688hceg2azx3mdo035y3.jpg" alt="CutBrief input screen, top: the fictional cafe request" width="610" height="1301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxxe61j05yrfpli17j7em.jpg" 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%2Fxxe61j05yrfpli17j7em.jpg" alt="CutBrief input screen, bottom: editing direction and model loaded" width="610" height="1302"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqov3j6gt0x0vejsn3h6j.jpg" 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%2Fqov3j6gt0x0vejsn3h6j.jpg" alt="CutBrief output on the phone: client request on top, AI suggestions below" width="610" height="1304"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The brief may contain a client's unreleased offer, creative direction or launch plan. For a text task this small, shipping those words to a hosted model should be a choice, not the only way the product works.&lt;/p&gt;

&lt;p&gt;With local inference, the client request is passed to the model in the browser. The app has no message database, analytics or inference server. Hosting, JavaScript-CDN and model servers still receive ordinary file requests and IP metadata. The first model download needs internet, and I do not claim that a page reload always works offline.&lt;/p&gt;

&lt;p&gt;Open weights also change the cost structure. There is no hosted-model charge for each generated brief. That does not make the product free to operate: the user's device, storage, electricity, setup and support still cost something. It does make a one-time studio tool more plausible without attaching a token bill to every client's request.&lt;/p&gt;

&lt;p&gt;The model and prompt can be changed without rewriting the handoff workflow around one proprietary inference provider. Qwen's Apache 2.0 license and WebLLM's Apache 2.0 license make that path inspectable. I have not fine-tuned this model; studio-specific tuning is a future option, not an implemented feature.&lt;/p&gt;

&lt;p&gt;The open approach is better for this design's data boundary and per-request API costs. I have not demonstrated that it writes better briefs than a closed model. A larger hosted model might produce stronger suggestions and work on more devices. Local inference has a real entry cost: hundreds of MB to download, a WebGPU-capable browser, and hardware-dependent speed.&lt;/p&gt;

&lt;p&gt;That is the constraint I want to test honestly. A small, private draft assistant might be enough for the handoff. It does not need to become a video editor or a general chatbot to earn its place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Credits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct" rel="noopener noreferrer"&gt;Qwen2.5-0.5B-Instruct model card&lt;/a&gt; and its Apache 2.0 license.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://huggingface.co/mlc-ai/Qwen2.5-0.5B-Instruct-q4f32_1-MLC" rel="noopener noreferrer"&gt;MLC model conversion&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/mlc-ai/web-llm" rel="noopener noreferrer"&gt;WebLLM&lt;/a&gt;, Apache 2.0, by the MLC team.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built with AI assistance. Customer validation is still a next step. No first-user, payment or partner-prize claim is included.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Touch Grass Bingo: an AI that runs in your browser and sends you outside</title>
      <dc:creator>SUNNY TIWARI</dc:creator>
      <pubDate>Sun, 11 Oct 2026 20:53:33 +0000</pubDate>
      <link>https://dev.to/sunny_tiwari_1921/touch-grass-bingo-an-ai-that-runs-in-your-browser-and-sends-you-outside-1k8i</link>
      <guid>https://dev.to/sunny_tiwari_1921/touch-grass-bingo-an-ai-that-runs-in-your-browser-and-sends-you-outside-1k8i</guid>
      <description>&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;Touch Grass Bingo is a small web app. You type your city or area, pick how much time you have (15 minutes to 2 hours) and a vibe (chill walk, photo hunt, street food and people, nature and wildlife). An open-weight AI model then writes a 5x5 bingo card for you: "Spot a street dog", "Hear a temple bell", "Find a flower".&lt;/p&gt;

&lt;p&gt;Then you put the phone in your pocket and go tick the squares off. The middle square is free. Get a line and you get a BINGO.&lt;/p&gt;

&lt;p&gt;The idea is simple: the app should be the shortest part of your day. You open it for 30 seconds, then you leave.&lt;/p&gt;

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

&lt;p&gt;Live app: &lt;a href="https://sanny1921.github.io/touch-grass-bingo/" rel="noopener noreferrer"&gt;https://sanny1921.github.io/touch-grass-bingo/&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpeqss5npqixp56o44kjx.jpg" 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%2Fpeqss5npqixp56o44kjx.jpg" alt="A real card generated on my Android phone" width="610" height="1356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The second screenshot is a real card, generated on my own Android phone in Chrome. It is not a mock.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Sanny1921/touch-grass-bingo" rel="noopener noreferrer"&gt;https://github.com/Sanny1921/touch-grass-bingo&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Llama 3.2 1B Instruct, an open-weight model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime:&lt;/strong&gt; WebLLM, which runs the model inside the browser on WebGPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App:&lt;/strong&gt; one plain HTML file with no framework, no backend and no API key. It is hosted free on GitHub Pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first time you press "Generate my card", your browser downloads the model (about 700MB). After that it is cached on your device. Everything after that happens on your phone.&lt;/p&gt;

&lt;h3&gt;
  
  
  The struggle (v1 to v3)
&lt;/h3&gt;

&lt;p&gt;I built this overnight, and the first version did not work on my phone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v1:&lt;/strong&gt; I asked the model to return a JSON array of 24 strings. On my phone the model loaded fine, but it kept returning broken JSON. After 3 retries the app gave up and showed a built-in starter card instead. So I had an "AI app" that was not using the AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v2:&lt;/strong&gt; I figured a 1B model is just bad at strict JSON. I changed the contract to a plain numbered list ("1. Spot a street dog") and wrote a forgiving parser. It ignores numbering styles, bullets, markdown and duplicates, and drops junk lines. I also tried a bigger model, Qwen2.5 1.5B. But that was a 1GB download and it kept failing on my wifi with a cache error. Lesson: on a phone, model size is part of the product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;v3:&lt;/strong&gt; I went back to Llama 3.2 1B, which my phone had already downloaded, and kept the numbered list. I also added a salvage step: the app keeps the best of 3 attempts, and if the model gives at least 14 good squares, it fills the rest from a starter list instead of throwing everything away. I also added retries for the model download and a visible progress percentage.&lt;/p&gt;

&lt;p&gt;That worked. The card in the screenshot above came from the model on my phone.&lt;/p&gt;

&lt;p&gt;Honest limits: a 1B model writes simple squares, and they can be generic ("Find a flower"). It is not a travel guide. A bigger model would write sharper, more local cards, and that is the first thing I would change with more time.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your location stays with you.&lt;/strong&gt; You type where you are. That text goes to a model running on your own phone, not to someone else's server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; There is no API bill, so I can leave it up for anyone. Hosting is a single static file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I could swap the model.&lt;/strong&gt; While building this I changed models and prompts several times by editing one line. With a closed API I would have been stuck with whatever it gave me.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Would Do Next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Let people pick a bigger model if their phone and wifi can handle it.&lt;/li&gt;
&lt;li&gt;Save a card and share it with friends so you can race on the same one.&lt;/li&gt;
&lt;li&gt;Use the time and weather to tune the card.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This project does not use any partner tool. It is an open-weight model (Llama 3.2) running in the browser with WebLLM, so I'm entering for the overall prize.&lt;/p&gt;

&lt;p&gt;Thanks for reading. Now go touch some grass.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
