diff --git a/neode-ui/src/components/CompanionIntroOverlay.vue b/neode-ui/src/components/CompanionIntroOverlay.vue index 9ecc5372..89f2c2a7 100644 --- a/neode-ui/src/components/CompanionIntroOverlay.vue +++ b/neode-ui/src/components/CompanionIntroOverlay.vue @@ -79,7 +79,10 @@ import { ref, onMounted, watch } from 'vue' import * as QRCode from 'qrcode' const STORAGE_KEY = 'neode_companion_intro_seen' -const DEFAULT_DOWNLOAD_URL = '/packages/archipelago-companion.apk.zip' +// Absolute URL so the QR works when scanned by a phone (a relative path has no +// host to resolve). Points at the companion APK hosted on the 146 release server +// (publicly reachable) rather than the local node's /packages copy. +const DEFAULT_DOWNLOAD_URL = 'http://146.59.87.168:3000/lfg2025/archy/raw/branch/main/neode-ui/public/packages/archipelago-companion.apk.zip' const visible = ref(false) const qrDataUrl = ref('') diff --git a/neode-ui/src/views/Dashboard.vue b/neode-ui/src/views/Dashboard.vue index 23b04d38..34d85cc4 100644 --- a/neode-ui/src/views/Dashboard.vue +++ b/neode-ui/src/views/Dashboard.vue @@ -318,7 +318,9 @@ function onContentTouchEnd(e: TouchEvent) { if (idx < 0) return const next = idx + (dx < 0 ? 1 : -1) // swipe left → next tab, right → previous if (next < 0 || next >= tabs.length) return - router.push(tabs[next].to).catch(() => {}) + const target = tabs[next] + if (!target) return + router.push(target.to).catch(() => {}) } watch(() => route.path, (newPath) => {