Master Control Center is a modular, local-first dashboard for homelab, productivity and app-launching workflows. It provides:
Multi-page/tabbed layout
Grouped tiles for links, programs and widgets
Live data widgets (weather, RSS, uptime, iframe, COVID)
Visual customization (themes, fonts, glow accent)
Local persistence with backup and restore
Optional native and custom protocol launching
Layer
Purpose
UI (HTML/CSS/ES Modules)
Renders pages, groups, modals and settings
State Manager
Loads, migrates and persists data to extension storage
Renderers
Pages bar and groups/widgets orchestration
Widgets Engine
Weather, RSS, UptimeRobot, IFrame, COVID
Settings Panel
Theme, font, glow, cache, backup, APIs
Actions & Events
Export/import/reset and delegated interactions
Native Bridge (MV3)
Optional messaging for local program launch
Windows Helpers
Protocol registration and batch launchers
Feature
Description
Layout & Interaction
Multi-page tabs, per-page groups, drag and drop ordering, edit mode toggle.
Customization
Themes (system/light/dark/crimson), searchable font catalog, glow effect with safety controls.
Link & Program Management
Icon modes (favicon/logo.dev/URL/upload), domain guessing, and native/program launch support.
Widgets
Weather (Open-Meteo), RSS (proxy fallback + highlighting), UptimeRobot, sandboxed IFrame, COVID stats.
Data & Persistence
Local storage, timestamped export, migration-safe IDs.
Performance
Lazy icon loading, unified cache pool, idle scheduling, lean service worker.
Reliability & Safety
Defensive error handling, sandboxed iframes, native allowlist, CORS fallback.
Domain
Technologies
Frontend
HTML5, CSS3, ES Modules
Browser Extension
Chrome MV3 (service worker + storage)
Scripts
PowerShell, Batch (.bat), Python (utility GUI), Node.js (native host example)
Data
JSON state + in-memory caches
APIs
Open-Meteo, logo.dev, UptimeRobot, disease.sh, RSS feeds
Extension action opens the dashboard.
main.js loads and migrates state to initial render.
User edits update in-memory state with debounced persist.
Widgets hydrate from cache or network (proxy fallback logic for RSS).
Program tiles launch via scheme or native host.
Run as an unpacked Chromium extension (recommended) or open dashboard.html directly (reduced feature set outside extension context).
Chromium-based browser (Chrome / Edge / Brave)
(Optional) Node.js 18+ (native host example)
(Optional) PowerShell (Windows) for protocol registration
Installation (as Extension)
Clone the repository
Open chrome://extensions and enable Developer Mode
Click Load unpacked and select the project root
Click the extension icon to open the dashboard
Optional Native Launching
Edit the native/host-manifest.json path
Adapt native/stackdash-native.js to whitelist commands
Register the native host per Chrome documentation
Set program tiles to the native launch method
Optional Custom URL Protocols (Windows)
Run PowerShell: CommandManager/Register-ExecutableProtocols.ps1 -Force
Test: start someprogramx:
Batch launchers are stored under helpers/windows/
Action
How
Add Page
Click the Add Page button (top bar)
Add Group
Click the Create Group card at the end of groups
Add Link / Program / Widget
Use the group menu or edit mode buttons
Rearrange Tiles
Drag and drop in edit mode
Theme / Font
Settings → General
Glow
Settings → General
Backup
Settings → Data → Export JSON
Restore
Settings → Data → Import JSON
Reset Pages
Settings → Advanced (Danger)
Toggle Edit Mode
Use the settings panel switch
Widget
Summary
Notes
Weather
Current conditions and details
Open-Meteo (no key)
RSS
Feed items with new highlighting
Multi-proxy fallback
UptimeRobot
Uptime percentage and status
API key required
IFrame
Embed external page
Subject to X-Frame/CSP
COVID
Basic statistics
Uses disease.sh API
Setting
Location
Description
Theme
Settings → General
System / Light / Dark / Crimson
Font
Settings → General
Searchable catalog
Glow
Settings → General
Enable + color + reset
Cache Max Age
Settings → Advanced
Hours before pruning
Cache Max Entries
Settings → Advanced
Per-cache cap
Perf Flag
Settings → Advanced
Internal diagnostics toggle
Logo.dev Key
Settings → APIs
Enables logo fetching
Export: timestamped JSON (pages, groups, links, widgets, programs, settings)
Import: schema normalization (IDs, arrays, safety checks)
Compatible across future minor migrations
Lazy loading for icons and images
Unified cache pool (RSS, weather, COVID, uptime)
TTL + max entries pruning (idle scheduled)
Lightweight full re-render model (low state size)
Aspect
Approach
Storage
Local (extension and localStorage only)
Native Execution
Explicit command allowlist sample
Logo API Key
Kept only in settings (not serialized per item)
IFrames
Sandbox with opt-in permissions
RSS
Proxy fallback avoids noisy CORS errors
Uploads
Size-limited; never auto-exfiltrated
oh/
├─ dashboard.html
├─ manifest.json
├─ service-worker.js
├─ css/
└─ dashboard.css
├─ js/
│ ├─ API/
│ │ └─ fileSystemAccess.js
│ ├─ main.js
│ ├─ state.js
│ ├─ render-pages.js
│ ├─ render-groups.js
│ ├─ settings.js
│ ├─ actions.js
│ ├─ modals.js
│ ├─ utils.js
│ ├─ events.js
│ ├─ fonts.js
│ └─ favicon.js
**├─ CommandManager/**
│ └─ Register-ExecutableProtocols.ps1
**├─ helpers/windows/*.bat**
├─ dashboard-natives/
│ ├─ homelab.json
├─ native/
│ ├─ host-manifest.json
│ └─ stackdash-native.js
├─ assets/
├─ images/
└─ icon/
│ └─ stackdash-*.png / .svg
└─ README.md
Fork the repository
Create a feature branch (git checkout -b feat/awesome)
Commit (git commit -m "feat: add awesome")
Push (git push origin feat/awesome)
Open a Pull Request
Good first contributions: widget extraction, accessibility polish, performance measurement harness, new icon sources, additional program launch modes.
logo.dev (logo resolution)
Open-Meteo (weather)
UptimeRobot (uptime API)
disease.sh (COVID stats)
Favicon & logo fallbacks (Google & Clearbit)
Community dashboard and homelab inspirations