<?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: Sudeepta Sarmah</title>
    <description>The latest articles on DEV Community by Sudeepta Sarmah (@sudeepsarmah).</description>
    <link>https://dev.to/sudeepsarmah</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%2F1172233%2F19e99391-62af-4794-ae07-9577b4ad2021.png</url>
      <title>DEV Community: Sudeepta Sarmah</title>
      <link>https://dev.to/sudeepsarmah</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sudeepsarmah"/>
    <language>en</language>
    <item>
      <title># Nudge: I built my friend a productivity app that treats procrastination like a roguelike</title>
      <dc:creator>Sudeepta Sarmah</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:42:29 +0000</pubDate>
      <link>https://dev.to/sudeepsarmah/-nudge-i-built-my-friend-a-productivity-app-that-treats-procrastination-like-a-roguelike-1m5o</link>
      <guid>https://dev.to/sudeepsarmah/-nudge-i-built-my-friend-a-productivity-app-that-treats-procrastination-like-a-roguelike-1m5o</guid>
      <description>&lt;p&gt;Hacktoberfest Weekend Challenge: Build for a Friend Submission&lt;/p&gt;

&lt;p&gt;This is my submission for the &lt;strong&gt;Hacktoberfest Weekend Challenge: Build&lt;br&gt;
for a Friend&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I (tried to) Built
&lt;/h2&gt;

&lt;p&gt;My friend is an MBA student. Her problem isn't that she doesn't know&lt;br&gt;
what she needs to do.&lt;/p&gt;

&lt;p&gt;It's that the list of things she needs to do can become overwhelming&lt;br&gt;
enough that starting any one of them feels difficult.&lt;/p&gt;

&lt;p&gt;There are classes, assignments, presentations, deadlines, and a phone&lt;br&gt;
full of apps designed to make ten minutes disappear.&lt;/p&gt;

&lt;p&gt;So I started building &lt;strong&gt;Nudge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Nudge is a productivity companion designed around one simple idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't solve the whole task. Just make the next step easier to&lt;br&gt;
start.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The MVP combines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  a Focus Shield for distracting apps,&lt;/li&gt;
&lt;li&gt;  simple task creation,&lt;/li&gt;
&lt;li&gt;  an AI task-slicing workflow,&lt;/li&gt;
&lt;li&gt;  voice-note capture,&lt;/li&gt;
&lt;li&gt;  XP for completed work,&lt;/li&gt;
&lt;li&gt;  and earned screen-time unlocks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app is intentionally small. I wanted to build something that could&lt;br&gt;
actually be used by one person rather than another giant productivity&lt;br&gt;
dashboard.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;strong&gt;Under progress --- I wasn't able to finish the public&lt;br&gt;
AI demo before the submission deadline.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I got the Android application running on an emulator and built the main&lt;br&gt;
product loop, but I ran out of time while finishing the live Gemma&lt;br&gt;
inference and public deployment.&lt;/p&gt;

&lt;p&gt;For now, these are screenshots from the working Android build.&lt;/p&gt;
&lt;h3&gt;
  
  
  Today
&lt;/h3&gt;

&lt;p&gt;The Today screen is deliberately simple: progress, current tasks, and&lt;br&gt;
Focus Shield status.&lt;/p&gt;

&lt;p&gt;The goal is to open Nudge and immediately understand what needs&lt;br&gt;
attention without being overwhelmed by another complicated productivity&lt;br&gt;
interface.&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%2Fg9l4hfi11act8p5vcy4r.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%2Fg9l4hfi11act8p5vcy4r.png" alt=" " width="376" height="830"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Tiny Steps
&lt;/h3&gt;

&lt;p&gt;Tasks are displayed as small steps rather than one intimidating block of&lt;br&gt;
work.&lt;/p&gt;

&lt;p&gt;The task-slicing flow is designed to turn something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Finish my final semester project."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;into a handful of actions that are easier to begin.&lt;/p&gt;
&lt;h3&gt;
  
  
  Focus Shield
&lt;/h3&gt;

&lt;p&gt;Focus Shield is the other half of the loop.&lt;/p&gt;

&lt;p&gt;Instead of treating app blocking as punishment, Nudge connects focused&lt;br&gt;
work with earned access to distracting apps.&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;strong&gt;Under progress --- I am uploading the current codebase.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the Android application, Node/Express API,&lt;br&gt;
native Android accessibility service, task-slicing logic, voice-note&lt;br&gt;
integration, and the project setup needed to continue development.&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The MVP stack is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;React Native + Expo&lt;/strong&gt; for the Android application&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Node.js + Express&lt;/strong&gt; for the backend&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Gemma&lt;/strong&gt; as the intended open-weight model for task decomposition&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;ElevenLabs Scribe&lt;/strong&gt; for voice transcription&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Render&lt;/strong&gt; for the planned backend deployment&lt;/li&gt;
&lt;li&gt;  Android's native accessibility capabilities for Focus Shield&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also explored &lt;strong&gt;Ollama&lt;/strong&gt; for local Gemma inference during development.&lt;br&gt;
The backend is structured around an OpenAI-compatible model endpoint, so&lt;br&gt;
the model-serving layer can be swapped without rewriting the mobile&lt;br&gt;
application.&lt;/p&gt;
&lt;h3&gt;
  
  
  The AI Task Slicer
&lt;/h3&gt;

&lt;p&gt;The core AI idea is intentionally simple.&lt;/p&gt;

&lt;p&gt;A user gives Nudge a large or overwhelming task:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"I need to finish my final semester project."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The intended flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Large task
    ↓
Gemma
    ↓
3–5 tiny actions
    ↓
Nudge task cards
    ↓
Complete one small step
    ↓
Earn XP / unlocks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I implemented the backend integration path for this workflow, but I&lt;br&gt;
wasn't able to get the live Gemma inference working reliably before the&lt;br&gt;
submission deadline. The current build therefore falls back to a simple&lt;br&gt;
task-splitting response when the model endpoint isn't available.&lt;/p&gt;

&lt;p&gt;I am leaving that limitation visible rather than presenting the fallback&lt;br&gt;
as completed AI inference.&lt;/p&gt;
&lt;h3&gt;
  
  
  Voice Capture
&lt;/h3&gt;

&lt;p&gt;Nudge also includes a voice-note path intended to turn a spoken thought&lt;br&gt;
into a task.&lt;/p&gt;

&lt;p&gt;The intended flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Voice note
    ↓
ElevenLabs Scribe
    ↓
Transcript
    ↓
Task slicer
    ↓
Tiny task
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was another part of the MVP I started wiring together, but the&lt;br&gt;
submission-time build was not polished enough for me to call the&lt;br&gt;
complete voice-to-task pipeline finished.&lt;/p&gt;
&lt;h3&gt;
  
  
  Focus Shield
&lt;/h3&gt;

&lt;p&gt;The Android side includes a native accessibility service for Focus&lt;br&gt;
Shield.&lt;/p&gt;

&lt;p&gt;The app can maintain a list of distracting apps such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Instagram&lt;/li&gt;
&lt;li&gt;  YouTube&lt;/li&gt;
&lt;li&gt;  TikTok&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The product loop is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Focus
  ↓
Complete tasks
  ↓
Earn XP
  ↓
Earn unlock time
  ↓
Use distracting apps intentionally
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the part of the idea I wanted to make feel different from a&lt;br&gt;
normal app blocker.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;A productivity app like this can eventually know quite a lot about its&lt;br&gt;
user:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  what they need to do,&lt;/li&gt;
&lt;li&gt;  what deadlines they have,&lt;/li&gt;
&lt;li&gt;  how they plan their work,&lt;/li&gt;
&lt;li&gt;  what they struggle to start,&lt;/li&gt;
&lt;li&gt;  and potentially their voice notes and personal context.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I don't want the AI layer of that experience to depend completely on a&lt;br&gt;
black-box model that I cannot change.&lt;/p&gt;

&lt;p&gt;Using an open-weight model gives Nudge the possibility to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  run inference locally,&lt;/li&gt;
&lt;li&gt;  change the prompts and task-decomposition logic,&lt;/li&gt;
&lt;li&gt;  swap models as better open models become available,&lt;/li&gt;
&lt;li&gt;  experiment with different serving setups,&lt;/li&gt;
&lt;li&gt;  and keep the AI workflow under the developer's control.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this MVP, the important part is the architecture: the mobile app&lt;br&gt;
talks to a backend, and the backend can talk to a separately hosted&lt;br&gt;
open-weight model.&lt;/p&gt;

&lt;p&gt;The final production architecture I had planned was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                Nudge Android App
                       │
                       ▼
                 Render API
                  /       \
                 /         \
                ▼           ▼
       Application Data    Gemma
                            │
                            ▼
                     GPU / Local Inference
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I didn't reach the final public deployment stage during the challenge&lt;br&gt;
window, but this separation is already reflected in the project&lt;br&gt;
structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned While Building It
&lt;/h2&gt;

&lt;p&gt;The hardest part wasn't designing a productivity app.&lt;/p&gt;

&lt;p&gt;It was keeping the scope small enough to finish.&lt;/p&gt;

&lt;p&gt;I started with a much larger idea involving planners, calendars,&lt;br&gt;
integrations, memory, and automation. The weekend challenge forced me to&lt;br&gt;
strip that down to the part that actually mattered for my friend:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Make starting a difficult task feel smaller.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I also learned that getting an LLM into a project is only the beginning.&lt;/p&gt;

&lt;p&gt;The generated output has to fit the application's data model, UI, and&lt;br&gt;
user experience. A useful task decomposition needs to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  small,&lt;/li&gt;
&lt;li&gt;  actionable,&lt;/li&gt;
&lt;li&gt;  ordered,&lt;/li&gt;
&lt;li&gt;  realistic,&lt;/li&gt;
&lt;li&gt;  and short enough that the user doesn't feel like they have another
task manager to manage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reward loop raised another design question: how do you make app&lt;br&gt;
blocking feel motivating rather than punitive?&lt;/p&gt;

&lt;p&gt;That led to the idea of earned unlocks: focused work creates progress,&lt;br&gt;
and progress creates controlled access to distractions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'm Building Next
&lt;/h2&gt;

&lt;p&gt;Because I ran out of time before the final deployment, the next steps&lt;br&gt;
are clear:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Finish reliable Gemma inference.&lt;/li&gt;
&lt;li&gt; Replace the fallback task slicer with the live model response.&lt;/li&gt;
&lt;li&gt; Finish and test the voice → transcript → task pipeline.&lt;/li&gt;
&lt;li&gt; Test Focus Shield against real installed distracting apps.&lt;/li&gt;
&lt;li&gt; Deploy the API publicly.&lt;/li&gt;
&lt;li&gt; Publish a live web demo of the task slicer.&lt;/li&gt;
&lt;li&gt; Test the complete focus → task → XP → unlock loop with my friend.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Handing It Over
&lt;/h2&gt;

&lt;p&gt;The real test isn't whether the demo looks polished.&lt;/p&gt;

&lt;p&gt;It's whether my friend actually opens Nudge when she has something&lt;br&gt;
stressful to do.&lt;/p&gt;

&lt;p&gt;If Nudge can turn:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I have an enormous assignment and I don't know where to start"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;into:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Just open the brief."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;and then make that first step feel worth doing, it has done what I&lt;br&gt;
wanted.&lt;/p&gt;

&lt;p&gt;I didn't get the whole product finished within the challenge window.&lt;/p&gt;

&lt;p&gt;But I did get the core Android experience, the product loop, the native&lt;br&gt;
Focus Shield foundation, and the AI integration structure into a working&lt;br&gt;
project.&lt;/p&gt;

&lt;p&gt;The rest is now a much smaller engineering problem than the original&lt;br&gt;
idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DevRelay / agent session:&lt;/strong&gt; &lt;code&gt;[OPTIONAL — ADD IF AVAILABLE]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;AI assistance was used during development, but the product decisions&lt;br&gt;
were driven by the real workflow I wanted to solve for my friend:&lt;br&gt;
reducing the friction of starting, making progress visible, and turning&lt;br&gt;
distraction access into an earned choice.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Best Use of Gemma
&lt;/h3&gt;

&lt;p&gt;Nudge is designed around Gemma as the open-weight model for turning&lt;br&gt;
overwhelming tasks into small, structured actions.&lt;/p&gt;

&lt;p&gt;The Gemma integration path is implemented in the backend, but live model&lt;br&gt;
inference was not completed before the submission deadline. I am not&lt;br&gt;
claiming the unfinished inference stage as completed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Use of DigitalOcean
&lt;/h3&gt;

&lt;p&gt;DigitalOcean was part of the planned deployment architecture for hosting&lt;br&gt;
Gemma inference on a GPU.&lt;/p&gt;

&lt;p&gt;This deployment was not completed before the deadline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Use of MongoDB Atlas
&lt;/h3&gt;

&lt;p&gt;MongoDB Atlas was considered for persistent task and application data,&lt;br&gt;
but I intentionally removed it from the final MVP to keep the project&lt;br&gt;
within the weekend scope.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Use of ElevenLabs
&lt;/h3&gt;

&lt;p&gt;ElevenLabs Scribe was selected for the voice transcription layer. The&lt;br&gt;
voice-to-task flow was started, but the complete production-ready&lt;br&gt;
pipeline was not finished before submission.&lt;/p&gt;

&lt;h3&gt;
  
  
  Best Use of Render
&lt;/h3&gt;

&lt;p&gt;Render was selected for the Node/Express backend deployment. The backend&lt;br&gt;
is structured for deployment, but the public deployment was not&lt;br&gt;
completed before the deadline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Team Submissions
&lt;/h2&gt;

&lt;p&gt;This is an individual submission.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thanks for participating!
&lt;/h2&gt;

&lt;p&gt;Nudge started with one friend and one problem:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sometimes the hardest part of a huge task is doing the first five&lt;br&gt;
minutes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I didn't manage to ship every part of the original plan before the clock&lt;br&gt;
ran out.&lt;/p&gt;

&lt;p&gt;But I did build enough of the idea to see the product loop working on&lt;br&gt;
Android, and enough of the architecture to continue from here.&lt;/p&gt;

&lt;p&gt;That's what Nudge is for:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;one small step.&lt;/strong&gt;&lt;/p&gt;

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