Pulseboard is a self-hosted device monitoring dashboard: a Next.js UI + API with a lightweight Windows/PowerShell agent that reports health metrics and runs a small allowlisted set of diagnostics.
Note: this is a personal/WIP project and not production-ready. Use at your own risk.
- Fleet dashboard (online/offline, last seen)
- Live updates via SSE + polling fallback
- Metrics + history (CPU/RAM/Disk/Network)
- Temperature telemetry (best-effort; depends on sensors/permissions)
- Local-only admin login (single account, no DB, no OAuth)
- No arbitrary command execution / no free-form scripts
- Jobs are allowlisted and validated server-side
- Agent talks only to the Pulseboard API
From the repo root:
npm install
npm run devOpen http://localhost:3000 and sign in at /login.
- Choose a username (
PULSEBOARD_ADMIN_USER) - Generate a bcrypt hash (
PULSEBOARD_ADMIN_PASS_HASH) - Generate a random session secret (
PULSEBOARD_SESSION_SECRET)
Generate a bcrypt hash (stored as b64:... to avoid $... expansion issues in dotenv tooling):
node -e "require('bcrypt').hash(process.argv[1], 10).then(h=>console.log('b64:'+Buffer.from(h).toString('base64')))" "your-password-here"Generate a session secret:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"Example apps/web/.env.local:
PULSEBOARD_ADMIN_USER=admin
PULSEBOARD_ADMIN_PASS_HASH=b64:PASTE_OUTPUT_FROM_BCRYPT_COMMAND
PULSEBOARD_SESSION_SECRET=PASTE_OUTPUT_FROM_SECRET_COMMAND- Set the web server URL in
dist/agent.config.json(oragent.config.json) and start the agent. - The agent POSTs heartbeats to
/api/agent/heartbeat; the UI listens via/api/events.
Kristof (likeBloodMoon)