After deploying a few Rails apps with Kamal, I hit some friction: checking app status meant SSH or `kamal app details` per project, and deploying meant hopping between directories to run `kamal deploy`.

So I built HQ: a terminal dashboard to manage all my apps.

The idea came from ONCE from Basecamp https://www.youtube.com/watch?v=yZankuDQQmw. Although I'm not interested in converting all my projects to ONCE, the dashboard concept stuck with me. What if I could have that single-pane-of-glass view for all my Kamal deployments?
ONCE: Run multi dockerized web apps on single server

YouTube

HQ is a terminal-based (TUI) dashboard for monitoring and managing Kamal-deployed projects from a single Ruby file.

What it does:

- Health monitoring at a glance (healthy, unhealthy, maintenance mode)
- Version tracking with highlights for outdated versions
- One-key deploy & maintenance toggle
- Action logs & health logs
- Auto-refresh every 30 seconds
- Background actions (deploys keep running even if you close HQ)
- Server grouping by host IP

Built with Bubbletea, Lipgloss, and Bubbles - Ruby ports of the Go Charm libraries. If you've used `lazygit` or `k9s`, you know what I'm talking about.

Follows the Elm Architecture (Model-View-Update). Surprisingly maintainable despite being a single file. State changes are explicit, UI is a pure function of state.

I know that similar projects exists but I am using this as an excuse to make a TUI using Charm Ruby.

Why TUI instead of a web dashboard?

Because I spend most of my time in the terminal anyway. TUI means:

- No browser tabs to manage
- No server to run
- Instant startup
- Works over SSH
- Looks cool (let's be honest 😄)

This HQ thingy is still young. Here are some ideas I'm currently exploring:

- Multiple server support per project
- Rollback functionality
- Integration with error tracking services
- Remote server health checks

You can read it in full blog post: https://didik.id/2026/03/22/hq-a-terminal-dashboard-for-kamal/

HQ: A Terminal Dashboard for Kamal - Tales of a Gamer Dad

After deploying a few Rails apps with Kamal, I started to feel the friction. Every time I wanted to check if my apps were healthy, I had to SSH into the server or run kamal app details for each project. Deploying meant switching directories, running commands, watching logs. Toggling maintenance mode? More terminal juggling.