Emmanuel Whyte
Home server dashboard

PanOps

Year2026
KindHome server dashboard
Built withPython, JavaScript
StatusIn daily use
Runs locally

My computer runs a small town of servers: image tools, language models, notes, the card showcase. I wanted to understand them the way I understand a studio: at a glance, without opening a terminal.

PanOps is one screen that answers the questions I kept asking. Is it running, and for how long? Who can reach it? What is listening on this machine right now? Can I restart it without hunting for the right command? Each app gets a tile in plain language, with its own icon where that helps you find it quickly, and when I build something new it can introduce itself and ask for a tile of its own.

Run it

Start, stop, and restart from a tile

  • Start checks that the app's address is free, launches it the one registered way, and watches its health until it is ready. Slow starters get a longer window.
  • Stop asks the app to close gracefully. Force stop appears only if that fails.
  • Restart with a new process ends the running copy and starts a fresh one, so a stuck app gets a clean slate and a new process ID.
  • Only what it can prove. Before any stop, PanOps checks again that the running program is the one registered for that tile. Apps it did not start, or that others depend on, are shown but never killed.
Ollama iconOllamaRunning

Local language models

Up for
3 h 12 min
Process
00000
Who can connect
This computer only
Identity
Expected program
StopRestart · new processOpenLogs
Know it at a glance

Icons where they count

A wall of text tiles is hard to scan. Apps you already know, like Blender, Krita, Ollama, and VS Code, now carry their own icons, read straight from the programs themselves. Containers get the container icon while they run, and plain background services stay plain, so the icons you do see mean something.

A redrawn example: real app icons, placeholder times, and the background services renamed.

See it

Every open port, without a terminal

The Active listeners view lists everything on the machine that is waiting for connections, with a friendly name, the program behind it, and who can reach it. It replaces the command-line tools I used to squint at. Docker containers appear under the plain names I give them, each with the Docker icon, and anything reachable beyond this computer is flagged for review.

PurposeProgramAddressWho can connectManaged
Ollama icon Ollamamodel server0000This computerYes
VS Code icon VS Code helpercode editor0000This computerObserved only
Docker icon Web searchcontainer0000This computerYes
Docker icon Memory databasecontainer0000This computerYes
Card showcasepython0000This computerYes
Notes vaultnotes app0000Home networkReview
Unknown helperscript host0000This computerObserved only

A redrawn example. Names are placeholders and addresses are hidden.

Remember it

A history of every port

Listeners come and go, so PanOps keeps a record. Port History lists every port it has seen in use: the program that held it, when it was first and last seen, and whether it is still open. When something unfamiliar turns up, I search by port, name, or program and see exactly when it started, instead of guessing.

Recorded namePortFirst seenLast seenStatus
Magic: The Gathering Arena00008:59 AMNowOpen
Windows device discovery00008:24 AMNowOpen
python00009:02 AM9:04 AMEnded
chrome00009:02 AM9:04 AMEnded

A redrawn example. Ports and process numbers are hidden.

Grow it

Add your own tile

A new app ships a short description file in its own folder: its name, how to start and stop it, and how to check its health. PanOps finds the file and lists it under New apps. I approve it once and the tile appears. If the file ever changes, the tile waits for approval again, so nothing can quietly rewrite how an app is started.

The same screen also shows Docker containers, network identity (home network, private network, public address on request), and quick launchers for desktop tools, each with the same rule: open is allowed, stop is earned.

{
  "name": "My new app",
  "start": "the one command that starts it",
  "stop":  "the one command that stops it",
  "health": "how PanOps knows it is ready"
}
New appsMy new app · waiting for approval
ApproveForgetRescan
Trust it

Written down, and closed to the outside

  • Every action logged. Starts, stops, and refused requests go into a local journal.
  • Signed-in sessions only. Controls need a session from this computer and a fresh check on every change.
  • Honest about limits. It reports what it can see; it does not claim the machine is spotless.
Developer notes

What changed lately

  • Tiles show each app's own icon, so the dashboard can be read at a glance.PanOps
  • New apps can introduce themselves with a small file and get a tile once approved.PanOps
  • Tiles show how long each app has been running and a one-line summary of its health.PanOps

Tech stack

  • Python - the service registry, health checks, process verification, and icons read from each app
  • JavaScript - the dashboard
  • Plain JSON files - how apps introduce themselves