Inspiration I'm an introvert who knows this loop way too well — you have free time, you want to do something meaningful, maybe pick up a hobby or get something done, but the activation energy to start feels impossible. So you open your phone, start scrolling, and 45 minutes disappear. The problem isn't laziness. It's that there's no starting ritual, no gentle push from "nothing" to "doing." I built Kernel because I needed it myself. A dead-simple focus timer that makes starting feel easy, and makes not starting feel like breaking a streak.
What it does Kernel is a browser-based Pomodoro-style focus timer built for people who struggle to start things.
One-click sessions — open it, hit Start, do the thing. No setup, no account Work + break cycles — 25 min work, 5 min break, with browser notifications when each ends Session labels — optionally tag what you worked on ("reading", "sketching", "coding") Session history — a running log of every session you've completed, persisted in your browser Streak counter — tracks how many days in a row you've completed at least one session Custom durations — adjust work and break lengths to fit your attention span Fully offline — no backend, no account, no data leaves your device
How we built it Kernel is a single index.html file — vanilla HTML, CSS, and JavaScript with no frameworks, no build tools, and no dependencies. The entire app state lives in memory and persists to localStorage. The build followed a spec-driven process from day one. Before writing a single line of code, I created a full docs/ folder with a scope document, a PRD with user stories and acceptance criteria, a technical spec covering the data model and key functions, and a phased build checklist. This made the actual coding feel like filling in blanks rather than figuring things out as I went.
Challenges we ran into The streak logic was trickier than expected. Getting it to correctly handle "same day", "next day", and "gap of 2+ days" without timezone bugs required more careful date comparison than I anticipated. Keeping the UI reactive with vanilla JS — no React, no state management library — meant being disciplined about a single render() function that redraws everything from the current state object. It took a few refactors to get that pattern clean.
Accomplishments that we're proud of Writing the full planning docs before building anything — and actually sticking to them. The scope document meant I never got distracted adding features mid-build. The PRD's acceptance criteria meant I knew exactly when each feature was "done." For a first project, that discipline made the difference between a finished app and an abandoned one. Also: the whole thing is one file and opens instantly. That feels good.
What we learned Spec-driven development isn't just for big teams. Even for a solo beginner project, writing down what you're building — and what you're not building — before touching code saved hours of scope creep and second-guessing. I also learned that localStorage is genuinely powerful for small tools. No backend, no auth, no hosting costs — and the app still works perfectly for a single user.
What's next for Kernel
A soft "what do you want to work on today?" prompt when you open the app with no active session — to help with the "I don't know what to do" feeling that leads back to doomscrolling A weekly summary view: total focus time, most common session labels, longest streak A gentle "Hobby Spark" mode — if you open the app with no plan, it suggests a 5-minute micro-activity to try
Log in or sign up for Devpost to join the conversation.