{"slug": "my-friend-didnt-need-another-pomodoro-timer-he-needed-help-starting", "title": "My Friend Didn’t Need Another Pomodoro Timer. He Needed Help Starting.", "summary": "A developer built FocusLoop, an AI study companion that converts a vague goal like \"I need to study DBMS\" into one concrete first action, then runs a focus session with accountability check-ins and a recovery flow for distraction. The project uses Gemma models in two modes: a hosted API for Fast Mode and Gemma 3 1B running locally in the browser for Private Mode, with timers, session state, streaks and validation kept deterministic. After testing with his friend, the developer added check-ins asking \"Are you still studying?\" because the original timer could simply run in a background Chrome tab.", "body_md": "*This is a submission for the [Hacktoberfest Weekend Challenge: Build for a Friend](https://dev.to/challenges/hacktoberfest-weekend-2026-10-01)*\n\nMy friend has a very simple problem:\n\nHe wants to study.\n\nThen he starts thinking about what to study, picks up his phone for \"just a minute\", opens YouTube or Instagram, loses the session, feels guilty, and tries again later.\n\nSo I built **FocusLoop** around one idea:\n\n**Starting is the hard part. Returning matters more than perfection.**\n\nFocusLoop is an AI study companion that turns a vague goal like:\n\n\"I need to study DBMS.\"\n\ninto one small, meaningful action that the student can actually do immediately.\n\nThen it provides a focus session, a way to say \"I'm stuck\", and a recovery flow when they get distracted.\n\nAfter testing the first version with my friend, he gave me a blunt piece of feedback:\n\n\"The timer runs in Chrome in the background and I can just do whatever I want.\"\n\nHe was right.\n\nSo I added accountability check-ins. FocusLoop cannot see what someone is doing outside the browser, and it doesn't pretend to. Instead, if the user has been away or hasn't interacted with FocusLoop for a while, it asks:\n\n**\"Are you still studying?\"**\n\nIf they're back, they continue.\n\nIf they got distracted, FocusLoop helps them recover with one small next step.\n\nThe goal isn't to punish distraction.\n\nIt's to make returning easier.\n\n**Live Demo:** [https://focusloop-lekb.onrender.com](https://focusloop-lekb.onrender.com)\n\nTry entering something vague like:\n\n\"I need to study calculus.\"\n\nFocusLoop should turn it into a concrete first action.\n\n**GitHub:** [https://github.com/CodeVishal-17/FocusLoop](https://github.com/CodeVishal-17/FocusLoop)\n\nThe project is intentionally small: plain JavaScript, a lightweight Node server, deterministic session logic, and an AI adapter that keeps the model-specific code separate from the rest of the application.\n\nGemma is at the core of FocusLoop's AI layer.\n\nI tested several approaches before settling on the current setup.\n\nGemma handles the parts that benefit from language understanding:\n\nThe rest is deliberately deterministic.\n\nTimers, session state, check-ins, Recovery Score, streaks, navigation, and validation don't need an LLM.\n\nI also evaluated the models instead of assuming the first model would be good enough.\n\nA smaller Gemma model was tested for browser inference, while Gemma 4 26B was evaluated for hosted quality and latency. The final hosted tests produced valid structured output across the evaluation set, while the smaller local model provided a privacy-focused alternative.\n\nFor FocusLoop, open innovation isn't just about replacing one API with another.\n\nIt gives me freedom over where the AI runs.\n\nFast Mode gives the friend a quick experience using Gemma through a hosted API.\n\nPrivate Mode lets Gemma 3 1B run on the user's own device after the model is downloaded, without sending the AI requests to my server.\n\nThat means the product isn't fundamentally tied to one closed AI implementation.\n\nIt also made experimentation possible. I could test different Gemma models, compare quality and latency, and choose the model based on the actual task rather than simply using the biggest model available.\n\nThe biggest lesson wasn't technical.\n\nMy first version was too focused on building a good timer.\n\nMy friend immediately showed me that a timer isn't the problem.\n\nA timer can measure time.\n\n**It can't make you study.**\n\nThat changed the product.\n\nInstead of trying to build a more complicated productivity dashboard, I focused on the actual loop:\n\n**Start → Focus → Get distracted → Recover → Return.**\n\nThat's what FocusLoop is built around.\n\nI did not use DevRelay for this project.\n\nBuilt for a friend who doesn't need more motivation.\n\nHe just needs to start.", "url": "https://wpnews.pro/news/my-friend-didnt-need-another-pomodoro-timer-he-needed-help-starting", "canonical_source": "https://dev.to/codevishal_17/my-friend-didnt-need-another-pomodoro-timer-he-needed-help-starting-3ogd", "published_at": "2026-10-05 05:07:16+00:00", "updated_at": "2026-10-05 05:13:39.758231+00:00", "lang": "en", "topics": ["ai-products", "ai-tools", "large-language-models", "generative-ai", "ai-agents"], "entities": ["FocusLoop", "Gemma", "Gemma 3 1B", "Gemma 4 26B", "GitHub", "Hacktoberfest", "DevRelay", "CodeVishal-17"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/my-friend-didnt-need-another-pomodoro-timer-he-needed-help-starting", "markdown": "https://wpnews.pro/news/my-friend-didnt-need-another-pomodoro-timer-he-needed-help-starting.md", "text": "https://wpnews.pro/news/my-friend-didnt-need-another-pomodoro-timer-he-needed-help-starting.txt", "jsonld": "https://wpnews.pro/news/my-friend-didnt-need-another-pomodoro-timer-he-needed-help-starting.jsonld"}}