# Navi Phase One PDF Match Matrix

Audit date: 2026-05-05
Reference: `docs/design/Navi_compressed.pdf`
Scope: Phase One 25-screen Navi PDF, current mobile app, API, database schema, dashboard, website, and role access.

Hard rule: this is an audit-first artifact. It does not declare Phase One complete. It identifies what is real, partial, missing, or blocked before further implementation.

Status meanings:

- Yes: present and connected to a real route, API, native action, guarded access state, or database-backed path.
- Partial: present but incomplete, simplified, not production-ready, or missing a required backend/dashboard/website reflection.
- No: missing from the current repo.
- N/A: not required for that surface in Phase One.

Current platform note: the backend currently exposes `/v1` routes, while the product prompt names `/api` routes. The immediate decision is to keep `/v1` as the internal implementation prefix unless a gateway or alias layer is added.

| PDF page number | PDF screen name | Mobile screen exists | Mobile route exists | Toolbar exists | Bottom tab exists | Buttons exist | Buttons connected | Required API exists | Database model exists | Dashboard management exists | Website or marketing page exists | Role access exists | Current issue | Fix required | Priority |
|---:|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Splash | Yes | Yes: `apps/mobile/app/(auth)/splash.tsx` | Partial: screen-level, not full branded PDF polish | N/A | Yes: auto-route | Yes: local auth/onboarding hydration | Partial: `/v1/users/me`; no `/v1/auth/me` alias | Yes: `User`, `Session` | No dashboard loading screen | Partial brand exists on website | Yes: guest/session | Splash is functional but visually simpler than the PDF and lacks a shared brand loading component | Polish splash with logo/tagline/initializing state and add shared dashboard/website loading brand treatment | P2 |
| 2 | Onboarding Discover the Emirates | Partial | Yes: dynamic onboarding step route | Partial: inline screen header | N/A | Yes: Skip, Next | Yes: local navigation | Partial: `OnboardingPage` model exists, API not wired | Yes: `OnboardingPage` | No onboarding CMS page | Partial tourist/home content | Yes: guest | Image-led PDF layout and admin-manageable onboarding content are incomplete | Wire `/v1/onboarding`, seed content/assets, add admin onboarding editor | P1 |
| 3 | Onboarding Personal Planner | Partial | Yes | Partial | N/A | Yes: Back, Skip, Next | Yes: local navigation | Partial: trip feature flag exists, onboarding API missing | Partial: `FeatureFlag`, `OnboardingPage` | No onboarding/trip feature page | Partial planner marketing copy missing | Yes: guest | Planner/map visual and backend content management are incomplete | Add planner visual asset usage, onboarding API, dashboard editor, website planner section | P1 |
| 4 | Onboarding Services at Your Fingertips | Partial | Yes | Partial | N/A | Yes: Get Started, Back | Yes: local navigation | Partial: onboarding API missing | Yes: `OnboardingPage` | No onboarding CMS page | Partial services/partners copy | Yes: guest | Service visual and partner value proposition are not fully reflected | Add service visual, CMS seed, admin editor, partner website section | P1 |
| 5 | Login | Partial | Yes: `apps/mobile/app/(auth)/login.tsx` | Yes: center title/header pattern | N/A | Yes: sign in, guest, signup, forgot, Google, Apple | Partial: password/guest/signup/forgot real; social not real | Partial: login/refresh exist; social/logout/auth-me aliases missing | Yes: `User`, `UserCredential`, `Session`, `OtpCode` | Yes: dashboard login exists | No customer login page | Yes: guest | Social buttons are visible but missing provider flow; logout/me aliases incomplete | Feature-flag social buttons or implement providers; add logout and auth/me; add customer web auth | P1 |
| 6 | Create Account | Partial | Yes: `apps/mobile/app/(auth)/signup.tsx` | Yes | N/A | Yes: create, guest, login, terms, social | Partial: signup/OTP real; social and legal links incomplete | Partial: signup/OTP/reset exist; `/register` alias and social missing | Yes: `User`, `UserCredential`, `OtpCode`, `Session` | Partial: users exist, provider invite missing | No customer registration page | Yes: guest | Confirm password, split phone validation, social signup, and web registration are incomplete | Add form fields/validation, legal links, social feature flags, provider invite path, web register page | P1 |
| 7 | Home Explore the Emirates | Partial | Yes: `apps/mobile/app/(tabs)/home.tsx` | Yes: `NaviHeader` brand variant exists | Yes: main app tabs | Yes: translate, profile, search, service tiles, banner, listing cards, bottom tabs | Yes for routes; partial for CMS-backed data | Partial: listings/destinations/emirates exist; `/v1/home`, banners, services missing | Partial: catalog models exist; no `Banner` model | Partial: content page, no home/banner/tile manager | Partial website home exists | Yes: guest browse; auth gated actions | Home is real but not controlled by a proper home/content API or dashboard | Add home aggregate API, banner/service tile models, dashboard content management | P1 |
| 8 | Discovery | Partial | Yes: `apps/mobile/app/(tabs)/discover.tsx` | Yes | Yes: main app tabs | Yes: search, filters, cards, save hearts, tabs | Partial: local filtering; saved real; destination detail missing | Partial: listings/destinations/emirates/saved exist; search/categories missing | Yes: `Listing`, `Destination`, `Category`, `SavedItem` | Partial listings/content pages | Partial destinations page | Yes: guest; saved requires tourist | Backend search and destination detail flow are missing | Add `/v1/search`, `/v1/categories`, destination detail route, dashboard CRUD | P1 |
| 9 | Luxury Stays | Partial | Yes: `/services/stays` | Yes | Stack screen, no service bottom tabs | Yes: listing cards and CTAs | Partial: opens listings/detail; quote/date flow missing | Partial: listings/rooms exist; stays aliases and quote missing | Yes: `Listing`, `Room`, `Booking` | Partial listings page, no room/availability editor | No stays page | Yes: guest browse; tourist booking | Stays are represented as generic listings, not a complete hotel flow | Add stays API aliases, room/date/guest filters, quote API, provider room management | P1 |
| 10 | Experiences | Partial | Yes: `/services/activities` | Yes | Stack screen | Yes: filters/cards/book CTAs | Partial: card/detail real; offer/deal flow missing | Partial: activity listings exist; experiences/offers aliases missing | Partial: `Listing`, `Category`; no `Offer` | Partial listings page | No experiences page | Yes: guest browse; tourist booking | PDF category/deal/availability experience is incomplete | Add experiences aliases, offer model/API, activity detail booking dates, dashboard deal management | P1 |
| 11 | Book a Taxi | Partial | Yes: `/services/taxi` | Yes | Stack screen | Partial: tier/listing cards; no full map flow | Partial: generic listing/booking only | No dedicated taxi estimate/book/status APIs | Partial: `Booking`; no taxi trip/driver assignment | No taxi/fleet/driver ops pages | No taxi page | Partial: tourist/provider/driver roles incomplete | Taxi is not a real estimate-to-trip flow yet | Add taxi module, pickup/destination UI, estimate/book/status APIs, driver assignment model/dashboard | P0 |
| 12 | Order Food | Partial | Yes: `/services/food` | Yes | Stack screen | Partial: restaurant/listing cards | No real menu/cart/checkout | No food restaurant/menu/order APIs | Partial: `Order`; no `OrderItem`, `Restaurant`, `MenuItem` | No orders/menu pages | No food page | Partial: order/provider roles incomplete | Food screen is still catalog-only | Add restaurant/menu/product models or scoped listing extensions, cart, order API, provider/admin order dashboards | P0 |
| 13 | Order Pharmacy | Partial | Yes: `/services/pharmacy` | Yes | Stack screen | Partial: pharmacy cards/compliance content | No upload/cart/quote/order flow | No pharmacy item/prescription/order APIs | Partial: `Order`; no `UploadFile` or prescription request | No pharmacy/prescription pages | No pharmacy page | Partial: privacy/support roles incomplete | Private prescription workflow is missing | Add private upload, prescription request, pharmacy quote/order flow, provider/admin support visibility rules | P0 |
| 14 | Grocery | Partial | Yes: `/services/grocery` | Yes | Stack screen | Partial: product/listing cards | No product add/cart/checkout | No grocery product/order APIs | Partial: `Order`; no `OrderItem`/`Product` | No grocery inventory/orders pages | No grocery page | Partial: order/provider roles incomplete | Grocery is not a transactional flow | Add grocery catalog, cart, order creation, provider/admin inventory and order management | P0 |
| 15 | SIM Cards | Partial | Yes: `/services/sim` | Yes | Stack screen | Partial: plan cards | No SIM order/activation | No SIM plan/order APIs | Partial: SIM plans as `Listing`; no `SIMPlan`/activation | No SIM plan/order pages | No SIM landing page | Partial: provider/admin role incomplete | SIM is catalog-only and lacks eSIM/physical flow | Add SIM aliases or model, order/activation APIs, provider/admin management | P1 |
| 16 | Emergency Numbers | Yes | Yes: `apps/mobile/app/emergency.tsx` | Yes | Stack screen | Yes: card tap, Call Now, Cancel | Yes: native dialer; list API exists | Partial: emergency list exists; location share missing | Yes: `EmergencyNumber` | No emergency number admin page | No emergency page | Yes: guest | Core safety flow works, but location/share/admin management is missing | Add location permission/share endpoint, emergency admin CRUD, website emergency page | P1 |
| 17 | Profile | Partial | Yes: `apps/mobile/app/(tabs)/profile.tsx` | Yes | Yes: main app tabs | Yes: sign in, signup, language, notifications, payment, help, privacy, logout | Partial: routes work; profile persistence/logout API incomplete | Partial: users/me/access exist; profile/session/delete/logout missing | Partial: `User`, `Session`; no `Profile` | Partial users page | No customer profile page | Yes: guest/auth split | Profile is mostly shell/settings; rich profile and session management missing | Add Profile model/API, edit profile, devices/sessions, support tickets, logout session revoke | P1 |
| 18 | My Destinations | Partial | Yes: `apps/mobile/app/(tabs)/saved.tsx` | Yes | Yes: main app tabs | Yes: sign in, listing card; tabs/filters expected | Partial: saved API real; saved/trips tabs missing | Yes: saved APIs; trip list exists | Yes: `SavedItem`, `Trip` | No saved/trip analytics page | No saved page | Yes: tourist | Saved data exists but PDF tabbed saved/trips UX is incomplete | Add tabs/filters, trip integration, destination detail, dashboard analytics | P1 |
| 19 | Image Translator | Yes | Yes: `apps/mobile/app/translator/index.tsx`, history route | Yes | Partial: translator bottom tab component exists, not full mounted shell | Yes: camera, gallery, language chips, translate, history, delete | Yes: native image picker and translator APIs; provider is mock | Yes: translator image/history/delete | Yes: `TranslationJob` | No translator usage page | Optional web translator missing | Partial: uses generic profile permission | Works as real app flow but not production OCR/translation and lacks analytics/privacy dashboard | Add dedicated permissions, analytics dashboard, privacy policy, production providers/keys | P1 |
| 20 | Trip Planner Step 1 | Partial | Yes: `apps/mobile/app/trip-planner/[step].tsx` | Yes: planner progress header | N/A | Yes: emirate/date chips, back, next | Yes: local state/route | No draft API | Partial: `Trip` can store generated plans | No trip analytics/config page | No web planner flow | Yes: tourist | Planner step is local-only until generate | Add draft API/persistence and richer calendar; dashboard analytics | P1 |
| 21 | Hotel Detail | Partial | Yes: `apps/mobile/app/listing/[id].tsx` | Yes: transparent image header | Stack screen | Yes: save, share, select room/book, room cards | Partial: save/share/room route real; amenities/reviews/map partial | Partial: listing by id with rooms; stays/reviews/maps aliases missing | Yes: `Listing`, `Room`, `Review` | Partial listings page, no rooms/amenities editor | No hotel detail page | Yes: guest browse; tourist save/book | Detail is functional but not fully PDF-rich | Add amenities/reviews/map fields, provider room editor, web hotel detail | P1 |
| 22 | Trip Planner Step 2 | Partial | Yes | Yes: planner progress header | N/A | Yes: party/interests/back/next | Yes: local state/route | No draft patch API | Partial: `Trip` generated only | No trip analytics/config page | No web planner flow | Yes: tourist | Preferences are not saved until generation | Add draft patch and preference persistence | P2 |
| 23 | Select Room | Partial | Yes: `apps/mobile/app/rooms/[listingId].tsx` | Yes | Stack screen | Yes: room select | Partial: creates booking; quote/date/payment review missing | Partial: rooms via listing and booking create exist; quote missing | Yes: `Room`, `Booking` | No room/availability editor | No room page | Yes: tourist/provider/admin | Room route exists but market-ready booking quote flow is missing | Add quote API, date/guest selectors, availability, provider room/price management | P1 |
| 24 | Trip Planner Step 3 | Partial | Yes | Yes: planner progress header | N/A | Yes: budget/pace/generate; save later expected | Partial: generate real; save later missing | Partial: generate exists; save/draft missing | Yes: `Trip`, `TripStep` | No trip analytics/config page | No web planner flow | Yes: tourist | Save-for-later is not real | Add draft save endpoint, success state, dashboard analytics | P1 |
| 25 | Itinerary Result | Partial | Yes: `apps/mobile/app/trip-planner/result/[tripId].tsx` | Yes: transparent header | Stack screen | Yes: save, share, edit, map | Partial: native/share/save real; edit/delete/shareable web missing | Partial: get/list/generate exist; patch/delete missing | Yes: `Trip`, `TripStep`, `SavedItem` | No trip planner analytics page | No shareable itinerary page | Yes: tourist | Result is real but not fully editable/shareable/manageable | Add patch/delete APIs, shareable web page, analytics dashboard | P1 |

## Phase One Stoplight

| Area | Current status | Reason |
|---|---|---|
| Mobile visual shell | Partial green | The 25 routes mostly exist and many actions navigate, but transactional service flows are incomplete. |
| Backend transactional readiness | Red | Taxi, food, pharmacy, grocery, SIM, support, uploads, notifications, provider order status, and many admin APIs are missing. |
| Dashboard operational readiness | Red | Existing dashboard covers core admin tables, but cannot manage most app content or service operations required by Phase One. |
| Website and sales readiness | Amber/red | Basic public pages exist, but partner verticals, demo/contact sales, help center, and shareable itinerary pages are missing. |
| Roles and permissions | Amber | RBAC exists, but Admin is overpowered, driver/premium/translator/upload permissions are incomplete, and many missing APIs cannot be guarded yet. |
| Investor demo readiness | Amber | A guided mobile demo is possible for auth/catalog/saved/translator/trip basics; it is not yet safe to demo complete ordering or provider operations as real. |

## Must Fix Before Coding More

1. Freeze Phase One scope around the 25 PDF screens and this matrix.
2. Remove or feature-flag any visible action that is not connected to route, API, native action, or clear disabled state.
3. Build transactional foundations before adding new UI: orders, order items, uploads, provider order status, booking quote, taxi estimate/book.
4. Add dashboard pages that reflect mobile actions before claiming operational readiness.
5. Split Admin and Super Admin permissions so backend enforcement matches the product promise.

