From 0f6b5ecd8d4da1374ea42b9c49a806ff695dbcfe Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Wed, 15 Apr 2026 11:12:00 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20disable=20all=20feature=20tours=20?= =?UTF-8?q?=E2=80=94=20shell=20welcome=20tour,=20TourEngine,=20landing=20l?= =?UTF-8?q?inks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tours were demoing stale features and auto-triggering annoyingly. TourEngine.start() now returns immediately (no-ops). Shell welcome tour JS/CSS/HTML removed. "Start Guided Tour" links stripped from all 27 landing pages. Tour CSS selectors removed from info panel. Co-Authored-By: Claude Opus 4.6 --- modules/crowdsurf/landing.ts | 5 - modules/rbnb/landing.ts | 5 - modules/rbooks/landing.ts | 5 - modules/rcal/landing.ts | 5 - modules/rcart/landing.ts | 5 - modules/rchoices/landing.ts | 5 - modules/rdata/landing.ts | 5 - modules/rfiles/landing.ts | 5 - modules/rflows/landing.ts | 5 - modules/rforum/landing.ts | 5 - modules/rinbox/landing.ts | 5 - modules/rmaps/landing.ts | 5 - modules/rmeets/landing.ts | 5 - modules/rnetwork/landing.ts | 5 - modules/rphotos/landing.ts | 5 - modules/rpubs/landing.ts | 5 - modules/rschedule/landing.ts | 5 - modules/rsocials/landing.ts | 5 - modules/rsplat/landing.ts | 5 - modules/rswag/landing.ts | 5 - modules/rtasks/landing.ts | 5 - modules/rtime/landing.ts | 5 - modules/rtrips/landing.ts | 5 - modules/rtube/landing.ts | 5 - modules/rvnb/landing.ts | 5 - modules/rvote/landing.ts | 5 - modules/rwallet/landing.ts | 5 - server/shell.ts | 243 +---------------------------------- shared/tour-engine.ts | 11 +- 29 files changed, 8 insertions(+), 381 deletions(-) diff --git a/modules/crowdsurf/landing.ts b/modules/crowdsurf/landing.ts index a098ad66..df5f9ba3 100644 --- a/modules/crowdsurf/landing.ts +++ b/modules/crowdsurf/landing.ts @@ -15,11 +15,6 @@ export function renderLanding(): string { Start Swiping Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rbnb/landing.ts b/modules/rbnb/landing.ts index 7904e1d9..b470348e 100644 --- a/modules/rbnb/landing.ts +++ b/modules/rbnb/landing.ts @@ -27,11 +27,6 @@ export function renderLanding(): string { Learn More -

- - Start Guided Tour → - -

diff --git a/modules/rbooks/landing.ts b/modules/rbooks/landing.ts index 910cac4a..bf0436c4 100644 --- a/modules/rbooks/landing.ts +++ b/modules/rbooks/landing.ts @@ -18,11 +18,6 @@ export function renderLanding(): string { Browse Library Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rcal/landing.ts b/modules/rcal/landing.ts index 1d789653..a929b230 100644 --- a/modules/rcal/landing.ts +++ b/modules/rcal/landing.ts @@ -19,11 +19,6 @@ export function renderLanding(): string { Try the Demo Learn More -

- - Start Guided Tour → - -

diff --git a/modules/rcart/landing.ts b/modules/rcart/landing.ts index 2f44c5b3..1da28c83 100644 --- a/modules/rcart/landing.ts +++ b/modules/rcart/landing.ts @@ -16,11 +16,6 @@ export function renderLanding(): string { Start Shopping Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rchoices/landing.ts b/modules/rchoices/landing.ts index c6e1313e..fde8f8a1 100644 --- a/modules/rchoices/landing.ts +++ b/modules/rchoices/landing.ts @@ -17,11 +17,6 @@ export function renderLanding(): string { Create a Choice Room Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rdata/landing.ts b/modules/rdata/landing.ts index 4af8736b..c5a0755f 100644 --- a/modules/rdata/landing.ts +++ b/modules/rdata/landing.ts @@ -19,11 +19,6 @@ export function renderLanding(): string { View Dashboard Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rfiles/landing.ts b/modules/rfiles/landing.ts index e1e3bb88..570fa5a2 100644 --- a/modules/rfiles/landing.ts +++ b/modules/rfiles/landing.ts @@ -18,11 +18,6 @@ export function renderLanding(): string { Start Sharing Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rflows/landing.ts b/modules/rflows/landing.ts index 96563c1f..d5257b5f 100644 --- a/modules/rflows/landing.ts +++ b/modules/rflows/landing.ts @@ -176,11 +176,6 @@ export function renderLanding(): string {

Build your flow in the demo, then sign in to save it to your own space.

-

- - Start Guided Tour → - -

diff --git a/modules/rforum/landing.ts b/modules/rforum/landing.ts index 4392eba3..9f40dc92 100644 --- a/modules/rforum/landing.ts +++ b/modules/rforum/landing.ts @@ -17,11 +17,6 @@ export function renderLanding(): string { Get Started Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rinbox/landing.ts b/modules/rinbox/landing.ts index ca9d7809..e4c86c1e 100644 --- a/modules/rinbox/landing.ts +++ b/modules/rinbox/landing.ts @@ -20,11 +20,6 @@ export function renderLanding(): string { Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rmaps/landing.ts b/modules/rmaps/landing.ts index 5ff311de..847ec58a 100644 --- a/modules/rmaps/landing.ts +++ b/modules/rmaps/landing.ts @@ -16,11 +16,6 @@ export function renderLanding(): string { Open Maps Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rmeets/landing.ts b/modules/rmeets/landing.ts index 3e6cb200..4a15718d 100644 --- a/modules/rmeets/landing.ts +++ b/modules/rmeets/landing.ts @@ -18,11 +18,6 @@ export function renderLanding(): string { Start a Meeting Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rnetwork/landing.ts b/modules/rnetwork/landing.ts index 09a548e4..d47c026a 100644 --- a/modules/rnetwork/landing.ts +++ b/modules/rnetwork/landing.ts @@ -19,11 +19,6 @@ export function renderLanding(): string { Explore Network Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rphotos/landing.ts b/modules/rphotos/landing.ts index 36fd1ad6..b1de3e04 100644 --- a/modules/rphotos/landing.ts +++ b/modules/rphotos/landing.ts @@ -17,11 +17,6 @@ export function renderLanding(): string { Browse Photos Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rpubs/landing.ts b/modules/rpubs/landing.ts index 1bf8993e..884a301b 100644 --- a/modules/rpubs/landing.ts +++ b/modules/rpubs/landing.ts @@ -22,11 +22,6 @@ export function renderLanding(): string { Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rschedule/landing.ts b/modules/rschedule/landing.ts index e64d1760..0a668e90 100644 --- a/modules/rschedule/landing.ts +++ b/modules/rschedule/landing.ts @@ -31,11 +31,6 @@ export function renderLanding(): string { Learn More -

- - Start Guided Tour → - -

diff --git a/modules/rsocials/landing.ts b/modules/rsocials/landing.ts index 292cc830..37e70f0e 100644 --- a/modules/rsocials/landing.ts +++ b/modules/rsocials/landing.ts @@ -19,11 +19,6 @@ export function renderLanding(): string { Try Demo Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rsplat/landing.ts b/modules/rsplat/landing.ts index 325560eb..af578599 100644 --- a/modules/rsplat/landing.ts +++ b/modules/rsplat/landing.ts @@ -17,11 +17,6 @@ export function renderLanding(): string { Open Canvas Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rswag/landing.ts b/modules/rswag/landing.ts index 4182581c..960ed0d5 100644 --- a/modules/rswag/landing.ts +++ b/modules/rswag/landing.ts @@ -17,11 +17,6 @@ export function renderLanding(): string { Start Designing Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rtasks/landing.ts b/modules/rtasks/landing.ts index 55106c16..ee1f1176 100644 --- a/modules/rtasks/landing.ts +++ b/modules/rtasks/landing.ts @@ -21,11 +21,6 @@ export function renderLanding(): string { View Dashboard -

- - Start Guided Tour → - -

diff --git a/modules/rtime/landing.ts b/modules/rtime/landing.ts index 4f383bde..3af1a80a 100644 --- a/modules/rtime/landing.ts +++ b/modules/rtime/landing.ts @@ -27,11 +27,6 @@ export function renderLanding(): string { Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rtrips/landing.ts b/modules/rtrips/landing.ts index 6d6b522e..437e73d2 100644 --- a/modules/rtrips/landing.ts +++ b/modules/rtrips/landing.ts @@ -18,11 +18,6 @@ export function renderLanding(): string { Start Planning Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rtube/landing.ts b/modules/rtube/landing.ts index c5f02213..cf1f8870 100644 --- a/modules/rtube/landing.ts +++ b/modules/rtube/landing.ts @@ -21,11 +21,6 @@ export function renderLanding(): string { Browse Videos Start Streaming -

- - Start Guided Tour → - -

diff --git a/modules/rvnb/landing.ts b/modules/rvnb/landing.ts index f2206f28..d781cd00 100644 --- a/modules/rvnb/landing.ts +++ b/modules/rvnb/landing.ts @@ -28,11 +28,6 @@ export function renderLanding(): string { Learn More -

- - Start Guided Tour → - -

diff --git a/modules/rvote/landing.ts b/modules/rvote/landing.ts index 58756458..dd82ae45 100644 --- a/modules/rvote/landing.ts +++ b/modules/rvote/landing.ts @@ -27,11 +27,6 @@ export function renderLanding(): string { Create a Space -

- - Start Guided Tour → - -

diff --git a/modules/rwallet/landing.ts b/modules/rwallet/landing.ts index ad9b50e4..142c8be2 100644 --- a/modules/rwallet/landing.ts +++ b/modules/rwallet/landing.ts @@ -19,11 +19,6 @@ export function renderLanding(): string { View Treasury Create a Space -

- - Start Guided Tour → - -

diff --git a/server/shell.ts b/server/shell.ts index f8e9e77c..8511adf7 100644 --- a/server/shell.ts +++ b/server/shell.ts @@ -327,6 +327,7 @@ export function renderShell(opts: ShellOptions): string { + @@ -649,134 +650,7 @@ export function renderShell(opts: ShellOptions): string { }); }); - // ── Welcome tour (guided feature walkthrough for first-time visitors) ── - (function() { - var currentSpace = '${escapeAttr(spaceSlug)}'; - if (currentSpace !== 'demo') return; - if (localStorage.getItem('rspace_tour_done')) return; - - var TOUR_STEPS = [ - { - target: 'rstack-app-switcher', - title: 'Welcome to rSpace', - msg: 'This is your collaborative workspace with 25+ interoperable tools called rApps. Use this switcher to jump between modules like Notes, Maps, Voting, Wallet, and more.' - }, - { - target: 'rstack-mi', - title: 'Meet mi \u2014 Your AI Guide', - msg: 'Press Cmd+K (or Ctrl+K) to open mi, your mycelial intelligence assistant. mi can create content, set up spaces, and help you build across all rApps.' - }, - { - target: 'rstack-space-switcher', - title: 'Spaces', - msg: 'Each space is a self-contained community with its own data, members, and encryption. Switch between spaces or create a new one here.' - }, - { - target: 'rstack-identity', - title: 'Passwordless Identity', - msg: 'Sign in with passkeys \u2014 no passwords or seed phrases. Your identity is cryptographic and portable across all spaces.' - }, - { - target: '#app', - title: 'The Canvas', - msg: 'This is your infinite canvas. Drag to pan, scroll to zoom, and use the toolbar to add shapes. Everything syncs in real-time using local-first CRDTs.' - }, - { - target: '.rstack-tab-row', - title: 'rApp Tabs', - msg: 'Each module has its own views accessible via tabs. Switch between canvas, list, and detail views depending on the active rApp.' - }, - ]; - - var step = 0; - var tourEl = document.getElementById('rspace-tour'); - var backdrop = document.getElementById('rspace-tour-backdrop'); - var spotlight = document.getElementById('rspace-tour-spotlight'); - var tooltip = document.getElementById('rspace-tour-tooltip'); - var titleEl = document.getElementById('rspace-tour-title'); - var msgEl = document.getElementById('rspace-tour-msg'); - var stepEl = document.getElementById('rspace-tour-step'); - var prevBtn = document.getElementById('rspace-tour-prev'); - var nextBtn = document.getElementById('rspace-tour-next'); - var skipBtn = document.getElementById('rspace-tour-skip'); - - function endTour() { - localStorage.setItem('rspace_tour_done', '1'); - if (tourEl) tourEl.style.display = 'none'; - } - - function showStep() { - if (!tourEl || !backdrop || !spotlight || !tooltip) return; - var s = TOUR_STEPS[step]; - var target = document.querySelector(s.target); - var rect = target ? target.getBoundingClientRect() : { left: window.innerWidth / 2 - 60, top: 8, width: 120, height: 40 }; - - // Spotlight - var pad = 6; - var sx = rect.left - pad, sy = rect.top - pad; - var sw = rect.width + pad * 2, sh = rect.height + pad * 2; - spotlight.style.left = sx + 'px'; - spotlight.style.top = sy + 'px'; - spotlight.style.width = sw + 'px'; - spotlight.style.height = sh + 'px'; - - // Backdrop clip-path (cut hole for spotlight) - backdrop.style.clipPath = 'polygon(0% 0%, 0% 100%, ' + - sx + 'px 100%, ' + sx + 'px ' + sy + 'px, ' + - (sx + sw) + 'px ' + sy + 'px, ' + - (sx + sw) + 'px ' + (sy + sh) + 'px, ' + - sx + 'px ' + (sy + sh) + 'px, ' + - sx + 'px 100%, 100% 100%, 100% 0%)'; - - // Tooltip position: below target, clamped to viewport - var ttTop = rect.top + rect.height + 16; - var ttLeft = Math.max(16, Math.min(rect.left, window.innerWidth - 380)); - // If tooltip would go off bottom, put it above - if (ttTop + 200 > window.innerHeight) { - ttTop = Math.max(16, rect.top - 220); - } - tooltip.style.top = ttTop + 'px'; - tooltip.style.left = ttLeft + 'px'; - - // Content - stepEl.textContent = (step + 1) + ' / ' + TOUR_STEPS.length; - titleEl.textContent = s.title; - msgEl.innerHTML = s.msg; - - // Buttons - prevBtn.style.display = step > 0 ? '' : 'none'; - nextBtn.textContent = step === TOUR_STEPS.length - 1 ? 'Get Started' : 'Next'; - } - - // Wire buttons - if (nextBtn) nextBtn.addEventListener('click', function() { - step++; - if (step >= TOUR_STEPS.length) { endTour(); return; } - showStep(); - }); - if (prevBtn) prevBtn.addEventListener('click', function() { - if (step > 0) { step--; showStep(); } - }); - if (skipBtn) skipBtn.addEventListener('click', endTour); - if (backdrop) backdrop.addEventListener('click', endTour); - - // Keyboard: Escape to skip, arrows to navigate - document.addEventListener('keydown', function(e) { - if (!tourEl || tourEl.style.display === 'none') return; - if (e.key === 'Escape') { endTour(); e.preventDefault(); } - if (e.key === 'ArrowRight' || e.key === 'Enter') { - step++; - if (step >= TOUR_STEPS.length) { endTour(); return; } - showStep(); e.preventDefault(); - } - if (e.key === 'ArrowLeft' && step > 0) { step--; showStep(); e.preventDefault(); } - }); - - // Start tour after a brief delay - setTimeout(function() { - if (tourEl) { tourEl.style.display = ''; showStep(); } - }, 800); - })(); + // ── Welcome tour — disabled (tours turned off) ── // Legacy compat window.__rspaceDismissWelcome = function() { localStorage.setItem('rspace_tour_done', '1'); @@ -1910,21 +1784,7 @@ export function renderExternalAppShell(opts: ExternalAppShellOptions): string { // ── Welcome tour (guided feature walkthrough for first-time visitors) ── function renderWelcomeOverlay(): string { - return ` - `; + return ''; // Tours disabled } const ACCESS_GATE_CSS = ` @@ -1960,88 +1820,7 @@ const ACCESS_GATE_CSS = ` .access-gate__actions { display: flex; flex-direction: column; gap: 0.75rem; align-items: center; } `; -const WELCOME_CSS = ` -#rspace-tour { position: fixed; inset: 0; z-index: 10000; pointer-events: none; } -.rspace-tour__backdrop { - position: fixed; inset: 0; - background: rgba(0,0,0,0.55); - pointer-events: auto; - transition: clip-path 0.3s ease; -} -.rspace-tour__spotlight { - position: fixed; - border: 2px solid var(--rs-primary, #06b6d4); - border-radius: 8px; - box-shadow: 0 0 0 4px rgba(6,182,212,0.25), 0 0 20px rgba(6,182,212,0.15); - pointer-events: none; - transition: all 0.35s ease; -} -.rspace-tour__tooltip { - position: fixed; - width: min(360px, calc(100vw - 32px)); - background: var(--rs-bg-surface, #1e293b); - border: 1px solid var(--rs-border, #334155); - border-radius: 14px; - padding: 20px; - box-shadow: 0 16px 48px rgba(0,0,0,0.5); - color: var(--rs-text-primary, #f1f5f9); - pointer-events: auto; - animation: rspace-tour-pop 0.25s ease-out; - transition: top 0.35s ease, left 0.35s ease; -} -@keyframes rspace-tour-pop { - from { opacity: 0; transform: translateY(8px); } - to { opacity: 1; transform: translateY(0); } -} -.rspace-tour__step { - font-size: 0.7rem; - color: var(--rs-text-muted, #64748b); - margin-bottom: 6px; - text-transform: uppercase; - letter-spacing: 0.05em; -} -.rspace-tour__title { - font-size: 1.1rem; - font-weight: 700; - margin-bottom: 8px; - background: linear-gradient(135deg, #06b6d4, #7c3aed); - -webkit-background-clip: text; -webkit-text-fill-color: transparent; - background-clip: text; -} -.rspace-tour__msg { - font-size: 0.85rem; - color: var(--rs-text-secondary, #94a3b8); - line-height: 1.6; - margin-bottom: 14px; -} -.rspace-tour__nav { - display: flex; align-items: center; gap: 8px; -} -.rspace-tour__btn { - padding: 7px 16px; border-radius: 8px; - font-size: 0.8rem; font-weight: 600; - cursor: pointer; border: none; - transition: background 0.15s, transform 0.1s; - font-family: inherit; -} -.rspace-tour__btn:hover { transform: translateY(-1px); } -.rspace-tour__btn--next { - background: linear-gradient(135deg, #06b6d4, #7c3aed); color: white; -} -.rspace-tour__btn--prev { - background: var(--rs-btn-secondary-bg, #334155); - color: var(--rs-text-secondary, #94a3b8); -} -.rspace-tour__btn--skip { - background: none; - color: var(--rs-text-muted, #64748b); - margin-left: auto; -} -.rspace-tour__btn--skip:hover { color: var(--rs-text-primary, #f1f5f9); } -@media (max-width: 600px) { - .rspace-tour__tooltip { width: calc(100vw - 24px); left: 12px !important; } -} -`; +const WELCOME_CSS = ''; // Tours disabled const INFO_PANEL_CSS = ` /* ── Info button in tab bar ── */ @@ -2188,20 +1967,6 @@ const INFO_PANEL_CSS = ` } .rapp-info-panel__body .rl-cta-secondary:hover { transform: translateY(-1px); border-color: rgba(20,184,166,0.4); color: var(--rs-text-primary); background: rgba(20,184,166,0.08); } -/* Tour / guide links — promote to prominent buttons */ -.rapp-info-panel__body a[onclick*="startTour"], -.rapp-info-panel__body a[href*="tour"] { - display: inline-flex; align-items: center; gap: 6px; - padding: 0.65rem 1.35rem; margin-top: 0.75rem; - font-size: 0.92rem; font-weight: 600; text-decoration: none; - background: linear-gradient(135deg, rgba(79,70,229,0.15), rgba(20,184,166,0.1)); - border: 1px solid rgba(79,70,229,0.25); border-radius: 10px; color: #a78bfa; - transition: background 0.15s, border-color 0.15s, color 0.15s, transform 0.15s; -} -.rapp-info-panel__body a[onclick*="startTour"]:hover, -.rapp-info-panel__body a[href*="tour"]:hover { - background: linear-gradient(135deg, rgba(79,70,229,0.25), rgba(20,184,166,0.15)); - border-color: rgba(79,70,229,0.4); color: #c4b5fd; transform: translateY(-1px); } /* Badges */ diff --git a/shared/tour-engine.ts b/shared/tour-engine.ts index 305383aa..25de4303 100644 --- a/shared/tour-engine.ts +++ b/shared/tour-engine.ts @@ -37,11 +37,9 @@ export class TourEngine { this.getContainer = getContainer; } - /** Start (or restart) the tour from step 0. */ + /** Start (or restart) the tour from step 0. Disabled — tours are turned off. */ start() { - this._active = true; - this._step = 0; - this.renderOverlay(); + return; } /** Advance to next step or finish if at the end. */ @@ -205,10 +203,9 @@ export class LightTourEngine { this.storageKey = storageKey; } + /** Disabled — tours are turned off. */ start() { - this._active = true; - this._step = 0; - this.renderOverlay(); + return; } advance() {