<?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: Mialy333 🎧ྀི</title>
    <description>The latest articles on DEV Community by Mialy333 🎧ྀི (@mialy333).</description>
    <link>https://dev.to/mialy333</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%2F1402385%2F13c22e43-dac2-48a2-9480-2492acaa2bb0.jpg</url>
      <title>DEV Community: Mialy333 🎧ྀི</title>
      <link>https://dev.to/mialy333</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mialy333"/>
    <language>en</language>
    <item>
      <title>When everything feels urgent: I built my sister a tool that gives her just one next step</title>
      <dc:creator>Mialy333 🎧ྀི</dc:creator>
      <pubDate>Sun, 04 Oct 2026 22:44:41 +0000</pubDate>
      <link>https://dev.to/mialy333/when-everything-feels-urgent-i-built-my-sister-a-tool-that-gives-her-just-one-next-step-3hg7</link>
      <guid>https://dev.to/mialy333/when-everything-feels-urgent-i-built-my-sister-a-tool-that-gives-her-just-one-next-step-3hg7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6tzi4r2pkns7ibvswyvv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6tzi4r2pkns7ibvswyvv.gif" alt="Demo of One step: a messy to-do list is typed into a text box, the app shows one task to do right now with a 'Still too big' button, three next tasks on pastel cards, and the line 'Everything else can wait.'" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://one-step-jypm.onrender.com" rel="noopener noreferrer"&gt;https://one-step-jypm.onrender.com&lt;/a&gt; · Chrome or Edge on a computer (WebGPU)&lt;/p&gt;

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

&lt;p&gt;My sister has a lot going on in her head at once: bills, a CV to redo, messages she hasn't answered, a trip to plan. Everything feels equally loud. When that happens, she doesn't pick the wrong task. She picks none, or she picks whatever feels most urgent, which is rarely what matters most.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;One step&lt;/strong&gt;. You dump everything on your mind into one box, in any order, no structure. A small open-weight model reads it and gives back:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;one&lt;/strong&gt; thing to do right now, small enough to start in under 10 minutes,&lt;/li&gt;
&lt;li&gt;at most &lt;strong&gt;three&lt;/strong&gt; things for later, with anything that has a deadline first,&lt;/li&gt;
&lt;li&gt;and a single line: &lt;em&gt;"Everything else can wait."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the one thing still feels too big, there's a &lt;strong&gt;"Still too big"&lt;/strong&gt; button that breaks it into an even smaller first step.&lt;/p&gt;

&lt;p&gt;That's it. No accounts, no streaks, no reminders, no red badges. Everything about it is designed to lower the volume, not add to it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What she said
&lt;/h3&gt;

&lt;p&gt;I handed it over on Sunday evening, on a video call. She opened the link in Chrome, typed her own list, and I didn't help. These are her words, translated from French:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"It's already great, honestly."&lt;/p&gt;

&lt;p&gt;"For prioritizing, it's really nice."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then she said the thing that made the whole weekend worth it: she tends to do what's &lt;em&gt;urgent&lt;/em&gt; before what's &lt;em&gt;important&lt;/em&gt;, and urgent isn't always important. Seeing just one thing on the screen helped her see the difference.&lt;/p&gt;

&lt;p&gt;She also immediately told me what she wanted next. More on that below, because it's the most useful feedback I got.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live:&lt;/strong&gt; &lt;a href="https://one-step-jypm.onrender.com" rel="noopener noreferrer"&gt;https://one-step-jypm.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first visit downloads the model once (about 1.5 GB). After that it's cached, and every answer comes back in about a second. You can switch between French and English with the toggle at the top; she uses it in French.&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/Mialy333" rel="noopener noreferrer"&gt;
        Mialy333
      &lt;/a&gt; / &lt;a href="https://github.com/Mialy333/one-step" rel="noopener noreferrer"&gt;
        one-step
      &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;One step · Un pas&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;Dump everything on your mind; an open-weight model (Gemma 2 2B) running &lt;strong&gt;in your browser&lt;/strong&gt; picks one thing to do right now.
Nothing you write leaves your computer: no server, no API key, no account. Built for my sister for the Hacktoberfest 2026 DEV Weekend Challenge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://one-step-jypm.onrender.com" rel="nofollow noopener noreferrer"&gt;https://one-step-jypm.onrender.com&lt;/a&gt; · Needs Chrome or Edge on a computer (WebGPU). First load downloads the model once (~1.5 GB), then it's instant. Run locally: &lt;code&gt;python3 -m http.server 8000&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Mialy333/one-step" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


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

&lt;p&gt;One static HTML file. No framework, no backend, no build step.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Gemma 2 2B (&lt;code&gt;gemma-2-2b-it-q4f16_1-MLC&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference:&lt;/strong&gt; &lt;a href="https://github.com/mlc-ai/web-llm" rel="noopener noreferrer"&gt;WebLLM&lt;/a&gt; on WebGPU, so the model runs on the GPU of whoever opens the page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Output:&lt;/strong&gt; WebLLM's JSON mode with a schema, so the interface always gets the same shape back&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; a static site on Render&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why this model
&lt;/h3&gt;

&lt;p&gt;I first wanted the newest, smallest Gemma. But my sister lives far from me, so whatever I built had to work on her laptop from a link, with nothing to install, on the first try, tonight. Gemma 4 E2B runs in the browser too, but it's around 2.9 GB to download. Gemma 2 2B is officially prepared for WebLLM, about half the size, and good enough for this job. I picked the reliable option.&lt;/p&gt;

&lt;h3&gt;
  
  
  Measured, not guessed
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;My laptop&lt;/th&gt;
&lt;th&gt;Her laptop&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model ready&lt;/td&gt;
&lt;td&gt;not measured&lt;/td&gt;
&lt;td&gt;20.4 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Time per answer&lt;/td&gt;
&lt;td&gt;0.9 to 1.5 s&lt;/td&gt;
&lt;td&gt;4.5 s for the first, then 0.9 to 1.1 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speed&lt;/td&gt;
&lt;td&gt;66 to 75 tokens/s&lt;/td&gt;
&lt;td&gt;30 to 38 tokens/s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Her machine is about half as fast as mine, and it doesn't matter: one second is instant for a human.&lt;/p&gt;

&lt;h3&gt;
  
  
  What broke
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. The page sat on "Thinking…" forever.&lt;/strong&gt; Two bugs at once. My call to the model had no &lt;code&gt;try/catch&lt;/code&gt;, so errors went silently to the console. And I hadn't capped &lt;code&gt;max_tokens&lt;/code&gt;, so a small model in JSON mode could loop on whitespace for minutes. I added streaming, a token cap, and visible errors. Then the real error showed up:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Failed to initialize the grammar matcher for response format `json_object`:
Cannot pass non-string to std::string
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;WebLLM wants the JSON schema passed as a &lt;strong&gt;string&lt;/strong&gt;, not an object. One &lt;code&gt;JSON.stringify&lt;/code&gt; later, the model was &lt;em&gt;forced&lt;/em&gt; to return my exact shape.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The model was fast, and wrong.&lt;/strong&gt; My first version asked for three lists: now, later, and "can wait". On my first test it put 4 items in a list capped at 3, invented a task I never wrote, gave advice about someone's mother, and put the same message in both "do now" and "can wait". On the second test it dropped the only task with a deadline, and copied "do the dishes" from my &lt;em&gt;example&lt;/em&gt; into the answer.&lt;/p&gt;

&lt;p&gt;What fixed it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;strict rules in the prompt: only use tasks from the list, invent nothing, each task appears once;&lt;/li&gt;
&lt;li&gt;every action written as a short verb-first phrase, which also stopped it from mixing "you", "I" and formal French;&lt;/li&gt;
&lt;li&gt;deadlines first;&lt;/li&gt;
&lt;li&gt;an example with zero overlap with real lists, so there's nothing to copy;&lt;/li&gt;
&lt;li&gt;and the biggest one: &lt;strong&gt;I deleted the third list.&lt;/strong&gt; "Everything else can wait" is now fixed text in the interface. The model can't get it wrong because the model doesn't write it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small model, smaller job. That was the lesson.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. A blank page.&lt;/strong&gt; When I added the language toggle, I moved all the text into JavaScript. But the script started with a static import of WebLLM from a CDN, and the browser runs nothing until that import finishes. So no text at all. I switched to a dynamic &lt;code&gt;import()&lt;/code&gt; that runs &lt;em&gt;after&lt;/em&gt; the text is on screen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. "Still too big" has a floor.&lt;/strong&gt; On her laptop, she pressed it twice in a row: &lt;em&gt;Pay the bill&lt;/em&gt; → &lt;em&gt;Open the bill's page&lt;/em&gt; → &lt;em&gt;Open the browser&lt;/em&gt;. It made us both laugh. But honestly, for someone frozen in front of a task, "open the browser" might be exactly the right size.&lt;/p&gt;

&lt;h3&gt;
  
  
  What she asked for next
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tick a task and move to the next one.&lt;/strong&gt; She wants the satisfaction of checking it off. That's a reward, not organization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;See everything she has already done.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add tasks, and see the ones that disappeared.&lt;/strong&gt; Some things she wrote weren't on screen anymore.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Number 3 is a direct consequence of my own design choice. Hiding everything except one task makes the screen calmer, but it also made her wonder where her tasks went. Calm versus trust is the real design problem here, and I only found it because a real person used it.&lt;/p&gt;

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

&lt;p&gt;Look at what she types into this box: bills, money, job worries, family. That's exactly the kind of text you shouldn't have to send to someone else's server to get help with.&lt;/p&gt;

&lt;p&gt;With an open-weight model running in the browser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;0 bytes of what she writes leave her laptop.&lt;/strong&gt; The page downloads code and model weights; her text never goes anywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;€0 per use.&lt;/strong&gt; No API key, no subscription, no bill for my sister or for me.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works offline&lt;/strong&gt; once the model is cached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I could choose the model size&lt;/strong&gt; to fit a laptop GPU, and swap it later without asking anyone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API would have meant sending her most anxious thoughts to a third party, paying per request, and needing a connection. For a gift, that's the wrong deal.&lt;/p&gt;

&lt;p&gt;The rest of the stack is open too: WebLLM and MLC, and the Gemma weights that make any of this possible.&lt;/p&gt;

&lt;h3&gt;
  
  
  The honest part
&lt;/h3&gt;

&lt;p&gt;This is a v0 built in one evening. It's a single HTML file of about 450 lines, styles included. It only works in Chrome or Edge on a computer, because it depends on WebGPU and fp16 shaders. It doesn't save anything between visits yet. The next version is already written for me, by her: tick, see progress, never lose a task. All of it can stay on her laptop.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Gemma&lt;/strong&gt;: the whole tool is Gemma 2 2B running locally in the browser through WebLLM on WebGPU, with JSON-schema-constrained output.&lt;/p&gt;

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