A single-page, zero-dependency server dashboard for a Linux host.
Monitors CPU / memory / disk / network, Docker containers, systemd services, and journal logs — with an RSS news panel and a Binance Futures bot tracker. Ships with mock data so it runs out of the box; plug in your own Binance API key to see live positions.
![]() |
![]() |
![]() |
![]() |
- Server stats — CPU, memory, disk, network rate, uptime, load, process count
- Docker — live container list with CPU / memory stats (auto-discovered via
docker ps) - Systemd services — auto-discovered running services with start/stop/restart controls
- Crypto bots — mock by default, live Binance Futures positions with
.env - Social feed — aggregated RSS from configurable sources
- Server logs — parsed
journalctlwith level detection - 7 themes — Catppuccin, Dracula, Tokyo Night, Nord, Ristretto, and more
- Node.js HTTP server (
api.js) — uses only the standard library, nonpm install - Single-file frontend (
index.html) — no framework, no build step - Runs on port 3333
git clone https://github.com/AlexBraguta/dashboard.git
cd dashboard
node api.jsOpen http://localhost:3333.
That's it. No dependencies, no build.
The Crypto Bots panel shows mock data by default. To connect it to your own Binance Futures account:
cp .env.example .env
# edit .env and paste your BINANCE_API_KEY + BINANCE_API_SECRETUse a read-only API key (enable Reading only — never enable trading or withdrawals). Restart the server; the startup log will report crypto mode: LIVE.
Example systemd unit (/etc/systemd/system/dashboard.service):
[Unit]
Description=Dashboard
After=network.target
[Service]
ExecStart=/usr/bin/node /opt/dashboard/api.js
WorkingDirectory=/opt/dashboard
Restart=always
User=root
[Install]
WantedBy=multi-user.targetsudo systemctl enable --now dashboardTo reach the dashboard at dash.yourdomain.com instead of server-ip:3333:
1. DNS — Add an A record at your domain registrar pointing your chosen subdomain to your server's public IP:
Type Name Value
A dash YOUR.SERVER.IP.HERE
2. Nginx reverse proxy — Create /etc/nginx/sites-available/dashboard:
server {
listen 80;
server_name dash.yourdomain.com;
# Basic auth — the app itself has no login
auth_basic "Dashboard";
auth_basic_user_file /etc/nginx/.htpasswd;
location / {
proxy_pass http://127.0.0.1:3333;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}Enable it and create a password:
sudo ln -s /etc/nginx/sites-available/dashboard /etc/nginx/sites-enabled/
sudo apt install apache2-utils # for htpasswd
sudo htpasswd -c /etc/nginx/.htpasswd youruser
sudo nginx -t && sudo systemctl reload nginx3. HTTPS (recommended) — Use Certbot to issue a free Let's Encrypt certificate:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d dash.yourdomain.comCertbot will edit the Nginx config in place to add TLS and auto-renew.
The app has no built-in authentication. Always put it behind basic auth, an SSO proxy, or restrict it to localhost / a VPN before exposing it to the public internet.
- RSS feeds — edit the
RSS_FEEDSarray inapi.js - Quick-action links — edit the links block near the bottom of
index.html - Themes — swap via the palette icon in the sidebar (persisted in localStorage)
- Port — change the
PORTconstant at the top ofapi.js
- Node.js 18+
- Linux (reads
/proc/*for stats; Docker / journalctl are optional — panels degrade gracefully if absent)
MIT



