Add pre-built dashboard JSON files for import
Boards included: - main-dashboard.json: Public board with RSS feeds, clock, weather, apps - system-overview.json: Private board with full-screen Dash. - infrastructure.json: Private board with infrastructure apps - DASHBOARD_AS_CODE.md: Guide on dashboard as code options - boards/README.md: Documentation for using the JSON files
This commit is contained in:
parent
8e1af7abb9
commit
5b7c709f13
|
|
@ -0,0 +1,260 @@
|
||||||
|
# 🏗️ Dashboard as Code for Homarr
|
||||||
|
|
||||||
|
Homarr 1.0 stores data in SQLite, but there are ways to work with it programmatically.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Option 1: JSON Export/Import (Recommended)
|
||||||
|
|
||||||
|
Homarr 1.0+ supports exporting/importing boards as JSON.
|
||||||
|
|
||||||
|
### How to Export Your Current Board
|
||||||
|
```
|
||||||
|
1. Go to Manage → Boards
|
||||||
|
2. Click on a board
|
||||||
|
3. Click "Export" button
|
||||||
|
4. Download JSON file
|
||||||
|
```
|
||||||
|
|
||||||
|
### JSON Structure Example
|
||||||
|
|
||||||
|
Here's a complete board JSON you can import:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "Main Dashboard",
|
||||||
|
"description": "Public dashboard with news and links",
|
||||||
|
"backgroundImage": "",
|
||||||
|
"backgroundImageAttachment": "fixed",
|
||||||
|
"backgroundImageRepeat": "no-repeat",
|
||||||
|
"backgroundImageSize": "cover",
|
||||||
|
"colorScheme": "dark",
|
||||||
|
"customCss": "/* Paste CSS from custom-boards.css here */",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"type": "clock",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"width": 2,
|
||||||
|
"height": 2,
|
||||||
|
"options": {
|
||||||
|
"showDate": true,
|
||||||
|
"timeFormat": "24"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "weather",
|
||||||
|
"x": 2,
|
||||||
|
"y": 0,
|
||||||
|
"width": 2,
|
||||||
|
"height": 2,
|
||||||
|
"options": {
|
||||||
|
"location": "Stockholm, Sweden",
|
||||||
|
"unit": "celsius"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "rss",
|
||||||
|
"x": 0,
|
||||||
|
"y": 2,
|
||||||
|
"width": 4,
|
||||||
|
"height": 3,
|
||||||
|
"options": {
|
||||||
|
"feedUrls": [
|
||||||
|
"https://selfh.st/rss/",
|
||||||
|
"https://noted.lol/rss/",
|
||||||
|
"https://feeds.fireside.fm/selfhosted/rss"
|
||||||
|
],
|
||||||
|
"postsLimit": 10,
|
||||||
|
"enableRtl": false,
|
||||||
|
"descriptionLineClamp": 3,
|
||||||
|
"hideDescription": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "rss",
|
||||||
|
"x": 4,
|
||||||
|
"y": 2,
|
||||||
|
"width": 4,
|
||||||
|
"height": 3,
|
||||||
|
"options": {
|
||||||
|
"feedUrls": [
|
||||||
|
"https://www.bleepingcomputer.com/feed/",
|
||||||
|
"https://feeds.feedburner.com/TheHackersNews",
|
||||||
|
"https://krebsonsecurity.com/feed/"
|
||||||
|
],
|
||||||
|
"postsLimit": 10,
|
||||||
|
"descriptionLineClamp": 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "app",
|
||||||
|
"x": 0,
|
||||||
|
"y": 5,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "gmail-id"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "app",
|
||||||
|
"x": 1,
|
||||||
|
"y": 5,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "github-id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"visibility": "public",
|
||||||
|
"layout": {
|
||||||
|
"columnCount": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### How to Import
|
||||||
|
```
|
||||||
|
1. Manage → Boards
|
||||||
|
2. Click "Import" button
|
||||||
|
3. Upload JSON file
|
||||||
|
4. Review and confirm
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Option 2: SQLite Database Editing (Advanced)
|
||||||
|
|
||||||
|
Homarr stores everything in `/opt/homarr/appdata/db/homarr.db`
|
||||||
|
|
||||||
|
### Access the Database
|
||||||
|
```bash
|
||||||
|
# SSH to your server
|
||||||
|
docker exec -it homarr sh
|
||||||
|
|
||||||
|
# Install sqlite3
|
||||||
|
apk add sqlite3
|
||||||
|
|
||||||
|
# Open database
|
||||||
|
sqlite3 /appdata/db/homarr.db
|
||||||
|
|
||||||
|
# View tables
|
||||||
|
.tables
|
||||||
|
|
||||||
|
# View boards
|
||||||
|
SELECT * FROM Board;
|
||||||
|
|
||||||
|
# View apps
|
||||||
|
SELECT * FROM App;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Key Tables
|
||||||
|
| Table | Purpose |
|
||||||
|
|-------|---------|
|
||||||
|
| `Board` | Board definitions |
|
||||||
|
| `Section` | Board sections/items |
|
||||||
|
| `App` | App definitions |
|
||||||
|
| `Integration` | Integration configs |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Option 3: API Approach (Scripting)
|
||||||
|
|
||||||
|
Homarr has internal APIs you can script against:
|
||||||
|
|
||||||
|
### Get Board Data
|
||||||
|
```bash
|
||||||
|
# Get all boards
|
||||||
|
curl http://localhost:7575/api/boards
|
||||||
|
|
||||||
|
# Get specific board
|
||||||
|
curl http://localhost:7575/api/boards/main-dashboard
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create Board via API
|
||||||
|
```bash
|
||||||
|
# This requires authentication cookie/session
|
||||||
|
# You'd need to extract from browser DevTools
|
||||||
|
|
||||||
|
curl -X POST http://localhost:7575/api/boards \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-H "Cookie: your-auth-cookie" \
|
||||||
|
-d '{
|
||||||
|
"name": "Auto Created Board",
|
||||||
|
"visibility": "public"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Option 4: Pre-built JSON Files (I Can Create These)
|
||||||
|
|
||||||
|
I can create complete JSON files for you to import!
|
||||||
|
|
||||||
|
### Board 1: Main Dashboard JSON
|
||||||
|
**File:** `boards/main-dashboard.json`
|
||||||
|
|
||||||
|
### Board 2: System Monitor JSON
|
||||||
|
**File:** `boards/system-overview.json`
|
||||||
|
|
||||||
|
### Board 3: Infrastructure JSON
|
||||||
|
**File:** `boards/infrastructure.json`
|
||||||
|
|
||||||
|
You would:
|
||||||
|
1. Download these JSON files
|
||||||
|
2. Import each one in Homarr
|
||||||
|
3. Done!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## What I Can Do For You
|
||||||
|
|
||||||
|
### Option A: Create Importable JSON Files
|
||||||
|
I'll create complete JSON files for each board:
|
||||||
|
- ✅ Main Dashboard (with RSS feeds, clock, weather)
|
||||||
|
- ✅ System Overview (full-screen Dash.)
|
||||||
|
- ✅ Infrastructure (with all your apps)
|
||||||
|
- ✅ Media Center (if needed)
|
||||||
|
|
||||||
|
**You just import them!**
|
||||||
|
|
||||||
|
### Option B: Create SQL Scripts
|
||||||
|
Generate SQL INSERT statements to directly populate the database.
|
||||||
|
|
||||||
|
### Option C: Step-by-Step Copy/Paste
|
||||||
|
Provide exact values to enter in each field.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Which Option Do You Want?
|
||||||
|
|
||||||
|
| Option | Effort For You | Effort For Me | Best For |
|
||||||
|
|--------|---------------|---------------|----------|
|
||||||
|
| **A - JSON Import** | Low (just import) | Medium | Quick setup |
|
||||||
|
| **B - SQL Script** | Low (run script) | Medium | Automation |
|
||||||
|
| **C - Copy/Paste** | Medium | Low | Learning |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tell Me:
|
||||||
|
|
||||||
|
1. **Which boards** do you want me to build?
|
||||||
|
- Main Dashboard (public)
|
||||||
|
- System Overview (private)
|
||||||
|
- Infrastructure (private)
|
||||||
|
- Media Center (private)
|
||||||
|
- News Hub (public)
|
||||||
|
|
||||||
|
2. **Which method?**
|
||||||
|
- JSON import files
|
||||||
|
- SQL script
|
||||||
|
- Copy/paste guide
|
||||||
|
|
||||||
|
3. **Your details:**
|
||||||
|
- Location (for weather)
|
||||||
|
- Apps you want included (from the 60+ list)
|
||||||
|
- RSS feed preferences
|
||||||
|
|
||||||
|
I'll build them for you! 🚀
|
||||||
|
|
@ -0,0 +1,114 @@
|
||||||
|
# 📦 Pre-Built Dashboard JSON Files
|
||||||
|
|
||||||
|
These JSON files are ready to import into Homarr!
|
||||||
|
|
||||||
|
## Available Boards
|
||||||
|
|
||||||
|
| File | Description | Visibility |
|
||||||
|
|------|-------------|------------|
|
||||||
|
| `main-dashboard.json` | Public dashboard with RSS feeds, clock, weather, quick links | Public |
|
||||||
|
| `system-overview.json` | Full-screen Dash. system monitoring | Private |
|
||||||
|
| `infrastructure.json` | Server management tools with small Dash. widget | Private |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## How to Import
|
||||||
|
|
||||||
|
### Method 1: Homarr Import Feature (If Available)
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Manage → Boards → Import
|
||||||
|
2. Select JSON file
|
||||||
|
3. Review and confirm
|
||||||
|
```
|
||||||
|
|
||||||
|
### Method 2: Manual Import via Database (Advanced)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Copy JSON to container
|
||||||
|
docker cp boards/main-dashboard.json homarr:/tmp/
|
||||||
|
|
||||||
|
# Access container
|
||||||
|
docker exec -it homarr sh
|
||||||
|
|
||||||
|
# The JSON structure needs to be inserted into SQLite
|
||||||
|
# This requires converting to SQL INSERT statements
|
||||||
|
```
|
||||||
|
|
||||||
|
### Method 3: Use as Reference (Easiest)
|
||||||
|
|
||||||
|
Open these JSON files and copy the settings into Homarr UI manually.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Before Importing
|
||||||
|
|
||||||
|
### Update These Values in JSON:
|
||||||
|
|
||||||
|
1. **Server IP addresses:**
|
||||||
|
- Replace `YOUR-SERVER-IP` with your actual IP
|
||||||
|
- Replace `lemonlink.eu` with your domain
|
||||||
|
|
||||||
|
2. **Weather location:**
|
||||||
|
- In `main-dashboard.json`, change `"Stockholm, Sweden"` to your location
|
||||||
|
|
||||||
|
3. **RSS feeds:**
|
||||||
|
- Add/remove feeds as desired
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Board Layouts
|
||||||
|
|
||||||
|
### Main Dashboard Layout (8 columns)
|
||||||
|
```
|
||||||
|
Row 0: [Clock 2x2] [Weather 2x2] [Search 4x1]
|
||||||
|
Row 2: [RSS Homelab 3x4] [RSS Cyber 3x4] [RSS Tech 2x4]
|
||||||
|
Row 6: [Gmail] [GitHub] [Reddit] [YouTube] [Discord]
|
||||||
|
Row 7: [Proxmox] [Portainer] [Plex] [Nextcloud] [Vaultwarden]
|
||||||
|
```
|
||||||
|
|
||||||
|
### System Overview Layout (12 columns)
|
||||||
|
```
|
||||||
|
Row 0: [Dash. iFrame 12x8 - Full Screen]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Infrastructure Layout (8 columns)
|
||||||
|
```
|
||||||
|
Row 0: [Dash. iFrame 8x3]
|
||||||
|
Row 3: [Proxmox] [Portainer] [TrueNAS] [Pi-hole] [AdGuard] [NPM] [UniFi] [Tailscale]
|
||||||
|
Row 4: [Grafana] [Prometheus] [Uptime] [Netdata] [WireGuard]
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
Edit the JSON files to:
|
||||||
|
- Change app URLs
|
||||||
|
- Add/remove apps
|
||||||
|
- Adjust widget positions (x, y)
|
||||||
|
- Resize items (width, height)
|
||||||
|
- Add custom CSS
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Apps Included
|
||||||
|
|
||||||
|
### Main Dashboard
|
||||||
|
External: Gmail, GitHub, Reddit, YouTube, Discord
|
||||||
|
Internal: Proxmox, Portainer, Plex, Nextcloud, Vaultwarden
|
||||||
|
|
||||||
|
### Infrastructure
|
||||||
|
Proxmox, Portainer, TrueNAS, Pi-hole, AdGuard, NPM, UniFi, Tailscale, Grafana, Prometheus, Uptime Kuma, Netdata, WireGuard
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Need More Boards?
|
||||||
|
|
||||||
|
I can create additional boards:
|
||||||
|
- Media Center (Plex, Sonarr, Radarr, etc.)
|
||||||
|
- Development (GitLab, Jenkins, Registry)
|
||||||
|
- Smart Home (Home Assistant, Node-RED)
|
||||||
|
- News Hub (RSS only)
|
||||||
|
|
||||||
|
Just ask! 🚀
|
||||||
|
|
@ -0,0 +1,260 @@
|
||||||
|
{
|
||||||
|
"name": "Infrastructure",
|
||||||
|
"description": "Server and network management tools",
|
||||||
|
"visibility": "private",
|
||||||
|
"backgroundImage": "",
|
||||||
|
"colorScheme": "dark",
|
||||||
|
"layout": {
|
||||||
|
"columnCount": 8
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"id": "dash-small",
|
||||||
|
"type": "iframe",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"width": 8,
|
||||||
|
"height": 3,
|
||||||
|
"options": {
|
||||||
|
"embedUrl": "http://YOUR-SERVER-IP:3001",
|
||||||
|
"name": "System Overview"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-proxmox",
|
||||||
|
"type": "app",
|
||||||
|
"x": 0,
|
||||||
|
"y": 3,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "proxmox"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-portainer",
|
||||||
|
"type": "app",
|
||||||
|
"x": 1,
|
||||||
|
"y": 3,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "portainer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-truenas",
|
||||||
|
"type": "app",
|
||||||
|
"x": 2,
|
||||||
|
"y": 3,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "truenas"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-pihole",
|
||||||
|
"type": "app",
|
||||||
|
"x": 3,
|
||||||
|
"y": 3,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "pihole"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-adguard",
|
||||||
|
"type": "app",
|
||||||
|
"x": 4,
|
||||||
|
"y": 3,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "adguard"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-npm",
|
||||||
|
"type": "app",
|
||||||
|
"x": 5,
|
||||||
|
"y": 3,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "nginx-proxy-manager"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-unifi",
|
||||||
|
"type": "app",
|
||||||
|
"x": 6,
|
||||||
|
"y": 3,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "ubiquiti"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-tailscale",
|
||||||
|
"type": "app",
|
||||||
|
"x": 7,
|
||||||
|
"y": 3,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "tailscale"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-grafana",
|
||||||
|
"type": "app",
|
||||||
|
"x": 0,
|
||||||
|
"y": 4,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "grafana"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-prometheus",
|
||||||
|
"type": "app",
|
||||||
|
"x": 1,
|
||||||
|
"y": 4,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "prometheus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-uptime",
|
||||||
|
"type": "app",
|
||||||
|
"x": 2,
|
||||||
|
"y": 4,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "uptime-kuma"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-netdata",
|
||||||
|
"type": "app",
|
||||||
|
"x": 3,
|
||||||
|
"y": 4,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "netdata"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-wireguard",
|
||||||
|
"type": "app",
|
||||||
|
"x": 4,
|
||||||
|
"y": 4,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "wireguard"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"apps": [
|
||||||
|
{
|
||||||
|
"id": "proxmox",
|
||||||
|
"name": "Proxmox",
|
||||||
|
"iconUrl": "proxmox",
|
||||||
|
"href": "https://proxmox.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "portainer",
|
||||||
|
"name": "Portainer",
|
||||||
|
"iconUrl": "portainer",
|
||||||
|
"href": "https://portainer.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "truenas",
|
||||||
|
"name": "TrueNAS",
|
||||||
|
"iconUrl": "truenas",
|
||||||
|
"href": "https://truenas.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "pihole",
|
||||||
|
"name": "Pi-hole",
|
||||||
|
"iconUrl": "pihole",
|
||||||
|
"href": "https://pihole.lemonlink.eu/admin",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "adguard",
|
||||||
|
"name": "AdGuard",
|
||||||
|
"iconUrl": "adguard",
|
||||||
|
"href": "https://adguard.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "nginx-proxy-manager",
|
||||||
|
"name": "NPM",
|
||||||
|
"iconUrl": "nginx-proxy-manager",
|
||||||
|
"href": "https://npm.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ubiquiti",
|
||||||
|
"name": "UniFi",
|
||||||
|
"iconUrl": "ubiquiti",
|
||||||
|
"href": "https://unifi.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "tailscale",
|
||||||
|
"name": "Tailscale",
|
||||||
|
"iconUrl": "tailscale",
|
||||||
|
"href": "https://login.tailscale.com/admin",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "grafana",
|
||||||
|
"name": "Grafana",
|
||||||
|
"iconUrl": "grafana",
|
||||||
|
"href": "https://grafana.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "prometheus",
|
||||||
|
"name": "Prometheus",
|
||||||
|
"iconUrl": "prometheus",
|
||||||
|
"href": "https://prometheus.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "uptime-kuma",
|
||||||
|
"name": "Uptime Kuma",
|
||||||
|
"iconUrl": "uptime-kuma",
|
||||||
|
"href": "https://uptime.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "netdata",
|
||||||
|
"name": "Netdata",
|
||||||
|
"iconUrl": "netdata",
|
||||||
|
"href": "https://netdata.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "wireguard",
|
||||||
|
"name": "WireGuard",
|
||||||
|
"iconUrl": "wireguard",
|
||||||
|
"href": "https://wg.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,309 @@
|
||||||
|
{
|
||||||
|
"name": "Main Dashboard",
|
||||||
|
"description": "Public dashboard with news, weather, and quick links",
|
||||||
|
"visibility": "public",
|
||||||
|
"backgroundImage": "",
|
||||||
|
"backgroundImageAttachment": "fixed",
|
||||||
|
"backgroundImageRepeat": "no-repeat",
|
||||||
|
"backgroundImageSize": "cover",
|
||||||
|
"colorScheme": "dark",
|
||||||
|
"customCss": "/* See custom-boards.css in repo */",
|
||||||
|
"layout": {
|
||||||
|
"columnCount": 8
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"id": "clock-widget",
|
||||||
|
"type": "clock",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"width": 2,
|
||||||
|
"height": 2,
|
||||||
|
"options": {
|
||||||
|
"showDate": true,
|
||||||
|
"dateFormat": "full",
|
||||||
|
"timeFormat": "24",
|
||||||
|
"is24HourFormat": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "weather-widget",
|
||||||
|
"type": "weather",
|
||||||
|
"x": 2,
|
||||||
|
"y": 0,
|
||||||
|
"width": 2,
|
||||||
|
"height": 2,
|
||||||
|
"options": {
|
||||||
|
"location": "Stockholm, Sweden",
|
||||||
|
"unit": "celsius"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "search-widget",
|
||||||
|
"type": "search",
|
||||||
|
"x": 4,
|
||||||
|
"y": 0,
|
||||||
|
"width": 4,
|
||||||
|
"height": 1,
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rss-homelab",
|
||||||
|
"type": "rss",
|
||||||
|
"x": 0,
|
||||||
|
"y": 2,
|
||||||
|
"width": 3,
|
||||||
|
"height": 4,
|
||||||
|
"options": {
|
||||||
|
"feedUrls": [
|
||||||
|
"https://selfh.st/rss/",
|
||||||
|
"https://noted.lol/rss/",
|
||||||
|
"https://feeds.fireside.fm/selfhosted/rss"
|
||||||
|
],
|
||||||
|
"postsLimit": 10,
|
||||||
|
"enableRtl": false,
|
||||||
|
"descriptionLineClamp": 3,
|
||||||
|
"hideDescription": false,
|
||||||
|
"name": "Homelab News"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rss-cyber",
|
||||||
|
"type": "rss",
|
||||||
|
"x": 3,
|
||||||
|
"y": 2,
|
||||||
|
"width": 3,
|
||||||
|
"height": 4,
|
||||||
|
"options": {
|
||||||
|
"feedUrls": [
|
||||||
|
"https://www.bleepingcomputer.com/feed/",
|
||||||
|
"https://feeds.feedburner.com/TheHackersNews",
|
||||||
|
"https://krebsonsecurity.com/feed/"
|
||||||
|
],
|
||||||
|
"postsLimit": 10,
|
||||||
|
"enableRtl": false,
|
||||||
|
"descriptionLineClamp": 2,
|
||||||
|
"hideDescription": false,
|
||||||
|
"name": "Cybersecurity"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "rss-tech",
|
||||||
|
"type": "rss",
|
||||||
|
"x": 6,
|
||||||
|
"y": 2,
|
||||||
|
"width": 2,
|
||||||
|
"height": 4,
|
||||||
|
"options": {
|
||||||
|
"feedUrls": [
|
||||||
|
"https://news.ycombinator.com/rss",
|
||||||
|
"https://techcrunch.com/feed/"
|
||||||
|
],
|
||||||
|
"postsLimit": 8,
|
||||||
|
"enableRtl": false,
|
||||||
|
"descriptionLineClamp": 2,
|
||||||
|
"hideDescription": true,
|
||||||
|
"name": "Tech News"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-gmail",
|
||||||
|
"type": "app",
|
||||||
|
"x": 0,
|
||||||
|
"y": 6,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "gmail"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-github",
|
||||||
|
"type": "app",
|
||||||
|
"x": 1,
|
||||||
|
"y": 6,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-reddit",
|
||||||
|
"type": "app",
|
||||||
|
"x": 2,
|
||||||
|
"y": 6,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "reddit"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-youtube",
|
||||||
|
"type": "app",
|
||||||
|
"x": 3,
|
||||||
|
"y": 6,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "youtube"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-discord",
|
||||||
|
"type": "app",
|
||||||
|
"x": 4,
|
||||||
|
"y": 6,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "discord"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-proxmox",
|
||||||
|
"type": "app",
|
||||||
|
"x": 0,
|
||||||
|
"y": 7,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "proxmox"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-portainer",
|
||||||
|
"type": "app",
|
||||||
|
"x": 1,
|
||||||
|
"y": 7,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "portainer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-plex",
|
||||||
|
"type": "app",
|
||||||
|
"x": 2,
|
||||||
|
"y": 7,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "plex"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-nextcloud",
|
||||||
|
"type": "app",
|
||||||
|
"x": 3,
|
||||||
|
"y": 7,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "nextcloud"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "app-vaultwarden",
|
||||||
|
"type": "app",
|
||||||
|
"x": 4,
|
||||||
|
"y": 7,
|
||||||
|
"width": 1,
|
||||||
|
"height": 1,
|
||||||
|
"options": {
|
||||||
|
"appId": "vaultwarden"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"apps": [
|
||||||
|
{
|
||||||
|
"id": "gmail",
|
||||||
|
"name": "Gmail",
|
||||||
|
"description": "Email",
|
||||||
|
"iconUrl": "gmail",
|
||||||
|
"href": "https://mail.google.com",
|
||||||
|
"behavior": "newTab",
|
||||||
|
"network": {
|
||||||
|
"enabled": true,
|
||||||
|
"timeout": 2000
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "github",
|
||||||
|
"name": "GitHub",
|
||||||
|
"description": "Code Repository",
|
||||||
|
"iconUrl": "github",
|
||||||
|
"href": "https://github.com",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "reddit",
|
||||||
|
"name": "Reddit",
|
||||||
|
"description": "Social News",
|
||||||
|
"iconUrl": "reddit",
|
||||||
|
"href": "https://reddit.com",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "youtube",
|
||||||
|
"name": "YouTube",
|
||||||
|
"description": "Video Platform",
|
||||||
|
"iconUrl": "youtube",
|
||||||
|
"href": "https://youtube.com",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "discord",
|
||||||
|
"name": "Discord",
|
||||||
|
"description": "Chat",
|
||||||
|
"iconUrl": "discord",
|
||||||
|
"href": "https://discord.com",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "proxmox",
|
||||||
|
"name": "Proxmox",
|
||||||
|
"description": "Virtualization",
|
||||||
|
"iconUrl": "proxmox",
|
||||||
|
"href": "https://proxmox.lemonlink.eu",
|
||||||
|
"behavior": "newTab",
|
||||||
|
"network": {
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "portainer",
|
||||||
|
"name": "Portainer",
|
||||||
|
"description": "Docker Management",
|
||||||
|
"iconUrl": "portainer",
|
||||||
|
"href": "https://portainer.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "plex",
|
||||||
|
"name": "Plex",
|
||||||
|
"description": "Media Server",
|
||||||
|
"iconUrl": "plex",
|
||||||
|
"href": "https://plex.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "nextcloud",
|
||||||
|
"name": "Nextcloud",
|
||||||
|
"description": "Cloud Storage",
|
||||||
|
"iconUrl": "nextcloud",
|
||||||
|
"href": "https://cloud.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "vaultwarden",
|
||||||
|
"name": "Vaultwarden",
|
||||||
|
"description": "Password Manager",
|
||||||
|
"iconUrl": "vaultwarden",
|
||||||
|
"href": "https://vault.lemonlink.eu",
|
||||||
|
"behavior": "newTab"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"name": "System Overview",
|
||||||
|
"description": "Full-screen system monitoring with Dash.",
|
||||||
|
"visibility": "private",
|
||||||
|
"backgroundImage": "",
|
||||||
|
"backgroundImageAttachment": "fixed",
|
||||||
|
"backgroundImageRepeat": "no-repeat",
|
||||||
|
"backgroundImageSize": "cover",
|
||||||
|
"colorScheme": "dark",
|
||||||
|
"customCss": "/* Full-screen iframe styling */\n[data-dash-component=\"widget-iframe\"] {\n border-radius: 24px !important;\n overflow: hidden !important;\n box-shadow: 0 25px 80px rgba(0,0,0,0.6) !important;\n}",
|
||||||
|
"layout": {
|
||||||
|
"columnCount": 12
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"id": "dash-iframe",
|
||||||
|
"type": "iframe",
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"width": 12,
|
||||||
|
"height": 8,
|
||||||
|
"options": {
|
||||||
|
"embedUrl": "http://YOUR-SERVER-IP:3001",
|
||||||
|
"name": "System Monitor"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"apps": []
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue