<?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: Arpita Singh</title>
    <description>The latest articles on DEV Community by Arpita Singh (@arpitasi1gh).</description>
    <link>https://dev.to/arpitasi1gh</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%2F4158263%2Fb5948960-3874-48aa-bda0-5e3603be87f9.png</url>
      <title>DEV Community: Arpita Singh</title>
      <link>https://dev.to/arpitasi1gh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arpitasi1gh"/>
    <language>en</language>
    <item>
      <title>I built Inbox Sloth: The Local-First AI Ghostwriter for Your Most Stressful Emails</title>
      <dc:creator>Arpita Singh</dc:creator>
      <pubDate>Mon, 26 Oct 2026 06:52:50 +0000</pubDate>
      <link>https://dev.to/arpitasi1gh/i-built-inbox-sloth-the-local-first-ai-ghostwriter-for-your-most-stressful-emails-478n</link>
      <guid>https://dev.to/arpitasi1gh/i-built-inbox-sloth-the-local-first-ai-ghostwriter-for-your-most-stressful-emails-478n</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;I built &lt;strong&gt;Inbox Sloth&lt;/strong&gt;, a local-first AI ghostwriter that drafts emails in your exact voice.&lt;/p&gt;

&lt;p&gt;We all have that one email we've been avoiding. The passive-aggressive client, the boss asking for a weekend update, the vendor asking for a meeting that could have been an email. Writing a reply takes 5 minutes. Avoiding it takes 3 days of low-grade anxiety. &lt;/p&gt;

&lt;p&gt;ChatGPT doesn't fix this. It drafts generic corporate fluff that sounds like a robot. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inbox Sloth fixes this.&lt;/strong&gt; You paste the incoming email, and it generates three options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Short:&lt;/strong&gt; A 1-sentence reply.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Polite:&lt;/strong&gt; A standard professional response.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pushback:&lt;/strong&gt; A firm decline.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But the magic is the &lt;strong&gt;Tone Profile&lt;/strong&gt;. You can paste a past email you wrote. Inbox Sloth saves it to MongoDB Atlas. Next time you generate a reply, it uses MongoDB as a data layer to feed your past writing to the AI, so the drafts actually sound like &lt;em&gt;you&lt;/em&gt;—not a customer service bot.&lt;/p&gt;

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

&lt;p&gt;This app is designed to run 100% locally for privacy. The code is fully runnable via Ollama + MongoDB local.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/arpitasi1gh/hacktoberfest/tree/main/inbox-sloth" rel="noopener noreferrer"&gt;GITHUB URL&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The stack is FastAPI, HTMX, MongoDB Atlas, and Gemma.&lt;/p&gt;

&lt;p&gt;I wanted this to be zero-friction. There is no login, no file uploads, no complex UI. You paste text and hit a button. HTMX handles the asynchronous loading states without needing React.&lt;/p&gt;

&lt;p&gt;The hardest part was the prompt engineering. To make the AI act as a ghostwriter, I fetch the user's past replies from MongoDB and inject them into the prompt as "Few-Shot Examples". Then, I force the AI to return a strict JSON object with exactly three keys (&lt;code&gt;short&lt;/code&gt;, &lt;code&gt;polite&lt;/code&gt;, &lt;code&gt;pushback&lt;/code&gt;). &lt;/p&gt;

&lt;p&gt;Because I used Gemma, I also had to add a custom parser to strip out the AI's "internal thoughts" before parsing the JSON, since Gemma sometimes tries to plan its response out loud.&lt;/p&gt;

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

&lt;p&gt;Emails contain sensitive company data, client names, and sometimes confidential legal discussions. Sending this data to a closed API like OpenAI means sending your company's inbox to a third-party server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inbox Sloth is local-first.&lt;/strong&gt; If you run it with Ollama (&lt;code&gt;gemma3:4b&lt;/code&gt;), your emails never leave your laptop. MongoDB can be run locally. The entire app is a private, closed loop.&lt;/p&gt;

&lt;p&gt;To make the demo link work (since free hosting can't run a 4GB model), I built a hybrid architecture: it tries the local Ollama server first, and falls back to the Google AI Studio API only if needed. The app remains 100% open-source and can be run completely offline.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of MongoDB Atlas&lt;/strong&gt; — Used as the persistent data layer to store and retrieve the user's Tone Profile for few-shot prompting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — Gemma 3 4B via local Ollama, with a Google AI Studio Gemma fallback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt; — FastAPI app designed for Render deployment using the cloud inference fallback.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>week3</category>
    </item>
    <item>
      <title>I Built Rehearse to Sell A Voice-First, Local-First AI Interview Coach</title>
      <dc:creator>Arpita Singh</dc:creator>
      <pubDate>Sun, 18 Oct 2026 10:29:10 +0000</pubDate>
      <link>https://dev.to/arpitasi1gh/i-built-rehearse-to-sell-a-voice-first-local-first-ai-interview-coach-33c9</link>
      <guid>https://dev.to/arpitasi1gh/i-built-rehearse-to-sell-a-voice-first-local-first-ai-interview-coach-33c9</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;I built &lt;strong&gt;Rehearse&lt;/strong&gt;, a voice-first and local-first AI interviewer. &lt;/p&gt;

&lt;p&gt;You know how you read a list of "Top 50 Interview Questions," think &lt;em&gt;"I could answer that,"&lt;/em&gt; and then completely freeze when you actually have to speak out loud? That is the exact problem this solves.&lt;/p&gt;

&lt;p&gt;ChatGPT doesn't help here. If you ask it to practice with you, it gives you a giant essay, says "Great job!", and never pushes back. A real interview is a conversation. Rehearse actually talks to you (using voice), cuts you off if you ramble, and forces you to answer the hard follow-up questions. At the end, it grades you out of 10 and tells you how a better candidate would have answered.&lt;/p&gt;

&lt;p&gt;I didn't want this to just be for software engineers. You can type "Marketing," "Nursing," or "Sales," and the AI changes its tone and questions to match that field. And if you pick "Stress Test" mode, it acts like a genuinely hostile interviewer.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://rehearse-g3q4.onrender.com" rel="noopener noreferrer"&gt;Deployed Render URL&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/arpitasi1gh/hacktoberfest/tree/main/rehearse" rel="noopener noreferrer"&gt;GitHub Repository Link&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The stack is FastAPI, HTMX, and Gemma. I used the browser's built-in microphone and text-to-speech so it works instantly without saving audio files to a server. &lt;/p&gt;

&lt;p&gt;The hardest part wasn't the code, it was stopping the AI from being &lt;em&gt;too nice&lt;/em&gt;. I had to write a very strict set of rules for the prompt. It is explicitly banned from saying things like "Great answer" or "I understand." If you say "we built a system," it is instructed to interrupt you and ask, "What did &lt;em&gt;you&lt;/em&gt; specifically do?"&lt;/p&gt;

&lt;p&gt;I also ran into a hilarious bug. Gemma on Google's API is a "thinking" model. Instead of just asking the question, it would write out its entire internal thought process: &lt;em&gt;"Wait, the prompt says no meta-text. Let's try asking this..."&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Because my app reads the text out loud, it was literally speaking the AI's internal self-doubt to the user. I had to write a Python script that scans the AI's output bottom-up, ignores the monologue, and grabs only the final question.&lt;/p&gt;

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

&lt;p&gt;Interviewing is vulnerable. You are anxious, alone, and talking to a screen. If this used a closed API, it would mean sending your awkward voice recordings to a giant tech company's server.&lt;/p&gt;

&lt;p&gt;Because it uses open-source AI, this app can run &lt;strong&gt;100% locally&lt;/strong&gt;. If you run it with Ollama, nothing leaves your laptop. &lt;/p&gt;

&lt;p&gt;To make the app demoable as a live link (since free hosting can't run a 4GB model), I built a fallback: it tries the local Ollama server first, and if you don't have it running, it uses the Google API. This local-first setup is only possible because open models are finally small enough to run on normal laptops.&lt;/p&gt;

&lt;h2&gt;
  
  
  My First User
&lt;/h2&gt;

&lt;p&gt;I tested this on a friend preparing for MBA interviews. &lt;/p&gt;

&lt;p&gt;She typed in a real consulting job description. Her first answer was a rambling 3-minute story about a college project. The AI instantly interrupted her (in voice) and asked, &lt;em&gt;"You mentioned an increase in engagement. What was the specific metric before and after?"&lt;/em&gt; She froze, laughed, and said, "Wow, this is actually stressful."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Would she pay for it?&lt;/strong&gt; She said she wouldn't pay monthly, but she would happily pay $5 for a "7-day sprint" pass right before placement season.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What did she ask for next?&lt;/strong&gt; She wanted to upload her resume so the AI could ask questions about her specific internships. (Adding that to the roadmap for improvement).&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; — Gemma 3 4B via local Ollama, with a Google AI Studio Gemma fallback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt; — FastAPI app deployed on Render using the cloud inference fallback.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>ai</category>
    </item>
    <item>
      <title>I built Greenstep – An Open-Source App That Picks Your Next Walk</title>
      <dc:creator>Arpita Singh</dc:creator>
      <pubDate>Mon, 12 Oct 2026 06:29:04 +0000</pubDate>
      <link>https://dev.to/arpitasi1gh/i-built-greenstep-an-open-source-app-that-picks-your-next-walk-ke3</link>
      <guid>https://dev.to/arpitasi1gh/i-built-greenstep-an-open-source-app-that-picks-your-next-walk-ke3</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;I built &lt;strong&gt;Greenstep&lt;/strong&gt;, an app that tells you &lt;strong&gt;when&lt;/strong&gt; to go outside — not just that you should.&lt;/p&gt;

&lt;p&gt;Most "touch grass" tools work the same way: they tell you to take a break, go for a walk, get some fresh air. The advice is correct and useless. You already know you should go outside. The hard part is that at 6 PM, after a full day, there's no clear signal that this is the moment, and no specific place to go, and no reason to believe the walk will feel good. So you don't go.&lt;/p&gt;

&lt;p&gt;Greenstep attacks all three problems at once:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;When&lt;/strong&gt; — a tabular foundation model (TabPFN) reads a small log of your past outdoor behavior — sleep, screen time, mood, weather, which evening hours you actually went out — and predicts the single best 30-minute window for today.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where&lt;/strong&gt; — SerpApi fetches a real, verified place near you: a park, a cafe, a walking loop. Not "a park nearby." A named place with a distance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What&lt;/strong&gt; — Gemma 3 writes one specific, startable action for that window and place, with a first step and a fallback.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The output is short and finishable. Something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Walk through Lodhi Garden in Delhi. 25 minutes.&lt;/strong&gt;&lt;br&gt;
The mild evening temperature and your energy level suit a low-intensity stroll.&lt;br&gt;
First step: put on your walking shoes.&lt;br&gt;
Fallback: sit on a bench outside.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's for anyone who knows they'd feel better after a walk, but needs the decision made for them. The whole thing runs on open models and is designed to sit on a second monitor, not beg for attention.&lt;/p&gt;

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

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

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

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; FastAPI + Jinja + HTMX, SQLite for local history, and a three-model pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TabPFN&lt;/strong&gt; (Prior Labs) — reads a 150-row CSV of past behavior and predicts today's best hour. This is the part that makes it different: TabPFN is a tabular foundation model, not a language model. It's built for exactly this — small structured data, fast classification, no training loop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SerpApi&lt;/strong&gt; — Google Maps search for places matching the predicted window (parks in the afternoon, cafes in the evening).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 3 4B&lt;/strong&gt; — runs locally through Ollama during development, and falls back to Google AI Studio's Gemma endpoint when deployed, so the whole thing can be tried without installing anything.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The inference layer is a single module (&lt;code&gt;ai_provider.py&lt;/code&gt;) that switches between local and cloud with one environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="nv"&gt;AI_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;   &lt;span class="c"&gt;# Ollama + gemma3:4b on your machine&lt;/span&gt;
&lt;span class="nv"&gt;AI_PROVIDER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;api     &lt;span class="c"&gt;# Gemma via Google AI Studio&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same prompt, same output schema, same code path. The only difference is the base URL. That means the app is honest about being local-first, and still demo-able as a link.&lt;/p&gt;

&lt;p&gt;Gemma on the Gemini API has three quirks worth documenting because they cost me most of a day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It doesn't accept &lt;code&gt;system_instruction&lt;/code&gt;. Instructions have to live in the user message.&lt;/li&gt;
&lt;li&gt;It doesn't accept &lt;code&gt;responseMimeType: "application/json"&lt;/code&gt;. There is no JSON mode. The prompt has to enforce the format, and the parser has to be forgiving.&lt;/li&gt;
&lt;li&gt;It doesn't accept &lt;code&gt;thinkingConfig&lt;/code&gt;, even though the model metadata reports &lt;code&gt;thinking: true&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The parser (&lt;code&gt;_parse_json&lt;/code&gt;) strips markdown fences, cuts preamble before the first &lt;code&gt;{&lt;/code&gt;, and cuts trailing text after the last &lt;code&gt;}&lt;/code&gt;. That's what makes a small open model usable for a structured output app.&lt;/p&gt;

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

&lt;p&gt;Greenstep reads things most people would not want to hand to a third party: when you sleep, how much you scroll, how you felt each day, whether you left the house. A closed API version of this would mean shipping a behavioral diary to a vendor, paying per prediction, and hoping the model doesn't drift on them in six months.&lt;/p&gt;

&lt;p&gt;Running Gemma locally changes what's possible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The history stays on the machine.&lt;/strong&gt; The CSV never leaves. Neither does the inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The deployed version uses the same open model.&lt;/strong&gt; It's Gemma on Google AI Studio, not a closed replacement. One env var switches the runtime, not the model family.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The prompt is auditable.&lt;/strong&gt; You can read exactly what the app sends. With a closed API, that's a black box you trust.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swapping is trivial.&lt;/strong&gt; When a better small model ships, the change is one line.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what open models enable: an app that can be personal without being creepy, local without being crippled, and specific without being expensive.&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; — Gemma 3 4B via Ollama (local) and Gemma via Google AI Studio (deployed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of TabPFN&lt;/strong&gt; — predicting the best outdoor window from a small behavioral CSV&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of SerpApi&lt;/strong&gt; — grounding the suggestion in a real, named place nearby&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt; — deployed FastAPI app with the Gemma cloud fallback&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>What Now? – A Local-First AI Next-Action Coach for a Tired College Student</title>
      <dc:creator>Arpita Singh</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:58:30 +0000</pubDate>
      <link>https://dev.to/arpitasi1gh/what-now-a-local-first-ai-next-action-coach-for-a-tired-college-student-2ec6</link>
      <guid>https://dev.to/arpitasi1gh/what-now-a-local-first-ai-next-action-coach-for-a-tired-college-student-2ec6</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;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;What Now?&lt;/strong&gt; for a friend of mine. She's 20, in her second year of CS, and she has the kind of schedule that looks fine on paper and falls apart by evening.&lt;/p&gt;

&lt;p&gt;Here's what I kept noticing. She isn't confused about what matters. She has a DBMS assignment due tomorrow, placement prep she's behind on, a gym membership she pays for and doesn't use, and a real need to rest. She knows all of it. But at 7:30 PM, after a full day of college, the gap between knowing and starting is where the evening goes. One reel becomes ten. "I'll start after this episode" becomes three. The assignment stays open in a tab she doesn't touch.&lt;/p&gt;

&lt;p&gt;It isn't laziness. Deciding what to start takes more energy than starting it.&lt;/p&gt;

&lt;p&gt;What she needed wasn't another planner. She's tried those. They hand her a list of twelve things and call it clarity, which is the same problem wearing a nicer font. What she needed was for something else to make the call. One thing. Right now. Small enough that saying yes doesn't feel like a commitment.&lt;/p&gt;

&lt;p&gt;That's what I built. A loop, not an app. She opens it, sets her energy on a 1–5 slider, says how many minutes she has, and hits one button. The app pulls her active tasks, sends the context to a language model running locally, and gets back a single action:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Open the DBMS assignment PDF and write the first SQL query for Q1.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Why: due tomorrow at 9 AM, high urgency.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;First step: open the PDF. Timebox: 15 minutes.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Fallback: if still low energy, review one DSA problem instead.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the whole output. No list. No options. No priority matrix asking her to rank things she's too tired to rank.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The flow, end to end:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;She adds her tasks once, whenever she has the energy to think about them. Title, deadline, roughly how long it'll take, how much energy it costs, and how much it matters.&lt;/li&gt;
&lt;li&gt;Later that evening, she opens the app. Nothing to re-enter. Her tasks are already there.&lt;/li&gt;
&lt;li&gt;She sets energy to 2 and minutes to 45. The check-in form is the first thing on the page, because that's the only decision I want her making at 7:30 PM.&lt;/li&gt;
&lt;li&gt;The app sends her context to Gemma 3 4B, running locally through Ollama, and gets back one action with a reason, a two-minute first step, a timebox, and a fallback.&lt;/li&gt;
&lt;li&gt;The action card appears below the form. She reads it, and either starts or she doesn't.&lt;/li&gt;
&lt;li&gt;Either way, she taps &lt;strong&gt;Done&lt;/strong&gt;, &lt;strong&gt;Skip&lt;/strong&gt;, or &lt;strong&gt;Blocked&lt;/strong&gt;. The outcome gets logged, so the app builds up a history of what actually got done versus what got suggested.&lt;/li&gt;
&lt;li&gt;Next time she checks in, the loop runs again.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal was never to turn her into a productivity machine. She can still watch her shows and play guitar. The goal was to close the gap between knowing and starting.&lt;/p&gt;

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

&lt;p&gt;Local-first, so there's no hosted URL, the app runs on her laptop alongside Ollama.&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%2F0qw7uvc7tguc6esiqggb.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%2F0qw7uvc7tguc6esiqggb.png" alt="Low energy, no task added in queue, suggested next action by model" width="800" height="503"&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%2Fr1vqu4d3jictcb2iae5e.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%2Fr1vqu4d3jictcb2iae5e.png" alt="Medium energy, tasks added in queue with importance level, suggested next action by model" width="800" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/arpitasi1gh/what-now/" rel="noopener noreferrer"&gt;GITHUB&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; FastAPI with HTMX on the front end, SQLite for storage, and Gemma 3 4B running locally through Ollama.&lt;/p&gt;

&lt;p&gt;Four files carry the project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;prompts.py&lt;/code&gt; holds the system prompt. It tells the model to return strict JSON with five fields: &lt;code&gt;action&lt;/code&gt;, &lt;code&gt;why&lt;/code&gt;, &lt;code&gt;first_step&lt;/code&gt;, &lt;code&gt;timebox_minutes&lt;/code&gt;, &lt;code&gt;fallback&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;agent.py&lt;/code&gt; calls Ollama's &lt;code&gt;/api/generate&lt;/code&gt; endpoint with &lt;code&gt;format: "json"&lt;/code&gt;, which constrains output to valid JSON at the sampler level. No markdown fences, no "Sure, here's your answer."&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;db.py&lt;/code&gt; stores tasks and logs every action with its outcome.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;main.py&lt;/code&gt; wires the routes and swaps HTML fragments with HTMX.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prompt does most of the heavy lifting. It tells the model to pick exactly one task, to respect energy levels (if energy is 2 or below, no high-energy tasks unless the deadline is under 24 hours), to keep timeboxes under 25 minutes, and to write like a peer rather than a coach. No "let's crush it" or "you got this." The model isn't doing anything clever here. The context carries the thinking. The model just picks and phrases.&lt;/p&gt;

&lt;p&gt;Swapping models is one environment variable:&lt;br&gt;
&lt;code&gt;WHATNOW_MODEL=qwen2.5:7b uv run uvicorn src.what_now.main:app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I went with Ollama over the alternatives because it handles quantization, memory, and model downloads without me writing any of that myself. It exposes a plain HTTP endpoint, so the Python side is a single &lt;code&gt;httpx&lt;/code&gt; call. Nothing about the app is tied to Gemma specifically. The prompt, the schema, and the check-in flow all work with any instruction-following model you can run locally.&lt;/p&gt;

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

&lt;p&gt;Her task list contains her exam schedule, her placement prep, and goals she hasn't shared with anyone. A closed API would mean sending that to a server, paying per call, and trusting a vendor's logs.&lt;/p&gt;

&lt;p&gt;Running Gemma locally through Ollama means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nothing leaves her laptop.&lt;/li&gt;
&lt;li&gt;No API bills and no rate limits.&lt;/li&gt;
&lt;li&gt;Every prompt is in the repo. She can read exactly what the model sees.&lt;/li&gt;
&lt;li&gt;When a better open model comes out, she swaps one environment variable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is the part I keep coming back to. If I'd built this on a closed API, the project would be a wrapper around someone else's product, and it would stop working the day they change their pricing or deprecate the model. Because the model runs on her machine, it's hers. She can read it, change it, or replace it without asking anyone.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>Introduction to Object-Oriented Programming (OOP)</title>
      <dc:creator>Arpita Singh</dc:creator>
      <pubDate>Fri, 02 Oct 2026 18:38:53 +0000</pubDate>
      <link>https://dev.to/arpitasi1gh/introduction-to-object-oriented-programming-oop-2g9l</link>
      <guid>https://dev.to/arpitasi1gh/introduction-to-object-oriented-programming-oop-2g9l</guid>
      <description>&lt;p&gt;Object-Oriented Programming (OOP) is a programming paradigm centered around structuring code into self-contained units called objects. Instead of storing related data across separate, disconnected arrays, OOP bundles data and actions together to model real-world entities cleanly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Building Blocks:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;i) Class: The structural blueprint or template (e.g., User or BankAccount). It defines what fields and methods its instances will have.&lt;/p&gt;

&lt;p&gt;ii) Object: A concrete instance created from a class residing in memory (e.g., user1).&lt;/p&gt;

&lt;p&gt;iii) State (Fields): The data or properties an object holds, such as email, balance, or status.&lt;/p&gt;

&lt;p&gt;iv) Behavior (Methods): The actions an object can perform, such as login(), deposit(), or withdraw().&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 4 Core Pillars:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;i) Encapsulation: Hides internal data using private fields and exposes controlled access via getters and setters to protect data integrity.&lt;/p&gt;

&lt;p&gt;ii) Abstraction: Exposes essential features while hiding underlying implementation details using abstract classes and interfaces.&lt;/p&gt;

&lt;p&gt;iii) Inheritance: Enables child classes to reuse properties and methods from a parent class via extends.&lt;/p&gt;

&lt;p&gt;iv) Polymorphism: Allows methods to execute differently based on the object invoking them, through method overloading and dynamic overriding.&lt;/p&gt;

&lt;p&gt;By enforcing separation of concerns, OOP prevents silent data corruption, eliminates synchronization bugs, and makes large software applications modular, scalable, and easy to maintain.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>oop</category>
    </item>
  </channel>
</rss>
