{"slug": "what-if-your-procrastination-had-to-explain-itself", "title": "What If Your Procrastination Had to Explain Itself?", "summary": "A developer built Tomorrow, an AI-powered anti-procrastination companion that asks users what they're avoiding, identifies the blocker, breaks the task into smaller actions, and picks one realistic next step with a 15-minute focus session. The tool centers on a feedback loop that reassesses when a user gets stuck rather than assuming the first plan worked, aiming to make starting tasks easier rather than managing productivity broadly.", "body_md": "My friend has a very consistent productivity strategy.\n\n“I'll do it after lunch.”\n\nThen:\n\n“Okay, after dinner.”\n\n“I'll definitely do it tomorrow.”\n\nAnd somehow, **tomorrow always wins.** \n\nWhen I saw the **Build for a Friend** challenge, I knew I didn't want to build another generic chatbot.\n\nAnd I definitely didn't want to build a to-do list with an **“AI” button** slapped onto it.\n\nI wanted to build something around a problem I'd actually seen.\n\nSo I built **Tomorrow**.\n\nAn AI companion for one very specific problem:\n\n**What if the hardest part isn't finishing the task but starting it?**\n\n**Tomorrow** is an AI powered anti-procrastination companion.\n\nIt doesn't try to manage your entire life.\n\nIt doesn't give you a 47 step productivity plan.\n\nAnd it definitely doesn't respond to every problem with:\n\n“You got this!”\n\nInstead, it asks:\n\n**“What's actually stopping you?”**\n\nYou tell Tomorrow what you're avoiding.\n\nIt tries to understand **why you're stuck**, breaks the task into something smaller, picks **one realistic next step** and helps you start.\n\nFor example:\n\n**“I need to finish my React assignment but I don't know where to start.”**\n\nA typical productivity app might give you a checklist.\n\nTomorrow might say:\n\n**Don't finish the assignment yet.**\n\nOpen the project.\n\nCreate the form component.\n\nThat's it. Give it 15 minutes.\n\nBecause sometimes the problem isn't the task.\n\n**It's the size of the first step.**\n\nThe entire experience revolves around a simple loop:\n\n```\n                  ┌──────────────────┐\n                  │ What are you     │\n                  │ avoiding?        │\n                  └────────┬─────────┘\n                           ↓\n                  ┌──────────────────┐\n                  │ Understand the   │\n                  │ blocker          │\n                  └────────┬─────────┘\n                           ↓\n                  ┌──────────────────┐\n                  │ Break the task   │\n                  │ into smaller     │\n                  │ actions          │\n                  └────────┬─────────┘\n                           ↓\n                  ┌──────────────────┐\n                  │ Pick ONE next    │\n                  │ action           │\n                  └────────┬─────────┘\n                           ↓\n                  ┌──────────────────┐\n                  │ Focus session    │\n                  └────────┬─────────┘\n                           ↓\n                  ┌──────────────────┐\n                  │ Check in         │\n                  └────────┬─────────┘\n                           ↓\n                     ┌─────┴─────┐\n                     ↓           ↓\n                   Done        Stuck\n                     ↓           ↓\n                Next step     Reassess\n                     │           │\n                     └─────┬─────┘\n                           ↓\n                       Start again\n```\n\nThe interesting part isn't really the timer.\n\nIt's the **feedback loop**.\n\nTomorrow doesn't assume the first plan worked.\n\nIf the user gets stuck that becomes new information.\n\nIf the user finishes it moves forward.\n\nIf the task turns out to be bigger than expected it breaks it down again.\n\nThe goal isn't perfect planning.\n\n**The goal is progress.**\n\nThis project started with a pretty simple observation.\n\nProcrastination can look like this:\n\n```\n       Big Task\n          ↓\n   \"I'll do it later\"\n          ↓\n        Guilt\n          ↓\n      Avoidance\n          ↓\n   Task feels bigger\n          ↓\n      \"Tomorrow.\"\n          ↓\n        Repeat\n```\n\nTomorrow tries to interrupt that loop:\n\n```\n       Big Task\n          ↓\n    Tell Tomorrow\n          ↓\n   Find the blocker\n          ↓\n    Make it smaller\n          ↓\n   Start for 15 min\n          ↓\n       Progress\n```\n\nNot:\n\n**“Become a productivity machine.”**\n\nJust:\n\n**“Let's make starting a little easier.”**\n\nI didn't want the AI to generate motivational quotes and call that intelligence.\n\nIts job is much more specific.\n\nThe user explains what they're avoiding.\n\n“I need to apply for internships but there are so many websites and I don't know where to begin.”\n\nThe obvious response would be:\n\n“You're procrastinating.”\n\nCool.\n\nNot very helpful.\n\nThe actual problem might be **overwhelm**.\n\nSo Tomorrow tries to identify the blocker behind the task.\n\nDifferent blockers need different responses.\n\nSome examples:\n\nIf the problem is:\n\n**“I don't know where to start.”**\n\nGive them a starting point.\n\nIf it's:\n\n**“This feels huge.”**\n\nShrink the task.\n\n**“I'm scared I'll do it badly.”**\n\nThe next step might simply be creating a rough first draft.\n\nThe AI isn't only asking:\n\n**“What should you do?”**\n\nIt's also asking:\n\n**“Why aren't you doing it?”**\n\nLet's say the user enters:\n\n**Apply for internships**\n\nThat's not really one task.\n\nIt's a tiny project pretending to be a task. 😭\n\nTomorrow can turn it into:\n\nOpen your resume.\n\nPick one internship.\n\nRead only the requirements.\n\nDecide whether you want to apply.\n\nThe goal isn't to solve the entire journey in one response.\n\nIt's to find the **smallest useful action**.\n\nThis is where the idea becomes more than a chatbot.\n\nImagine the user says:\n\n**“I need to apply for internships but I'm overwhelmed and keep putting it off.”**\n\nTomorrow first tries to understand the blocker.\n\n```\nTask:\nApply for internships\n\nPossible blocker:\nOverwhelm\n\nProblem:\nThe task contains too many hidden steps.\n\nNext action:\nOpen your resume.\n\nFocus:\n15 minutes\n```\n\nSo instead of telling the user to spend the next three hours applying everywhere, Tomorrow gives them **one thing**:\n\nNow imagine the user comes back and says:\n\n“I didn't do it.”\n\nThat's not treated as failure.\n\nIt's information.\n\nTomorrow can ask:\n\n**“What got in the way?”**\n\nThe user says:\n\n“I opened LinkedIn and started scrolling.”\n\nNow the next response can change.\n\n```\nOriginal task\n     ↓\nApply for internships\n     ↓\nBlocker\nOverwhelm\n     ↓\nFirst action\nOpen resume\n     ↓\nUser got distracted\n     ↓\nReassess\n     ↓\nSmaller action\nOpen the resume file only\n```\n\nThe AI isn't simply repeating:\n\n“Try again!”\n\nIt's using the failed attempt to decide what to do next.\n\nThat's the part I cared about.\n\nA normal chatbot might work like:\n\n```\nUser\n ↓\nQuestion\n ↓\nAI response\n ↓\nConversation ends\n```\n\nTomorrow is designed more like:\n\n```\nUser\n ↓\nTask\n ↓\nBlocker\n ↓\nNext action\n ↓\nTask state\n ↓\nFocus session\n ↓\nUser check-in\n ↓\nUpdated context\n ↓\nNew action\n ↺\n```\n\nThe response isn't just displayed as text.\n\nIt influences the **next state of the task**.\n\nThat's what turns the AI from a chat box into part of the workflow.\n\nI wanted the application to know where the user actually is instead of treating every message as a completely new conversation.\n\nThe basic state flow is:\n\n```\nNEW\n ↓\nBLOCKED\n ↓\nBROKEN_DOWN\n ↓\nSTARTED\n ↓\nCOMPLETED\n```\n\nAnd when things don't go according to plan:\n\n```\nSTARTED\n   ↓\nSTUCK\n   ↓\nREASSESS\n   ↓\nNEW SMALLER STEP\n```\n\nThat **STUCK → REASSESS** loop is important.\n\nBecause real people don't follow plans perfectly.\n\nAnd honestly, if they did I probably wouldn't have built this. 😂\n\nThe system needs to treat a failed attempt as context not as a dead end.\n\n**The plan didn't work. So let's figure out why.**\n\nI kept the architecture intentionally simple:\n\n```\nUser Input\n    ↓\nReact UI\n    ↓\nTask + Conversation State\n    ↓\nContext / Prompt Builder\n    ↓\nOpen-Weight AI Model\n    ↓\nBlocker + Next Action\n    ↓\nTask State Update\n    ↓\nFocus Session\n    ↓\nUser Check-In\n    ↓\nUpdated Context\n    ↺\n```\n\nThe frontend handles the interaction.\n\nThe application state keeps track of where the user is.\n\nThe context layer gives the model the information it needs about the current task and previous interaction.\n\nThe model then helps determine things like:\n\n```\nWhat is the user trying to do?\n        ↓\nWhat is blocking them?\n        ↓\nHow can the task be reduced?\n        ↓\nWhat is ONE useful next action?\n```\n\nThe important part is what happens **after** the model responds.\n\nThe result is used to update the task workflow rather than simply being shown as another chat message.\n\nAt a high level, the AI interaction can be thought of as:\n\n```\nUser message\n     ↓\nExtract task\n     ↓\nIdentify blocker\n     ↓\nEstimate task complexity\n     ↓\nGenerate smaller actions\n     ↓\nSelect one next action\n     ↓\nReturn structured guidance\n     ↓\nUpdate task state\nInput:\n\"I need to finish my React project but I'm overwhelmed.\"\n\n        ↓\n\nTask:\nFinish React project\n\nBlocker:\nOverwhelm\n\n        ↓\n\nBreakdown:\n- Identify missing feature\n- Open relevant component\n- Create component\n- Connect component\n- Test it\n\n        ↓\n\nSelected next action:\nOpen the project and identify the missing feature.\n\n        ↓\n\nState:\nSTARTED\n```\n\nThis is important because I don't want the model to produce a giant wall of productivity advice.\n\nI want the output to be useful to the application's workflow.\n\nThis was one of the biggest design decisions in the project.\n\nIf the AI were removed the app would lose the part that:\n\nThe model isn't decorating the interface.\n\nIt's helping determine **what happens next**.\n\nThat makes the open-weight AI part of the core product logic rather than an extra feature added to the UI.\n\nThis is where the project became more interesting to me.\n\nAt first, the idea was simply:\n\n“I'll use an AI model to help break down tasks.”\n\nBut then I thought about the kind of information Tomorrow could eventually handle:\n\nThat's a lot of personal context.\n\nAnd I didn't want the long-term version of Tomorrow to require sending all of that to a closed AI provider.\n\nSo I designed the project around an **open-weight AI model** and a local-friendly architecture.\n\nThe open model isn't there just because the challenge asks for open AI.\n\nIt changes what the product can eventually become.\n\nA productivity assistant that knows your unfinished work and personal struggles is dealing with information that can feel much more sensitive than an ordinary chatbot conversation.\n\nThat's why local inference is an especially interesting direction for this type of product.\n\nImagine telling your productivity assistant:\n\n“I've been avoiding job applications because I'm scared I'll get rejected.”\n\nThat's much more personal than:\n\n“Give me a pasta recipe.”\n\n😂\n\nFor something like Tomorrow, privacy matters.\n\nA long-term version could work like:\n\n```\n              User\n                │\n                ▼\n        Personal Context\n                │\n                ▼\n          Local AI Model\n                │\n                ▼\n        Next Best Action\n                │\n                ▼\n              User\n```\n\nThe idea is:\n\n**Your personal productivity context shouldn't automatically have to leave your device just to get useful AI assistance.**\n\nAnd because the model is open-weight, the project isn't permanently tied to one proprietary AI provider.\n\nThe interesting part of building an AI product isn't always getting the model to respond.\n\nIt's getting the response to be **useful**.\n\nOne problem I had to think about was task size.\n\nIf the user says:\n\n“I need to finish my project.”\n\nA technically correct response could be:\n\n“Break the project into smaller tasks.”\n\nBut that's not actionable.\n\nThe user is still staring at the same giant project.\n\nSo the system needs to go one level deeper:\n\n```\n\"Finish my project\"\n        ↓\n\"What part?\"\n        ↓\n\"Build the frontend\"\n        ↓\n\"What part of the frontend?\"\n        ↓\n\"Create the login page\"\n        ↓\n\"What's the smallest action?\"\n        ↓\n\"Open the project and create Login.jsx\"\n```\n\nThat's the difference between **advice** and an **actionable next step**.\n\nAnother challenge is what happens when the user doesn't complete that step.\n\nA normal chatbot might simply suggest the same thing again.\n\nTomorrow needs to treat that as information.\n\nThat feedback is what makes the workflow adaptive.\n\nThis is probably the most important part of the challenge for me.\n\nI could have started with:\n\n“What cool AI application should I build?”\n\nInstead, I started with:\n\n**“What does my friend actually struggle with?”**\n\nThe answer was pretty obvious.\n\nThey didn't need another productivity lecture.\n\nThey didn't need a complicated dashboard.\n\nThey needed help getting past:\n\n**“I'll do it tomorrow.”**\n\nSo I built around that.\n\nAnd starting with a person instead of a technology changed the product.\n\nIt made me remove things that sounded cool but didn't really solve the problem.\n\nNo giant productivity dashboard.\n\nNo unnecessary streak system.\n\nNo pretending that waking up at 5 AM will magically fix everything.\n\n**What are you avoiding?**\n\n**Why?**\n\n**What's the smallest thing you can do next?**\n\nThe biggest thing I learned from this project was:\n\n**AI doesn't have to solve the entire problem.**\n\nSometimes it just needs to solve the **next 10 minutes**.\n\nThat changed how I thought about the product.\n\nI initially imagined features like:\n\nBut then I asked myself:\n\n**Would any of this actually help my friend start?**\n\nNot necessarily.\n\nSo I kept stripping things back.\n\n**One problem.**\n\n**One person.**\n\n**One next step.**\n\nAnd honestly, I think the product got better every time I removed something.\n\nThere are a few directions I'd love to explore.\n\nInstead of typing:\n\n“I'm avoiding my assignment…”\n\nthe user could just say it.\n\nThat could make the interaction feel much more natural.\n\nOver time, Tomorrow could notice recurring patterns.\n\n“You tend to postpone tasks when the first step isn't clear.”\n\nOr:\n\n“You usually get started when the task is broken into smaller actions.”\n\nThat could make the assistant more personalized without requiring the user to explain everything from scratch every time.\n\nThe long-term goal is to make the entire experience work locally:\n\n```\nUI\n ↓\nLocal Data\n ↓\nLocal AI\n ↓\nPersonalized Guidance\n```\n\nNo cloud AI dependency for the core experience.\n\nJust a private AI companion running on your own machine.\n\nThe project was built and tested through an agent-assisted development workflow as part of the challenge.\n\nThe agent workflow helped iterate on the application logic, task flow and user experience while keeping the core idea focused on one question:\n\n**What's the smallest useful action the user can take next?**\n\nMy friend didn't need another app telling them:\n\n**“Wake up at 5 AM.”**\n\nThey didn't need a 12-step morning routine.\n\nThey didn't need another productivity guru.\n\nThey needed something that could say:\n\n**“Forget the whole thing for a second. What's the smallest thing you can do right now?”**\n\nThat's what I wanted Tomorrow to become.\n\nNot an AI that manages your entire life.\n\nNot another to-do list.\n\nNot another chatbot that gives you motivational paragraphs and disappears.\n\nJust a small, private, open-AI companion that helps you take the first step.\n\nBecause sometimes the hardest part of getting something done...\n\n**is simply starting.**", "url": "https://wpnews.pro/news/what-if-your-procrastination-had-to-explain-itself", "canonical_source": "https://dev.to/akanksha_sharma/what-if-your-procrastination-had-to-explain-itself-3jj", "published_at": "2026-10-04 13:59:37+00:00", "updated_at": "2026-10-04 14:12:28.257067+00:00", "lang": "en", "topics": ["ai-products", "artificial-intelligence", "generative-ai"], "entities": ["Tomorrow"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/what-if-your-procrastination-had-to-explain-itself", "markdown": "https://wpnews.pro/news/what-if-your-procrastination-had-to-explain-itself.md", "text": "https://wpnews.pro/news/what-if-your-procrastination-had-to-explain-itself.txt", "jsonld": "https://wpnews.pro/news/what-if-your-procrastination-had-to-explain-itself.jsonld"}}