fix(intro): audible entrance oomph, splash off deep routes, finale on intro shortcuts — with e2e cinematic suite
Three first-visit-experience bugs, all caught by the new e2e suite (e2e/intro-experience.spec.ts — 5 tests against the demo stack on real Chrome, instrumenting HTMLMediaElement/WebAudio/MutationObserver since headless can't hear or see the cinematic): - playDashboardLoadOomph was always silent: the login→dashboard route change closes the AudioContext (stopAllAudio), and the oomph only fetched the dead context. It now recreates one, riding the login click's sticky user activation. - A direct /login load in the demo hijacked into the splash: App.vue read route.path before the router resolved the initial navigation, so every deep-route boot looked like a root boot. The splash decision now reads window.location.pathname. - Replayed intros ran mute (enableCinematicSounds override) and the intro's shortcut exits skipped the dashboard finale (flag now armed on both demo and login exits). Verified: 5/5 e2e, 673/673 unit, vue-tsc clean. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -69,12 +69,22 @@ onMounted(() => {
|
||||
}, 2100)
|
||||
})
|
||||
|
||||
/** Any exit from the intro INTO login is the end of the cinematic — hand the
|
||||
* login the one-shot finale flag so the dashboard plays its full first-entry
|
||||
* reveal (zoom + oomph). OnboardingDone sets the same flag at the end of the
|
||||
* full wizard; these are the shortcut exits that used to skip it (which is
|
||||
* why the demo never got the big entrance). */
|
||||
function armOnboardingFinale() {
|
||||
try { sessionStorage.setItem('archy_onboarding_finale', '1') } catch { /* ignore */ }
|
||||
}
|
||||
|
||||
function goToOptions() {
|
||||
playNavSound('action')
|
||||
// Demo: skip the onboarding wizard (seed/identity setup) entirely — go straight
|
||||
// to login, which is prefilled with the demo password.
|
||||
if (isDemo) {
|
||||
localStorage.setItem('neode_onboarding_complete', '1')
|
||||
armOnboardingFinale()
|
||||
router.push('/login').catch(() => {})
|
||||
return
|
||||
}
|
||||
@@ -89,6 +99,7 @@ function goToRestore() {
|
||||
function goToLogin() {
|
||||
playNavSound('action')
|
||||
localStorage.setItem('neode_onboarding_complete', '1')
|
||||
armOnboardingFinale()
|
||||
router.push('/login').catch(() => {})
|
||||
}
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user