From 83dfed17c0b744db9e2fd6ed95389a72611bc08c Mon Sep 17 00:00:00 2001 From: Dorian Date: Thu, 19 Mar 2026 16:38:11 +0000 Subject: [PATCH] feat: Tor status + cleanup, Tailscale admin, marketplace install UX - Task 0: Tor status dot (green/red) + "Cleanup Old" rotated services button - Task 2: BTCPay already handled (opens new tab) - Task 3: Tailscale launches https://login.tailscale.com/admin/machines in new tab - Task 8: Marketplace install shows inline progress on card (removed banner) Co-Authored-By: Claude Opus 4.6 (1M context) --- neode-ui/src/views/AppSession.vue | 2 + neode-ui/src/views/Apps.vue | 2 +- neode-ui/src/views/Marketplace.vue | 104 ++++++----------------------- neode-ui/src/views/Server.vue | 63 ++++++++++++----- 4 files changed, 71 insertions(+), 100 deletions(-) diff --git a/neode-ui/src/views/AppSession.vue b/neode-ui/src/views/AppSession.vue index b0d64ed5..b8daa60e 100644 --- a/neode-ui/src/views/AppSession.vue +++ b/neode-ui/src/views/AppSession.vue @@ -376,6 +376,7 @@ const EXTERNAL_URLS: Record = { 'syntropy-institute': 'https://syntropy.institute', 't-zero': 'https://teeminuszero.net', 'nostrudel': 'https://nostrudel.ninja', + 'tailscale': 'https://login.tailscale.com/admin/machines', } const APP_TITLES: Record = { @@ -402,6 +403,7 @@ const NEW_TAB_APPS = new Set([ 'portainer', // X-Frame-Options: deny 'onlyoffice', // X-Frame-Options: SAMEORIGIN 'nginx-proxy-manager', // X-Frame-Options blocks + 'tailscale', // No local web UI — opens Tailscale admin ]) const mustOpenNewTab = computed(() => NEW_TAB_APPS.has(appId.value)) diff --git a/neode-ui/src/views/Apps.vue b/neode-ui/src/views/Apps.vue index 75553701..8332fe55 100644 --- a/neode-ui/src/views/Apps.vue +++ b/neode-ui/src/views/Apps.vue @@ -561,7 +561,7 @@ function canLaunch(pkg: PackageDataEntry): boolean { const TAB_LAUNCH_APPS = new Set([ 'btcpay-server', 'grafana', 'photoprism', 'homeassistant', 'vaultwarden', 'nextcloud', 'uptime-kuma', 'portainer', - 'onlyoffice', 'nginx-proxy-manager', + 'onlyoffice', 'nginx-proxy-manager', 'tailscale', ]) function opensInTab(id: string): boolean { diff --git a/neode-ui/src/views/Marketplace.vue b/neode-ui/src/views/Marketplace.vue index 61fee6c6..1691e079 100644 --- a/neode-ui/src/views/Marketplace.vue +++ b/neode-ui/src/views/Marketplace.vue @@ -2,78 +2,6 @@
- -
-
-
-
- - - - - - - -
-

{{ progress.title }}

-

{{ progress.message }}

-
-
-
- {{ progress.progress }}% -
-
- - -
-
-
-
-
-