mirror of
https://github.com/CyberMind-FR/secubox-deb.git
synced 2026-07-29 09:14:33 +00:00
The hub's `_compute_menu_sync()` drops menu entries lacking an `id`
field. 6+ packages (lyrion, yacy, zigbee, rustdesk, grafana, authelia)
shipped a different schema (`title/url/section/module`) so they NEVER
appeared in the navbar. Plus the existing CATEGORY_META declared 12
sections (dashboard/security/network/system/core/users/services/
privacy/monitoring/publishing/apps/admin), not the 6 SecuBox charter
modules.
Changes:
* All 121 packages/secubox-*/menu.d/*.json normalised to the canonical
schema (id, name, path, category, icon, order, description). Legacy
schema aliases (title/url/module/section) preserved as fallbacks then
dropped from the file.
* Each menu entry's category remapped to one of the 6 charter modules:
AUTH (auth/users/identity/zkp/nac/openclaw),
WALL (crowdsec/waf/mitmproxy/hardening/threat-* /cve-triage/...),
BOOT (kernel-build/eye-remote/master-link/droplet/cloner/backup/...),
MIND (ai-gateway/mcp-server/grafana/ndpid/netifyd/glances/...),
ROOT (system/hub/portal/console/admin/vault/vm/rtty/...),
MESH (wireguard/dns/tor/matrix/gitea/nextcloud/mail/lyrion/yacy/
zigbee/dns-provider/rustdesk/... — all network + comms apps).
* secubox-hub v1.4.0 — CATEGORY_META rewritten with the 6 charter
modules carrying their official color from DESIGN-CHARTER.md and
the complementary-pair order. DEFAULT_MENU fallback remapped too.
* secubox-zigbee v2.5.3 — www/zigbee/index.html rewritten with the
canonical SecuBox scaffold (body display:flex, sidebar 220px fixed,
.main reserving 48px for the global-menu-bar). MESH palette.
Browser side: operators need to clear localStorage sbx_menu_cache (or
hard-refresh after the 1h TTL) to see the new sections after deploy.
Co-authored-by: CyberMind-FR <gandalf@Gk2.net>
This commit is contained in:
parent
0e02d54e01
commit
5e93c73600
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "ad-guard",
|
||||
"name": "Ad Guard",
|
||||
"category": "network",
|
||||
"category": "wall",
|
||||
"icon": "🛡️",
|
||||
"path": "/ad-guard/",
|
||||
"order": 160,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "admin",
|
||||
"name": "Administration",
|
||||
"category": "core",
|
||||
"category": "root",
|
||||
"icon": "⚙️",
|
||||
"path": "/admin/",
|
||||
"order": 100,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "ai-gateway",
|
||||
"name": "AI Gateway",
|
||||
"category": "security",
|
||||
"category": "mind",
|
||||
"icon": "🤖",
|
||||
"path": "/ai-gateway/",
|
||||
"order": 110,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "ai-insights",
|
||||
"name": "AI Insights",
|
||||
"category": "security",
|
||||
"category": "mind",
|
||||
"icon": "🤖",
|
||||
"path": "/ai-insights/",
|
||||
"order": 701,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "auth",
|
||||
"name": "Auth Guardian",
|
||||
"category": "security",
|
||||
"category": "auth",
|
||||
"icon": "🔑",
|
||||
"path": "/auth/",
|
||||
"order": 120,
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
{
|
||||
"title": "SSO",
|
||||
"subtitle": "Authelia · OIDC IdP",
|
||||
"icon": "fa-key",
|
||||
"url": "/auth/",
|
||||
"section": "security",
|
||||
"order": 40,
|
||||
"module": "authelia"
|
||||
"id": "authelia",
|
||||
"name": "SSO",
|
||||
"path": "/auth/",
|
||||
"category": "auth",
|
||||
"description": ""
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "avatar",
|
||||
"name": "Identity Manager",
|
||||
"category": "users",
|
||||
"category": "mesh",
|
||||
"icon": "👤",
|
||||
"path": "/avatar/",
|
||||
"order": 470,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "backup",
|
||||
"name": "Backup",
|
||||
"category": "system",
|
||||
"category": "boot",
|
||||
"icon": "💾",
|
||||
"path": "/backup/",
|
||||
"order": 550,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "c3box",
|
||||
"name": "C3box",
|
||||
"category": "apps",
|
||||
"category": "mind",
|
||||
"icon": "🌐",
|
||||
"path": "/c3box/",
|
||||
"order": 503,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "cdn",
|
||||
"name": "CDN Cache",
|
||||
"category": "network",
|
||||
"category": "mesh",
|
||||
"icon": "💾",
|
||||
"path": "/cdn/",
|
||||
"order": 240,
|
||||
|
|
|
|||
|
|
@ -1 +1,9 @@
|
|||
{"id":"cloner","name":"Cloner","icon":"💾","path":"/cloner/","category":"system","order":902,"description":"System backup and restore"}
|
||||
{
|
||||
"id": "cloner",
|
||||
"name": "Cloner",
|
||||
"icon": "💾",
|
||||
"path": "/cloner/",
|
||||
"category": "boot",
|
||||
"order": 902,
|
||||
"description": "System backup and restore"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "config-advisor",
|
||||
"name": "Config Advisor",
|
||||
"category": "security",
|
||||
"category": "mind",
|
||||
"icon": "📋",
|
||||
"path": "/config-advisor/",
|
||||
"order": 155,
|
||||
|
|
|
|||
|
|
@ -2,9 +2,10 @@
|
|||
"name": "Console TUI",
|
||||
"path": null,
|
||||
"icon": "🖥️",
|
||||
"category": "system",
|
||||
"category": "root",
|
||||
"order": 3,
|
||||
"description": "Terminal-based dashboard (TTY1)",
|
||||
"console_only": true,
|
||||
"requires_auth": false
|
||||
"requires_auth": false,
|
||||
"id": "console"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Cookie Tracker",
|
||||
"icon": "🍪",
|
||||
"path": "/cookies/",
|
||||
"category": "privacy",
|
||||
"category": "mesh",
|
||||
"order": 704,
|
||||
"description": "Cookie tracking and privacy compliance"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "crowdsec",
|
||||
"name": "CrowdSec",
|
||||
"category": "security",
|
||||
"category": "wall",
|
||||
"icon": "🛡️",
|
||||
"path": "/crowdsec/",
|
||||
"order": 100,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "cve-triage",
|
||||
"name": "Cve-triage",
|
||||
"category": "security",
|
||||
"category": "wall",
|
||||
"icon": "🛡️",
|
||||
"path": "/cve-triage/",
|
||||
"order": 135,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "cyberfeed",
|
||||
"name": "CyberFeed",
|
||||
"category": "security",
|
||||
"category": "wall",
|
||||
"icon": "📡",
|
||||
"path": "/cyberfeed/",
|
||||
"order": 490,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "device-intel",
|
||||
"name": "Device Intel",
|
||||
"category": "monitoring",
|
||||
"category": "mind",
|
||||
"icon": "🔬",
|
||||
"path": "/device-intel/",
|
||||
"order": 320,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "dns-guard",
|
||||
"name": "DNS Guard",
|
||||
"category": "security",
|
||||
"category": "wall",
|
||||
"icon": "🌐",
|
||||
"path": "/dns-guard/",
|
||||
"order": 145,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "dns-provider",
|
||||
"name": "DNS Provider",
|
||||
"category": "network",
|
||||
"category": "mesh",
|
||||
"icon": "☁️",
|
||||
"path": "/dns-provider/",
|
||||
"order": 706,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "dns",
|
||||
"name": "Dns",
|
||||
"category": "network",
|
||||
"category": "mesh",
|
||||
"icon": "🌐",
|
||||
"path": "/dns/",
|
||||
"order": 32,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Domoticz",
|
||||
"icon": "🏠",
|
||||
"path": "/domoticz/",
|
||||
"category": "apps",
|
||||
"category": "mesh",
|
||||
"order": 614,
|
||||
"description": "Home automation system"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "dpi",
|
||||
"name": "DPI",
|
||||
"category": "network",
|
||||
"category": "mind",
|
||||
"icon": "🔍",
|
||||
"path": "/dpi/",
|
||||
"order": 210,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "droplet",
|
||||
"name": "Droplet",
|
||||
"category": "publishing",
|
||||
"category": "boot",
|
||||
"icon": "📤",
|
||||
"path": "/droplet/",
|
||||
"order": 400,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Exposure",
|
||||
"icon": "🌐",
|
||||
"path": "/exposure/",
|
||||
"category": "network",
|
||||
"category": "wall",
|
||||
"order": 565,
|
||||
"description": "Unified exposure settings (Tor, SSL, DNS, Mesh)"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,6 @@
|
|||
"icon": "👁️",
|
||||
"path": "/eye-remote/",
|
||||
"order": 50,
|
||||
"category": "system",
|
||||
"category": "boot",
|
||||
"description": "Manage Eye Remote display devices"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "gitea",
|
||||
"name": "Gitea",
|
||||
"category": "apps",
|
||||
"category": "mesh",
|
||||
"icon": "🐙",
|
||||
"path": "/gitea/",
|
||||
"order": 504,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "glances",
|
||||
"name": "Glances",
|
||||
"category": "monitoring",
|
||||
"category": "mind",
|
||||
"icon": "📈",
|
||||
"path": "/glances/",
|
||||
"order": 904,
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
{
|
||||
"name": "GoToSocial",
|
||||
"path": "/gotosocial/",
|
||||
"icon": "🦋",
|
||||
"category": "apps",
|
||||
"order": 615,
|
||||
"description": "Fediverse/ActivityPub server"
|
||||
"name": "GoToSocial",
|
||||
"path": "/gotosocial/",
|
||||
"icon": "🦋",
|
||||
"category": "mesh",
|
||||
"order": 615,
|
||||
"description": "Fediverse/ActivityPub server",
|
||||
"id": "gotosocial"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
{
|
||||
"title": "Grafana",
|
||||
"subtitle": "Security metrics",
|
||||
"icon": "fa-chart-line",
|
||||
"url": "/grafana/",
|
||||
"section": "monitoring",
|
||||
"order": 50,
|
||||
"module": "grafana"
|
||||
"id": "grafana",
|
||||
"name": "Grafana",
|
||||
"path": "/grafana/",
|
||||
"category": "mind",
|
||||
"description": ""
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "haproxy",
|
||||
"name": "HAProxy",
|
||||
"category": "network",
|
||||
"category": "mesh",
|
||||
"icon": "⚖️",
|
||||
"path": "/haproxy/",
|
||||
"order": 250,
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
"icon": "🛡️",
|
||||
"path": "/hardening/",
|
||||
"api": "/api/v1/hardening/",
|
||||
"category": "security",
|
||||
"category": "wall",
|
||||
"order": 120,
|
||||
"description": "Kernel and system hardening"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
{
|
||||
"name": "Hexo",
|
||||
"path": "/hexo/",
|
||||
"icon": "edit",
|
||||
"category": "apps",
|
||||
"order": 610,
|
||||
"description": "Static blog generator"
|
||||
"name": "Hexo",
|
||||
"path": "/hexo/",
|
||||
"icon": "edit",
|
||||
"category": "mesh",
|
||||
"order": 610,
|
||||
"description": "Static blog generator",
|
||||
"id": "hexo"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Home Assistant",
|
||||
"icon": "🏠",
|
||||
"path": "/homeassistant/",
|
||||
"category": "apps",
|
||||
"category": "mesh",
|
||||
"order": 618,
|
||||
"description": "Home automation and IoT hub"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1716,48 +1716,46 @@ MENU_DIR = Path("/usr/share/secubox/menu.d")
|
|||
|
||||
# Default menu definitions (used if menu.d files don't exist)
|
||||
DEFAULT_MENU = [
|
||||
{"id": "hub", "name": "Dashboard", "category": "dashboard", "icon": "🏠", "path": "/", "order": 0},
|
||||
{"id": "system", "name": "System Hub", "category": "dashboard", "icon": "🔧", "path": "/system/", "order": 10},
|
||||
{"id": "crowdsec", "name": "CrowdSec", "category": "security", "icon": "🛡️", "path": "/crowdsec/", "order": 100},
|
||||
{"id": "waf", "name": "WAF", "category": "security", "icon": "🔥", "path": "/waf/", "order": 105},
|
||||
{"id": "wireguard", "name": "WireGuard VPN", "category": "security", "icon": "🔐", "path": "/wireguard/", "order": 110},
|
||||
{"id": "auth", "name": "Auth Guardian", "category": "security", "icon": "🔑", "path": "/auth/", "order": 120},
|
||||
{"id": "nac", "name": "Client Guardian", "category": "security", "icon": "👥", "path": "/nac/", "order": 130},
|
||||
{"id": "netmodes", "name": "Network Modes", "category": "network", "icon": "🔀", "path": "/netmodes/", "order": 200},
|
||||
{"id": "dpi", "name": "DPI", "category": "network", "icon": "🔍", "path": "/dpi/", "order": 210},
|
||||
{"id": "qos", "name": "Bandwidth Manager", "category": "network", "icon": "📶", "path": "/qos/", "order": 220},
|
||||
{"id": "vhost", "name": "Virtual Hosts", "category": "network", "icon": "🌍", "path": "/vhost/", "order": 230},
|
||||
{"id": "cdn", "name": "CDN Cache", "category": "network", "icon": "💾", "path": "/cdn/", "order": 240},
|
||||
{"id": "haproxy", "name": "HAProxy", "category": "network", "icon": "⚖️", "path": "/haproxy/", "order": 250},
|
||||
{"id": "dns", "name": "DNS", "category": "network", "icon": "🌐", "path": "/dns/", "order": 260},
|
||||
{"id": "netdata", "name": "Netdata", "category": "monitoring", "icon": "📊", "path": "/netdata/", "order": 300},
|
||||
{"id": "mediaflow", "name": "Media Flow", "category": "monitoring", "icon": "📺", "path": "/mediaflow/", "order": 310},
|
||||
{"id": "droplet", "name": "Droplet", "category": "publishing", "icon": "📤", "path": "/droplet/", "order": 400},
|
||||
{"id": "metablogizer", "name": "MetaBlogizer", "category": "publishing", "icon": "📝", "path": "/metablogizer/", "order": 410},
|
||||
{"id": "publish", "name": "Publish", "category": "publishing", "icon": "🚀", "path": "/publish/", "order": 420},
|
||||
{"id": "streamlit", "name": "Streamlit", "category": "apps", "icon": "🎯", "path": "/streamlit/", "order": 500},
|
||||
{"id": "streamforge", "name": "StreamForge", "category": "apps", "icon": "🔨", "path": "/streamforge/", "order": 510},
|
||||
{"id": "users", "name": "Users", "category": "admin", "icon": "👤", "path": "/users/", "order": 600},
|
||||
{"id": "mail", "name": "Mail Server", "category": "admin", "icon": "📧", "path": "/mail/", "order": 610},
|
||||
{"id": "webmail", "name": "Webmail", "category": "admin", "icon": "📬", "path": "/webmail/", "order": 620},
|
||||
{"id": "mail-lxc", "name": "Mail LXC", "category": "admin", "icon": "📧", "path": "/mail-lxc/", "order": 630},
|
||||
{"id": "webmail-lxc", "name": "Webmail LXC", "category": "admin", "icon": "📬", "path": "/webmail-lxc/", "order": 640},
|
||||
{"id": "portal", "name": "Portal", "category": "security", "icon": "🚪", "path": "/portal/", "order": 140},
|
||||
{"id": "hub", "name": "Dashboard", "category": "root", "icon": "🏠", "path": "/", "order": 0},
|
||||
{"id": "system", "name": "System Hub", "category": "root", "icon": "🔧", "path": "/system/", "order": 10},
|
||||
{"id": "crowdsec", "name": "CrowdSec", "category": "wall", "icon": "🛡️", "path": "/crowdsec/", "order": 100},
|
||||
{"id": "waf", "name": "WAF", "category": "wall", "icon": "🔥", "path": "/waf/", "order": 105},
|
||||
{"id": "wireguard", "name": "WireGuard VPN", "category": "mesh", "icon": "🔐", "path": "/wireguard/", "order": 110},
|
||||
{"id": "auth", "name": "Auth Guardian", "category": "auth", "icon": "🔑", "path": "/auth/", "order": 120},
|
||||
{"id": "nac", "name": "Client Guardian", "category": "auth", "icon": "👥", "path": "/nac/", "order": 130},
|
||||
{"id": "netmodes", "name": "Network Modes", "category": "mesh", "icon": "🔀", "path": "/netmodes/", "order": 200},
|
||||
{"id": "dpi", "name": "DPI", "category": "mind", "icon": "🔍", "path": "/dpi/", "order": 210},
|
||||
{"id": "qos", "name": "Bandwidth Manager", "category": "mesh", "icon": "📶", "path": "/qos/", "order": 220},
|
||||
{"id": "vhost", "name": "Virtual Hosts", "category": "mesh", "icon": "🌍", "path": "/vhost/", "order": 230},
|
||||
{"id": "cdn", "name": "CDN Cache", "category": "mesh", "icon": "💾", "path": "/cdn/", "order": 240},
|
||||
{"id": "haproxy", "name": "HAProxy", "category": "mesh", "icon": "⚖️", "path": "/haproxy/", "order": 250},
|
||||
{"id": "dns", "name": "DNS", "category": "mesh", "icon": "🌐", "path": "/dns/", "order": 260},
|
||||
{"id": "netdata", "name": "Netdata", "category": "mind", "icon": "📊", "path": "/netdata/", "order": 300},
|
||||
{"id": "mediaflow", "name": "Media Flow", "category": "boot", "icon": "📺", "path": "/mediaflow/", "order": 310},
|
||||
{"id": "droplet", "name": "Droplet", "category": "boot", "icon": "📤", "path": "/droplet/", "order": 400},
|
||||
{"id": "metablogizer", "name": "MetaBlogizer", "category": "mind", "icon": "📝", "path": "/metablogizer/", "order": 410},
|
||||
{"id": "publish", "name": "Publish", "category": "boot", "icon": "🚀", "path": "/publish/", "order": 420},
|
||||
{"id": "streamlit", "name": "Streamlit", "category": "mesh", "icon": "🎯", "path": "/streamlit/", "order": 500},
|
||||
{"id": "streamforge", "name": "StreamForge", "category": "mesh", "icon": "🔨", "path": "/streamforge/", "order": 510},
|
||||
{"id": "users", "name": "Users", "category": "auth", "icon": "👤", "path": "/users/", "order": 600},
|
||||
{"id": "mail", "name": "Mail Server", "category": "mesh", "icon": "📧", "path": "/mail/", "order": 610},
|
||||
{"id": "webmail", "name": "Webmail", "category": "mesh", "icon": "📬", "path": "/webmail/", "order": 620},
|
||||
{"id": "mail-lxc", "name": "Mail LXC", "category": "mesh", "icon": "📧", "path": "/mail-lxc/", "order": 630},
|
||||
{"id": "webmail-lxc", "name": "Webmail LXC", "category": "mesh", "icon": "📬", "path": "/webmail-lxc/", "order": 640},
|
||||
{"id": "portal", "name": "Portal", "category": "root", "icon": "🚪", "path": "/portal/", "order": 140},
|
||||
]
|
||||
|
||||
CATEGORY_META = {
|
||||
"dashboard": {"name": "Dashboard", "icon": "📊", "order": 0},
|
||||
"security": {"name": "Security", "icon": "🛡️", "order": 1},
|
||||
"network": {"name": "Network", "icon": "🌐", "order": 2},
|
||||
"system": {"name": "System", "icon": "⚙️", "order": 3},
|
||||
"core": {"name": "Core", "icon": "🔧", "order": 4},
|
||||
"users": {"name": "Users", "icon": "👥", "order": 5},
|
||||
"services": {"name": "Services", "icon": "🔌", "order": 6},
|
||||
"privacy": {"name": "Privacy", "icon": "🔒", "order": 7},
|
||||
"monitoring": {"name": "Monitoring", "icon": "📈", "order": 8},
|
||||
"publishing": {"name": "Publishing", "icon": "📤", "order": 9},
|
||||
"apps": {"name": "Applications", "icon": "🎯", "order": 10},
|
||||
"admin": {"name": "Administration", "icon": "🛠️", "order": 11},
|
||||
# SecuBox 6-module color system (Charte §Six Module Color System).
|
||||
# Every menu.d entry MUST set `category` to one of these six. The
|
||||
# ordering mirrors the charter's complementary-pair sequence:
|
||||
# AUTH/WALL/BOOT then their counterparts MIND/ROOT/MESH.
|
||||
"auth": {"name": "Auth", "icon": "🛂", "order": 0, "color": "#C04E24"},
|
||||
"wall": {"name": "Wall", "icon": "🛡️", "order": 1, "color": "#9A6010"},
|
||||
"boot": {"name": "Boot", "icon": "🚀", "order": 2, "color": "#803018"},
|
||||
"mind": {"name": "Mind", "icon": "🧠", "order": 3, "color": "#3D35A0"},
|
||||
"root": {"name": "Root", "icon": "⚙️", "order": 4, "color": "#0A5840"},
|
||||
"mesh": {"name": "Mesh", "icon": "🌐", "order": 5, "color": "#104A88"},
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,16 @@
|
|||
secubox-hub (1.4.0-1~bookworm1) bookworm; urgency=medium
|
||||
|
||||
* api/main.py: CATEGORY_META rewritten to the 6 SecuBox charter
|
||||
modules (auth / wall / boot / mind / root / mesh) instead of the
|
||||
legacy 12 (dashboard / security / network / system / core / users
|
||||
/ services / privacy / monitoring / publishing / apps / admin).
|
||||
Each entry carries its charter color and complementary-pair order.
|
||||
Closes #306.
|
||||
* api/main.py: DEFAULT_MENU fallback entries remapped to the 6
|
||||
charter categories.
|
||||
|
||||
-- Gerald Kerma <devel@cybermind.fr> Thu, 21 May 2026 11:30:00 +0000
|
||||
|
||||
secubox-hub (1.3.4-1~bookworm1) bookworm; urgency=medium
|
||||
|
||||
* www/shared/health-banner.js: stop emitting clickable <a href="…">
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "hub",
|
||||
"name": "Dashboard",
|
||||
"category": "dashboard",
|
||||
"category": "root",
|
||||
"icon": "🏠",
|
||||
"path": "/",
|
||||
"order": 0,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "identity",
|
||||
"name": "Identity",
|
||||
"category": "security",
|
||||
"category": "auth",
|
||||
"icon": "🔐",
|
||||
"path": "/identity/",
|
||||
"order": 125,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Interceptor",
|
||||
"icon": "🎯",
|
||||
"path": "/interceptor/",
|
||||
"category": "security",
|
||||
"category": "wall",
|
||||
"order": 703,
|
||||
"description": "Traffic interception and analysis"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "iot-guard",
|
||||
"name": "IoT Guard",
|
||||
"category": "security",
|
||||
"category": "wall",
|
||||
"icon": "📡",
|
||||
"path": "/iot-guard/",
|
||||
"order": 150,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "ipblock",
|
||||
"name": "IP Blocklist",
|
||||
"category": "security",
|
||||
"category": "wall",
|
||||
"icon": "🚫",
|
||||
"path": "/ipblock/",
|
||||
"order": 702,
|
||||
|
|
|
|||
|
|
@ -1 +1,9 @@
|
|||
{"id":"jabber","name":"Jabber","icon":"💬","path":"/jabber/","category":"apps","order":818,"description":"XMPP messaging server"}
|
||||
{
|
||||
"id": "jabber",
|
||||
"name": "Jabber",
|
||||
"icon": "💬",
|
||||
"path": "/jabber/",
|
||||
"category": "mesh",
|
||||
"order": 818,
|
||||
"description": "XMPP messaging server"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Jellyfin",
|
||||
"path": "/jellyfin/",
|
||||
"icon": "🎬",
|
||||
"category": "apps",
|
||||
"category": "mesh",
|
||||
"order": 801,
|
||||
"description": "Media server management"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Jitsi Meet",
|
||||
"icon": "📹",
|
||||
"path": "/jitsi/",
|
||||
"category": "apps",
|
||||
"category": "mesh",
|
||||
"order": 620,
|
||||
"description": "Video conferencing and meetings"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "ksm",
|
||||
"name": "KSM Memory",
|
||||
"category": "system",
|
||||
"category": "wall",
|
||||
"icon": "💾",
|
||||
"path": "/ksm/",
|
||||
"order": 460,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "LocalAI",
|
||||
"icon": "🤖",
|
||||
"path": "/localai/",
|
||||
"category": "apps",
|
||||
"category": "mind",
|
||||
"order": 804,
|
||||
"description": "Self-hosted LLM inference with OpenAI-compatible API"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "localrecall",
|
||||
"name": "Localrecall",
|
||||
"category": "security",
|
||||
"category": "mind",
|
||||
"icon": "🧠",
|
||||
"path": "/localrecall/",
|
||||
"order": 120,
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
{
|
||||
"title": "Lyrion",
|
||||
"subtitle": "Music server",
|
||||
"icon": "fa-music",
|
||||
"url": "/lyrion/",
|
||||
"section": "hosting",
|
||||
"order": 80,
|
||||
"module": "lyrion"
|
||||
"id": "lyrion",
|
||||
"name": "Lyrion",
|
||||
"path": "/lyrion/",
|
||||
"category": "mesh",
|
||||
"description": ""
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "mac-guard",
|
||||
"name": "MAC Guard",
|
||||
"category": "security",
|
||||
"category": "wall",
|
||||
"icon": "🖥️",
|
||||
"path": "/mac-guard/",
|
||||
"order": 705,
|
||||
|
|
|
|||
|
|
@ -1 +1,9 @@
|
|||
{"id":"magicmirror","name":"MagicMirror","icon":"🪞","path":"/magicmirror/","category":"apps","order":819,"description":"Smart display platform"}
|
||||
{
|
||||
"id": "magicmirror",
|
||||
"name": "MagicMirror",
|
||||
"icon": "🪞",
|
||||
"path": "/magicmirror/",
|
||||
"category": "mesh",
|
||||
"order": 819,
|
||||
"description": "Smart display platform"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "mail",
|
||||
"name": "Mail",
|
||||
"category": "apps",
|
||||
"category": "mesh",
|
||||
"icon": "📧",
|
||||
"path": "/mail/",
|
||||
"order": 55,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "master-link",
|
||||
"name": "Master-link",
|
||||
"category": "network",
|
||||
"category": "boot",
|
||||
"icon": "🔗",
|
||||
"path": "/master-link/",
|
||||
"order": 200,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Matrix Chat",
|
||||
"icon": "💬",
|
||||
"path": "/matrix/",
|
||||
"category": "apps",
|
||||
"category": "mesh",
|
||||
"order": 619,
|
||||
"description": "Federated encrypted chat server"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "mcp-server",
|
||||
"name": "MCP Server",
|
||||
"category": "security",
|
||||
"category": "mind",
|
||||
"icon": "🔌",
|
||||
"path": "/mcp-server/",
|
||||
"order": 115,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "mediaflow",
|
||||
"name": "Media Flow",
|
||||
"category": "monitoring",
|
||||
"category": "boot",
|
||||
"icon": "📺",
|
||||
"path": "/mediaflow/",
|
||||
"order": 310,
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"id": "mesh",
|
||||
"name": "Yggdrasil Mesh",
|
||||
"icon": "🌐",
|
||||
"path": "/mesh/",
|
||||
"category": "network",
|
||||
"order": 580,
|
||||
"description": "Yggdrasil mesh network management"
|
||||
"id": "mesh",
|
||||
"name": "Yggdrasil Mesh",
|
||||
"icon": "🌐",
|
||||
"path": "/mesh/",
|
||||
"category": "mesh",
|
||||
"order": 580,
|
||||
"description": "Yggdrasil mesh network management"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "meshname",
|
||||
"name": "Mesh DNS",
|
||||
"category": "network",
|
||||
"category": "mesh",
|
||||
"icon": "🌐",
|
||||
"path": "/meshname/",
|
||||
"order": 585,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "metablogizer",
|
||||
"name": "MetaBlogizer",
|
||||
"category": "publishing",
|
||||
"category": "mind",
|
||||
"icon": "📝",
|
||||
"path": "/metablogizer/",
|
||||
"order": 410,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "metabolizer",
|
||||
"name": "Metabolizer",
|
||||
"category": "system",
|
||||
"category": "mind",
|
||||
"icon": "📊",
|
||||
"path": "/metabolizer/",
|
||||
"order": 480,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "metacatalog",
|
||||
"name": "Service Catalog",
|
||||
"category": "system",
|
||||
"category": "mind",
|
||||
"icon": "📚",
|
||||
"path": "/metacatalog/",
|
||||
"order": 485,
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
{
|
||||
"name": "Metoblizer",
|
||||
"title": "Metoblizer - Log Aggregator",
|
||||
"order": 950,
|
||||
"depends": {
|
||||
"acl": ["luci-app-secubox"],
|
||||
"acl": [
|
||||
"luci-app-secubox"
|
||||
],
|
||||
"uci": {}
|
||||
},
|
||||
"entries": [
|
||||
|
|
@ -13,5 +14,10 @@
|
|||
"order": 1,
|
||||
"icon": "scroll"
|
||||
}
|
||||
]
|
||||
],
|
||||
"id": "metoblizer",
|
||||
"category": "mind",
|
||||
"icon": "🧠",
|
||||
"path": "/metoblizer/",
|
||||
"description": ""
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"id": "metrics",
|
||||
"name": "Metrics",
|
||||
"icon": "📊",
|
||||
"path": "/metrics/",
|
||||
"order": 200,
|
||||
"category": "monitoring",
|
||||
"description": "Metrics Dashboard"
|
||||
"id": "metrics",
|
||||
"name": "Metrics",
|
||||
"icon": "📊",
|
||||
"path": "/metrics/",
|
||||
"order": 200,
|
||||
"category": "mind",
|
||||
"description": "Metrics Dashboard"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "mirror",
|
||||
"name": "Mirror/CDN",
|
||||
"category": "system",
|
||||
"category": "mesh",
|
||||
"icon": "☁️",
|
||||
"path": "/mirror/",
|
||||
"order": 495,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "WAF",
|
||||
"icon": "🛡️",
|
||||
"path": "/mitmproxy/",
|
||||
"category": "security",
|
||||
"category": "wall",
|
||||
"order": 500,
|
||||
"description": "Web Application Firewall"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1,9 @@
|
|||
{"id":"mmpm","name":"MMPM","icon":"📦","path":"/mmpm/","category":"apps","order":820,"description":"MagicMirror Package Manager"}
|
||||
{
|
||||
"id": "mmpm",
|
||||
"name": "MMPM",
|
||||
"icon": "📦",
|
||||
"path": "/mmpm/",
|
||||
"category": "mesh",
|
||||
"order": 820,
|
||||
"description": "MagicMirror Package Manager"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Modem",
|
||||
"icon": "📶",
|
||||
"path": "/modem/",
|
||||
"category": "network",
|
||||
"category": "mesh",
|
||||
"order": 37,
|
||||
"description": "LTE/5G modem management"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
{
|
||||
"title": "Lyrion",
|
||||
"subtitle": "Music server",
|
||||
"icon": "fa-music",
|
||||
"url": "/lyrion/",
|
||||
"section": "hosting",
|
||||
"order": 80,
|
||||
"module": "lyrion"
|
||||
"id": "lyrion",
|
||||
"name": "Lyrion",
|
||||
"path": "/lyrion/",
|
||||
"category": "mesh",
|
||||
"description": ""
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "nac",
|
||||
"name": "Client Guardian",
|
||||
"category": "security",
|
||||
"category": "auth",
|
||||
"icon": "👥",
|
||||
"path": "/nac/",
|
||||
"order": 130,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "ndpid",
|
||||
"name": "nDPId",
|
||||
"category": "network",
|
||||
"category": "mind",
|
||||
"icon": "🔬",
|
||||
"path": "/ndpid/",
|
||||
"order": 32,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "netdata",
|
||||
"name": "Netdata",
|
||||
"category": "monitoring",
|
||||
"category": "mind",
|
||||
"icon": "📊",
|
||||
"path": "/netdata/",
|
||||
"order": 300,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Network Diagnostics",
|
||||
"icon": "🩺",
|
||||
"path": "/netdiag/",
|
||||
"category": "network",
|
||||
"category": "root",
|
||||
"order": 921,
|
||||
"description": "Network troubleshooting tools: ping, traceroute, DNS, WHOIS, MTR, port scan"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "netifyd",
|
||||
"name": "Netifyd",
|
||||
"category": "network",
|
||||
"category": "mind",
|
||||
"icon": "N",
|
||||
"path": "/netifyd/",
|
||||
"order": 235,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "netmodes",
|
||||
"name": "Network Modes",
|
||||
"category": "network",
|
||||
"category": "mesh",
|
||||
"icon": "🔀",
|
||||
"path": "/netmodes/",
|
||||
"order": 200,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "nettweak",
|
||||
"name": "Network Tuning",
|
||||
"category": "system",
|
||||
"category": "mesh",
|
||||
"icon": "🔧",
|
||||
"path": "/nettweak/",
|
||||
"order": 450,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "network-anomaly",
|
||||
"name": "Network-anomaly",
|
||||
"category": "security",
|
||||
"category": "wall",
|
||||
"icon": "📊",
|
||||
"path": "/network-anomaly/",
|
||||
"order": 140,
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
{
|
||||
"name": "Newsbin",
|
||||
"path": "/newsbin/",
|
||||
"icon": "📥",
|
||||
"category": "apps",
|
||||
"order": 814,
|
||||
"description": "Usenet downloader management"
|
||||
"name": "Newsbin",
|
||||
"path": "/newsbin/",
|
||||
"icon": "📥",
|
||||
"category": "mesh",
|
||||
"order": 814,
|
||||
"description": "Usenet downloader management",
|
||||
"id": "newsbin"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "nextcloud",
|
||||
"name": "Nextcloud",
|
||||
"category": "apps",
|
||||
"category": "mesh",
|
||||
"icon": "☁️",
|
||||
"path": "/nextcloud/",
|
||||
"order": 505,
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
{
|
||||
"name": "Ollama AI",
|
||||
"path": "/ollama/",
|
||||
"icon": "🧠",
|
||||
"category": "apps",
|
||||
"order": 800,
|
||||
"description": "Local AI inference with Ollama"
|
||||
"name": "Ollama AI",
|
||||
"path": "/ollama/",
|
||||
"icon": "🧠",
|
||||
"category": "mind",
|
||||
"order": 800,
|
||||
"description": "Local AI inference with Ollama",
|
||||
"id": "ollama"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "openclaw",
|
||||
"name": "OpenClaw OSINT",
|
||||
"category": "security",
|
||||
"category": "auth",
|
||||
"icon": "🕵️",
|
||||
"path": "/openclaw/",
|
||||
"order": 708,
|
||||
|
|
|
|||
|
|
@ -1 +1,9 @@
|
|||
{"id":"ossec","name":"OSSEC HIDS","icon":"🔒","path":"/ossec/","category":"security","order":952,"description":"Host intrusion detection"}
|
||||
{
|
||||
"id": "ossec",
|
||||
"name": "OSSEC HIDS",
|
||||
"icon": "🔒",
|
||||
"path": "/ossec/",
|
||||
"category": "wall",
|
||||
"order": 952,
|
||||
"description": "Host intrusion detection"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
{
|
||||
"id": "p2p",
|
||||
"name": "P2P Hub",
|
||||
"icon": "🔗",
|
||||
"path": "/p2p/",
|
||||
"category": "network",
|
||||
"order": 590,
|
||||
"description": "Peer-to-Peer Network Hub",
|
||||
"requires": ["secubox-p2p"]
|
||||
"id": "p2p",
|
||||
"name": "P2P Hub",
|
||||
"icon": "🔗",
|
||||
"path": "/p2p/",
|
||||
"category": "mesh",
|
||||
"order": 590,
|
||||
"description": "Peer-to-Peer Network Hub",
|
||||
"requires": [
|
||||
"secubox-p2p"
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
{
|
||||
"name": "PeerTube",
|
||||
"path": "/peertube/",
|
||||
"icon": "📹",
|
||||
"category": "apps",
|
||||
"order": 811,
|
||||
"description": "Federated video platform"
|
||||
"name": "PeerTube",
|
||||
"path": "/peertube/",
|
||||
"icon": "📹",
|
||||
"category": "mesh",
|
||||
"order": 811,
|
||||
"description": "Federated video platform",
|
||||
"id": "peertube"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
{
|
||||
"name": "PhotoPrism",
|
||||
"path": "/photoprism/",
|
||||
"icon": "📷",
|
||||
"category": "apps",
|
||||
"order": 617,
|
||||
"description": "Photo management and AI recognition"
|
||||
"name": "PhotoPrism",
|
||||
"path": "/photoprism/",
|
||||
"icon": "📷",
|
||||
"category": "mesh",
|
||||
"order": 617,
|
||||
"description": "Photo management and AI recognition",
|
||||
"id": "photoprism"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "PicoBrew",
|
||||
"icon": "🍺",
|
||||
"path": "/picobrew/",
|
||||
"category": "apps",
|
||||
"category": "mesh",
|
||||
"order": 496,
|
||||
"description": "Homebrew fermentation controller"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "portal",
|
||||
"name": "Portal",
|
||||
"category": "dashboard",
|
||||
"category": "root",
|
||||
"icon": "🔐",
|
||||
"path": "/portal/",
|
||||
"order": 1,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "publish",
|
||||
"name": "Publish",
|
||||
"category": "publishing",
|
||||
"category": "boot",
|
||||
"icon": "📡",
|
||||
"path": "/publish/",
|
||||
"order": 600,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "qos",
|
||||
"name": "Bandwidth Manager",
|
||||
"category": "network",
|
||||
"category": "mesh",
|
||||
"icon": "📶",
|
||||
"path": "/qos/",
|
||||
"order": 220,
|
||||
|
|
|
|||
|
|
@ -1 +1,9 @@
|
|||
{"id":"redroid","name":"Redroid","icon":"🤖","path":"/redroid/","category":"apps","order":821,"description":"Android in container"}
|
||||
{
|
||||
"id": "redroid",
|
||||
"name": "Redroid",
|
||||
"icon": "🤖",
|
||||
"path": "/redroid/",
|
||||
"category": "mesh",
|
||||
"order": 821,
|
||||
"description": "Android in container"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "reporter",
|
||||
"name": "Reporter",
|
||||
"category": "monitoring",
|
||||
"category": "mind",
|
||||
"icon": "📊",
|
||||
"path": "/reporter/",
|
||||
"order": 909,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "RezApp",
|
||||
"icon": "📦",
|
||||
"path": "/rezapp/",
|
||||
"category": "apps",
|
||||
"category": "root",
|
||||
"order": 494,
|
||||
"description": "Application deployment and management"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Migration Roadmap",
|
||||
"icon": "🗺️",
|
||||
"path": "/roadmap/",
|
||||
"category": "system",
|
||||
"category": "mind",
|
||||
"order": 900,
|
||||
"description": "OpenWRT to Debian migration tracking"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "routes",
|
||||
"name": "Routes",
|
||||
"category": "network",
|
||||
"category": "root",
|
||||
"icon": "🛣️",
|
||||
"path": "/routes/",
|
||||
"order": 907,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
"name": "Remote Terminal",
|
||||
"icon": "🖥️",
|
||||
"path": "/rtty/",
|
||||
"category": "system",
|
||||
"category": "root",
|
||||
"order": 905,
|
||||
"description": "Web-based remote terminal access using rtty"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,10 @@
|
|||
{
|
||||
"title": "RustDesk",
|
||||
"subtitle": "Remote desktop relay",
|
||||
"icon": "fa-desktop",
|
||||
"url": "/rustdesk/",
|
||||
"section": "remote-access",
|
||||
"order": 70,
|
||||
"module": "rustdesk"
|
||||
"id": "rustdesk",
|
||||
"name": "RustDesk",
|
||||
"path": "/rustdesk/",
|
||||
"category": "mesh",
|
||||
"description": ""
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "saas-relay",
|
||||
"name": "SaaS Relay",
|
||||
"category": "services",
|
||||
"category": "mind",
|
||||
"icon": "🔄",
|
||||
"path": "/saas-relay/",
|
||||
"order": 492,
|
||||
|
|
|
|||
|
|
@ -1 +1,10 @@
|
|||
{"id":"simplex","name":"SimpleX","icon":"💬","path":"/simplex/","category":"apps","order":816,"description":"Zero-knowledge private messaging server","color":"#6366f1"}
|
||||
{
|
||||
"id": "simplex",
|
||||
"name": "SimpleX",
|
||||
"icon": "💬",
|
||||
"path": "/simplex/",
|
||||
"category": "mesh",
|
||||
"order": 816,
|
||||
"description": "Zero-knowledge private messaging server",
|
||||
"color": "#6366f1"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "smtp-relay",
|
||||
"name": "SMTP Relay",
|
||||
"category": "services",
|
||||
"category": "mesh",
|
||||
"icon": "envelope",
|
||||
"path": "/smtp-relay/",
|
||||
"order": 915,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "soc",
|
||||
"name": "Soc",
|
||||
"category": "dashboard",
|
||||
"category": "wall",
|
||||
"icon": "🛡️",
|
||||
"path": "/soc/",
|
||||
"order": 100,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "streamforge",
|
||||
"name": "StreamForge",
|
||||
"category": "apps",
|
||||
"category": "mesh",
|
||||
"icon": "🔨",
|
||||
"path": "/streamforge/",
|
||||
"order": 510,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"id": "streamlit",
|
||||
"name": "Streamlit",
|
||||
"category": "apps",
|
||||
"category": "mesh",
|
||||
"icon": "🎯",
|
||||
"path": "/streamlit/",
|
||||
"order": 500,
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user