Guided tour
route name in code: GuidedTour
How to get here / where to go
Section titled “How to get here / where to go”Incoming
Section titled “Incoming”| Incoming | kind | Control |
|---|---|---|
| Escape the Crowd | navigate | — |
| Before the tour starts | navigate | — |
Outgoing
Section titled “Outgoing”| Outgoing | kind | Control |
|---|---|---|
| Sign-in prompt | navigate | — |
| Home | popTo | — |
| Route builder — start and time | navigate | — |
Capabilities on this screen
Section titled “Capabilities on this screen”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Place narration generated online, shown in the pane and read by the device voice | works | e2eGuidedTour.narrativePane ✓RNTL GuidedTourScreen.test.tsx ✓RNTL GuidedTourScreen.test.tsx ✓RNTL GuidedTourScreen.test.tsx ✓ | — |
| When the narration server fails, the app says a fallback sentence or reads the downloaded offline bundle | works | RNTLGuidedTourScreen.test.tsx ✓RNTL GuidedTourScreen.test.tsx ✓RNTL GuidedTourScreen.test.tsx ✓ | — |
| Arrival: the card after the first in-radius GPS fix, automatic confirmation after two | works | e2eGuidedTour.arrivalCard ✓RNTL GuidedTourScreen.test.tsx ✓RNTL GuidedTourScreen.test.tsx ✓e2e j2-marketplace-guided-tour.spec.ts ✓ | — |
| The “I’m here” button needs Google Directions; without a key it stays disabled | partial | e2eGuidedTour.arrivalImhere ✓ | #220 (New) |
| Skip a stop without counting a visit; manual “visited” on the list without GPS | works | RNTLGuidedTour.arrivalSkip ✓RNTL GuidedTour.markVisited ✓RNTL GuidedTourScreen.test.tsx ✓RNTL GuidedTourScreen.test.tsx ✓ | — |
| Questions to the guide: a daily-limited chat outside Premium, a voice session on Premium | works | RNTLChatModal.chatSuggestion ·RNTL GuidedTourScreen.test.tsx ✓RNTL GuidedTourScreen.test.tsx ✓RNTL GuidedTourScreen.test.tsx ✓API dialog.test.ts ✓ | — |
| Premium: the voice agent starts with the tour and greets; outside Premium the device voice greets | works | RNTLGuidedTourScreen.test.tsx ✓RNTL GuidedTourScreen.test.tsx ✓RNTL GuidedTourScreen.test.tsx ✓ | — |
| Without a GPS fix the tour is blocked with Retry — it never starts from an invented position | works | RNTLGuidedTourScreen.test.tsx ✓ | — |
| Ending the tour returns to Home without stacking a second one | works | e2eGuidedTour.end ✓e2e GuidedTour.endTourConfirm ✓RNTL GuidedTourScreen.test.tsx ✓ | — |
| After the last stop: a summary with points, an NPS rating and the tomorrow hook | works | e2eTourCelebrationModal.poiList ✓e2e NpsModal.step ✓e2e NpsModal.tomorrowHook ✓RNTL GuidedTourScreen.test.tsx ✓ | — |
| Pause, the stop list and the transcript are available during the tour | works | RNTLGuidedTour.pause ·RNTL GuidedTour.openStopsList ✓RNTL GuidedTour.transcript · | — |
Controls
Section titled “Controls”| Control | Label | element | Proof (last green build) |
|---|---|---|---|
end-tour-confirm | no label | ThemedAlert.alert | RNTL×1 e2e×2 |
tour-end | no label | IconButton | RNTL×1 e2e×1 |
open-stops-list | Tour stops | IconButton | RNTL×1 |
phase-chip | no label | Text | no proof |
tour-pause | Resume | IconButton | no proof |
limit-chip | Limit: {{time}} | Text | no proof |
narrative-pane | no label | View | RNTL×2 e2e×1 |
arrival-card | no label | Card | RNTL×3 e2e×1 |
arrival-imhere | I’m here | Button | RNTL×4 e2e×1 |
arrival-skip | Skip | Button | RNTL×1 |
closing-warning | This place may be closed right now — check the hours before entering. | Text | no proof |
photo-moment | Photo moment | Button | no proof |
mark-visited-* (dynamic) | Mark visited | Button | RNTL×1 |
tour-transcript | no label | ScrollView | no proof |
premium-box | Premium banner — go to checkout | Card · PremiumBanner | no proof |
premium-box-cta | Get Premium | Button · PremiumBanner | no proof |
premium-banner | Premium banner — go to checkout | Card · PremiumBanner | RNTL×4 e2e×1 |
chat-suggestion | no label | Card · ChatModal | no proof |
summary-poi-list | no label | View · TourCelebrationModal | e2e×1 |
summary-signup | Create an account to keep your progress | Button · TourCelebrationModal | no proof |
summary-share | Share | Button · TourCelebrationModal | no proof |
nps-step | no label | View · NpsModal | e2e×1 |
nps-score-* (dynamic) | no label | Button · NpsModal | no proof |
nps-comment | One sentence from you (optional) | TextInput · NpsModal | no proof |
nps-skip | Skip | Button · NpsModal | e2e×1 |
nps-submit | Send | Button · NpsModal | no proof |
tomorrow-hook | no label | View · NpsModal | e2e×1 |
plan-tomorrow | Plan tomorrow | Button · NpsModal | no proof |
tomorrow-close | Close | Button · NpsModal | e2e×1 |
Controls are attributed one level deep: shared components count for the screen that renders them directly.
Last change of the screen file: 3e651f3 (2026-08-30)