T−0
Personal Tool · Open Source · 2025
Deadline Tracking · Local-First · Cross-Platform Desktop

GH
Countdown.

Every productivity app I tried was too cluttered or cloud-dependent. I wanted one screen, one number: open laptop, know immediately. No existing tool did that — so I built one.
6
Views
100%
Local storage
60fps
Animations
Platforms

The
Problem.

I was preparing for an FTC season with three major submission deadlines in six weeks. I had Google Calendar, Notion, and Apple Reminders all open at the same time — and still missed one. Not because I forgot. Because the signal was buried inside the noise. Every app that tracked deadlines also did seventeen other things, and none of them put the single most urgent number front and centre the moment I opened my laptop.

I tried the category options — Things 3, Todoist, Fantastical, structured bullet journaling. All of them required friction before I got to the information I actually needed. I had to navigate. Open a section. Find the right view. By the time the deadline was visible, three tabs had loaded around it.

"I didn't want a productivity system. I wanted a clock counting down to the thing that mattered most."

The requirement was simple: open laptop → see countdown → know exactly how much time remains. No account, no sync, no subscription, no setup. Just an immediate answer to "how many days do I have left?" That app didn't exist. I wrote it in a weekend — and then used it every day for six months, which is when it started to grow.

Chapter Two

Built from
Friction.

No product spec. No wireframes. No roadmap. Just six months of daily use and a growing list of things the app didn't do yet. Every feature in GHCountdown was added because I hit a wall in my own life and removed the wall.

v1.0
Countdown View
The original — one big number, one deadline. FTC season: three submission dates in six weeks.
v1.1
Todos
Knowing the deadline wasn't enough. I needed to know what was left to do before it. Added task tracking.
v1.2
Time Tracking
Rowing season. I kept asking myself where the hours were going. Added a stopwatch that remembered.
v1.3
AI Assistant
Exam prep. I needed a fast brain to query while working. Built two modes: quick query and deep research. All local.
v1.4
Stats
Three months of tracking. I noticed I was spending twice as long on robotics as on debate prep. Needed to see patterns.
v1.5
Timeline View
Five concurrent deadlines. Needed everything visible at once — not a list, a calendar-style overview.
01
Countdown
The original
The whole reason the app exists. One number, one deadline, full-screen clarity. Open laptop — know immediately. No navigation required.
02
Todos
Added: FTC season
Task tracking tied to specific deadlines. Not a global to-do app — tasks belong to a project, which has a deadline. The deadline is still the anchor.
03
Timeline
Added: five concurrent deadlines
Calendar-style overview of all active deadlines and their tasks. Built for the moment when a list isn't enough and you need to see overlap.
04
Time Tracking
Added: rowing season
Stopwatch per project, persistent history. The question it answers: where did the last three weeks actually go? Built because the answer kept being surprising.
05
AI Assistant
Added: exam prep
Two modes: quick query for fast lookups, deep research for structured breakdowns. Runs locally — no API keys, no data leaving the machine, no account.
06
Stats
Added: three months of data
Patterns over time. Completion rates, time-per-project distribution, deadline streaks. The view that makes the data layer worth having written from scratch.

What I
Learned.

The stack isn't the story. What building each part actually taught me is.

TypeScript taught me what "maintenance" means. I didn't add types because a tutorial said to — I added them six weeks in because I couldn't remember the shape of my own data. The compiler became institutional memory I didn't know I needed. When I rewrote the data layer in v1.3, it caught seventeen silent breakages before they reached a deadline I was actually tracking.

Building a custom IndexedDB layer taught me more about data persistence than any class I've taken. I read the spec. Implemented the schema. Wrote migration logic by hand for every version bump — not because Dexie was hard to find, but because I wanted to know what the abstraction was hiding. It took three times as long. I've never been confused about my data model since.

Choosing Electron taught me that local-first isn't a constraint — it's a design principle worth defending. I could have built a web app; it would have been faster. But I wanted the data to stay on my machine, no exceptions, no account, no outage that makes me miss a deadline. That constraint forced me to think seriously about what "offline" actually means when you're the user.

Hitting a 60fps target with Framer Motion taught me that polish compounds. I open this app every morning. Every slightly-off transition accumulates. I spent more time on animation timing curves than on any single feature. That felt excessive at first. After six months of daily use, I understand why it wasn't.

Data Layer
Custom IndexedDB — Written from Scratch
No ORM. No Dexie. I read the IndexedDB specification, implemented the schema, and wrote migration logic by hand across every version bump. It took three times as long as using a wrapper. I can debug any data issue without reading someone else's abstraction — and that trade-off paid off the first time a migration touched live data.
Treated Like a Real Product
Changelog PRD Deployment Docs Security Policy 3 Keyboard Shortcuts 2 AI Modes

Side projects only become real when you hold them to the same standard as shipped software. GHCountdown has a CHANGELOG.md, a PRD, deployment documentation, and a SECURITY.md — not because anyone asked, but because the discipline matters.

Chapter Four

Six Months
Later.

What building — and using — something yourself every day actually teaches you.

Finding 01
Real requirements are undeniable
Every feature was added because I hit a wall in my own life and removed it. Not from a "would be cool" list — from actual friction. The AI assistant during exam prep week. The stats view three months in, when I realised I was spending twice as long on robotics as on debate. That kind of requirement is different from a product spec. The user and the developer are the same person. You can't argue yourself out of it.
Finding 02
Ownership is the sharpest feedback loop
Writing a CHANGELOG means thinking carefully about what changed and why. Writing a PRD for your own tool means being honest about what it actually is versus what you want it to be. No grade is on the line. The only accountability is you — and that turned out to be the most honest feedback I've encountered. No assignment taught me that. Only ownership did.
Finding 03
Restraint is a design skill
The best decisions in this project were decisions not to add things. I kept exactly what I needed and nothing I didn't. Every productivity app I'd tried before had the opposite problem — too many features eroded the one thing that made the tool worth opening. I learned restraint by breaking the rule a few times, shipping the feature, using it for a week, and removing it.
6
Views in the app
100%
Local · zero cloud dependency
60fps
Animation target · Framer Motion
<3s
Cold start · macOS, Win, Linux
Source code · Releases · Changelog
View on GitHub
Live Demo

Set a deadline.
Watch it count.

This is what GHCountdown does — in your browser, right now. Name a deadline, pick a date. The number starts counting immediately. No account, no install.

New deadline
Add a deadline above to start
Urgency tiers: > 14 days gold · 3–14 days amber · < 3 days red. The real app stores everything locally — no server ever sees your data.

Also Explore

Home · Portfolio
Portfolio

Full overview — robotics, rowing, debate, and all builds.

Explore →
Project · FTC Platform
ScoutSelect

Alliance selection tool built for real FTC competition. Monte Carlo, OPR, Bayesian shrinkage.

Explore →
Research · LLM Efficiency
JouleRoute-LM

Independent research. Adaptive layer routing for energy-efficient local LLM inference. +14.43% efficiency.

Explore →
Ready to go back?
Return to Portfolio