release(v1.7.34-alpha): re-seed onboarding cache + rotating login bg + drop re-login zoom
All checks were successful
Build Archipelago ISO (dev) / build-iso (push) Successful in 22m52s

- useOnboarding.ts: when the backend gives a definitive answer
  (true/false, not a null retry failure), re-seed the
  neode_onboarding_complete localStorage flag accordingly. Fixes the
  case where a user clears site data on an already-onboarded node —
  OnboardingWrapper's useVideoBackground computed reads localStorage
  synchronously, so without this re-seed the intro video would fire
  again on /login even though RootRedirect correctly sent them
  straight to /login.
- OnboardingWrapper.vue: login background now rotates through
  bg-intro-1..6 on each /login mount, with the current index
  persisted to localStorage (neode_login_bg_idx) so subsequent
  logouts advance rather than repeat the same image.
- Dashboard.vue: subsequent-login branch drops the 1.2s showZoomIn
  entirely. Only the first dashboard entry after onboarding plays
  the full zoom + glitch reveal; every re-login now just fades in
  with the welcome typing (~300ms).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-04-22 05:42:52 -04:00
parent 65582d67c6
commit 5f6b4232d2
8 changed files with 58 additions and 26 deletions

2
core/Cargo.lock generated
View File

@@ -80,7 +80,7 @@ checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
[[package]]
name = "archipelago"
version = "1.7.33-alpha"
version = "1.7.34-alpha"
dependencies = [
"anyhow",
"archipelago-container",

View File

@@ -1,6 +1,6 @@
[package]
name = "archipelago"
version = "1.7.33-alpha"
version = "1.7.34-alpha"
edition = "2021"
description = "Archipelago Bitcoin Node OS - Native backend"
authors = ["Archipelago Team"]

View File

@@ -24,7 +24,18 @@ export async function isOnboardingComplete(): Promise<boolean> {
// as already-onboarded and skip the wizard entirely). Only fall
// back to localStorage if the backend is unreachable.
const result = await callWithRetry(() => rpcClient.isOnboardingComplete(), 2)
if (result !== null) return result
if (result !== null) {
// Re-seed the localStorage cache so non-async consumers
// (OnboardingWrapper's useVideoBackground computed, etc.) see the
// right answer after the user clears site data on an already-
// onboarded node.
if (result) {
try { localStorage.setItem('neode_onboarding_complete', '1') } catch {}
} else {
try { localStorage.removeItem('neode_onboarding_complete') } catch {}
}
return result
}
return localStorage.getItem('neode_onboarding_complete') === '1'
}

View File

@@ -285,17 +285,15 @@ onMounted(() => {
loginTransition.setPendingWelcomeTyping(false)
}, 4000)
} else if (loginTransition.justLoggedIn) {
// Regular re-login — quick interface draw, no triple glitch flashes.
// Just the zoom-in for a short beat, then welcome typing fires fast.
// Regular re-login — no zoom, no glitch. Just land on the
// dashboard and kick off the welcome typing quickly.
playDashboardLoadOomph()
showZoomIn.value = true
loginTransition.setPendingWelcomeTyping(true)
loginTransition.setJustLoggedIn(false)
scheduledTimeout(() => { showZoomIn.value = false }, 1200)
scheduledTimeout(() => {
loginTransition.setStartWelcomeTyping(true)
loginTransition.setPendingWelcomeTyping(false)
}, 600)
}, 300)
}
window.addEventListener('keydown', handleKioskShortcuts)

View File

@@ -122,7 +122,32 @@ const routeBackgrounds: Record<string, string> = {
'/login': 'bg-intro.jpg' // Video loops from splash (same as intro)
}
const loginBackground = 'bg-intro-1.jpg'
// Rotate the login background so the lock screen doesn't look
// identical on every logout. Cycles through bg-intro-1..6 using a
// counter persisted to localStorage so subsequent visits advance.
const LOGIN_BACKGROUNDS = [
'bg-intro-1.jpg',
'bg-intro-2.jpg',
'bg-intro-3.jpg',
'bg-intro-4.jpg',
'bg-intro-5.jpg',
'bg-intro-6.jpg',
]
function pickNextLoginBackground(): string {
try {
const raw = localStorage.getItem('neode_login_bg_idx')
const prev = raw !== null ? parseInt(raw, 10) : -1
const next = (Number.isFinite(prev) ? prev + 1 : 0) % LOGIN_BACKGROUNDS.length
localStorage.setItem('neode_login_bg_idx', String(next))
return LOGIN_BACKGROUNDS[next]!
} catch {
return LOGIN_BACKGROUNDS[Math.floor(Math.random() * LOGIN_BACKGROUNDS.length)]!
}
}
const loginBackground = ref(pickNextLoginBackground())
watch(() => route.path, (p) => {
if (p === '/login') loginBackground.value = pickNextLoginBackground()
})
// Restore video time from splash screen for seamless transition
function restoreVideoTime() {

View File

@@ -1,29 +1,27 @@
{
"version": "1.7.33-alpha",
"version": "1.7.34-alpha",
"release_date": "2026-04-22",
"changelog": [
"Onboarding fix: a fresh node would skip the full onboarding wizard and dump you straight at 'set password' if your browser had ever onboarded another node. The check now asks the actual node first instead of trusting browser memory.",
"Lock screen fix: logging out used to replay the full intro video every single time. Now once you've onboarded, logging out drops you on the static lock-screen background — login is instant, no movie.",
"Update fix: a brief network hiccup during an OTA update no longer triggers the full mock 'boot screen' animation on already-onboarded nodes. The page just shows a quiet spinner and reconnects when the backend is back. Boot screen is reserved for genuine fresh boots.",
"Login animation: the glitchy zoom-and-flash reveal now only plays the very first time you reach the dashboard after onboarding. Every subsequent login gets a quick interface draw — fast, no glitches.",
"PWA cache bumped so old browsers/devices reliably pick up new UI versions instead of serving stale cached assets after an update."
"Clearing browser data on an already-onboarded node no longer sends you back through the onboarding wizard. The page now asks the node on every visit and re-caches the answer locally, so clearing site data is harmless.",
"Login screen background now rotates each time you land on it — cycles through the six intro images so the lock screen doesn't look identical on every logout.",
"Removed the zoom-in effect from subsequent logins. Only the first-ever login (right after onboarding) plays the full zoom + glitch reveal; every re-login now just lands on the dashboard with the welcome typing, no animation."
],
"components": [
{
"name": "archipelago",
"current_version": "1.7.32-alpha",
"new_version": "1.7.33-alpha",
"download_url": "https://git.tx1138.com/lfg2025/archy/raw/branch/main/releases/v1.7.33-alpha/archipelago",
"sha256": "c75a226658cb8af7ecb4eff937cbc221bb2b1c93bf1dadd61c99b2f550376c8b",
"size_bytes": 40793648
"current_version": "1.7.33-alpha",
"new_version": "1.7.34-alpha",
"download_url": "https://git.tx1138.com/lfg2025/archy/raw/branch/main/releases/v1.7.34-alpha/archipelago",
"sha256": "ba0c6cb531f48a8d350775ab61972291c5c92a298551a7c0543d42e1fe3b18e1",
"size_bytes": 40791976
},
{
"name": "archipelago-frontend-1.7.33-alpha.tar.gz",
"current_version": "1.7.32-alpha",
"new_version": "1.7.33-alpha",
"download_url": "https://git.tx1138.com/lfg2025/archy/raw/branch/main/releases/v1.7.33-alpha/archipelago-frontend-1.7.33-alpha.tar.gz",
"sha256": "d6fd4648046d4ea05d33ef56180afda80e118f6d655ba7d339a2135a0a28e838",
"size_bytes": 77011007
"name": "archipelago-frontend-1.7.34-alpha.tar.gz",
"current_version": "1.7.33-alpha",
"new_version": "1.7.34-alpha",
"download_url": "https://git.tx1138.com/lfg2025/archy/raw/branch/main/releases/v1.7.34-alpha/archipelago-frontend-1.7.34-alpha.tar.gz",
"sha256": "8700c1ce6534567f008670a810682333966481e0c2e5d36164013219fb2ed3d9",
"size_bytes": 77007484
}
]
}

Binary file not shown.