Dashboard — The Complete Guide
One UI, 12 tabs, every agent at a glance
The Dashboard is a local self-hosted Node.js app (plain HTTP server, no framework) running on port 3456, with a dedicated WebSocket server on 3457 backed by the `ws` library. Its data sources: the hub.eladjak.com REST API (via the Delegator), Qdrant, local bridge files, PowerShell status scripts, and file-system watchers. It exposes 12 tabs — Mission Control, Agents, Projects, CrewAI, Costs, Health, Logs, and more. For me it's the main screen of my AI CEO setup; for you it can be the control panel for a home lab, a small SaaS ops team, an agent network, or a DevTooling squad. You just swap the data sources for your own adapters.
What this guide covers
What is the Dashboard?
A Node HTTP server on Windows, with a UI that plugs into everything
The Dashboard is a private website that runs on my own machine — a kind of Mission Control that gathers all my agents, projects, costs, and system health in one place. Under the hood it's a plain Node.js server (the language behind countless web servers) with no heavy framework — no Next.js, no Express, just about 3,000 lines of direct code. That's the beauty of it: I can add a new tab or tweak something in minutes. It's a dashboard that speaks the language of your business, instead of stacking tens of dollars a month on generic tools like Datadog (from $15/host) or Retool (from $10/user) that never quite match how you actually work.
The 12 tabs — what each one holds
Each tab is a world; together they tell the full story
The Dashboard is split into 12 tabs — each focused on a single topic, and together they cover everything: the big picture, projects, agents, content creation, costs, and health. Some tabs load live data (real-time), some rely on a cache (pre-computed data to save time), and some connect to external services. The goal: critical information is always one click away, with no need to juggle dozens of browser tabs.
WebSocket — real-time updates
The dashboard talks back when something changes, instead of asking constantly
WebSocket is a technology that lets the server push updates to the browser the moment they happen — instead of the older approach where the browser had to keep asking 'anything new? anything new?' (a wasteful pattern known as polling). I run a dedicated WebSocket server on port 3457 that streams every live update: when a Kami task changes state, when a server goes down, when a new message arrives — the Dashboard refreshes instantly without reloading the page. The result: what you see is always current.
Proxy — one URL for every service
The Dashboard is the front desk of the network — all requests flow through it
The Dashboard also serves as a reverse proxy — a concept worth understanding. A proxy is simply a middleman: instead of your browser talking directly to a handful of services (each on its own port), it only talks to the Dashboard, which in turn forwards the request to the right service. Why is that useful? It hides internal ports from the outside world, unifies everything under one domain, handles CORS (browser security rules that restrict cross-domain requests), and lets you swap services behind the scenes without the client noticing. In my setup, the Dashboard proxies to three main services.
Kanban — 39 projects in one view
The war room for everything I've built, am building, or dream of building
This might be the single most important tab in my Dashboard. Kanban (Japanese for 'visual board') is a way to manage tasks or projects in columns by stage — exactly like Trello or Linear, except this one is mine, local, and free. I'm juggling 39+ active projects at any given time: client work, websites, AI agents, internal tools, and ideas that haven't shipped yet. Without a single place that aggregates all of them, I'd simply forget half of them. For you this could be a team task board, a client tracker, or even a reading list — the underlying structure is the same.
Add a new tab — 50 lines and you have your own feature
The big win of a simple workshop: change, run, done
My design philosophy for the Dashboard is deliberate minimalism: two files only — server.js on the server, index.html on the client — no build step (no compilation phase), no hot-reload, no dependencies to update every week. That's an intentional choice: less sophistication = less friction. Want to add a feature? Thirty minutes and it's running. This is exactly the paradigm that saves you from stacking Datadog/Retool/Linear subscriptions: you control your tool. For a marketable, production-grade product I'd reach for Next.js 14 or 15 (14 is the current LTS) — but for a personal mission control? Simplicity wins.

