<?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: Anjan Kumar Mahto</title>
    <description>The latest articles on DEV Community by Anjan Kumar Mahto (@anjankr).</description>
    <link>https://dev.to/anjankr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: Anjan Kumar Mahto</title>
      <link>https://dev.to/anjankr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anjankr"/>
    <language>en</language>
    <item>
      <title>I let Gemma pick my top 3 tasks, and the rest of the list can wait</title>
      <dc:creator>Anjan Kumar Mahto</dc:creator>
      <pubDate>Mon, 26 Oct 2026 05:58:27 +0000</pubDate>
      <link>https://dev.to/anjankr/i-let-gemma-pick-my-top-3-tasks-and-the-rest-of-the-list-can-wait-4g28</link>
      <guid>https://dev.to/anjankr/i-let-gemma-pick-my-top-3-tasks-and-the-rest-of-the-list-can-wait-4g28</guid>
      <description>&lt;p&gt;My to-do list is not a plan. It is a museum of things I felt guilty about once.&lt;/p&gt;

&lt;p&gt;So for Hacktoberfest Week 3 ("Slow and Steady"), I built the smallest thing that fixes&lt;br&gt;
that: &lt;strong&gt;sloth-triage&lt;/strong&gt;, a ~70-line Bun CLI that hands your task list to an open-weight&lt;br&gt;
model and asks the only question that matters — &lt;em&gt;what are three things actually worth&lt;br&gt;
doing today?&lt;/em&gt; Everything else is explicitly allowed to wait.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ bun run index.js tasks.txt

🦥 sloth-triage (gemma4:cloud) read 9 tasks and chose 3

1. Finish the quarterly report — due tomorrow at 9am.
2. Renew the domain — it expires Friday.
3. Reply to the landlord — a leaking tap gets worse.

Skip the conference recording and the photo library. The downloads folder can wait forever.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the whole product. No accounts, no dashboard, no streaks, no "productivity&lt;br&gt;
system". It reads a text file, makes one request to a model on my machine, and prints&lt;br&gt;
a short plan. Then it stops.&lt;/p&gt;
&lt;h2&gt;
  
  
  The build
&lt;/h2&gt;

&lt;p&gt;There is nothing to install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sloth-triage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"module"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bun run index.js tasks.txt"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The core is one prompt and one &lt;code&gt;fetch&lt;/code&gt; to an OpenAI-compatible endpoint:&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`You are a very lazy but sensible assistant. Below is the user's task list.

Pick the &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;top&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; tasks that genuinely deserve attention today. Prefer deadlines and things
that get worse if ignored. Then write a short "lazy plan": order the tasks, one line each,
and say what can be deliberately skipped or deferred. Be calm and brief.

Tasks:
&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`- &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;task&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;baseUrl&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/chat/completions`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;prompt&lt;/span&gt; &lt;span class="p"&gt;}],&lt;/span&gt;
    &lt;span class="na"&gt;temperature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;SLOTH_MODEL&lt;/code&gt; and &lt;code&gt;SLOTH_BASE_URL&lt;/code&gt; are the only configuration. The default is Ollama on&lt;br&gt;
&lt;code&gt;127.0.0.1:11434&lt;/code&gt;, running Gemma. Lines can be plain text or &lt;code&gt;- [ ]&lt;/code&gt; checkboxes; &lt;code&gt;--top=N&lt;/code&gt;&lt;br&gt;
changes how many survivors you get.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why open matters here
&lt;/h2&gt;

&lt;p&gt;A task list is one of the most personal files on a laptop. It contains health&lt;br&gt;
appointments, money problems, names of people I owe replies to. Sending that to a closed&lt;br&gt;
API so it can rank nine bullets is a bad trade.&lt;/p&gt;

&lt;p&gt;With an open-weight model served by Ollama, the list stays on the machine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No account and no API key.&lt;/strong&gt; The tool works the same on a plane.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No meter running.&lt;/strong&gt; A 1B model answering one short prompt costs effectively nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The model is a setting, not a vendor.&lt;/strong&gt; Swap Gemma for Llama or Qwen with one env var,
and the prompt is right there in the file if you want to change how it thinks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The whole thing is auditable.&lt;/strong&gt; Two files and no dependencies. You can read every line
before it reads your diary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point is the real one. "Open source AI" is not just a license on weights. It is&lt;br&gt;
being able to see the prompt, see the request, and know there is no hidden second call.&lt;br&gt;
A closed product cannot offer that, no matter how good its summary is.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would fix next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Small models sometimes confuse "urgent" with "loud". The prompt asks for reasons so the
bad calls are at least visible.&lt;/li&gt;
&lt;li&gt;It does not know my calendar. A real version would pass in the next two days of events.&lt;/li&gt;
&lt;li&gt;I tested with Gemma through Ollama; the code expects any local OpenAI-compatible server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is deliberately boring: one file, one prompt, one output. That is the point.&lt;br&gt;
A tool that helps you do less should not itself become another thing to maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/ItzmeJan/sloth-triage" rel="noopener noreferrer"&gt;https://github.com/ItzmeJan/sloth-triage&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge: Week 3&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>hf26challenge</category>
      <category>ai</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
    <item>
      <title>SlothLog: one-tap attendance that writes its own slow recap</title>
      <dc:creator>Anjan Kumar Mahto</dc:creator>
      <pubDate>Mon, 26 Oct 2026 05:14:18 +0000</pubDate>
      <link>https://dev.to/anjankr/slothlog-one-tap-attendance-that-writes-its-own-slow-recap-n9</link>
      <guid>https://dev.to/anjankr/slothlog-one-tap-attendance-that-writes-its-own-slow-recap-n9</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;p&gt;&lt;strong&gt;Project:&lt;/strong&gt; &lt;a href="https://github.com/ItzmeJan/slothlog" rel="noopener noreferrer"&gt;github.com/ItzmeJan/slothlog&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;SlothLog is a tiny attendance app for people who hate attendance apps.&lt;/p&gt;

&lt;p&gt;You add a name, tap once to check in, and tap once to check out. There is no account, no dashboard to configure, and no spreadsheet to keep alive. At the end of the week, an open-weight model reads the log and writes two calm sentences: one warm observation and one small suggestion for being lazier tomorrow.&lt;/p&gt;

&lt;p&gt;The effort it saves is small but real: no paper sheet, no formulas, no "what time did you get in?" messages. The app remembers so you don't have to.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&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%2Fmwdqwwvklkadvt59pwkc.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%2Fmwdqwwvklkadvt59pwkc.png" alt="SlothLog screenshot" width="800" height="711"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run it locally in two commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bun start
&lt;span class="c"&gt;# open http://localhost:3000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Optional sample data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bun run seed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The demo uses &lt;code&gt;gemma4:cloud&lt;/code&gt; through Ollama. The app also works with a local open-weight model; the UI labels which one it used and whether the data left the machine.&lt;/p&gt;

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

&lt;p&gt;Repository: &lt;strong&gt;&lt;a href="https://github.com/ItzmeJan/slothlog" rel="noopener noreferrer"&gt;ItzmeJan/slothlog&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The whole app is three small JavaScript files and &lt;strong&gt;zero runtime dependencies&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;server.js&lt;/code&gt; — &lt;code&gt;Bun.serve&lt;/code&gt; + &lt;code&gt;bun:sqlite&lt;/code&gt; + one Ollama call&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;public/index.html&lt;/code&gt; — one page, vanilla JS, no build step&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;seed.js&lt;/code&gt; — optional demo data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MIT licensed.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bun&lt;/strong&gt; runs the server and the SQLite database through the built-in &lt;code&gt;Bun.serve&lt;/code&gt; and &lt;code&gt;bun:sqlite&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vanilla JavaScript&lt;/strong&gt; handles the one-page UI. No framework, no bundler.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; receives a compact seven-day attendance summary and returns the recap. The app picks an installed open-weight model, or accepts &lt;code&gt;OLLAMA_MODEL&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful fallback:&lt;/strong&gt; if Ollama is not running, a deterministic recap keeps the app useful instead of showing an error.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prompt asks for exactly two sentences, names the most consistent person, includes one real number, and suggests one tiny lazy action. It is intentionally short: attendance data is small, and the recap should be smaller.&lt;/p&gt;

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

&lt;p&gt;Attendance is personal and boring. A closed SaaS would want an account, a subscription, and a copy of everyone's schedule just to render a table. SlothLog keeps its data in a local SQLite file and lets the owner choose the model: a tiny local one for privacy and offline use, or a larger hosted open-weight model when quality matters more.&lt;/p&gt;

&lt;p&gt;That choice is the point. The AI is not a rented feature bolted onto a CRUD app. It is the part that turns a dry log into something a human would actually read, and it runs on infrastructure the owner controls.&lt;/p&gt;

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

&lt;p&gt;Even in the demo data, the recap took one click and pointed at the person with six visits while I was still deciding whether to open a spreadsheet. That is the entire product: a little less admin, a little more sloth.&lt;/p&gt;

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

&lt;p&gt;Best Use of Gemma — the demo runs through Ollama with a Gemma model.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>javascript</category>
      <category>ai</category>
    </item>
    <item>
      <title>Hello</title>
      <dc:creator>Anjan Kumar Mahto</dc:creator>
      <pubDate>Mon, 19 Oct 2026 17:02:36 +0000</pubDate>
      <link>https://dev.to/anjankr/hello-4o6</link>
      <guid>https://dev.to/anjankr/hello-4o6</guid>
      <description></description>
    </item>
  </channel>
</rss>
