Guided Tours¶
IntroVox's tour engine is built on Shepherd.js, wrapped in a Vue 3 frontend. This document describes how steps are rendered, what types exist, and how they're sequenced.
Tour Lifecycle¶
- App initialization —
main.jsmounts the IntroVox Vue app on every Nextcloud page - Server request — frontend calls
GET /apps/introvox/api/stepsto fetch the configured step list for the current user's language and group memberships - App-menu readiness check — waits for Nextcloud's app menu to render (since v1.4.1, with multiple fallback selectors and a 10-second timeout)
- Shepherd instantiation — creates a Shepherd
Tourwith the loaded steps - Auto-start — if the user hasn't completed/disabled the tour, it starts after a short delay
- User navigation — Next/Back/Close/Done buttons fire Shepherd actions and telemetry events
- Completion — sets localStorage and (on Done/Skip) the permanent-disable preference
Step Types¶
Centered Steps¶
attachTo: ""(empty)- Appear as a centered modal in the middle of the screen
- Used for welcome, transitions, and conclusion messages
Attached Steps¶
attachTo: "<css-selector>"withpositionset toright,left,top, orbottom- The target element gets a glowing border via Shepherd's overlay
- The step tooltip is positioned next to the element
Fallback Behavior (v1.4.1+)¶
If an attached step's target element is not found at tour start (e.g., Vue hasn't rendered it yet, or the app isn't installed), the step falls back to a centered display instead of being silently skipped. This was changed in v1.4.1 to avoid losing important content when timing or DOM availability varies.
Pre-v1.4.1, missing elements caused the step to be skipped entirely with a console warning:
Step Filtering¶
Steps are filtered server-side before reaching the frontend:
- Global enable check — if
wizard_enabledisfalse, the API returns an empty step list - Language check — the user's base language must be in
enabled_languages - Group check — steps with non-empty
visibleToGroupsmust intersect with the user's groups (viaIGroupManager::getUserGroupIds())
Disabled steps (enabled: false) are also filtered out before being sent to the frontend.
See API Reference for the request/response format.
Auto-Start Conditions¶
The tour auto-starts when all of these are true:
wizard_enabledistrue(admin setting)- The user's language is in
enabled_languages - The user has not set the
permanent_disablepreference - The user has not completed the wizard (per localStorage)
- The current
wizard_versionis newer than what the user last saw (used by Show wizard to all users) - The current page is the dashboard
Telemetry Events¶
The frontend reports three lifecycle events:
| Event | Endpoint | When |
|---|---|---|
start |
POST /apps/introvox/api/track/start |
Tour begins for a user |
complete |
POST /apps/introvox/api/track/complete |
User clicks Done on last step |
skip |
POST /apps/introvox/api/track/skip |
User clicks Skip and don't show again |
These are stored anonymously via TelemetryService and contribute to aggregate admin statistics.
See Backend Architecture for the telemetry service details.
Theming¶
The tour inherits Nextcloud's CSS variables, so light/dark/high-contrast modes work automatically. See Theme Support.
Closing Behavior¶
| Action | localStorage | Server preference | Re-shown? |
|---|---|---|---|
| ✕ Close | seen |
unchanged | Yes |
| Done | completed |
permanent_disable: true |
No, unless admin force-shows |
| Skip and don't show again | completed |
permanent_disable: true |
No, unless admin force-shows |
Customization Surface¶
Administrators can configure:
- Step title (plain text + emoji)
- Step content (HTML, sanitized server-side since v1.5.0)
- CSS selector for element highlighting
- Position relative to the highlighted element
- Enable/disable per step
- Group visibility per step (v1.2.0+)
- Step order via drag-and-drop
See Customization and Managing Wizard Steps.
See Also¶
- Customization — HTML, CSS selectors, positioning
- Step Visibility — group filters and user preferences
- Multi-Language Support — per-language step content
- Theme Support — light/dark/high contrast
- Architecture Overview — system design