I rage-quit another productivity app last month. This one had beautiful animations, perfect dark mode, and synced across seventeen devices I don’t own. It also took four taps to log a simple task and wanted me to categorize everything into projects I’d never use.
My brain doesn’t work like that. I needed something that lived where I already live: my terminal.
So I built Grand Central. It’s a Node.js CLI called gcs that handles the stuff my ADHD brain forgets. Task focus, spend tracking, energy check-ins, and most importantly, a thing that pokes me every 45 minutes before I disappear into a hyperfocus hole for six hours.
The Problem with Everything Else
Every productivity app assumes you want to live inside their perfect system. Notion wants you to build databases. Todoist wants you to organize projects. Obsidian wants you to link everything to everything.
I just want to type gcs focus "build the thing" and have it start a timer. When I buy coffee, I want to type gcs buy "coffee" --good and move on with my life. No categories, no tags, no friction.
The killer insight was this: I’m already in my terminal 80% of the day. Why would I context-switch to log a task?
What Grand Central Does
Grand Central is deliberately simple. Eight commands that map to how I actually think:
gcs morning # Start the day with energy/mood/priorities
gcs focus "task" # Start focusing on something
gcs done # Finish the current focus session
gcs check 7 # Log energy level (1-10)
gcs buy "item" 4.50 # Track spending with optional --good/--bad
gcs status # Show today's summary
gcs watch # The magic command (more on this)
gcs export # Dump data as JSON
The morning ritual is my favorite part. Instead of staring at a blank day, gcs morning prompts me:
$ gcs morning
Energy level (1-10): 6
Mood (1-10): 8
Daily budget: 50
Priority 1: Finish the CLI watch command
Priority 2: Review pull requests
Priority 3: Grocery run
It writes this to my Obsidian daily note automatically. No copy-paste, no manual formatting.
Spend Tracking That Actually Works
Every expense app I’ve tried focuses on categorization. Food, transport, entertainment. My brain doesn’t think in categories when I’m buying something. It thinks in value.
So Grand Central tracks purchases with a simple good/bad rating:
gcs buy "coffee" 4.50 --good # Worth it
gcs buy "impulse snack" 3.00 # Regret
gcs buy "lunch" 12.50 # Neutral (no flag)
At the end of the day, I can see not just what I spent, but how I felt about it. The guilt isn’t in the amount. It’s in the pattern of bad purchases.
The Watch Command
This is the feature that makes everything else work. gcs watch turns your terminal into a persistent status bar that redraws every 60 seconds:
┌─ Grand Central Status ─────────────────────────────┐
│ Currently: build the watch command (23m) │
│ Energy: 7 ▃▄▅▃▄▆▇ (last: 2m ago) │
│ Spent: $16.50 today (2 good, 1 bad) │
│ Next nudge in: 22 minutes │
└────────────────────────────────────────────────────┘
But the real magic is the nudge timer. Every 45 minutes, it interrupts with:
🔔 Nudge time! (45m elapsed)
Still working on: build the watch command
[Enter] Continue [n] New task [c] Check energy [b] Buy something
This single feature has saved me from countless hyperfocus death spirals. I’ll be deep in some refactoring rabbit hole and the nudge pops up. “Oh right, I was supposed to be fixing a bug, not rewriting the entire module.”
Why 45 Minutes?
Most productivity systems use 25-minute Pomodoros or 90-minute deep work blocks. Both felt wrong for how my brain works.
25 minutes is too short. I’m just getting started. 90 minutes is too long. I’ll wander off and forget what I was doing.
45 minutes hits the sweet spot. Long enough to make real progress, short enough that I can’t disappear completely.
The Technical Bits
The whole thing is about 600 lines of readable Node.js split across eight files. Nothing fancy:
- Commander.js for CLI parsing
- fs/promises for data persistence (flat JSON file)
- A simple Express server for the web dashboard
- Blessed.js for the terminal UI
No database, no cloud sync, no npm dependencies I don’t understand. The data lives in ~/.grandcentral/data.json and gets backed up with everything else on my machine.
The focus tracking is just timestamps:
function startFocus(task) {
const session = {
task,
start: new Date().toISOString(),
end: null
};
data.sessions.push(session);
saveData();
}
When you run gcs done, it finds the last open session and stamps the end time. Duration gets calculated on display.
Energy check-ins build a simple sparkline throughout the day. Nothing sophisticated, but seeing the pattern helps. Did that coffee actually help? Was I crashing after lunch?
The Web Dashboard
I also built a React dashboard served from a local Express API. Dark theme, JetBrains Mono, the works. It shows today’s focus sessions, spending patterns, and energy levels over time.
But here’s the thing: I barely use it. The terminal interface is so frictionless that I never feel the need to switch contexts. The dashboard exists mostly for the satisfaction of having built it.
What I Learned
The best productivity system is the one you actually use. For me, that means:
- Terminal-first. I’m already here.
- Terse commands.
gcs focus "thing"notproductivity-manager create-task --name="thing" --category="work" - No forced categorization. My brain doesn’t think in neat buckets.
- Nudges, not notifications. A gentle interruption, not a panic alert.
- Local data. No accounts, no syncing, no subscriptions.
I’ve been using Grand Central daily for three months. It’s the longest I’ve stuck with any productivity system, including the ones I didn’t build myself.
The source code is a mess of personal scripts and hardcoded paths. I’m not open-sourcing it because it’s too specific to how my brain works. But maybe that’s the point.
Next up: I’m adding a gcs reflect command for end-of-day journaling, and maybe some basic analytics. The nudge timer keeps working, which means I keep using everything else.