
A terminal dashboard that scans your local projects and shows stack, git activity, and status at a glance. Open in editor, run scripts, or launch a terminal from one TUI.
title: I Built a Terminal Dashboard to Keep Track of All My Local Projects published: true description: A terminal dashboard that scans your local projects and shows stack, git activity, and status at a glance. Open in editor, run scripts, or launch a terminal from one TUI. tags: cli, tui, productivity, opensource

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").
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.
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"]
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.
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 directlyo opens the project in your editort launches a terminal at the project rootctrl+p for the command paletteNo 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
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
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
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.
Want to track client, owner, or priority? Define custom fields in config and they become columns:
ovw set my-project --field owner=roie
All action shortcuts are customizable. In Settings > Keyboard shortcuts, or directly in config:
[keys.actions]
details = "d"
terminal = "enter"
# 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"
First launch walks you through choosing which folders to scan. After that you get the full table.
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.
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.
brew install --cask roie/tap/ovw or the one-liner aboveIf 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.
aiMost of us have seen a coding agent fail to complete a task we know it can do. We just don't...
googlecloudWhen building Generative AI applications, developers often encounter a massive bottleneck: sequential...
discussI’ve been thinking about sharing some electronic circuit posts on Dev.to — small circuits, DIY...
agentsWhat nobody tells you about exporting your multi-agent prototype to a local workspace. Every...
agenticarchitectAutonomous agents are genuinely good at answering messy business questions. Give one an LLM and a set...
aiPR volume went up, ticket quality didn't, and the gap got filled with LLMs on both sides of the review: bots reviewing, bots replying, bots occasionally arguing with bots about priorities that only existed in a teammate's head. Our CEO named the actual problem, and it's bigger than code review.
Workflows from the Neura Market marketplace related to this Stable Diffusion resource