A self-hosted, drag-and-drop dashboard builder with 60+ widgets, a template gallery, custom pages, and zero cloud dependencies. One Node.js server, no frameworks, no build step needed.
Works standalone or with OpenClaw. LobsterBoard is a general-purpose dashboard — use it to monitor your homelab, track stocks, display weather, manage todos, or anything else. OpenClaw users get bonus widgets (auth status, cron jobs, activity logs), but they're completely optional.


npm install lobsterboard
cd node_modules/lobsterboard
node server.cjs
Or clone it:
git clone https://github.com/Curbob/LobsterBoard.git
cd LobsterBoard
npm install
node server.cjs
Open http://localhost:8080 → press Ctrl+E to enter edit mode → drag widgets from the sidebar → click 💾 Save.

LobsterBoard ships with 5 built-in themes. Switch themes from the dropdown in edit mode — your choice persists across sessions.
| Default | Terminal | Paper |
|---|---|---|
![]() |
![]() |
![]() |
| Feminine | Feminine Dark |
|---|---|
![]() |
![]() |
Monitor multiple servers from a single dashboard using lobsterboard-agent.
On your VPS/remote server:
npm install -g lobsterboard-agent
lobsterboard-agent init # Generates API key - save it!
lobsterboard-agent serve # Starts on port 9090
http://your-server-ip:9090), and API keyThese widgets support remote server data:
| Widget | What It Shows |
|---|---|
| Uptime Monitor | System uptime, CPU, memory |
| CPU / Memory | CPU usage + RAM usage |
| Disk Usage | Disk space with ring chart |
| Network Speed | Upload/download throughput |
| Docker Containers | Container list and status |
Add multiple widgets and select different servers for each — monitor your entire infrastructure from one dashboard.
PORT=3000 node server.cjs # Custom port
HOST=0.0.0.0 node server.cjs # Expose to network
Widget settings are edited in the right-hand panel during edit mode. All configuration saves to config.json.

LobsterBoard includes a built-in template system for sharing and reusing dashboard layouts.

templates/ directory and can be shared as folders
| Widget | Description |
|---|---|
| CPU / Memory | Real-time CPU load and memory usage |
| Disk Usage | Disk space with ring gauge |
| Network Speed | Upload/download throughput |
| Uptime Monitor | System uptime, CPU load, memory summary |
| Docker Containers | Container list with status |
| Widget | Description |
|---|---|
| Local Weather | Current conditions for your city |
| World Weather | Multi-city weather overview |
| Widget | Description |
|---|---|
| Clock | Analog/digital clock |
| World Clock | Multiple time zones |
| Countdown | Timer to a target date |
| Todo List | Persistent task list |
| Pomodoro Timer | Work/break timer |
| Notes | Persistent rich-text notes with auto-save |
| Widget | Description |
|---|---|
| RSS Ticker | Scrolling feed from any RSS/Atom URL |
| Calendar | iCal feed display (Google, Apple, Outlook) |
| Now Playing | Currently playing media |
| Quote of Day | Random inspirational quotes |
| Quick Links | Bookmark grid |
Track your AI coding subscriptions in real-time. Inspired by OpenUsage by Robin Ebers.
| Widget | Description | Setup |
|---|---|---|
| AI Usage | Combined view of all providers | — |
| Claude Code | Session, weekly, Opus limits | Run claude once |
| Codex CLI | Session, weekly, code reviews | Run codex once |
| GitHub Copilot | Premium, chat, completions | Run gh auth login |
| Cursor | Credits, usage breakdown | Just use Cursor IDE |
| Gemini CLI | All available Gemini CLI quota buckets | Run gemini once |
| Amp | Free tier, credits | Run amp once |
| Factory / Droid | Standard, premium tokens | Run factory once |
| Kimi Code | Session, weekly | Run kimi once |
| JetBrains AI | Quota tracking | Sign in via IDE |
| Antigravity | Gemini 3, Claude via Google | Run antigravity-usage login |
| MiniMax | Coding plan session | Set MINIMAX_API_KEY |
| Z.ai | Session, weekly | Set ZAI_API_KEY |
| AI Cost Tracker | Monthly cost breakdown | — |
| API Status | Provider availability | — |
| Active Sessions | OpenClaw session monitor | — |
| Token Gauge | Context window usage | — |
| Widget | Description |
|---|---|
| Stock Ticker | Live stock prices (requires API key) |
| Crypto Price | Cryptocurrency tracker |
| Widget | Description |
|---|---|
| Indoor Climate | Temperature/humidity sensors |
| Camera Feed | IP camera stream |
| Power Usage | Energy monitoring |
| Widget | Description |
|---|---|
| Image / Random Image / Web Image / Latest Image | Static, rotating, remote, or latest images (with browse button for directory selection) |
| Iframe Embed | Embed any webpage |
| Widget | Description |
|---|---|
| Auth Status | Authentication status display |
| Sleep Score | Garmin sleep score widget |
| GitHub Stats | Repository stats — stars, forks, open issues, open PRs |
| Unread Emails | Email inbox counter |
| System Log | Recent system log entries |
| Activity List | Activity timeline |
| Cron Jobs | Cron job status monitor |
| LobsterBoard Release | Version update checker |
| OpenClaw Release | OpenClaw version checker |
| Release | Generic release tracker |
| Widget | Description |
|---|---|
| Header / Text | Custom text with formatting |
| Horizontal Line | Divider |
| Vertical Line | Vertical divider |
| Pages Menu | Navigation for custom pages |
LobsterBoard includes a pages system for adding full custom pages beyond the widget dashboard. Pages get their own route, nav entry, and optional server-side API.
pages/
└── my-page/
├── page.json # Metadata (title, icon, order)
├── index.html # Page UI
└── api.cjs # Optional: server-side API routes
Pages are auto-discovered on startup. Drop a folder in pages/, restart the server, and it appears in the nav.
👉 Full guide with examples: pages/README.md
cat > ~/Library/LaunchAgents/com.lobsterboard.plist << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>com.lobsterboard</string>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/node</string>
<string>/path/to/lobsterboard/server.cjs</string>
</array>
<key>WorkingDirectory</key><string>/path/to/lobsterboard</string>
<key>EnvironmentVariables</key>
<dict>
<key>PORT</key><string>8080</string>
<key>HOST</key><string>0.0.0.0</string>
</dict>
</dict>
</plist>
EOF
launchctl load ~/Library/LaunchAgents/com.lobsterboard.plist
Update the paths to match your install location and Node.js binary (which node).
sudo cat > /etc/systemd/system/lobsterboard.service << 'EOF'
[Unit]
Description=LobsterBoard Dashboard
After=network.target
[Service]
Type=simple
User=your-user
WorkingDirectory=/path/to/lobsterboard
ExecStart=/usr/bin/node server.cjs
Environment=PORT=8080 HOST=0.0.0.0
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable lobsterboard
sudo systemctl start lobsterboard
npm install -g pm2
cd /path/to/lobsterboard
PORT=8080 HOST=0.0.0.0 pm2 start server.cjs --name lobsterboard
pm2 save
pm2 startup
| Endpoint | Method | Description |
|---|---|---|
/config |
GET/POST | Load/save dashboard layout |
/api/stats/stream |
GET | Live system stats (SSE) |
/api/pages |
GET | List custom pages |
/api/todos |
GET/POST | Todo list data |
/api/notes |
GET/POST | Notes widget data |
/api/templates |
GET | List available templates |
/api/templates/:id |
GET | Get template config |
/api/templates/:id/preview |
GET | Template preview image |
/api/templates/import |
POST | Import a template (merge/replace) |
/api/templates/export |
POST | Export current dashboard as template |
/api/calendar?url= |
GET | Proxy iCal feed |
/api/rss?url= |
GET | Proxy RSS/Atom feed |
/api/lb-release |
GET | LobsterBoard version check |
lobsterboard/
├── server.cjs # Node.js server
├── app.html # Dashboard builder
├── config.json # Your saved layout
├── js/
│ ├── builder.js # Editor: drag-drop, zoom, config I/O
│ ├── widgets.js # All 50 widget definitions
│ └── templates.js # Template gallery & export system
├── css/
│ └── builder.css # Dark theme styles
├── templates/ # Dashboard templates
│ ├── templates.json # Template index
│ └── */ # Individual template folders
├── pages/ # Custom pages (auto-discovered)
│ └── README.md # Page creation guide
└── package.json
Community contributions are welcome! Build your own widget and share it with the LobsterBoard community.
This project is licensed under the Business Source License 1.1 (BSL-1.1).
You are free to use, modify, and self-host LobsterBoard for non-commercial purposes. Commercial use requires a separate license. See LICENSE for full terms.
For commercial use, OEM licensing, or enterprise deployments, contact:
📧 curbob on GitHub — github.com/Curbob
Made with 🦞 by Curbob
$ claude mcp add LobsterBoard \
-- python -m otcore.mcp_server <graph>