What the app can do
70 capabilities
How the status is computed
- “Works” — at least one test passed in this build and no linked Azure DevOps item is open.
- “Partial” — a test passed, but a linked Azure DevOps item is still open.
- “Exists, unverified” — the control is in the app, but no passing test touches it.
- “Planned” — no test; an open Azure DevOps item says it is on the plan.
- “ADO state unknown” — this build had no access to Azure DevOps, so the status could not be confirmed.
Nobody types the statuses in — they are computed on every deploy. RNTL = screen test in the native environment; e2e = a real browser against the demo; API = server test.
App start
Section titled “App start”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Start shows the server wake-up stages and offers Continue offline / Retry right away | works | RNTLConnectionSplash.splash ✓RNTL ConnectionSplash.test.tsx ✓RNTL ConnectionSplash.test.tsx ✓ | — |
| After 8 seconds of waiting the emergency exits appear | works | RNTLConnectionSplash.test.tsx ✓RNTL ConnectionSplash.test.tsx ✓ | — |
| A server error is named in words and a glyph, never by colour alone | works | RNTLConnectionSplash.test.tsx ✓ | — |
Sign-in (start)
Section titled “Sign-in (start)”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Continue as a guest without entering anything | works | RNTLAuth.continueAsGuest ✓RNTL AuthScreen.test.tsx ✓RNTL AuthScreen.test.tsx ✓ | — |
| Google sign-in on the phone | works | RNTLAuthScreen.test.tsx ✓RNTL AuthScreen.test.tsx ✓ | — |
| Apple sign-in on iOS | works | RNTLAuth.appleSignIn ✓RNTL AuthScreen.test.tsx ✓RNTL AuthScreen.test.tsx ✓ | — |
| On the web demo a demo sign-in replaces Google (configuration flag) | partial | RNTLAuthScreen.test.tsx ✓RNTL AuthScreen.test.tsx ✓ | #222 (New) |
| Escape the Crowd straight from the sign-in screen | works | RNTLAuth.escapeTheCrowd ✓RNTL AuthScreen.test.tsx ✓RNTL AuthScreen.test.tsx ✓ | — |
Onboarding
Section titled “Onboarding”| Capability | Status | Proof | ADO |
|---|---|---|---|
| App language picked on the first step | works | RNTLOnboarding.language ✓RNTL OnboardingScreen.test.tsx ✓ | — |
| Location consent; after a refusal, a city picked from the catalogue | works | RNTLOnboarding.consentAllow ✓RNTL Onboarding.consentSkip ✓RNTL OnboardingScreen.test.tsx ✓RNTL OnboardingScreen.test.tsx ✓ | — |
| Tourist profile in three steps: name and age, interests, pace / crowds / budget / transport / meals / context | works | RNTLOnboarding.name ✓RNTL Onboarding.interest ✓RNTL Onboarding.transport ✓RNTL OnboardingScreen.test.tsx ✓ | — |
| Five progress dots visible from the very first screen | works | RNTLOnboarding.dot ✓RNTL OnboardingScreen.test.tsx ✓ | — |
| Transitional screen: the button turns into Start once the server is awake; after 8 s the user may enter anyway | works | RNTLOnboarding.transitionalCta ✓RNTL OnboardingScreen.test.tsx ✓RNTL OnboardingScreen.test.tsx ✓RNTL OnboardingScreen.test.tsx ✓ | — |
| Capability | Status | Proof | ADO |
|---|---|---|---|
| Greeting and weather for the city: a manual pick beats the GPS city | works | RNTLHome.city ✓RNTL HomeScreenCity.test.tsx ✓RNTL HomeScreenCity.test.tsx ✓ | — |
| When no city resolves, the app offers a pick from the catalogue | works | RNTLHome.cityPrompt ✓RNTL HomeScreenCity.test.tsx ✓RNTL HomeScreenCity.test.tsx ✓ | — |
| Marketplace tour tiles: skeletons while loading, an honest error after 15 s, an empty card when nothing exists | works | RNTLHome.toursSkeleton ✓RNTL Home.toursError ✓RNTL Home.toursEmpty ✓RNTL HomeScreenSections.test.tsx ✓RNTL HomeScreenSections.test.tsx ✓RNTL HomeScreenSections.test.tsx ✓ | #134 (Resolved) |
| Two entries: Route Creator and Browse more tours | works | e2eHome.routeCreatorButton ✓RNTL Home.browseMoreTile ✓RNTL HomeScreenNav.test.tsx ✓ | — |
| A weather suggestion opens the map on the suggested place | works | RNTLHomeScreenNav.test.tsx ✓RNTL WeatherWidget.test.tsx ✓ | — |
| A guest sees the tour limit and the Premium banner; saving a route asks to sign in | works | e2eTopBar.limit ✓RNTL PremiumBanner.premiumBox ·RNTL TopBar.test.tsx ✓RNTL PremiumBanner.test.tsx ✓e2e j3-auth-variants.spec.ts ✓ | — |
| Signed-in free: Premium banner and badges; Premium: a days countdown instead of a limit, no banner; sign-out returns to guest | works | e2eTopBar.premium ✓RNTL TopBar.test.tsx ✓RNTL PremiumBanner.test.tsx ✓e2e j3-auth-variants.spec.ts ✓e2e j3-auth-variants.spec.ts ✓ | — |
| The offline banner appears after 3 s without network and can be dismissed until the next loss | works | RNTLOfflineBanner.dismiss ✓RNTL OfflineBanner.test.tsx ✓RNTL OfflineBanner.test.tsx ✓ | — |
Escape the Crowd
Section titled “Escape the Crowd”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Escape the Crowd: finds a calm place within 1.2 km (then 2 km) and guides there right away | works | RNTLEscape.guideMe ✓RNTL EscapeScreen.test.tsx ✓API escape.test.ts ✓API escape.test.ts ✓ | — |
| Outside the catalogue’s coverage the app shows a demo mode instead of an error; a location refusal ends the session with a message | works | RNTLEscape.demoNotice ✓RNTL Escape.exit ✓RNTL EscapeScreen.test.tsx ✓RNTL EscapeScreen.test.tsx ✓ | — |
Profile and settings
Section titled “Profile and settings”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Account in the profile: e-mail and plan badge when signed in, sign-out with confirmation | works | e2eProfile.account ✓e2e Profile.signOutConfirm ·RNTL ProfileScreen.test.tsx ✓ | — |
| Changing the app language and theme | exists, unverified | RNTLLanguageSelector.languageSelector · | — |
| Deleting the account with its data | partial | APIaccountDelete.test.ts ✓API accountDelete.test.ts ✓ | #217 (New) |
Before the tour starts
Section titled “Before the tour starts”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Stop list with dwell times; reorder by dragging (native) or with arrows (web) | works | e2eActiveTour.startGuidedTour ✓RNTL ActiveTourScreen.test.tsx ✓RNTL ActiveTourScreenWeb.test.tsx ✓RNTL ActiveTourScreen.test.tsx ✓ | — |
| Generated routes show every stop; hand-made ones are capped at 10 | works | RNTLActiveTourScreen.test.tsx ✓RNTL ActiveTourScreen.test.tsx ✓ | — |
| Capability | Status | Proof | ADO |
|---|---|---|---|
| The map opens on Tokyo (never Kraków) and re-centres on the matches after a search | partial | RNTLMap.search ✓RNTL MapScreen.test.tsx ✓e2e j4-map-search.spec.ts ✓ | #219 (Active) |
| A late GPS refusal never moves a map the user already re-centred | works | RNTLMapScreen.test.tsx ✓RNTL MapScreen.test.tsx ✓ | — |
| Place panel: type, best times, ticket chip, distance in metres or kilometres | works | RNTLMap.panelClose ✓RNTL MapScreen.test.tsx ✓RNTL MapScreen.test.tsx ✓ | — |
| Marker colours by place type, type filters and a legend at the bottom | works | RNTLMap.filter ·RNTL Map.legend ✓RNTL MapScreen.test.tsx ✓RNTL MapScreen.test.tsx ✓ | — |
Marketplace
Section titled “Marketplace”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Tour search across the whole catalogue; clearing it returns to browsing | works | e2eMarketplace.tourCard ✓RNTL MarketplaceScreen.test.tsx ✓RNTL MarketplaceScreen.test.tsx ✓RNTL MarketplaceScreen.test.tsx ✓ | — |
| Price, duration, kind and category filters plus sorting in a modal that always keeps Apply reachable | partial | RNTLMarketplace.openFilters ✓RNTL Marketplace.filtersApply ✓RNTL Marketplace.sort ·RNTL MarketplaceScreen.test.tsx ✓ | #215 (Active) |
| A tour card opens from the list; a Premium user starts the narrated tour | works | e2ej2-marketplace-guided-tour.spec.ts ✓ | — |
Route builder — start and time
Section titled “Route builder — start and time”| Capability | Status | Proof | ADO |
|---|---|---|---|
| A manually picked start point beats a late GPS fix | partial | e2eRouteBuilder.startOtherPoint ✓e2e RouteBuilder.startPoi ✓RNTL RouteBuilderScreen.test.tsx ✓RNTL RouteBuilderScreen.test.tsx ✓e2e j1-route-creator.spec.ts ✓ | #220 (New) |
| The remembered city beats GPS on entry; the city can be changed from the catalogue | works | e2eRouteBuilder.changeCity ✓e2e RouteBuilder.city ✓RNTL RouteBuilderScreen.test.tsx ✓RNTL RouteBuilderScreen.test.tsx ✓ | — |
| After a denied location prompt the user can retry; a permission check that never settles does not hang the screen | works | RNTLRouteBuilder.retryLocation ✓RNTL RouteBuilderScreen.test.tsx ✓RNTL RouteBuilderScreen.test.tsx ✓ | — |
| Picking the start day and hour (from 5:00) | works | RNTLRouteBuilder.startCustomDate ·RNTL RouteBuilder.startCustomTime ·RNTL RouteBuilderScreen.test.tsx ✓ | — |
| Generation shows staged progress; the request limit shows a countdown, a start outside the area a clear message | works | RNTLRouteBuilderScreen.test.tsx ✓RNTL RouteBuilderScreen.test.tsx ✓RNTL RouteBuilderScreen.test.tsx ✓ | — |
| A reduced route is named as such and the preview opens on demand | works | RNTLRouteBuilderScreen.test.tsx ✓API tourGenerator.test.ts ✓ | — |
| Guide voice choice (female / male / neutral) | exists, unverified | RNTLRouteBuilder.guideVoice · | — |
| Start point from a Japanese postcode | planned | no proof | #221 (New) |
Tour card
Section titled “Tour card”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Numbered map markers match the stop list | works | RNTLTourPreviewScreen.test.tsx ✓ | #134 (Resolved) |
| A guest cannot start a half-day tour — the start is Premium-gated | works | e2eTourPreview.halfDayBlocker ✓e2e TourPreview.startTourButton ✓e2e j2-marketplace-guided-tour.spec.ts ✓ | — |
| Buying a single tour from its card | partial | RNTLTourPreview.buyTourButton ·API billing.test.ts ✓ | #196 (New) |
Guided tour
Section titled “Guided tour”| 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 · | — |
Activity and badges
Section titled “Activity and badges”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Points, badges with progress and the leaderboard after opting in | works | RNTLActivityScreen.test.tsx ✓RNTL ActivityScreen.test.tsx ✓RNTL ActivityScreen.test.tsx ✓ | — |
Favourites
Section titled “Favourites”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Favourite routes and places | exists, unverified | RNTLFavorites.route ·RNTL Favorites.poi · | — |
Saved routes
Section titled “Saved routes”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Saved routes: open the preview, delete with confirmation, an empty state that leads to the builder | works | RNTLSavedRoutes.route ✓RNTL SavedRoutes.deleteRoute ✓RNTL SavedRoutesScreen.test.tsx ✓RNTL SavedRoutesScreen.test.tsx ✓RNTL SavedRoutesScreen.test.tsx ✓ | — |
Navigation to a point
Section titled “Navigation to a point”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Turn-by-turn bar: instruction with distance, rerouting and arrived states | works | RNTLNavigationInstructionBar.test.tsx ✓RNTL NavigationInstructionBar.test.tsx ✓RNTL NavigationInstructionBar.test.tsx ✓ | — |
Route builder — preferences
Section titled “Route builder — preferences”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Route preferences (transport and more) are saved and reach the next generation | partial | e2eRouteCreator.transport ✓e2e RouteCreator.save ✓RNTL RouteBuilderScreen.test.tsx ✓e2e j1-route-creator.spec.ts ✓ | #220 (New) |
| Back returns in-app, or to Home without history (never leaves the web page) | partial | e2eRouteCreator.back ✓RNTL RouteBuilderScreen.test.tsx ✓RNTL RouteBuilderScreen.test.tsx ✓ | #219 (Active) |
Your route
Section titled “Your route”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Route timeline: dwell and walk-to-next per stop, exactly one peak stop, ticket and crowd chips | works | e2eRoutePreview.routeTimeline ✓e2e RoutePreview.stopRow ✓RNTL RoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓ | — |
| Stop details in a sheet: description, swap alternatives with recomputed timing; the peak and meals are locked | partial | e2eRoutePreview.stopDetailSheet ✓RNTL RoutePreview.detailSwap ✓RNTL RoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓ | #219 (Active) |
| Swapping several stops at once: long-press selects, regeneration excludes the selection | works | RNTLRoutePreview.swapSelected ✓RNTL RoutePreview.stopCheck ·RNTL RoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓ | — |
| Saving the route for signed-in users (with the start point); a guest is asked to sign in | works | e2eRoutePreview.saveRoute ✓e2e RoutePreview.saveSigninPrompt ✓RNTL RoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓API toursSave.test.ts ✓ | — |
| Starting the tour from the preview; when the start time is over 30 minutes old the app asks first | works | RNTLRoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓ | — |
Tour (legacy screen)
Section titled “Tour (legacy screen)”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Legacy tour screen — registered, but no transition leads to it | planned | no proof | #226 (New) |
Downloaded tours (offline)
Section titled “Downloaded tours (offline)”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Managing downloaded offline tours — the screen exists, but nothing in the app leads to it | planned | no proof | #226 (New) |
In ADO, no entry
Section titled “In ADO, no entry”Items of the current sprint that no capability on this page describes yet. (Sprint 3)
| ADO | Status | title |
|---|---|---|
| #180 | New | S3-01 · Próbka bez konta na stronie |
| #181 | New | S3-02 · Podstrona pobrania |
| #182 | New | S3-03 · Lejek mailowy |
| #183 | New | S3-04 · Audio i GPS przy zgaszonym ekranie |
| #184 | New | S3-05 · Stany brzegowe |
| #185 | New | S3-06 · Przyciski przybliżania na mapie |
| #186 | New | S3-07 · Podgląd opisu miejsca przed startem trasy |
| #187 | New | S3-08 · Oznaczenie POI wymagającego biletu |
| #188 | New | S3-09 · Japoński zapis powitań dla języka japońskiego, bez słowa na drogę |
| #189 | New | S3-10 · Dwa imiona w profilu przy podróży we dwoje |
| #191 | New | S3-12 · Obsługa zwrotów |
| #192 | New | S3-13 · Granica wieku 13+ ze zgodą opiekuna |
| #193 | New | S3-14 · Zakup w aplikacji na iOS |
| #194 | New | S3-15 · Rezerwa na bugi od pierwszych użytkowników |