<?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: Ayush Kulshreshtha</title>
    <description>The latest articles on DEV Community by Ayush Kulshreshtha (@ayush0612005).</description>
    <link>https://dev.to/ayush0612005</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%2F4166600%2Fa8b27359-fb98-4c38-b529-0ff57dd527ac.png</url>
      <title>DEV Community: Ayush Kulshreshtha</title>
      <link>https://dev.to/ayush0612005</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ayush0612005"/>
    <language>en</language>
    <item>
      <title>SteadyStep: a local AI that refuses to give me a 30-item productivity plan 🦥</title>
      <dc:creator>Ayush Kulshreshtha</dc:creator>
      <pubDate>Tue, 20 Oct 2026 10:05:38 +0000</pubDate>
      <link>https://dev.to/ayush0612005/steadystep-a-local-ai-that-refuses-to-give-me-a-30-item-productivity-plan-42mo</link>
      <guid>https://dev.to/ayush0612005/steadystep-a-local-ai-that-refuses-to-give-me-a-30-item-productivity-plan-42mo</guid>
      <description>&lt;p&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady Submission 🦥&lt;/p&gt;

&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;I built &lt;strong&gt;SteadyStep&lt;/strong&gt;, a tiny local-first CLI with one rule: it is allowed to give me &lt;strong&gt;one next step&lt;/strong&gt;, not a productivity manifesto.&lt;/p&gt;

&lt;p&gt;I give it a goal and a time budget. A local Gemma model looks at the goal plus the last few things I actually completed and chooses one concrete action that fits inside that time. I finish it, record what happened, and only then can it generate the next step.&lt;/p&gt;

&lt;p&gt;The loop is intentionally simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;set a goal → get one small step → do it → record outcome → repeat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python steadystep.py plan &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--goal&lt;/span&gt; &lt;span class="s2"&gt;"learn binary search trees in C"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--minutes&lt;/span&gt; 15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response is constrained to one action, one observable completion condition, and one short explanation of why that step makes sense now.&lt;/p&gt;

&lt;p&gt;When I finish:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python steadystep.py &lt;span class="k"&gt;done&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--outcome&lt;/span&gt; &lt;span class="s2"&gt;"Implemented insert() and tested three nodes"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The next planning call sees that result, so it can move forward instead of starting from generic advice again.&lt;/p&gt;

&lt;p&gt;The lazy payoff is that I never have to turn “I should work on this” into a giant backlog before I can begin. I only decide once: what goal matters. SteadyStep handles the tiny next decision from there.&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/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fytoshtdxng86bd6np9zu.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%2Fytoshtdxng86bd6np9zu.gif" alt="SteadyStep sample-mode workflow: plan, done, status" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository includes &lt;code&gt;demo.gif&lt;/code&gt;, an animated recording of actual CLI sample-mode output through plan → done → status. It is explicitly a non-AI interface demonstration; live Gemma inference has not been tested in the publishing environment.&lt;/p&gt;

&lt;p&gt;The project has a clearly labelled sample mode that demonstrates the interface without pretending static output came from AI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python steadystep.py &lt;span class="nt"&gt;--state&lt;/span&gt; demo-state.json plan &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--goal&lt;/span&gt; &lt;span class="s2"&gt;"ship a tiny CLI"&lt;/span&gt; &lt;span class="nt"&gt;--minutes&lt;/span&gt; 10 &lt;span class="nt"&gt;--sample&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It produces a single card like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🦥 SteadyStep
Goal: ship a tiny CLI
Budget: 10 min  •  SAMPLE (no AI call)

NEXT: Open One File
Open the project README and write three bullets describing what the user should be able to do when the project is finished.

Done when: The README contains three clear outcome bullets.
Why now: A tiny definition of done prevents the next coding session from wandering.

One clear step is enough for today.

No backlog. No ten-step plan. Finish this one thing, then come back.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;GitHub: &lt;a href="https://github.com/Ayush0612005/steadystep-hf26" rel="noopener noreferrer"&gt;https://github.com/Ayush0612005/steadystep-hf26&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;SteadyStep is deliberately small.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python standard library for the CLI, JSON state, and HTTP call.&lt;/li&gt;
&lt;li&gt;Ollama on localhost for inference.&lt;/li&gt;
&lt;li&gt;Gemma 3 (&lt;code&gt;gemma3:1b&lt;/code&gt;) as the default open-weight model.&lt;/li&gt;
&lt;li&gt;A strict JSON output contract with five short fields.&lt;/li&gt;
&lt;li&gt;A local state file containing the goal, current pending step, and completed history.&lt;/li&gt;
&lt;li&gt;Only the latest six completed steps go back into the prompt, so the context stays focused instead of growing forever.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The model is the core of the project. Without the model, there is no adaptive next-step selection: it is what looks at the goal, the time available, and what happened in previous steps and chooses what should happen next.&lt;/p&gt;

&lt;p&gt;I also made the CLI refuse to silently replace unfinished work. If a step is still pending, &lt;code&gt;plan&lt;/code&gt; shows the same step again unless I explicitly pass &lt;code&gt;--replace&lt;/code&gt;. That little constraint turned out to be important to the theme: the tool should encourage steady completion rather than constantly generating exciting new plans.&lt;/p&gt;

&lt;p&gt;Local state is written atomically through a temporary file, and the project includes unit tests for persistence, schema validation, context limits, and pending-step reuse.&lt;/p&gt;

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

&lt;p&gt;The most personal part of this tool is not the goal itself; it is the history of what I tried, what I finished, and what I did not finish.&lt;/p&gt;

&lt;p&gt;That is exactly the kind of context I do not want to send to a hosted model every time I ask what to do next.&lt;/p&gt;

&lt;p&gt;Running an open-weight Gemma model through Ollama means the planning loop can stay on the user's machine. There is no per-step API bill, no required cloud account, and no reason for a private progress journal to leave localhost.&lt;/p&gt;

&lt;p&gt;Open weights also make the project genuinely modifiable. The prompt is visible. The model can be swapped. The output constraints can be changed. Someone can fork SteadyStep and tune it for studying, open-source maintenance, writing, or another low-stakes workflow without waiting for a closed service to expose a feature.&lt;/p&gt;

&lt;p&gt;For a “slow and steady” tool, that independence matters: set it up once, keep using it, and let the small steps accumulate.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Build Disclosure
&lt;/h2&gt;

&lt;p&gt;This project was built with an AI coding agent operating on my behalf. The agent checked the challenge requirements and ran nine automated tests covering local state and mocked model-response handling. The build and write-up use the &lt;strong&gt;Fully Autonomous&lt;/strong&gt; disclosure. The sample demonstration is not evidence of a live Gemma run.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma: Gemma 3 via Ollama is the default local planning model.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The interesting part was not making the model produce a better long-term plan. It was designing the program so the model &lt;strong&gt;could not&lt;/strong&gt; keep expanding the plan.&lt;/p&gt;

&lt;p&gt;A few constraints made the idea work:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Exactly one next action.&lt;/li&gt;
&lt;li&gt;A requested time budget (a model instruction, not a guaranteed duration).&lt;/li&gt;
&lt;li&gt;An observable “done when” condition.&lt;/li&gt;
&lt;li&gt;A pending step is reused instead of regenerated by default.&lt;/li&gt;
&lt;li&gt;Only completed outcomes become progress context.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That makes the AI less impressive in a single screenshot, but much more useful as a quiet loop I can come back to.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>LedgerLocal: sort a freelancer's expenses with an open model that never sees the cloud</title>
      <dc:creator>Ayush Kulshreshtha</dc:creator>
      <pubDate>Wed, 14 Oct 2026 17:12:27 +0000</pubDate>
      <link>https://dev.to/ayush0612005/ledgerlocal-sort-a-freelancers-expenses-with-an-open-model-that-never-sees-the-cloud-n0h</link>
      <guid>https://dev.to/ayush0612005/ledgerlocal-sort-a-freelancers-expenses-with-an-open-model-that-never-sees-the-cloud-n0h</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;&lt;strong&gt;LedgerLocal&lt;/strong&gt; is a small Node.js CLI for freelancers in India. You give it the CSV export from your bank or UPI app, and it sorts every debit into expense categories (software, internet and phone, hardware, travel, meals, learning, coworking, and personal) and tells you roughly how much of your spending was business.&lt;/p&gt;

&lt;p&gt;Every freelancer I know does this the same way at tax time: scroll through months of transactions in a spreadsheet and guess. The people who could afford a bookkeeper hand their whole bank history to a stranger or an online app. LedgerLocal does the boring first pass on your own laptop, and nothing about your spending leaves it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who would pay for it:&lt;/strong&gt; freelance developers, designers, tutors, and creators who file their own returns. A tool like this could sell as a one-time purchase (no subscription, because there's no server to pay for), or come bundled with a CA's service as a "send me a clean ledger" step.&lt;/p&gt;

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

&lt;p&gt;Real output from a live run on the included sample file (14 transactions, model running locally):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GITHUB COPILOT MONTHLY             ₹   830.00  → Software &amp;amp; subscriptions (0.38)
JIO FIBER BROADBAND BILL           ₹   999.00  → Internet &amp;amp; phone (0.62)
SWIGGY ORDER 4412                  ₹   342.00  → Needs review (0.24)
UBER TRIP CLIENT MEETING           ₹   418.00  → Travel (0.30)
UDEMY COURSE REACT ADVANCED        ₹   449.00  → Learning (0.44)
AMAZON LOGITECH MOUSE M331         ₹  1299.00  → Hardware &amp;amp; equipment (0.49)
BIGBASKET GROCERIES                ₹  1870.00  → Personal (not deductible) (0.48)
FIGMA PROFESSIONAL PLAN            ₹  1250.00  → Software &amp;amp; subscriptions (0.35)
WEWORK DAY PASS                    ₹   600.00  → Needs review (0.19)
NETFLIX SUBSCRIPTION               ₹   649.00  → Personal (not deductible) (0.46)
IRCTC TRAIN TICKET JAIPUR          ₹   385.00  → Travel (0.33)
AIRTEL PREPAID RECHARGE            ₹   299.00  → Internet &amp;amp; phone (0.62)
STARBUCKS COFFEE                   ₹   310.00  → Meals &amp;amp; coffee (0.44)
GODADDY DOMAIN RENEWAL             ₹   799.00  → Software &amp;amp; subscriptions (0.28)

Totals by category:
  Software &amp;amp; subscriptions     ₹   2879.00
  Personal (not deductible)    ₹   2519.00
  Hardware &amp;amp; equipment         ₹   1299.00
  Internet &amp;amp; phone             ₹   1298.00
  Needs review                 ₹    942.00
  Travel                       ₹    803.00
  Learning                     ₹    449.00
  Meals &amp;amp; coffee               ₹    310.00

Likely business expenses: ₹7038.00  (check with your accountant)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;12 of 14 lines landed in a sensible category. The two it wasn't sure about (&lt;code&gt;SWIGGY ORDER 4412&lt;/code&gt; and &lt;code&gt;WEWORK DAY PASS&lt;/code&gt;) went to &lt;strong&gt;Needs review&lt;/strong&gt; instead of being guessed. I'd rather it say "I don't know" than quietly put a food order under business expenses.&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/Ayush0612005" rel="noopener noreferrer"&gt;
        Ayush0612005
      &lt;/a&gt; / &lt;a href="https://github.com/Ayush0612005/ledgerlocal" rel="noopener noreferrer"&gt;
        ledgerlocal
      &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;LedgerLocal&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;Sort a freelancer's bank or UPI export into expense categories with an open-weight model that runs on your own laptop. Your transactions never leave your machine.&lt;/p&gt;

&lt;p&gt;Built for the Hacktoberfest 2026 Open-Source AI Challenge, Week 2: Side Hustle.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run it&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Requires Node.js 18+.&lt;/p&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install
node ledgerlocal.mjs sample_transactions.csv&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;The first run downloads the &lt;code&gt;Xenova/all-MiniLM-L6-v2&lt;/code&gt; model (~23 MB) into &lt;code&gt;~/.cache/ledgerlocal&lt;/code&gt;. After that you can run fully offline:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;node ledgerlocal.mjs my_export.csv --offline --out report.csv&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Your CSV needs &lt;code&gt;date&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, and &lt;code&gt;amount&lt;/code&gt; columns (any order). Amounts can be negative (debits); they are treated as positive spend.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How it works&lt;/h2&gt;
&lt;/div&gt;


&lt;ol&gt;

&lt;li&gt;Each expense category is described in a few plain words.&lt;/li&gt;

&lt;li&gt;The model turns every category description and every transaction description into a sentence embedding.&lt;/li&gt;

&lt;li&gt;Each transaction is assigned the closest category by cosine similarity. Anything below 0.25 goes to &lt;strong&gt;Needs review&lt;/strong&gt; instead of being guessed.&lt;/li&gt;

&lt;li&gt;You get a per-line CSV…&lt;/li&gt;

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


&lt;p&gt;Run it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install
&lt;/span&gt;node ledgerlocal.mjs sample_transactions.csv
&lt;span class="c"&gt;# after the first run, fully offline:&lt;/span&gt;
node ledgerlocal.mjs my_export.csv &lt;span class="nt"&gt;--offline&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; &lt;a href="https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2" rel="noopener noreferrer"&gt;&lt;code&gt;all-MiniLM-L6-v2&lt;/code&gt;&lt;/a&gt;, an Apache-2.0 sentence-embedding model, in the quantized ONNX build from Xenova (~23 MB).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime:&lt;/strong&gt; &lt;a href="https://github.com/huggingface/transformers.js" rel="noopener noreferrer"&gt;Transformers.js&lt;/a&gt; running the model in Node.js on the CPU. No Python, no GPU, no API key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Method:&lt;/strong&gt; each category is a short plain-language description. The model embeds the categories and every transaction description, and each transaction gets the closest category by cosine similarity. Below a 0.25 similarity it goes to Needs review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's no generative model here on purpose. Sorting is a matching problem, and a small embedding model is fast, cheap, and predictable: same input, same answer, every time. The whole run on 14 rows takes a few seconds on a regular laptop.&lt;/p&gt;

&lt;p&gt;Changing the categories is just editing words in one object, so a photographer can add "camera gear" and a tutor can add "teaching materials" without retraining anything.&lt;/p&gt;

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

&lt;p&gt;For this project, open isn't a nice-to-have. It's the reason the product can exist.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy is the product.&lt;/strong&gt; A bank statement shows where you live, who you pay, and how much you earn. With an open model running locally, the only network request is the one-time model download. After that, &lt;code&gt;--offline&lt;/code&gt; blocks remote loading entirely, and the tool still works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The business math works.&lt;/strong&gt; With a hosted API, every user costs money every time they run it, which pushes you toward a subscription. Running locally, the marginal cost per user is zero, so it can be a one-time purchase that freelancers actually like.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in.&lt;/strong&gt; If a better small open model comes out, I change one line. No pricing changes or deprecations decided by someone else.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trade-off: a 23 MB embedding model doesn't understand context the way a large hosted model does. It can't know that one particular Uber ride was a client meeting unless the description says so. That's why the Needs review bucket exists and why the output says "check with your accountant."&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Learn from corrections: when you move a Needs review line into a category, remember it for next time.&lt;/li&gt;
&lt;li&gt;Read PDF bank statements directly, not just CSV.&lt;/li&gt;
&lt;li&gt;Get it in front of a real freelancer. I haven't done that yet, so I can't claim a first user this week.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AI Disclosure
&lt;/h2&gt;

&lt;p&gt;I built this with an AI coding agent (Claude Code) at my direction. The agent wrote the code and drafted this post. The demo output above is from a real run of the code on my machine, including the offline run.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
    <item>
      <title>OneScreenOut: one screen of local AI, then an outdoor break</title>
      <dc:creator>Ayush Kulshreshtha</dc:creator>
      <pubDate>Wed, 07 Oct 2026 18:42:53 +0000</pubDate>
      <link>https://dev.to/ayush0612005/onescreenout-one-screen-of-local-ai-then-an-outdoor-break-28o6</link>
      <guid>https://dev.to/ayush0612005/onescreenout-one-screen-of-local-ai-then-an-outdoor-break-28o6</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;&lt;strong&gt;OneScreenOut&lt;/strong&gt; is a small Python CLI that turns a time budget, nearby surroundings, and energy level into one outdoor micro-expedition. It is designed for students and developers who finish a coding session and need a concrete reason to step outside.&lt;/p&gt;

&lt;p&gt;The design constraint is simple: the useful interaction should fit on one screen. A local &lt;strong&gt;Gemma 3&lt;/strong&gt; model, served through &lt;strong&gt;Ollama&lt;/strong&gt;, generates a mission with three short steps, a sensory cue, and a safety reminder. The program saves a local field card, prints it once, and exits.&lt;/p&gt;

&lt;p&gt;Its final line is the product's goal:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📵 Pocket your phone now. The app is done; the outside part starts here.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is no feed, streak counter, or follow-up chat. The intended flow is: request a plan, read it, close the laptop, and spend the break outdoors.&lt;/p&gt;

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

&lt;p&gt;This is a local CLI rather than a hosted web application. To run it, download the &lt;a href="https://github.com/Ayush0612005/bash-scripting-devops/tree/main/hacktoberfest-2026-week1-onescreenout" rel="noopener noreferrer"&gt;project folder&lt;/a&gt;, start Ollama, and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull gemma3:1b
python app.py &lt;span class="nt"&gt;--minutes&lt;/span&gt; 15 &lt;span class="nt"&gt;--environment&lt;/span&gt; &lt;span class="s2"&gt;"college campus"&lt;/span&gt; &lt;span class="nt"&gt;--energy&lt;/span&gt; medium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For an interface preview without downloading a model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python app.py &lt;span class="nt"&gt;--sample&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following is the &lt;strong&gt;static sample output&lt;/strong&gt;, explicitly labeled as such. It is not evidence of a live AI inference:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🌿 OneScreenOut
Quest: Three Textures, Ten Minutes • 15 min • SAMPLE (no AI call)

Walk outside and find three natural textures you can observe without
disturbing anything.

1. Find one rough texture and describe it in three words.
2. Find one smooth texture and notice how light falls across it.
3. Stand still for 30 seconds and listen for the farthest sound.

Notice: Look for one detail you would normally walk past.
Safety: Stay in public, familiar areas and keep clear of roads or hazards.

📵 Pocket your phone now. The app is done; the outside part starts here.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The generated card is also saved to &lt;code&gt;quest_card.txt&lt;/code&gt;. This makes it easy to read once before leaving the screen.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/Ayush0612005/bash-scripting-devops/tree/main/hacktoberfest-2026-week1-onescreenout" rel="noopener noreferrer"&gt;OneScreenOut source, README, and MIT license&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project was added during the October 5–11 challenge window. It currently lives in a dedicated folder within my existing repository.&lt;/p&gt;

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

&lt;p&gt;The application uses the Python standard library for argument parsing, HTTP requests, JSON processing, and terminal output. Its default model is &lt;code&gt;gemma3:1b&lt;/code&gt;, and its inference request goes to Ollama on &lt;code&gt;localhost:11434&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The model is the core: it adapts the mission to the user's available time, environment, and energy. The Python layer formats the result into a small field card. Ollama's JSON output mode is enabled, and the application checks the expected keys and the three-step list before rendering.&lt;/p&gt;

&lt;p&gt;The prompt asks for public, familiar activities and excludes private property, traffic, climbing, swimming, unknown plants, and wildlife handling. These are prompt instructions, not a guarantee that a generated plan is safe; the user still needs to judge local conditions.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;--model&lt;/code&gt; option lets users select another locally installed model. The &lt;code&gt;--sample&lt;/code&gt; option previews the interface without making an AI call. If Ollama cannot be reached, the app reports an error instead of silently substituting a sample.&lt;/p&gt;

&lt;p&gt;An AI agent prepared the implementation and generated this write-up at my direction, with no manual editing of the article by me. During its final review, the agent fixed literal JSON braces in the Python prompt so they were not treated as formatting expressions. Prompt construction and sample rendering were verified. Live Gemma inference and an outdoor field trial have not yet been verified for this submission.&lt;/p&gt;

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

&lt;p&gt;For OneScreenOut, local inference makes the intended interaction private and independent of a hosted AI account. After installing Ollama and downloading the model, the generation path can run without internet access. The app does not send the user's surroundings or energy level to a cloud model API.&lt;/p&gt;

&lt;p&gt;An open-weight model also gives the user control over which model runs on their hardware. The application code and prompt can be inspected and changed: someone could localize the missions, adapt the instructions for accessibility, or experiment with another model. Gemma's model terms are separate from the application's MIT license.&lt;/p&gt;

&lt;p&gt;A hosted API could generate an outdoor plan too. The concrete advantage here is that the plan can be generated locally, without a hosted-model API key or a per-request API bill. The trade-off is that users need to install a runtime, download model weights, and have hardware capable of running them.&lt;/p&gt;

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

&lt;p&gt;The most interesting constraint was deciding how little the AI should say. A short mission is more useful for this theme than an open-ended conversation. Three steps and one sensory cue give the user something specific to do, while the final instruction makes leaving the screen part of the experience.&lt;/p&gt;

&lt;p&gt;The current prototype still relies on the model to follow length and safety instructions. A next improvement would be stricter output validation, followed by measured live-inference tests and a real outdoor trial.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — the generation path uses Gemma 3 locally through Ollama.&lt;/li&gt;
&lt;/ul&gt;

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