lobsterboard 0.1.4 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,95 +1,34 @@
1
- # LobsterBoard Changelog
1
+ # Changelog
2
2
 
3
- All notable changes to LobsterBoard will be documented in this file.
4
-
5
- ---
6
-
7
- ## [Unreleased]
8
-
9
- ### Fixed
10
- - Text-header widget "Show Border" checkbox now works — toggling it off removes the card background, border, and box-shadow from the `.placed-widget` container
11
- - Fix text-header, horizontal-line, and vertical-line widgets disappearing after save/reload — unknown widget types (e.g. removed `topbar`) crashed `renderWidget`, stopping all subsequent widgets from loading
12
- - Add guard in `renderWidget` to skip unknown widget types gracefully
13
- - Wrap each widget render in try/catch so one bad widget can't prevent others from loading
14
-
15
- ---
16
-
17
- ## [0.1.0] - 2026-02-05
18
-
19
- ### 🎉 Initial Release
20
-
21
- The first public version of LobsterBoard - a visual dashboard builder for the OpenClaw community.
3
+ ## [0.2.0] - 2025-02-15
22
4
 
23
5
  ### Added
24
-
25
- #### Core Builder
26
- - Drag-and-drop widget placement on canvas
27
- - Grid snapping (20px) for precise alignment
28
- - Widget resize handles
29
- - Properties panel for configuring widgets
30
- - Live preview modal with inlined styles
31
- - Export to ZIP (standalone HTML/CSS/JS)
32
-
33
- #### Canvas Features
34
- - 15+ screen size presets (1080p, 4K, tablets, ultrawide, portrait)
35
- - Custom dimension support
36
- - Zoom controls (+/-, Fit, 1:1)
37
- - Keyboard shortcuts (Ctrl +/-, Ctrl+scroll)
38
-
39
- #### Widgets (40+)
40
- - **AI/LLM:** Claude Usage, GPT Usage, Gemini Usage, AI Usage (All), Cost Tracker, API Status, Active Sessions, Token Gauge
41
- - **Basics:** Local Weather, World Weather, Clock, World Clock, Countdown, Stat Card, Battery Status
42
- - **System:** CPU/Memory, Disk Usage, Network Speed, Docker, Uptime Monitor
43
- - **OpenClaw:** Auth Status, Sleep Ring, Release, Activity List, Cron Jobs, System Log
44
- - **Productivity:** Todo List, Calendar, Email Count, Pomodoro, Notes, GitHub Stats
45
- - **Finance:** Stock Ticker, Crypto Price
46
- - **Smart Home:** Indoor Climate, Camera Feed, Power Usage
47
- - **Entertainment:** Now Playing, Quote of Day
48
- - **Content:** Quick Links, RSS Feed, Image Embed, Iframe Embed
49
- - **Bars:** Top Nav Bar, News Ticker, RSS Ticker
50
-
51
- #### Branding
52
- - LobsterBoard name and mascot 🦞
53
- - Logo wordmark for header
54
- - Mascot illustration for sidebar
55
- - Favicon and Apple touch icon
56
-
57
- #### Design
58
- - Dark theme matching OpenClaw aesthetic
59
- - Consistent `dash-card` styling across all widgets
60
- - Widget headers with icons
61
- - Sample data display (no loading spinners in builder)
62
-
63
- ### Technical Notes
64
- - Weather widgets use wttr.in (free, no API key required)
65
- - API keys stored as placeholders for users to fill in post-export
66
- - AI usage widgets require backend proxy due to CORS
67
-
68
- ---
69
-
70
- ## [0.1.1] - 2026-02-06
6
+ - **Template Gallery** — export, import, and share dashboard layouts with auto-screenshot previews
7
+ - `js/templates.js` — new template gallery UI and export system
8
+ - Templates API: list, get, preview, import (merge/replace), export, delete
9
+ - `templates/` directory with bundled starter templates
10
+ - Template modal with search, preview lightbox, and import options
11
+ - **Notes widget** persistent rich-text notes with auto-save via `/api/notes`
12
+ - **Browse button** for directory selection in image widgets (Image, Random Image, Latest Image)
13
+ - **GitHub Stats widget rework** — profile contributions, stars, and activity with property bindings
14
+ - **LobsterBoard Release widget** — version update checker via `/api/lb-release`
15
+ - **SSE streaming** for system stats (`/api/stats/stream`)
16
+ - **Browse directories API** (`/api/browse-dirs`) for server-side directory picker
17
+ - Sidebar reorder, verified checkmarks, delete button, tooltips in editor
18
+ - html2canvas-based dashboard screenshot export
19
+ - Scrollable canvas mode
71
20
 
72
21
  ### Changed
73
- - Moved mascot from left sidebar to right (properties panel)
74
- - Mascot now pinned to bottom of panel (doesn't float up)
75
-
76
- ### Fixed
77
- - Mascot positioning with `margin-top: auto` in flexbox
78
-
79
- ---
80
-
81
- ## Upcoming
82
-
83
- ### Planned Features
84
- - GitHub Pages deployment
85
- - Import/export dashboard layouts (JSON)
86
- - Widget templates and presets
87
- - More customization options
88
- - Community widget contributions
22
+ - Stock Ticker widget fixed `hasApiKey` check
23
+ - Builder contenteditable keyboard fix, null-checks throughout
24
+ - License changed from MIT to BSL-1.1
25
+ - Widget count: 47 → 50
89
26
 
90
- ---
27
+ ### Removed
28
+ - GPT Usage widget (standalone) — use AI Cost Tracker or Claude Usage instead
91
29
 
92
- ## Links
30
+ ## [0.1.6] - 2025-02-14
93
31
 
94
- - **GitHub:** https://github.com/curbob/LobsterBoard
95
- - **Issues:** https://github.com/curbob/LobsterBoard/issues
32
+ - Initial public npm release
33
+ - 47 widgets, drag-and-drop editor, custom pages system
34
+ - SSRF protection for proxy endpoints
package/LICENSE CHANGED
@@ -1,21 +1,38 @@
1
- MIT License
2
-
3
- Copyright (c) 2025 curbob
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ # Business Source License 1.1
2
+
3
+ **Licensor:** Rich Curry (Curbob)
4
+
5
+ **Licensed Work:** LobsterBoard
6
+ The Licensed Work is (c) 2025-2026 Rich Curry.
7
+
8
+ **Additional Use Grant:** You may use the Licensed Work for any non-commercial purpose, including personal use, educational use, internal company use (not offered as a commercial product or service), and contributions back to the project.
9
+
10
+ **Change Date:** February 15, 2030
11
+
12
+ **Change License:** MIT License
13
+
14
+ ---
15
+
16
+ ## Terms
17
+
18
+ The Licensor hereby grants you the right to copy, modify, create derivative works, redistribute, and make non-commercial use of the Licensed Work.
19
+
20
+ **Commercial Use** means any use of the Licensed Work that is primarily intended for or directed toward commercial advantage or monetary compensation. This includes, but is not limited to:
21
+
22
+ - Selling the Licensed Work or derivative works
23
+ - Offering the Licensed Work as part of a paid product or service
24
+ - Using the Licensed Work to provide a commercial hosted service
25
+
26
+ If you wish to use the Licensed Work commercially, you must obtain a separate commercial license from the Licensor. Contact: **curbob@gmail.com**
27
+
28
+ Effective on the Change Date, or the fourth anniversary of the first publicly available distribution of a specific version of the Licensed Work under this License, whichever comes first, the Licensor hereby grants you rights under the terms of the Change License, and the rights granted under the Business Source License for that version terminate.
29
+
30
+ If your use of the Licensed Work does not comply with the requirements currently in effect as described in this License, you must purchase a commercial license from the Licensor, its affiliated entities, or authorized resellers, or you must refrain from using the Licensed Work.
31
+
32
+ All copies of the original and modified Licensed Work, and derivative works of the Licensed Work, are subject to this License. This License applies separately for each version of the Licensed Work.
33
+
34
+ **NOTICE:** This License does not grant you any right in any trademark or logo of the Licensor or its affiliates.
35
+
36
+ ---
37
+
38
+ THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md CHANGED
@@ -1,25 +1,23 @@
1
1
  # 🦞 LobsterBoard
2
2
 
3
- A self-hosted, drag-and-drop dashboard builder with live system monitoring, dark theme, and 47 widgets. No cloud dependencies.
3
+ A self-hosted, drag-and-drop dashboard builder with 50 widgets, a template gallery, custom pages, and zero cloud dependencies. One Node.js server, no frameworks, no build step needed.
4
4
 
5
- ![LobsterBoard](lobsterboard-logo-final.png)
5
+ **Works standalone or with [OpenClaw](https://github.com/openclaw/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.
6
6
 
7
- ![LobsterBoard Dashboard Example](screenshot.jpg)
7
+ ![LobsterBoard](lobsterboard-logo-final.png)
8
8
 
9
9
  ## Quick Start
10
10
 
11
- ### Option A: npm install
12
-
13
11
  ```bash
14
12
  npm install lobsterboard
15
13
  cd node_modules/lobsterboard
16
14
  node server.cjs
17
15
  ```
18
16
 
19
- ### Option B: Clone & Run
17
+ Or clone it:
20
18
 
21
19
  ```bash
22
- git clone https://github.com/curbob/LobsterBoard.git
20
+ git clone https://github.com/Curbob/LobsterBoard.git
23
21
  cd LobsterBoard
24
22
  npm install
25
23
  node server.cjs
@@ -27,209 +25,258 @@ node server.cjs
27
25
 
28
26
  Open **http://localhost:8080** → press **Ctrl+E** to enter edit mode → drag widgets from the sidebar → click **💾 Save**.
29
27
 
30
- ## How It Works
31
-
32
- LobsterBoard runs as a single Node.js server (`server.cjs`) that:
28
+ ## Features
33
29
 
34
- - **Serves the dashboard** — a vanilla JS single-page app (no build step, no frameworks)
35
- - **Saves/loads config** — `GET/POST /config` persists your layout to `config.json`
36
- - **Streams live system stats** — CPU, memory, disk, network, and Docker container data via Server-Sent Events (`/api/stats/stream`) using [systeminformation](https://github.com/nicholasricci/systeminformation)
37
- - **Proxies external feeds** — iCal calendars (`/api/calendar`), RSS feeds (`/api/rss`) fetched server-side to avoid CORS issues
38
- - **Provides API endpoints** — todos, cron jobs, system logs, auth status, release checks, and today's activity summary
30
+ - **Drag-and-drop editor** — visual layout with 20px snap grid, resize handles, property panel
31
+ - **50 widgets** — system monitoring, weather, calendars, RSS, smart home, finance, AI/LLM tracking, notes, and more
32
+ - **Template Gallery** — export, import, and share dashboard layouts with auto-screenshot previews; import as merge or full replace
33
+ - **Custom pages** — extend your dashboard with full custom pages (notes, kanban boards, anything)
34
+ - **Canvas sizes** — preset resolutions (1920×1080, 2560×1440, etc.) or custom sizes
35
+ - **Live data** — system stats stream via Server-Sent Events, widgets auto-refresh
36
+ - **Dark theme** — the only correct choice
37
+ - **No cloud** — everything runs locally, your data stays yours
39
38
 
40
- The server binds to `127.0.0.1:8080` by default. Configure with environment variables:
39
+ ## Configuration
41
40
 
42
41
  ```bash
43
42
  PORT=3000 node server.cjs # Custom port
44
- HOST=0.0.0.0 node server.cjs # Expose to network (trusted networks only!)
43
+ HOST=0.0.0.0 node server.cjs # Expose to network
45
44
  ```
46
45
 
47
- ## Edit Mode
46
+ Widget settings are edited in the right-hand panel during edit mode. All configuration saves to `config.json`.
48
47
 
49
- Press **Ctrl+E** (or click **Edit Layout**) to toggle edit mode:
48
+ ## Template Gallery
50
49
 
51
- - **Drag widgets** from the sidebar onto the canvas
52
- - **Click a widget** to select it and edit properties in the right panel
53
- - **Drag to reposition**, resize with the corner handle
54
- - **20px snap grid** keeps things aligned
55
- - **Canvas sizes** — 1920×1080, 2560×1440, or custom
56
- - **Font scale** — adjust text size globally across all widgets
57
- - Click **💾 Save** to persist, then exit edit mode for the live dashboard
50
+ LobsterBoard includes a built-in template system for sharing and reusing dashboard layouts.
58
51
 
59
- In view mode, the canvas auto-scales to fit your browser window and all widget scripts run live.
52
+ - **Export** your current dashboard as a template (auto-captures a screenshot preview)
53
+ - **Browse** the template gallery to discover pre-built layouts
54
+ - **Import** templates in two modes:
55
+ - **Replace** — swap your entire dashboard for the template
56
+ - **Merge** — append the template's widgets below your existing layout
57
+ - Templates are stored in the `templates/` directory and can be shared as folders
60
58
 
61
- ## Widgets (47)
59
+ ## Widgets
62
60
 
63
61
  ### 🖥️ System Monitoring
64
- Live data via SSE — updates every 2–30 seconds automatically.
65
-
66
62
  | Widget | Description |
67
63
  |--------|-------------|
68
- | 💻 CPU / Memory | Real-time CPU load and memory usage |
69
- | 💾 Disk Usage | Disk space with ring gauge (configurable mount point) |
70
- | 🌐 Network Speed | Upload/download throughput |
71
- | 📡 Uptime Monitor | System uptime, CPU load, and memory summary |
72
- | 🐳 Docker Containers | Container list with running/stopped status |
73
-
74
- ### 🦞 OpenClaw Integration
75
- For users running [OpenClaw](https://github.com/openclaw/openclaw).
64
+ | CPU / Memory | Real-time CPU load and memory usage |
65
+ | Disk Usage | Disk space with ring gauge |
66
+ | Network Speed | Upload/download throughput |
67
+ | Uptime Monitor | System uptime, CPU load, memory summary |
68
+ | Docker Containers | Container list with status |
76
69
 
70
+ ### 🌤️ Weather
77
71
  | Widget | Description |
78
72
  |--------|-------------|
79
- | 🔐 Auth Status | Anthropic Max subscription vs. API key indicator |
80
- | 🦞 OpenClaw Release | Auto-detects installed version, compares to latest GitHub release |
81
- | 📋 Activity List | Today's activity from memory files, git commits, and cron runs |
82
- | ⏰ Cron Jobs | Scheduled jobs with status and last-run times |
83
- | 🔧 System Log | Parsed gateway log with level/category color coding |
84
- | 💬 Active Sessions | Count of active OpenClaw sessions |
85
- | 📊 Token Gauge | Visual gauge of token usage against a limit |
86
-
87
- ### 🤖 AI / LLM Monitoring
73
+ | Local Weather | Current conditions for your city |
74
+ | World Weather | Multi-city weather overview |
88
75
 
76
+ ### ⏰ Time & Productivity
89
77
  | Widget | Description |
90
78
  |--------|-------------|
91
- | 🟣 Claude Usage | Anthropic API token/cost tracking |
92
- | 🟢 GPT Usage | OpenAI API token/cost tracking |
93
- | 🔵 Gemini Usage | Google API token/cost tracking |
94
- | 🤖 AI Usage (All) | Combined multi-provider view |
95
- | 💰 AI Cost Tracker | Total AI spending across providers |
96
-
97
- ### ⏰ Time & Productivity
79
+ | Clock | Analog/digital clock |
80
+ | World Clock | Multiple time zones |
81
+ | Countdown | Timer to a target date |
82
+ | Todo List | Persistent task list |
83
+ | Pomodoro Timer | Work/break timer |
84
+ | Notes | Persistent rich-text notes with auto-save |
98
85
 
86
+ ### 📰 Media & Content
99
87
  | Widget | Description |
100
88
  |--------|-------------|
101
- | 🕐 Clock | Digital clock (12h/24h) |
102
- | 🌍 World Clock | Multiple time zones side by side |
103
- | Countdown | Days (and optionally hours/minutes) to a target date |
104
- | 🎯 Pomodoro Timer | Focus timer with work/break intervals and audio alerts |
105
- | Todo List | Persistent task list with checkboxes (saved to `todos.json`) |
106
- | 📅 Calendar | Upcoming events from any iCal (.ics) feed URL |
107
- | 📝 Notes | Editable text area on the dashboard |
108
-
109
- ### 🌤️ Weather
89
+ | RSS Ticker | Scrolling feed from any RSS/Atom URL |
90
+ | Calendar | iCal feed display (Google, Apple, Outlook) |
91
+ | Now Playing | Currently playing media |
92
+ | Quote of Day | Random inspirational quotes |
93
+ | Quick Links | Bookmark grid |
110
94
 
95
+ ### 🤖 AI / LLM Monitoring
111
96
  | Widget | Description |
112
97
  |--------|-------------|
113
- | 🌡️ Local Weather | Current conditions via wttr.in (no API key needed) |
114
- | 🌍 World Weather | Multiple cities side by side |
98
+ | Claude Usage | Anthropic API spend tracking |
99
+ | AI Cost Tracker | Monthly cost breakdown |
100
+ | API Status | Provider availability |
101
+ | Active Sessions | OpenClaw session monitor |
102
+ | Token Gauge | Context window usage |
115
103
 
116
104
  ### 💰 Finance
117
-
118
105
  | Widget | Description |
119
106
  |--------|-------------|
120
- | 📈 Stock Ticker | Stock prices (requires Finnhub API key) |
121
- | Crypto Price | Cryptocurrency prices from CoinGecko (free) |
107
+ | Stock Ticker | Live stock prices (requires API key) |
108
+ | Crypto Price | Cryptocurrency tracker |
122
109
 
123
110
  ### 🏠 Smart Home
124
-
125
111
  | Widget | Description |
126
112
  |--------|-------------|
127
- | 🏠 Indoor Climate | Temperature/humidity from sensor API |
128
- | 📷 Camera Feed | Live MJPEG camera stream |
129
- | 🔌 Power Usage | Real-time power consumption |
130
-
131
- ### 📰 Media & Content
132
-
133
- | Widget | Description |
134
- |--------|-------------|
135
- | 📰 RSS Ticker | Headlines from any RSS/Atom feed (server-side proxy) |
136
- | 🎵 Now Playing | Currently playing track from Spotify/music API |
137
- | 💭 Quote of Day | Random inspirational quotes |
138
- | 📧 Unread Emails | Email count from API endpoint |
113
+ | Indoor Climate | Temperature/humidity sensors |
114
+ | Camera Feed | IP camera stream |
115
+ | Power Usage | Energy monitoring |
139
116
 
140
117
  ### 🔗 Embeds & Media
141
-
142
118
  | Widget | Description |
143
119
  |--------|-------------|
144
- | 🖼️ Image | Local/embedded image (base64 for portability) |
145
- | 🎲 Random Image | Rotates through multiple images on a timer |
146
- | 🌐 Image Embed | Display an image from a URL |
147
- | 🔗 Quick Links | Bookmark grid with favicons |
148
- | 📺 Iframe Embed | Embed any web page |
149
-
150
- ### 📦 Utilities
120
+ | Image / Random Image / Web Image / Latest Image | Static, rotating, remote, or latest images (with browse button for directory selection) |
121
+ | Iframe Embed | Embed any webpage |
151
122
 
123
+ ### 🔧 Utility
152
124
  | Widget | Description |
153
125
  |--------|-------------|
154
- | 📦 Release Tracker | Compare local version to latest GitHub release for any repo |
155
- | 🔄 API Status | Health check indicators for multiple endpoints |
156
- | 🐙 GitHub Stats | Public repo/follower/star counts for any user |
157
- | 😴 Sleep Score | Sleep data ring gauge (health API integration) |
126
+ | Auth Status | Authentication status display |
127
+ | Sleep Score | Garmin sleep score widget |
128
+ | GitHub Stats | Repository stats stars, forks, open issues, open PRs |
129
+ | Unread Emails | Email inbox counter |
130
+ | System Log | Recent system log entries |
131
+ | Activity List | Activity timeline |
132
+ | Cron Jobs | Cron job status monitor |
133
+ | LobsterBoard Release | Version update checker |
134
+ | OpenClaw Release | OpenClaw version checker |
135
+ | Release | Generic release tracker |
158
136
 
159
137
  ### 🎨 Layout
160
-
161
138
  | Widget | Description |
162
139
  |--------|-------------|
163
- | 🔤 Header / Text | Custom text with configurable font size, color, weight, and alignment |
164
- | Horizontal Line | Divider line (adjustable color and thickness) |
165
- | Vertical Line | Vertical divider |
140
+ | Header / Text | Custom text with formatting |
141
+ | Horizontal Line | Divider |
142
+ | Vertical Line | Vertical divider |
143
+ | Pages Menu | Navigation for custom pages |
166
144
 
167
- ## Configuration
145
+ ## Custom Pages
146
+
147
+ 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.
148
+
149
+ ```
150
+ pages/
151
+ └── my-page/
152
+ ├── page.json # Metadata (title, icon, order)
153
+ ├── index.html # Page UI
154
+ └── api.cjs # Optional: server-side API routes
155
+ ```
156
+
157
+ Pages are auto-discovered on startup. Drop a folder in `pages/`, restart the server, and it appears in the nav.
158
+
159
+ 👉 **Full guide with examples:** [`pages/README.md`](pages/README.md)
160
+
161
+ ## Run on Boot
162
+
163
+ ### macOS (launchd)
164
+
165
+ ```bash
166
+ cat > ~/Library/LaunchAgents/com.lobsterboard.plist << 'EOF'
167
+ <?xml version="1.0" encoding="UTF-8"?>
168
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
169
+ <plist version="1.0">
170
+ <dict>
171
+ <key>Label</key><string>com.lobsterboard</string>
172
+ <key>RunAtLoad</key><true/>
173
+ <key>KeepAlive</key><true/>
174
+ <key>ProgramArguments</key>
175
+ <array>
176
+ <string>/usr/local/bin/node</string>
177
+ <string>/path/to/lobsterboard/server.cjs</string>
178
+ </array>
179
+ <key>WorkingDirectory</key><string>/path/to/lobsterboard</string>
180
+ <key>EnvironmentVariables</key>
181
+ <dict>
182
+ <key>PORT</key><string>8080</string>
183
+ <key>HOST</key><string>0.0.0.0</string>
184
+ </dict>
185
+ </dict>
186
+ </plist>
187
+ EOF
188
+
189
+ launchctl load ~/Library/LaunchAgents/com.lobsterboard.plist
190
+ ```
191
+
192
+ Update the paths to match your install location and Node.js binary (`which node`).
168
193
 
169
- Widget properties are edited in the right-hand panel when a widget is selected in edit mode. Common options:
194
+ ### Linux (systemd)
195
+
196
+ ```bash
197
+ sudo cat > /etc/systemd/system/lobsterboard.service << 'EOF'
198
+ [Unit]
199
+ Description=LobsterBoard Dashboard
200
+ After=network.target
201
+
202
+ [Service]
203
+ Type=simple
204
+ User=your-user
205
+ WorkingDirectory=/path/to/lobsterboard
206
+ ExecStart=/usr/bin/node server.cjs
207
+ Environment=PORT=8080 HOST=0.0.0.0
208
+ Restart=always
209
+ RestartSec=5
210
+
211
+ [Install]
212
+ WantedBy=multi-user.target
213
+ EOF
214
+
215
+ sudo systemctl enable lobsterboard
216
+ sudo systemctl start lobsterboard
217
+ ```
170
218
 
171
- - **Title** display name and header visibility toggle
172
- - **Refresh Interval** — how often the widget polls for data (seconds)
173
- - **Endpoint** — API URL for data-driven widgets
174
- - **Location** — city name for weather widgets
175
- - **iCal URL** — feed URL for the calendar widget (Google Calendar, Outlook, Apple Calendar all supported)
176
- - **Feed URL** — RSS/Atom feed for the ticker widget
219
+ ### pm2 (any OS)
177
220
 
178
- All configuration is saved to `config.json` in the project root.
221
+ ```bash
222
+ npm install -g pm2
223
+ cd /path/to/lobsterboard
224
+ PORT=8080 HOST=0.0.0.0 pm2 start server.cjs --name lobsterboard
225
+ pm2 save
226
+ pm2 startup
227
+ ```
179
228
 
180
229
  ## API Endpoints
181
230
 
182
231
  | Endpoint | Method | Description |
183
232
  |----------|--------|-------------|
184
233
  | `/config` | GET/POST | Load/save dashboard layout |
185
- | `/api/stats` | GET | Current system stats (JSON snapshot) |
186
- | `/api/stats/stream` | GET | Live system stats (SSE, max 10 connections) |
187
- | `/api/todos` | GET/POST | Read/write todo list |
188
- | `/api/calendar?url=&max=` | GET | Proxy + parse iCal feed |
234
+ | `/api/stats/stream` | GET | Live system stats (SSE) |
235
+ | `/api/pages` | GET | List custom pages |
236
+ | `/api/todos` | GET/POST | Todo list data |
237
+ | `/api/notes` | GET/POST | Notes widget data |
238
+ | `/api/templates` | GET | List available templates |
239
+ | `/api/templates/:id` | GET | Get template config |
240
+ | `/api/templates/:id/preview` | GET | Template preview image |
241
+ | `/api/templates/import` | POST | Import a template (merge/replace) |
242
+ | `/api/templates/export` | POST | Export current dashboard as template |
243
+ | `/api/calendar?url=` | GET | Proxy iCal feed |
189
244
  | `/api/rss?url=` | GET | Proxy RSS/Atom feed |
190
- | `/api/cron` | GET | OpenClaw cron job status |
191
- | `/api/logs` | GET | Last 50 gateway log lines |
192
- | `/api/system-log` | GET | Structured log entries with levels |
193
- | `/api/auth` | GET | OpenClaw auth profile info |
194
- | `/api/releases` | GET | OpenClaw version check (cached 1hr) |
195
- | `/api/today` | GET | Today's activity summary |
196
- | `/api/activity` | GET | Recent entries from memory file |
245
+ | `/api/lb-release` | GET | LobsterBoard version check |
197
246
 
198
247
  ## File Structure
199
248
 
200
249
  ```
201
- dashboard-builder/
202
- ├── server.cjs # Node.js server (CommonJS)
203
- ├── index.html # Single-page app
204
- ├── config.json # Saved dashboard layout
205
- ├── todos.json # Todo list data
250
+ lobsterboard/
251
+ ├── server.cjs # Node.js server
252
+ ├── app.html # Dashboard builder
253
+ ├── config.json # Your saved layout
206
254
  ├── js/
207
- │ ├── builder.js # Canvas, drag-drop, edit mode, zoom, config I/O
208
- └── widgets.js # All 47 widget definitions + SSE helpers
255
+ │ ├── builder.js # Editor: drag-drop, zoom, config I/O
256
+ ├── widgets.js # All 50 widget definitions
257
+ │ └── templates.js # Template gallery & export system
209
258
  ├── css/
210
- │ └── builder.css # Dark theme (CSS custom properties)
211
- └── package.json # npm package config
259
+ │ └── builder.css # Dark theme styles
260
+ ├── templates/ # Dashboard templates
261
+ │ ├── templates.json # Template index
262
+ │ └── */ # Individual template folders
263
+ ├── pages/ # Custom pages (auto-discovered)
264
+ │ └── README.md # Page creation guide
265
+ └── package.json
212
266
  ```
213
267
 
214
- ## npm Package
215
-
216
- LobsterBoard is published as `lobsterboard` on npm. The package exports:
268
+ ## License
217
269
 
218
- ```js
219
- // ESM
220
- import { WIDGETS } from 'lobsterboard/widgets';
221
- import { state } from 'lobsterboard/builder';
270
+ This project is licensed under the **Business Source License 1.1 (BSL-1.1)**.
222
271
 
223
- // UMD (browser)
224
- <script src="https://unpkg.com/lobsterboard"></script>
225
- ```
272
+ You are free to use, modify, and self-host LobsterBoard for **non-commercial purposes**. Commercial use requires a separate license. See [LICENSE](LICENSE) for full terms.
226
273
 
227
- Requires Node.js ≥ 16.
274
+ ## Commercial Licensing
228
275
 
229
- ## License
276
+ For commercial use, OEM licensing, or enterprise deployments, contact:
230
277
 
231
- MIT
278
+ 📧 **curbob** on GitHub — [github.com/Curbob](https://github.com/Curbob)
232
279
 
233
280
  ---
234
281
 
235
- Made with 🦞 by [curbob](https://github.com/curbob)
282
+ Made with 🦞 by [Curbob](https://github.com/Curbob)