{ "version": 2, "dashboard": { "title": "Home Server Control", "tagline": "Local console and build deck" }, "integrations": { "authoring": { "pollMs": 5000, "path": "/api/zone/status" }, "watcher": { "pollMs": 10000, "path": "/api/zone/status" }, "timesheet": { "pollMs": 60000, "path": "/api/zone/status" }, "scripts": { "pollMs": 120000, "path": "/api/zone/status" }, "builds": { "pollMs": 15000, "path": "/api/zone/status" } }, "widgets": [ { "id": "authoring-queue", "type": "queue", "title": "Authoring builds", "integration": "authoring" }, { "id": "authoring-detail", "type": "authoringDetail", "title": "Authoring detail", "integration": "authoring" }, { "id": "watcher", "type": "badge", "title": "Lima watcher", "integration": "watcher" }, { "id": "system-resources", "type": "systemResources", "title": "System resources", "integration": "resources" }, { "id": "timesheet-summary", "type": "timesheet", "title": "Hours this week", "integration": "timesheet" }, { "id": "scripts-health", "type": "log", "title": "Script logs", "integration": "scripts", "logKey": "orgWebBuild" }, { "id": "calibre-sync", "type": "log", "title": "Calibre export", "integration": "scripts", "logKey": "calibreSync" }, { "id": "org-web-build", "type": "buildStatus", "title": "Website build", "integration": "builds", "lastRunKey": "org_web" } ], "links": [ { "id": "timesheet", "label": "Timesheet", "href": "/time-tracking/", "group": "platform" }, { "id": "website", "label": "Website", "href": "https://zainezq.com", "group": "platform", "external": true }, { "id": "author", "label": "Author", "href": "https://author.zainezq.com", "group": "platform", "external": true }, { "id": "files", "label": "Files", "href": "https://filebrowser.zainezq.com", "group": "infra", "external": true }, { "id": "library", "label": "Library", "href": "https://calibre.zainezq.com", "group": "infra", "external": true }, { "id": "news", "label": "News", "href": "https://miniflux.zainezq.com", "group": "infra", "external": true }, { "id": "rdp", "label": "RDP", "href": "https://guac.zainezq.com", "group": "infra", "external": true }, { "id": "portainer", "label": "Portainer", "href": "https://portainer.zainezq.com", "group": "infra", "external": true }, { "id": "nextcloud", "label": "Nextcloud", "href": "https://nextcloud.zainezq.com", "group": "infra", "external": true }, { "id": "pgadmin", "label": "Databases", "href": "https://pgadmin.zainezq.com", "group": "infra", "external": true }, { "id": "gitea", "label": "Gitea", "href": "https://gitea.zainezq.com", "group": "infra", "external": true } ], "builds": [ { "id": "org_web", "label": "Website Build", "badge": "Web", "confirmTitle": "Update Website", "confirmBody": "This will rebuild and deploy the website. Continue?", "runLabel": "Run website build", "start": { "method": "POST", "path": "/api/build-web" }, "cancel": { "method": "DELETE", "path": "/api/build-web" }, "status": { "path": "/api/build-web/status" }, "logs": { "path": "/api/build-web/logs" }, "statusDotId": "webDot", "statusTextId": "webStatus", "lastRunKey": "org_web" }, { "id": "emacs", "label": "Emacs", "badge": "Emacs", "confirmTitle": "Rerun Emacs", "confirmBody": "This will rerun Emacs. Continue?", "runLabel": "Rerun Emacs", "start": { "method": "POST", "path": "/api/rerun-emacs" }, "cancel": { "method": "DELETE", "path": "/api/rerun-emacs" }, "status": { "path": "/api/rerun-emacs/status" }, "logs": { "path": "/api/rerun-emacs/logs" }, "statusDotId": "emacsDot", "statusTextId": "emacsStatus", "lastRunKey": "emacs", "successExitCodes": [0, 124] }, { "id": "adventure_resources", "label": "AdventureOS Resources", "badge": "AI", "confirmTitle": "Free AdventureOS Resources", "confirmBody": "This will run the configured resource cleanup command. Continue?", "runLabel": "Free resources", "start": { "method": "POST", "path": "/api/adventure/resources/free" }, "cancel": { "method": "DELETE", "path": "/api/adventure/resources/free" }, "status": { "path": "/api/adventure/resources/free/status" }, "logs": { "path": "/api/adventure/resources/free/logs" }, "lastRunKey": "adventure_resources" }, { "id": "guacamole_start", "label": "Guacamole Start", "badge": "RDP", "confirmTitle": "Start Guacamole", "confirmBody": "This will start the configured Guacamole container. Continue?", "runLabel": "Start RDP", "start": { "method": "POST", "path": "/api/guacamole/start" }, "cancel": { "method": "DELETE", "path": "/api/guacamole/start" }, "status": { "path": "/api/guacamole/start/status" }, "logs": { "path": "/api/guacamole/start/logs" }, "lastRunKey": "guacamole_start" }, { "id": "guacamole_stop", "label": "Guacamole Stop", "badge": "RDP", "confirmTitle": "Stop Guacamole", "confirmBody": "This will stop the configured Guacamole container. Continue?", "runLabel": "Stop RDP", "start": { "method": "POST", "path": "/api/guacamole/stop" }, "cancel": { "method": "DELETE", "path": "/api/guacamole/stop" }, "status": { "path": "/api/guacamole/stop/status" }, "logs": { "path": "/api/guacamole/stop/logs" }, "lastRunKey": "guacamole_stop" }, { "id": "nostalgia_prod", "label": "Nostalgia Production", "badge": "Prod", "confirmTitle": "Run Nostalgia Production", "confirmBody": "This will run docker compose up -d --build in the Nostalgia directory. Continue?", "runLabel": "Run production", "start": { "method": "POST", "path": "/api/nostalgia/production" }, "cancel": { "method": "DELETE", "path": "/api/nostalgia/production" }, "status": { "path": "/api/nostalgia/production/status" }, "logs": { "path": "/api/nostalgia/production/logs" }, "lastRunKey": "nostalgia_prod" } ], "status": { "health": "/api/health", "uptime": "/api/uptime", "lastRuns": "/api/last-runs" } }