DEV Community

Roie Ambulo
Roie Ambulo

Posted on

I Built a Terminal Dashboard to Keep Track of All My Local Projects

ovw • a terminal overview for your local projects

ovw screenshot

If you code a lot, you know how this goes. You have an idea, you spin up a project, ship it or park it, move on to the next one. Before long you've got a growing pile of repos spread across ~/dev, ~/Code, ~/Projects: each one a snapshot of a different idea. Some shipped, some abandoned after the first git commit, some you don't even remember writing.

Even with zoxide or aliases, you still have no idea what state a project is in until you're inside it. And I didn't want a separate app just to track that.

That's why I built ovw (short for "overview").

What is ovw?

ovw is a terminal dashboard for your local projects. Point it at a few directories and it scans everything: tech stacks, Git activity, running ports, scripts, and more. Shows it all in one table.

Your filesystem and Git history stay the source of truth. ovw just reads them and organizes the view.

What It Shows You

The default columns are name, stack, activity, status, and note. You can show, hide, and reorder any of these with c in the TUI, or set them in config:

columns = ["name", "stack", "manager", "scripts", "version", "ports", "branch", "updated", "activity", "status", "note"]
Enter fullscreen mode Exit fullscreen mode

Here's what each one gives you:

Column What it means
Stack Auto-detected from files: React, Go, Python, SvelteKit, Astro, and 18+ more
Manager pnpm, cargo, uv, poetry, npm, bun, and more
Scripts Available scripts without opening package.json
Version From package.json, Cargo.toml, or pyproject.toml
Branch Current Git branch
Activity Last commit + unpushed count
Updated Last file modification
Status Auto-tags (dirty, stale, active) plus your own labels
Ports Which local ports the project is running on
Note Your notes, or falls back to last commit message

Every column is sortable, filterable, and searchable.

One Place for Your Whole Dev Workflow

The goal was never just visibility: it's cutting down the friction of context-switching. From the TUI you can:

  • r opens the Runner and run any project script directly
  • o opens the project in your editor
  • t launches a terminal at the project root
  • ctrl+p for the command palette

No more cd project && npm run dev. Just select and go.

You can also use it without the TUI. Jump straight to a single project:

ovw my-project              # TUI filtered to that project
ovw my-project --json       # JSON output for that project
ovw my-project --open       # open it directly in your editor
ovw .                     # quick view of the current folder
Enter fullscreen mode Exit fullscreen mode

Or use plain and JSON output for scripting:

ovw --plain      # plain text table
ovw --json       # JSON output for piping
ovw --dirty      # only dirty projects
ovw --stale      # only stale projects
Enter fullscreen mode Exit fullscreen mode

Status and Notes

ovw automatically tags projects: dirty (uncommitted changes), stale (no activity in 30 days), active (committed today). You can also set your own:

ovw set my-project --status parked
ovw set my-project --note "fix check-in flow"
ovw set my-project --pin
ovw set my-project --script run="go run ."   # add a custom script
Enter fullscreen mode Exit fullscreen mode

Notes never stay empty. If you haven't written one, the detail view falls back to the last commit message or the project description from its manifest.

Custom Fields

Want to track client, owner, or priority? Define custom fields in config and they become columns:

ovw set my-project --field owner=roie
Enter fullscreen mode Exit fullscreen mode

Keyboard Shortcuts

All action shortcuts are customizable. In Settings > Keyboard shortcuts, or directly in config:

[keys.actions]
details = "d"
terminal = "enter"
Enter fullscreen mode Exit fullscreen mode

Quick Start

# macOS / Linux
brew install --cask roie/tap/ovw

# or via curl
curl -fsSL https://raw.githubusercontent.com/roie/ovw/main/install.sh | sh

# Windows
powershell -c "irm https://raw.githubusercontent.com/roie/ovw/main/install.ps1 | iex"
Enter fullscreen mode Exit fullscreen mode

First launch walks you through choosing which folders to scan. After that you get the full table.

Under the Hood

Your filesystem is the source of truth. ovw stores only user metadata (notes, statuses, pins) in a local config file. Everything else is read live from disk on every scan. No database, no daemon, no cloud. Fast even with dozens of projects.

Why I Built It

Even with zoxide getting me into projects fast, I still had no idea what state anything was in. And I didn't want to maintain a separate Notion or Obsidian doc just for that. ovw started as a quick script and grew into a proper tool as I kept using it. Every feature in v1.3 exists because I personally needed it.

It's MIT-licensed and open for ideas, issues, and contributions.

Links

If your project folders have gotten out of hand, give it a try. And if it helps, a star on GitHub goes a long way.


Built with way too many weekend projects.

Top comments (0)