This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
I built Little Focus for my friend. They have ADHD, and the part I kept watching them get stuck on was the beginning. A day would show up as one loud pile. A thought would arrive sideways, and the thing they meant to do would slip. The timers they had already tried felt like a test, so a lot of days ended before they had picked a place to start.
I wanted one quiet screen they could open without bracing for it.
- A little list. They can add a task, edit it, mark it done, or put it back. Then they pick one row and leave the rest alone. One small next thing is enough.
- Thought parking. This is the piece I made because I know how their mind works. The idea and the distraction show up in the same minute. They can set the thought down, keep it, and come back when the session is over, without having to hold it in their head the whole time.
- A focus session they can leave. I put 10, 15, 25, and 40 minutes on the screen, plus any length from 1 to 180, because some days ten minutes is a real win and some days they want longer. They can start, pause, resume, or reset. When the time ends, the page tells them they showed up, then offers another stretch or a five-minute break. The break counts as part of the work.
I wrote the words on the page the way I would talk to them. An empty list is breathing room. A finished session is something they did. There is no streak to protect and no score to fall behind on.
Demo
The demo is live at https://little-focus.vercel.app/.
Code
The whole thing my friend sees is one React page: [artifacts/focus-companion/src/App.tsx](artifacts/focus-companion/src/App.tsx). Layout and type live in [artifacts/focus-companion/src/index.css](artifacts/focus-companion/src/index.css).
The code is present here: https://github.com/ssindher11/Little-Focus.
How I Built It
I kept Little Focus in the browser, because my friend should be able to open it and start. React and TypeScript draw the screen. Vite serves and builds it. The timer, the list, and the parked thoughts live on their device. There is no account to create, no database, and no model call sitting between them and the first task.
The clock stores a deadline while it runs and checks that deadline on a short interval, so leaving the tab does not quietly stretch the session. I lock the duration controls once they have started, so a restless click cannot reset the length underneath them. Buttons have names, the countdown is a timer, and a short line announces when a session starts or ends. If they prefer less motion, the page respects that. On a phone, the timer comes first, then the list, then the thoughts they parked.
I did not put an open-weight model, a local inference server, or an open-source agent inside this version. The open piece is the app itself: React, Vite, and TypeScript, with nothing behind an API key. My friend can use it without sending their list or their half-finished thoughts to anyone.
Why Does Open Innovation Matter?
The useful part of Little Focus is private, and that mattered to me because of who I made it for. My friend parks thoughts there that are still messy: a worry, a reminder, an idea they are afraid they will lose. I did not want those sentences leaving their laptop. localStorage keeps the list and the parked thoughts on their machine. After the page has loaded, it keeps working, with no key to rotate, no per-session bill, and no log of what they almost said.
A closed assistant API would turn “park this thought” into a request someone else stores. It would also make a five-minute break depend on a vendor staying up and a quota staying open. I wanted the opposite for them. The durations, the wording, and the fact that a break is allowed all live in the source, where I can change them when I see what actually helps.
Prize Categories
I am entering the overall weekend challenge.


Top comments (0)