lobsterboard 0.1.6 → 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,100 +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
- ## [0.1.6] - 2026-02-14
8
-
9
- ### Security
10
- - Fix SSRF vulnerability in RSS feed proxy — blocks requests to private/internal IPs (127.x, 10.x, 192.168.x, localhost) and validates redirect targets. Thanks to @verkoopjezaak for the report and PR (#1).
11
-
12
- ## [Unreleased]
13
-
14
- ### Fixed
15
- - Text-header widget "Show Border" checkbox now works — toggling it off removes the card background, border, and box-shadow from the `.placed-widget` container
16
- - 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
17
- - Add guard in `renderWidget` to skip unknown widget types gracefully
18
- - Wrap each widget render in try/catch so one bad widget can't prevent others from loading
19
-
20
- ---
21
-
22
- ## [0.1.0] - 2026-02-05
23
-
24
- ### 🎉 Initial Release
25
-
26
- The first public version of LobsterBoard - a visual dashboard builder for the OpenClaw community.
3
+ ## [0.2.0] - 2025-02-15
27
4
 
28
5
  ### Added
29
-
30
- #### Core Builder
31
- - Drag-and-drop widget placement on canvas
32
- - Grid snapping (20px) for precise alignment
33
- - Widget resize handles
34
- - Properties panel for configuring widgets
35
- - Live preview modal with inlined styles
36
- - Export to ZIP (standalone HTML/CSS/JS)
37
-
38
- #### Canvas Features
39
- - 15+ screen size presets (1080p, 4K, tablets, ultrawide, portrait)
40
- - Custom dimension support
41
- - Zoom controls (+/-, Fit, 1:1)
42
- - Keyboard shortcuts (Ctrl +/-, Ctrl+scroll)
43
-
44
- #### Widgets (40+)
45
- - **AI/LLM:** Claude Usage, GPT Usage, Gemini Usage, AI Usage (All), Cost Tracker, API Status, Active Sessions, Token Gauge
46
- - **Basics:** Local Weather, World Weather, Clock, World Clock, Countdown, Stat Card, Battery Status
47
- - **System:** CPU/Memory, Disk Usage, Network Speed, Docker, Uptime Monitor
48
- - **OpenClaw:** Auth Status, Sleep Ring, Release, Activity List, Cron Jobs, System Log
49
- - **Productivity:** Todo List, Calendar, Email Count, Pomodoro, Notes, GitHub Stats
50
- - **Finance:** Stock Ticker, Crypto Price
51
- - **Smart Home:** Indoor Climate, Camera Feed, Power Usage
52
- - **Entertainment:** Now Playing, Quote of Day
53
- - **Content:** Quick Links, RSS Feed, Image Embed, Iframe Embed
54
- - **Bars:** Top Nav Bar, News Ticker, RSS Ticker
55
-
56
- #### Branding
57
- - LobsterBoard name and mascot 🦞
58
- - Logo wordmark for header
59
- - Mascot illustration for sidebar
60
- - Favicon and Apple touch icon
61
-
62
- #### Design
63
- - Dark theme matching OpenClaw aesthetic
64
- - Consistent `dash-card` styling across all widgets
65
- - Widget headers with icons
66
- - Sample data display (no loading spinners in builder)
67
-
68
- ### Technical Notes
69
- - Weather widgets use wttr.in (free, no API key required)
70
- - API keys stored as placeholders for users to fill in post-export
71
- - AI usage widgets require backend proxy due to CORS
72
-
73
- ---
74
-
75
- ## [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
76
20
 
77
21
  ### Changed
78
- - Moved mascot from left sidebar to right (properties panel)
79
- - Mascot now pinned to bottom of panel (doesn't float up)
80
-
81
- ### Fixed
82
- - Mascot positioning with `margin-top: auto` in flexbox
83
-
84
- ---
85
-
86
- ## Upcoming
87
-
88
- ### Planned Features
89
- - GitHub Pages deployment
90
- - Import/export dashboard layouts (JSON)
91
- - Widget templates and presets
92
- - More customization options
93
- - 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
94
26
 
95
- ---
27
+ ### Removed
28
+ - GPT Usage widget (standalone) — use AI Cost Tracker or Claude Usage instead
96
29
 
97
- ## Links
30
+ ## [0.1.6] - 2025-02-14
98
31
 
99
- - **GitHub:** https://github.com/curbob/LobsterBoard
100
- - **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 45 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,156 +25,126 @@ 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 (45)
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 (today/week/month) |
92
- | 💰 AI Cost Tracker | Total AI spending across providers |
93
-
94
- ### 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 |
95
85
 
86
+ ### 📰 Media & Content
96
87
  | Widget | Description |
97
88
  |--------|-------------|
98
- | 🕐 Clock | Digital clock (12h/24h) |
99
- | 🌍 World Clock | Multiple time zones side by side |
100
- | Countdown | Days (and optionally hours/minutes) to a target date |
101
- | 🎯 Pomodoro Timer | Focus timer with work/break intervals and audio alerts |
102
- | Todo List | Persistent task list with checkboxes (saved to `todos.json`) |
103
- | 📅 Calendar | Upcoming events from any iCal (.ics) feed URL |
104
- | 📝 Notes | Editable text area on the dashboard |
105
-
106
- ### 🌤️ 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 |
107
94
 
95
+ ### 🤖 AI / LLM Monitoring
108
96
  | Widget | Description |
109
97
  |--------|-------------|
110
- | 🌡️ Local Weather | Current conditions via wttr.in (no API key needed) |
111
- | 🌍 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 |
112
103
 
113
104
  ### 💰 Finance
114
-
115
105
  | Widget | Description |
116
106
  |--------|-------------|
117
- | 📈 Stock Ticker | Stock prices (requires Finnhub API key) |
118
- | Crypto Price | Cryptocurrency prices from CoinGecko (free) |
107
+ | Stock Ticker | Live stock prices (requires API key) |
108
+ | Crypto Price | Cryptocurrency tracker |
119
109
 
120
110
  ### 🏠 Smart Home
121
-
122
111
  | Widget | Description |
123
112
  |--------|-------------|
124
- | 🏠 Indoor Climate | Temperature/humidity from sensor API |
125
- | 📷 Camera Feed | Live MJPEG camera stream |
126
- | 🔌 Power Usage | Real-time power consumption |
127
-
128
- ### 📰 Media & Content
129
-
130
- | Widget | Description |
131
- |--------|-------------|
132
- | 📰 RSS Ticker | Headlines from any RSS/Atom feed (server-side proxy) |
133
- | 🎵 Now Playing | Currently playing track from Spotify/music API |
134
- | 💭 Quote of Day | Random inspirational quotes |
135
- | 📧 Unread Emails | Email count from API endpoint |
113
+ | Indoor Climate | Temperature/humidity sensors |
114
+ | Camera Feed | IP camera stream |
115
+ | Power Usage | Energy monitoring |
136
116
 
137
117
  ### 🔗 Embeds & Media
138
-
139
118
  | Widget | Description |
140
119
  |--------|-------------|
141
- | 🖼️ Image | Local/embedded image (base64 for portability) |
142
- | 🎲 Random Image | Rotates through multiple images on a timer |
143
- | 🌐 Image Embed | Display an image from a URL |
144
- | 🔗 Quick Links | Bookmark grid with favicons |
145
- | 📺 Iframe Embed | Embed any web page |
146
-
147
- ### 📦 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 |
148
122
 
123
+ ### 🔧 Utility
149
124
  | Widget | Description |
150
125
  |--------|-------------|
151
- | 📦 Release Tracker | Compare local version to latest GitHub release for any repo |
152
- | 🔄 API Status | Health check indicators for multiple endpoints |
153
- | 🐙 GitHub Stats | Public repo/follower/star counts for any user |
154
- | 😴 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 |
155
136
 
156
137
  ### 🎨 Layout
157
-
158
138
  | Widget | Description |
159
139
  |--------|-------------|
160
- | 🔤 Header / Text | Custom text with configurable font size, color, weight, and alignment |
161
- | Horizontal Line | Divider line (adjustable color and thickness) |
162
- | Vertical Line | Vertical divider |
163
-
164
- ## Configuration
165
-
166
- Widget properties are edited in the right-hand panel when a widget is selected in edit mode. Common options:
167
-
168
- - **Title** — display name and header visibility toggle
169
- - **Refresh Interval** — how often the widget polls for data (seconds)
170
- - **Endpoint** — API URL for data-driven widgets
171
- - **Location** — city name for weather widgets
172
- - **iCal URL** — feed URL for the calendar widget (Google Calendar, Outlook, Apple Calendar all supported)
173
- - **Feed URL** — RSS/Atom feed for the ticker widget
174
-
175
- All configuration is saved to `config.json` in the project root.
140
+ | Header / Text | Custom text with formatting |
141
+ | Horizontal Line | Divider |
142
+ | Vertical Line | Vertical divider |
143
+ | Pages Menu | Navigation for custom pages |
176
144
 
177
145
  ## Custom Pages
178
146
 
179
- LobsterBoard includes a **pages system** that lets you add full custom pages beyond the widget dashboard. Pages get their own route, nav entry, and optional server-side API — no changes to the core needed.
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.
180
148
 
181
149
  ```
182
150
  pages/
@@ -190,63 +158,125 @@ Pages are auto-discovered on startup. Drop a folder in `pages/`, restart the ser
190
158
 
191
159
  👉 **Full guide with examples:** [`pages/README.md`](pages/README.md)
192
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`).
193
+
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
+ ```
218
+
219
+ ### pm2 (any OS)
220
+
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
+ ```
228
+
193
229
  ## API Endpoints
194
230
 
195
231
  | Endpoint | Method | Description |
196
232
  |----------|--------|-------------|
197
233
  | `/config` | GET/POST | Load/save dashboard layout |
198
- | `/api/stats` | GET | Current system stats (JSON snapshot) |
199
- | `/api/stats/stream` | GET | Live system stats (SSE, max 10 connections) |
200
- | `/api/todos` | GET/POST | Read/write todo list |
201
- | `/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 |
202
244
  | `/api/rss?url=` | GET | Proxy RSS/Atom feed |
203
- | `/api/cron` | GET | OpenClaw cron job status |
204
- | `/api/logs` | GET | Last 50 gateway log lines |
205
- | `/api/system-log` | GET | Structured log entries with levels |
206
- | `/api/auth` | GET | OpenClaw auth profile info |
207
- | `/api/releases` | GET | OpenClaw version check (cached 1hr) |
208
- | `/api/today` | GET | Today's activity summary |
209
- | `/api/activity` | GET | Recent entries from memory file |
245
+ | `/api/lb-release` | GET | LobsterBoard version check |
210
246
 
211
247
  ## File Structure
212
248
 
213
249
  ```
214
250
  lobsterboard/
215
- ├── server.cjs # Node.js server (CommonJS)
216
- ├── index.html # Marketing site
217
- ├── app.html # Dashboard builder app
218
- ├── config.json # Saved dashboard layout
219
- ├── todos.json # Todo list data
251
+ ├── server.cjs # Node.js server
252
+ ├── app.html # Dashboard builder
253
+ ├── config.json # Your saved layout
220
254
  ├── js/
221
- │ ├── builder.js # Canvas, drag-drop, edit mode, zoom, config I/O
222
- └── widgets.js # All 45 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
223
258
  ├── css/
224
- │ └── builder.css # Dark theme (CSS custom properties)
259
+ │ └── builder.css # Dark theme styles
260
+ ├── templates/ # Dashboard templates
261
+ │ ├── templates.json # Template index
262
+ │ └── */ # Individual template folders
225
263
  ├── pages/ # Custom pages (auto-discovered)
226
- │ ├── _shared/ # Shared components (nav bar)
227
264
  │ └── README.md # Page creation guide
228
- └── package.json # npm package config
265
+ └── package.json
229
266
  ```
230
267
 
231
- ## npm Package
232
-
233
- LobsterBoard is published as `lobsterboard` on npm. The package exports:
268
+ ## License
234
269
 
235
- ```js
236
- // ESM
237
- import { WIDGETS } from 'lobsterboard/widgets';
238
- import { state } from 'lobsterboard/builder';
270
+ This project is licensed under the **Business Source License 1.1 (BSL-1.1)**.
239
271
 
240
- // UMD (browser)
241
- <script src="https://unpkg.com/lobsterboard"></script>
242
- ```
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.
243
273
 
244
- Requires Node.js ≥ 16.
274
+ ## Commercial Licensing
245
275
 
246
- ## License
276
+ For commercial use, OEM licensing, or enterprise deployments, contact:
247
277
 
248
- MIT
278
+ 📧 **curbob** on GitHub — [github.com/Curbob](https://github.com/Curbob)
249
279
 
250
280
  ---
251
281
 
252
- Made with 🦞 by [curbob](https://github.com/curbob)
282
+ Made with 🦞 by [Curbob](https://github.com/Curbob)