From 4660a81d513a7b2aa529f55e02905764a28cd4c6 Mon Sep 17 00:00:00 2001 From: archipelago Date: Thu, 8 Oct 2026 11:18:42 -0400 Subject: [PATCH] fix: align publishing guides and simplify app selection --- docs/external-access-and-websites.md | 16 +++ neode-ui/src/components/SetupWalkthrough.vue | 6 +- .../src/views/publishing/PublishingSetup.vue | 99 ++++++++++--------- .../__tests__/PublishingSetup.test.ts | 4 +- 4 files changed, 77 insertions(+), 48 deletions(-) diff --git a/docs/external-access-and-websites.md b/docs/external-access-and-websites.md index 52f7e2ef..7df7bc29 100644 --- a/docs/external-access-and-websites.md +++ b/docs/external-access-and-websites.md @@ -268,3 +268,19 @@ were then unpublished and the smoke unit stopped. Only system Tor PID 1449 remained; no website listeners or owned FIPS drop-in remained. Both onion identity directories were preserved. The final state-directory durability change passed the 12-test isolated backend suite as well. + +### Walkthrough layout correction — 2026-10-08 + +The publishing guides now use the same available width and step alignment as +GoalDetail, with the existing small glass action buttons throughout. Step +navigation and grouped actions align left with consistent wrapping and gaps. +The external-access guide no longer renders the entire app inventory. A native +searchable app dropdown offers only guest-enabled apps and reveals grant controls +after a valid selection; installations without eligible apps show a short empty +state and a Browse apps link. + +The UI-only update was deployed to Framework with the previous UI retained at +`/opt/archipelago/web-ui.before-guide-layout-uat`. Production build and ten +walkthrough tests passed. Live browser comparisons at 1440px and 390px confirmed +matching original-guide widths/alignment and no horizontal overflow. Management +and wallet services were not restarted for this update. diff --git a/neode-ui/src/components/SetupWalkthrough.vue b/neode-ui/src/components/SetupWalkthrough.vue index f84f79cd..37bdef19 100644 --- a/neode-ui/src/components/SetupWalkthrough.vue +++ b/neode-ui/src/components/SetupWalkthrough.vue @@ -45,10 +45,10 @@ function move(offset: number) { {{ step.title }}{{ step.description }}
-
-
+
+
- +
diff --git a/neode-ui/src/views/publishing/PublishingSetup.vue b/neode-ui/src/views/publishing/PublishingSetup.vue index cc8ad64e..43aa15cb 100644 --- a/neode-ui/src/views/publishing/PublishingSetup.vue +++ b/neode-ui/src/views/publishing/PublishingSetup.vue @@ -41,12 +41,16 @@ const relays = ref('') const gateway = ref('') const nsiteUrl = ref('') const guestApp = ref('') +const guestSearch = ref('') const guestLabel = ref('Guest') const guestHours = ref(24) const issuedAccess = ref<{ id: string; token: string; app_id: string; expires_at: number } | null>(null) onDeactivated(() => { issuedAccess.value = null }) onBeforeUnmount(() => { issuedAccess.value = null }) const shareableApps = computed(() => status.value?.apps.filter(a => a.guest_access).filter((a, i, all) => all.findIndex(b => b.id === a.id) === i) ?? []) +watch(guestSearch, value => { + guestApp.value = shareableApps.value.find(app => `${app.name} (${app.id})` === value)?.id ?? '' +}) const guestTarget = computed(() => shareableApps.value.find(a => a.id === guestApp.value)) const acknowledgeNostr = ref(false) const acknowledgeUpload = ref(false) @@ -304,12 +308,12 @@ onMounted(refresh)