DEV Community

Cover image for The Context-Switching Problem: Why I Built a Tracker That Lives in My Terminal.
Tejas
Tejas

Posted on

The Context-Switching Problem: Why I Built a Tracker That Lives in My Terminal.

The Problem with Productivity Apps

When my semester wrapped up, I knew exactly what came next: a focused stretch of interview prep and personal learning. I wanted to set clear goals and track my progress properly, not in a vague “I think I did something today” way but with real structure and accountability.

Naturally, I turned to productivity and habit-tracking apps.
And very quickly, I realized they were fighting against my workflow instead of supporting it. They were:

  • Too Slow: Switching contexts to a separate app and clicking through menus just to log a task felt cumbersome and killed my flow.
  • Too Distracting: Notifications, overly complex UIs, and features I didn't need turned "checking a box" into a time-sink.

I realized what I needed wasn't another habit tracker; it was a system built for speed and duality. I needed to be able to log a quick win in the terminal without leaving my coding environment, but also switch to a visual dashboard for deep, retrospective analysis.
That's why I built Resync.

The Solution: Two Interfaces, One System

Resync is built around two specialized components:
I] Resync CLI: When I started, I assumed building a CLI tool meant diving into C++ wrappers or even assembly; only to realize it could simply be a fast, origin-less client focused purely on speed.
The CLI ensures logging tasks is instant, frictionless, and never breaks your focus.

  • Offline Robustness: Features an Offline SQLite Mode that automatically syncs goal updates to the MongoDB backend once connectivity is restored.
  • TUI Mode: Includes an interactive, text-based dashboard for quick terminal navigation.
  • Automation: Designed to be automation-friendly, letting users integrate goal tracking into custom scripts or cron jobs. It also features a Background Daemon: A lightweight process that runs in the background and sends scheduled reminders without keeping the CLI open.

Here’s a simplified example of how the daemon works:

schedule.scheduleJob("0 9 * * *", async () => {
  const goals = (await api.getGoals()).data;
  const pending = goals.filter(g => g.currentProgress.percentage < 100);
  notify(`Resync Reminder`, `You have ${pending.length} goal(s) pending today `);
});

function notify(title, message) {
  const os = platform();
  if (os === "darwin") exec(`osascript -e 'display notification "${message}" with title "${title}"'`);
  else if (os === "win32") exec(`powershell -Command "...Windows notification snippet..."`);
  else exec(`notify-send "${title}" "${message}"`);
}
Enter fullscreen mode Exit fullscreen mode

Note: This is simplified — the full implementation includes multiple reminder types, offline handling, and process management to keep it robust and cross-platform.

The daemon allows the CLI to act like a self-running assistant, sending reminders automatically and helping you stay on track without ever leaving your terminal.

II] Web App (PWA): This is the visual dashboard, built with React/Vite and focused on deep reflection. Key features include:

  • Keyboard-First Navigation: Features a Command Palette (⌘K) for quick search and navigation, backed by over 18 keyboard shortcuts for power users (like ⌘N and Ctrl+Enter).
  • Distraction-Free Focus: Dedicated Zen Mode with Pomodoro timer.
  • Analysis: Activity heatmaps and trend charts for visualizing long-term progress.

Tech Stack:

Built on the MERN stack (Node.js/Express API, MongoDB Database) with a React/Vite frontend.
CLI: A Node.js application leveraging commander for command structure and inquirer for interactive prompts.

What's Next?

My focus is now shifting to scaling the experience and enhancing user control. I'm currently focused on the following areas:

  • Ubiquitous Sync: Enhancing real-time sync to ensure a seamless experience across multiple devices.
  • Data Control: Implementing data export functionality (CSV, JSON) to give users full ownership of their progress data.
  • CLI Extensibility: Developing a plugin system for the CLI to allow for custom commands and community contributions.
  • Deeper Insights: Working on enhanced data visualization options for the web app to unlock new analysis possibilities.

As a newer user of dedicated goal tracking tools—having built this primarily for my interview prep—I know I've likely overlooked features essential to long-time power users. If you have any suggestions for necessary or cool additions, please share!

It’s completely open-source—any stars, feedback, or contributions would mean a lot!

GitHub Repository: https://github.com/TejasS1233/Resync

and yes to those of you wondering, this isn't a way for me to distract myself from LeetCode (TRUST). Goal is to do at least have basic pattern rec knowledge by end of December! XD

Top comments (1)

Collapse
 
rakheomar profile image
Omar Rakhe

This is super cool - love how you solved the context-switching problem by keeping everything in the terminal and still giving a proper dashboard. The offline SQLite → Mongo sync + daemon reminders are honestly genius. Really polished work, man. Starred the repo! 👏🔥