1. App Name : ZOVEN | Fashion Shopping App React Native Expo UI Kit
  2. Created : 10 Nov 2026
  3. Last Updated : 11 Nov 2026
  4. Version : 1.0.0
  5. Screens : 78 ready-made screens
  6. Platforms : Android, iOS, Web
  7. Framework : React Native (Expo SDK 55, RN 0.83, React 19)
  8. Author : MKTemplateWizard
ZOVEN App Screenshot

Introduction

ZOVEN - Cross-Platform Fashion Shopping Mobile Application

ZOVEN is a fashion ecommerce UI kit built with React Native and Expo. It ships with 78 screens, a mock API layer, simulated AI demos, 10 curated palettes, 10 selectable locales with complete UI key coverage and 20 currencies - no backend or API keys required to run.

The kit covers the full fashion shopping journey: onboarding, authentication, product browsing, cart, checkout, order history and tracking, returns, product requests, shopping lists, favorites, comparison, referrals, outlets, gift cards, loyalty and demo AI experiences. Server-owned data uses shared API adapters; account feature state uses the customer-state adapter.

The app has one data integration path. Typed adapters and query hooks select HTTP or bundled mock handlers; persisted customer feature state uses the same mock/HTTP switch through a Zustand storage bridge. The demo runs offline, and buyers connect a server by implementing the documented resource endpoints and generic customer-state contract.

  • 78 ready-made screens - every step of a fashion shopper's journey is designed and wired (see the breakdown below)
  • 63 reusable UI components - cards, bottom sheets, drawers, filter sheets, nav, modals and form controls
  • 272 products, 39 categories, 10 in-house brands of fictional demo catalog data
  • 22 Zustand stores (16 persisted: 11 through the customer-state bridge, 5 through AsyncStorage)
  • 10 curated palettes, switchable live from the theme picker and contrast-checked for WCAG AA
  • 10 selectable locales (including RTL Arabic); complete UI key coverage with English fallback for added keys, plus 20 currencies
  • No-backend demo - screens use typed API adapters or the customer-state adapter, backed by mock handlers in offline mode. Mock API calls include simulated latency; the kit also includes a designed no-internet screen for when connectivity drops.
  • AI demo - assistant, find/gift flows, comparison, visual search (camera/gallery)
  • Leaflet + OSM maps in a WebView - no API key, works in Expo Go

The 78 screens at a glance

Screens are file-based routes, so adding or removing one is a single file. Here is how the 78 break down:

AreaScreens#
Onboarding & systemSplash, onboarding carousel, app entry, no-internet, not-found5
Authentication & legalLogin, sign up, email verification, registration success, OTP, forgot password, reset password, reset success, terms, privacy10
Home & discoveryHome, categories, category details, search, search results, brands, brand details, offers, offer details, lookbook, outlets, compare, product details, size guide, recently viewed, alerts, favorites17
Cart & checkoutCart, checkout, online payment, order success4
Orders & after-salesOrders, order details, invoice, track order hub, track order details, returns hub, new return / exchange7
Account & settingsProfile, edit profile, change password, addresses, add address, payment methods, referrals, income, gift cards, loyalty, notifications, product requests, new product request, shopping lists, shopping list details, help & support, FAQ, about, contact, theme picker, language, currency, language picker, currency picker24
AI suiteAI assistant, guided shopping flow, AI comparison, visual search4
Policy pagesShipping, payment, gift card, warranty, cookie, refund, sustainability7
Total78

Implementation lives in src/app/ (route screens) and src/screens/ (screen implementations), with shared UI in src/components/.

Requirements

Before setting up the project, ensure your development environment meets these requirements:

Node.js

Node.js 22.13+ (Node 24 LTS recommended) and npm 10+. The project ships an .nvmrc pinned to Node 24.22.2 - with nvm run nvm install then nvm use in the project root to select it. The EAS build profiles also pin Node 24.22.2 for reproducible cloud builds.

Node.js Download

Git

Required for version control and package management.

Expo Go / Emulator

For the fastest start, install the Expo Go app on your phone and scan the QR code. Alternatively use an Android emulator (Android Studio) or the iOS simulator (Xcode, macOS only). Official docs: docs.expo.dev.

Tech Stack At A Glance

  • Expo SDK 55 (~55.0.31) with React Native 0.83 and React 19
  • Expo Router - file-based routing with typed routes
  • NativeWind v5 preview - Tailwind CSS for React Native
  • Zustand v5 - 22 stores, 16 persisted (11 through the customer-state bridge, 5 through AsyncStorage); the auth token is kept in SecureStore
  • TanStack React Query v5 + Axios - server state and API layer
  • i18next / react-i18next - 10 selectable locales, live switching, RTL support, complete UI key coverage with English fallback for added keys
  • react-hook-form + Zod - form state and validation
  • react-native-reanimated + gesture-handler - gestures and animations
  • react-native-webview - Leaflet + OSM maps with OSRM routing
  • expo-image-picker - camera/gallery for visual search and profile photos
  • expo-image - fast, cached product imagery
  • expo-print / expo-sharing / expo-file-system - invoice export
  • expo-secure-store - encrypted auth token storage (iOS Keychain / Android Keystore)
  • expo-location / expo-audio - map-based address picker and checkout voice-note instructions

Project Folder Structure

zoven/
├── app.json                  # Expo config: name, icons, splash, plugins
├── eas.json                  # EAS build profiles (development / preview APK / production AAB)
├── package.json              # dependencies, scripts, Node/npm engine range
├── .nvmrc                    # Node 24.22.2 for nvm users
├── metro.config.js           # Metro + NativeWind
├── scripts/
│   ├── verify-integrity.js   # routes + asset reference checks (npm run verify)
│   ├── smoke-tests.ts        # dependency-free unit tests (npm test)
│   └── check-theme-contrast.ts # WCAG AA palette gate (npm run theme:check)
└── src/
    ├── app/                  # Expo Router routes (80 routes / 78 screens)
    │   ├── _layout.tsx       # Root layout: providers, offline handling, overlays
    │   ├── (auth)/           # login, signup, OTP, password reset, legal
    │   ├── (main)/           # orders, addresses, profile settings, returns, referrals...
    │   ├── (tabs)/           # home, categories, cart, offers, favorites, profile
    │   ├── ai-*.tsx          # assistant, comparison, shopping flow, visual search
    │   ├── product/[slug].tsx
    │   ├── search.tsx / search-results.tsx
    │   └── checkout.tsx / online-payment.tsx / order-success.tsx
    ├── screens/              # screen implementations used by the routes
    ├── components/           # ai, cards, modals, navigation, products, sections, ui
    ├── store/                # 22 Zustand stores + storage adapters
    ├── services/
    │   ├── api/              # typed REST endpoint functions
    │   ├── mock/             # in-memory relational demo database + handlers
    │   ├── queries/          # TanStack Query hooks
    │   └── ai/               # AI provider boundary + mock provider
    ├── hooks/                # pagination, currency, network, debounce, refresh
    ├── lib/                  # types, i18n, theme palettes, data, validation, map config
    ├── providers/            # React Query provider
    ├── utils/                # toast + navigation helpers
    ├── config/               # environment + home section mapping
    └── assets/
        ├── images/           # product, category, brand, banner, offer, background, onboarding art + logos
        └── icons/            # flags, payment methods, social icons

Images & icons: all bundled art lives under src/assets/images/ (products, categories, brands, banners, backgrounds, offers, onboarding, logos) and src/assets/icons/ (flags, payment methods, social icons). Each feature section below lists the exact files it uses.

Installation & Setup

  1. Install dependencies
    npm install
  2. Start the dev server
    npx expo start
  3. Open the app - scan the QR code with Expo Go, or press a for an Android emulator, i for the iOS simulator, w for web.

No environment file is required to run: the app defaults to the bundled mock API, mock AI and OpenStreetMap tiles.

Demo Credentials

The login screen has a Demo Login button that signs you in instantly. If you prefer typing:

  • Email: demo@zoven.com
  • Password: Demo@123

Guest and social sign-ins are simulated local demo flows. Social sign-in creates a demo profile and token; no OAuth provider is contacted. These demo profiles start with an empty phone number to demonstrate the "Complete profile" gate in checkout.

Running & Building

Development

npx expo start          # dev server (Expo Go)
npx expo start -c       # dev server with a cleared Metro cache

Clear the cache (-c) whenever you add/remove/rename assets or change global CSS.

Local release APK

npx expo prebuild --clean
cd android
.\gradlew assembleRelease

The APK is written to android/app/build/outputs/apk/release/app-release.apk. The generated Gradle project signs release builds with the debug keystore by default - use your own keystore for store releases.

Cloud builds (EAS)

npm install -g eas-cli                              # or use: npx eas-cli
eas login                                          # sign in - https://expo.dev/login
eas init                                           # create / link your own EAS project
eas build --platform android --profile preview      # installable APK (internal)
eas build --platform android --profile production   # AAB for the Play Store
eas build --platform ios --profile production       # iOS archive

EAS builds run prebuild in the cloud, so you never need a local android/ or ios/ folder. Before the first build: update the app identity in app.json, install the CLI (npm install -g eas-cli) and sign in with eas login - create a free Expo account at expo.dev/login. Full reference: docs.expo.dev.

App identity (do this first)

  • expo.name - display name
  • expo.slug - Expo project slug
  • expo.scheme - deep-link scheme
  • expo.ios.bundleIdentifier - unique iOS application ID
  • expo.android.package - unique Android application ID
  • expo.owner / EAS projectId - intentionally not set in this template; run eas init to create a project under your own Expo account before the first cloud build.
  • App icon, adaptive icon and splash assets under src/assets/images/

App Configuration

Everything that shapes the shipped app: environment variables, the Expo manifest, and the theme tokens.

Environment Configuration

Copy .env.example to .env (or .env.local) when you want to override the defaults. Everything is optional - the demo runs offline out of the box.

EXPO_PUBLIC_API_BASE_URL=http://localhost:3000/api/v1
EXPO_PUBLIC_USE_MOCK_AI=true
EXPO_PUBLIC_MAP_PROVIDER=osm
EXPO_PUBLIC_MAPTILER_KEY=
VariablePurpose
EXPO_PUBLIC_API_BASE_URLBase URL of your real backend (used once mock mode is disabled). Defaults to localhost in dev.
EXPO_PUBLIC_USE_MOCK_APItrue (default) uses bundled mock handlers and mock persistence. Set to false with the API URL configured to use HTTP adapters and the customer-state endpoint.
EXPO_PUBLIC_USE_MOCK_AIControls the AI assistant provider only. The other AI helpers are exported from the same src/services/ai layer but remain simulated demos until replaced.
EXPO_PUBLIC_MAP_PROVIDERosm (default, keyless) or maptiler (needs a key, falls back to OSM without one).
EXPO_PUBLIC_MAPTILER_KEYMapTiler API key, only used with maptiler.
EXPO_PUBLIC_DEMO_TAX_RATE_PERCENT, _LABEL, _INCLUSION, _SHIPPINGOptional fictional tax so you can preview the tax UI on the checkout screen. Completely off by default; production rates belong on your backend. See the README's tax section.

Mock mode is enabled by default through EXPO_PUBLIC_USE_MOCK_API. Typed adapters use bundled handlers, while persistent feature stores use the mock customer-state adapter; coupons and gift cards use their own resource adapters. Set EXPO_PUBLIC_API_BASE_URL and EXPO_PUBLIC_USE_MOCK_API=false to route those same boundaries to your server. Presentation-only size-chart reference tables and product editorial material/care copy remain bundled.

App JSON Configuration

app.json holds the Expo configuration. Key fields:

FieldNotes
name, slug, schemeApp name (ZOVEN), project slug (zoven) and deep-link scheme (zoven).
version1.0.0 - bump for each release.
userInterfaceStylelight - the kit is designed light-only (the ten palettes repaint the light canvas).
icon, ios.icon, android.adaptiveIcon, web.faviconApp icons (adaptive background #F7F4EA, with a monochrome adaptive icon).
ios.bundleIdentifier, android.packageShipped as com.mktemplatewizard.zoven - change to your own unique IDs before publishing.
pluginsexpo-router, expo-splash-screen (forest #183B32 background; the animated logo + tagline loading screen is JS at src/app/splash.tsx), expo-sharing, expo-asset, expo-image-picker (permission texts), expo-location and expo-audio (microphone permission for checkout voice notes).
experimentstypedRoutes and reactCompiler enabled.
owner, extra.eas.projectIdIntentionally omitted. Run eas init to create your own EAS project before your first cloud build.

Theme & Styling

Styling is NativeWind v5 (Tailwind for React Native) with design tokens defined once in src/global.css and mirrored for every palette in src/lib/theme/themes.ts:

  • --color-primary - brand forest #183B32 (buttons, active states, links)
  • --color-background / --color-foreground - app surface and text
  • --color-card, --color-muted, --color-border - surfaces and separators
  • Gradient helpers: bg-gradient-dual-tone, bg-gradient-warm-bottom, bg-gradient-brand-deep (profile header)

The palettes are Tailwind tokens, republished at runtime: the same compiled classes (bg-primary, text-foreground, border-border) resolve against whichever palette is active, written onto the root view by NativeWind's VariableContextProvider. Changing the tokens in src/global.css (or switching palette) re-themes the whole app instantly. The kit renders light-only by design (userInterfaceStyle: "light").

Tap feedback is centralized in src/components/ui/RipplePressable.tsx: it picks a circular ripple for square/round buttons and a masked ripple for wide items, plus a subtle pressed dim on every platform.

Architecture Overview

Navigation & Routing

All 78 screens are Expo Router routes (file-based), so each screen is one file. Groups keep the URL structure clean:

src/app/
├── (auth)/      → /login /signup /verify-email /forgot-password /otp-verification
│                  /reset-password /reset-success /registration-success /terms /privacy
├── (tabs)/      → / (home) /categories /cart /offers /favorites /profile
├── (main)/      → /orders /orders/[id] /orders/invoice/[id] /addresses /add-address
│                  /edit-profile /change-password /referrals /returns /returns/new
│                  /track-order /track-order/[id] /income /faq /help-support
│                  /language /currency /offer-details /product-requests
│                  /alerts /notifications /recently-viewed /lookbook /loyalty /gift-cards
│                  /payment-methods /size-guide
├── ai-*.tsx     → /ai-assistant /ai-shopping-flow /ai-comparison /ai-visual-search
├── product/     → /product/[slug]
├── brands/      → /brands /brands/[id]
├── shopping-list/ → /shopping-list /shopping-list/[id]
├── categories/  → /categories/[slug]
├── product-requests/ → /product-requests/new /product-requests
└── root screens → /splash /onboarding /language-select /currency-select /theme
                   /search /search-results /checkout /online-payment /order-success
                   /compare /outlets /contact /about /no-internet /not-found
                   /shipping-policy /payment-policy /gift-card-policy /warranty-policy
                   /cookie-policy /sustainability-policy /refund-policy

Typed routes are enabled (experiments.typedRoutes), so route names are checked at compile time. The tab bar is a custom component (src/components/navigation/TabBar.tsx) with a wave-shaped center cart button and a live cart badge.

Client State & Persistence

Zustand manages screen state. Business resources use typed API/query adapters; cart, alerts, fit profile, loyalty, notifications, product questions/requests, recently viewed, returns, shopping lists and product comparisons persist through customerStateApi using the same mock/HTTP switch. Coupon validation and gift-card validation/redemption use their own resource APIs. Account-specific data is read and written at /me/state/{resource}/{key} and must be authorized by the server. The auth session token is kept in the platform keychain/keystore through SecureStore; the user profile, theme, locale, currency, onboarding progress and temporary UI state remain on-device. Expo web has no OS keychain, so the web preview keeps the token in memory for the current session only and never persists it.

Address, payment method, favorite, review and order records use their typed resource adapters. The outlet directory is fetched via the content adapter; filter selections are transient screen state. src/services/mock/db.ts contains categories, brands and products for mock catalog responses.

Data Layer & Mock API

The demo needs no backend. Server-owned resources use typed API adapters and query hooks; persistent feature state uses a generic customer-state storage adapter. Both select bundled mock behavior or HTTP from the same environment switch.

  • Typed service layer - src/services/api/* defines resource contracts and src/services/queries/* wraps reads and mutations. Mock mode is the default; handlers in src/services/mock/handlers/* and the catalog in src/services/mock/db.ts provide offline responses.
  • One switch - product, category, merchandising, outlet, address, payment, review, favorite, delivery, tax and order resources resolve through adapters. EXPO_PUBLIC_USE_MOCK_API=false sends the same adapter calls to EXPO_PUBLIC_API_BASE_URL.
  • Persistent feature state - cart, alerts, fit profile, loyalty, notifications, Q&A/requests, recently viewed, returns and shopping lists use Zustand through customerStateApi. In HTTP mode the backend implements GET/PUT/DELETE /me/state/{resource}/{key}; PUT accepts { "value": "<serialized state>" }. Coupon validation/claiming and gift-card validation/redemption use /coupons and /gift-cards contracts instead. The server must scope each key to the authenticated account.

Business resources use the same mock/HTTP adapter boundary. Checkout sends one create-order request and order screens read records from the order adapter. Persistent feature stores use the generic customer-state contract; coupon validation and gift-card balance operations have dedicated contracts. Authentication verification/recovery, guest/social sign-in, AI helpers and static presentation content (size charts, product editorial material/care, onboarding copy, return reason/status labels, tracking timeline copy and loyalty tier rules) remain simulated, local or bundled. Mock mode may seed demo feature snapshots (returns, shopping lists, product requests, notifications, loyalty history) so screens are not empty; HTTP mode starts empty. Theme, locale, currency, onboarding progress and temporary checkout fields remain device-local preferences or UI state.

Note: the demo still checks real connectivity (the no-internet screen appears when the device is offline) and map tiles stream from the provider.

Localization & Currency

  • 10 selectable locales: English, Bengali, Arabic (RTL), Spanish, Japanese, Hindi, French, German, Russian, Portuguese - switchable live from Settings and persisted. All ten locale files cover the complete UI key set; English remains the fallback for added keys.
  • RTL support: Arabic flips the layout direction (I18nManager.forceRTL) and status-bar handling.
  • 20 currencies: USD, EUR, GBP, AED, SAR, INR, PKR, BDT, EGP, TRY, JPY, CNY, KRW, CAD, AUD, CHF, MYR, PHP, IDR, THB - with per-locale defaults and a shared formatter (useFormatCurrency).
  • Flags: bundled as PNG icons in src/assets/icons/flags.

Translation files live in src/lib/locales/*.ts. The ten locales are selectable and every UI key used by the app is present in each file. English remains the fallback in src/lib/i18n.ts so any key you add is still safe before you translate it. AI response copy is English-only in the demo.

AI Layer

The AI features run through a provider boundary in src/services/ai/index.ts. The bundled mock provider simulates thinking latency and answers from the demo catalog: it can search products, add to cart, compare items, and answer delivery/policy questions. Everything AI in the kit is an offline demo - no hosted AI service is called. Inline AI insight cards carry a visible Demo badge.

Visual search is demo mode: it uses the real camera/gallery picker but the matching is simulated against the bundled catalog (the screen shows a "Demo" badge and a note explaining this). Replace the provider to run real image recognition.

The assistant chat can use a provider implemented in src/services/ai/index.ts when EXPO_PUBLIC_USE_MOCK_AI=false. Guided flow, comparison, visual search, search interpretation, home recommendations, favorites insight and review summaries are exported from the same AI layer and call the local demo implementation until integrated with a provider. No API keys ship in the app.

Live-service costs: connecting a live backend or third-party services is not included and will incur additional costs paid directly to their providers. This can include AI provider usage/tokens, cloud hosting, database and storage, map tiles/geocoding/routing, payment gateway fees, email/SMS/OTP delivery, push notifications and app-store fees. The bundled demo uses mock data and incurs none of these costs.

AI usage disclosure. AI tools were used to assist with parts of the source code and written documentation of this item; all output was reviewed, tested and refined by the author before submission. The ZOVEN logo and bundled brand marks are author-made placeholder assets. Promotional artwork used in some preview screenshots may have been created with the assistance of AI tools. Product and category images bundled with the app are demo placeholders; replace them with your own licensed photography before production. All in-app AI features are simulated offline demos and are labeled as demos.

Features & Screens

All 78 screens are listed below by area. Screens use the API adapter boundaries with bundled mock behavior by default. Real payment processing and identity providers are not included; AI and selected account workflows are labeled demos as described in each section.

Authentication

All authentication is simulated against the mock API and persisted in authStore.

  • Login - email + password, show/hide password, "remember me", inline validation, social buttons (Google / Facebook, simulated), and a one-tap Demo Login.
  • Sign up - full form with validation, terms checkbox, social sign-up buttons.
  • Email verification + Registration success screens.
  • OTP verification - 6-digit input with resend timer (useResendTimer).
  • Forgot / reset password with a reset-success confirmation.
  • Guest & social logins start with an empty phone number - checkout then shows a Complete profile gate that routes to Edit Profile before ordering.
  • Legal screens - Terms and Privacy (also reachable from Settings).

Resources: social button icons in src/assets/icons/social-icons/; brand logo on auth screens in src/assets/images/logo.png.

Home Screen

Top Bar

Delivery address (opens the address modal), search entry, notification bell with unread dot, and a menu button that opens the side drawer. The category drawer opens from the grid icon.

Hero Slider (Stories)

A looping, center-snapping campaign banner slider with auto-play:

  • Infinite loop - first/last slides are cloned so scrolling never hits a wall; reaching a clone rewinds silently.
  • Center snapping with pagination dots.
  • Art-directed banners - the eyebrow, headline and CTA are printed into each 2:1 artwork (with the ZOVEN lockup already in the panel), so slides render the artwork alone and tap into a search query instead of live text.

Banners live in src/lib/data/stories.ts (images in src/assets/images/banners/, 1200x600).

Resources: section backgrounds and promo art in src/assets/images/backgrounds/ (background-1..4, plus background-5.webp and background-6.webp for the seasonal sale bands); offer popup poster in src/assets/images/offers/popup-offer.webp.

Home Sections

  • Category grid - quick navigation with tinted category rings.
  • Weekday deals - live countdown to midnight with a deal rail and a forest band.
  • Promo product rows - a promo card on the left (image with badge/headline/CTA, or full-design imageOnly art) next to a product rail. The card sizes itself from the artwork so nothing is cropped.
  • Featured finds - themed band with a product rail.
  • Seasonal sale bands - Winter Sale and Summer Sale use the same full-width image band as Bags & Backpacks and Fragrance & Beauty: campaign art, heading over the image and a related-product rail. Edit the pools in src/config/homeSections.ts (winter-sale, summer-sale) and swap the art in src/assets/images/backgrounds/.
  • Offer showcase - hero banner + overlay cards, each sized to its artwork.
  • Sections bands - Bags & Backpacks and Fragrance & Beauty bands sized from their 2:1 art.
  • Product rails - configurable in src/config/homeSections.ts.
  • Brand slider, outlets section, lookbook teaser, AI recommendations.

Offer Popup

A promo poster modal appears once after the home loads (2s delay). Dismissal is persisted - it does not show again on the next launch. The poster ratio is derived from the asset, so any export size works.

Floating Controls

  • AI assistant button - floating brand FAB, hidden on splash/onboarding, auth flow, cart, checkout, the AI chat itself and the offline screen; visible everywhere else (including home).
  • Palette button - opens the live theme picker from any main screen.
  • Back to top - appears after scrolling with per-screen clearance so it never covers bottom bars.

Product Browsing

Categories

The categories tab shows a two-column grid with inline drill-down (root → sub → child) and a full category listing screen (/categories/[slug]) with a sidebar, sorting and pagination. The demo tree has 39 categories across Clothing, Bags & Luggage, Jewelry & Watches, Fragrance & Beauty, Home & Living and Eyewear.

Search

  • Live suggestions as you type (debounced).
  • AI interpretation of natural-language queries ("something for a wedding").
  • Recent & trending searches (persisted).
  • Entry point to visual search (camera/gallery).

Search Results & Filters

  • Filters: category tree, brand, size, colour, stock, price range, rating, shipping - each with its own bottom sheet or sidebar.
  • Sorting: relevance, price (low/high), rating, newest, discount.
  • Paginated grid with skeleton loaders and pull-to-refresh.

Product Detail

  • Zoom gallery with colour-aware imagery, discount badges, stock states (out-of-stock disables add-to-cart with a notify option).
  • Colour & size picker with live price, per-variant stock and a multi-variant quantity builder (one sheet with add / quantity per colour × size).
  • Fit, material & care details, a size guide and an interactive fit finder.
  • Postcode delivery estimate, nearby store availability, persistent product alerts.
  • Customer reviews (with a write-review sheet), rating breakdown and product Q&A.
  • Shop the look, an offline style studio (drop the piece on your own photo - drag, pinch, rotate, share) and an auto-playing motion lookbook built from the product photos (no video, AR or try-on SDK).
  • Compare - add to a compare tray (up to three) and open a side-by-side screen.
  • Sticky bottom bar: price, quantity, add to cart, buy now.

Favorites

Grid and list views (ProductListRow), named collections, shareable product links, a "You may also like" rail and an AI wishlist insight card.

Brands & Outlets

  • Brand directory (/brands) with a featured slider and full brand pages (self-hides when BRANDS is empty).
  • Outlets - list + map view, district/thana filtering, outlet detail modal, and directions via OSRM routing in the WebView map. Store names, addresses and coordinates are fictional sample data.

Resources: product photos in src/assets/images/products/ (600×600 WebP named zoven-<id>-<colour>.webp, referenced from src/lib/data/products/*); category tiles in src/assets/images/categories/ (category-1.webp ... category-39.webp, 39 files); brand logos in src/assets/images/brands/ - 10 transparent marks (brand-1.png ... brand-10.png) matching the ten house labels in src/lib/data/brands.ts (all logos ship local, no remote URLs).

Cart & Checkout

Cart

  • Quantity steppers with live totals, variant labels (colour / size) and per-line pricing.
  • Coupon entry with validation (percentage, fixed, caps, minimum purchase) and gift-card redemption.
  • Free-shipping progress and tax estimate.
  • Persisted across restarts (cartStore).
  • The tab bar and floating controls hide on the cart so the sticky summary and checkout CTA own the screen.

Checkout

A single scrolling checkout with the address, delivery choice, gift options, coupon / gift card, payment and review in one flow.

  • Address selection - a bottom-sheet address drawer with saved addresses, "Save & use", and a full add-address flow including a Leaflet map picker (drag the pin or search; reverse geocoding via Photon with a BigDataCloud fallback).
  • Delivery options - Standard, Express and Nominated day, priced by delivery zone (Central Dhaka / North Dhaka / South Dhaka / Outside Dhaka / International). Free-delivery thresholds show as "Free"; a failed quote shows an "Unavailable - pull to retry" state.
  • Gift options - gift wrap (with fee), a gift message and a gift receipt toggle.
  • Coupons & gift cards - validated coupon entry plus redeemable gift-card balance applied to the total.
  • Tax quote - destination-aware, quoted by the API (off by default in the demo).
  • Payment - brand-icon method list: Cash on Delivery, bKash, Nagad, PayPal, Google Pay, Apple Pay and saved cards. Prepaid methods route through the online payment demo screen (a simulated gateway with processing / success / decline states) and the order is only created once the payment succeeds - cancelling keeps the cart intact. COD confirms directly.
  • Loyalty earn preview - points the order will earn, based on your tier.
  • Review modal - a formatted confirm-order card (items, payment, address, delivery + ETA, gift options, highlighted total).
  • Complete profile gate - if the account has no phone number, the CTA routes to Edit Profile first.

Order Success

Animated success screen with the order number; the primary CTA jumps to Track order.

Resources: payment brand icons in src/assets/icons/payment-methods/ (numbered files pay-1.webp to pay-9.webp).

Orders & Tracking

  • Order history - status chips, totals, item thumbnails, and quick access to details and invoices.
  • Order details - full summary, items with variant + per-unit price, delivery zone/option, gift wrap, payment method, contact info, and a status timeline.
  • Invoice - printable invoice with a Qty column; export via print/share (expo-print + expo-sharing).
  • Track order hub - active shipments for signed-in users plus a guest lookup: enter the order number and the phone/email used at checkout.
  • Tracking detail (/track-order/[id]) - localized status timeline (placed, confirmed, preparing, shipped, out for delivery, delivered) with per-step icons and timestamps.

Returns & Exchanges

  • Returns hub with status chips (pending, approved, rejected, refunded, cancelled) and refund totals.
  • Full-page request form: order picker (only delivered orders), reason chips, description, evidence photos (camera/gallery), and pickup notes.
  • Refund or exchange - choose a refund, or request an exchange with the replacement size / colour.
  • Detail sheet with a status timeline; requests can be cancelled while pending.
  • Requests are stored in returnRequestStore and appear immediately in the hub.

Product Requests

Customers can ask the store to source a piece that is not in the catalog:

  • Create form: product name, category, quantity, target price, notes, and a reference image.
  • List with status chips (pending, quoted, fulfilled, declined) and admin responses.
  • Details drawer with the full request, and editing is allowed only while pending.

Shopping Lists

  • Create lists from a bottom sheet; rename anytime.
  • Add products with debounced catalog search and a spinner, or pick from popular suggestions.
  • Sections for To buy and Purchased, product thumbnails, per-item prices and an estimated total.
  • Add list items to the cart in one tap.

Profile & Settings

  • Profile header - deep brand gradient with status-bar tint, avatar, edit and notification buttons, and a stats strip (orders, favorites, lists).
  • Edit profile - photo upload (camera/gallery) with an avatar fallback chain (photo → initials → icon), name/email/phone validation, and a live version badge.
  • Change password with validation.
  • Addresses - full list (name, complete address, floor/apartment, phone, notes), map-based add/edit flow with geocoding.
  • Payment methods - saved cards and mobile-wallet methods (card / bKash / Nagad).
  • Referrals - invite code, share sheet, and reward tracking. Income - earnings summary for payouts.
  • Gift cards - browse and redeem gift-card balances.
  • Loyalty - Silver / Gold / Platinum tiers, points history and reward redemption.
  • Alerts - persistent restock and price-drop watches. Recently viewed - product history.
  • Notifications - preference toggles (push, orders, offers) persisted in notificationStore.
  • Language & currency pickers with instant switching, plus the theme picker (ten palettes).
  • Size & fit guide (/size-guide) - every chart, IN/CM toggle, international conversions and measuring tips.
  • Lookbook - editorial stories and shoppable looks.
  • Help & support, FAQ, About Us, and the policy pages (shipping, payment, gift card, warranty, cookie, sustainability, refund, terms, privacy).
  • Social links (Facebook, Instagram, Twitter, YouTube) and a softened Delete account flow with a confirmation modal.

Resources: social icons in src/assets/icons/social-icons/; language flags in src/assets/icons/flags/; payment method icons in src/assets/icons/payment-methods/; profile photos are picked by the user (camera/gallery).

Notifications & Offline Handling

  • Notification sheet - a single global bottom sheet (rendered once at the root) opened from the home or profile bell. All / unread filters, mark-all-read, swipe-down or backdrop to dismiss, unread dot in the header.
  • Offline screen - when connectivity drops, the app redirects to a dedicated no-internet screen with a retry action, and returns automatically when the connection is restored. The AI button and overlays are hidden there.
  • Not-found route for unmatched deep links.

AI Suite (Offline Demo)

  • AI assistant - a chat screen with suggested prompts, product cards in replies, add-to-cart actions, comparisons, and answers about delivery and policies.
  • Guided flows - "Find my product" and "Gift finder" ask a few questions and build a recommendation.
  • Comparison - pick products and see an at-a-glance spec table.
  • Visual search - real camera / gallery capture (expo-image-picker) with simulated catalog matching.
  • Inline AI - review summaries, product Q&A, wishlist insights and home recommendations.

The assistant is also reachable from the floating button on every main screen. See AI Layer for wiring a real provider.

Customization Guide

Everything below is designed so you can rebrand the kit from central theme and configuration files.

App Identity

Edit app.json before publishing:

  • name - display name (default "ZOVEN")
  • slug - Expo project slug
  • scheme - deep-link scheme (default "zoven")
  • ios.bundleIdentifier / android.package - shipped as com.mktemplatewizard.zoven; change to your own unique IDs
  • version - currently 1.0.0
  • Icons & splash: app-icon.png, app-icon-foreground.png and app-icon-monochrome.png (all 1024×1024; adaptive canvas #F7F4EA), splash-blank.png (native splash image on solid #183B32), logo-white.png (animated JS splash logo), logo.png
  • Run eas init to create your own EAS project (no owner or project id ships in this template)

Images & Placeholders

Every image under src/assets/images/ is a placeholder you can swap. Replace a file with your art at the same size (keep the file name) and the layout stays untouched.

Some demo background/editorial artwork shown in the preview build and screenshots is sourced from Freepik under its license. The downloadable main template ships with dimension placeholders and does not include the Freepik artwork files.

FolderUsed forNotes
products/Product photos600×600; named zoven-<id>-<colour>.webp (plus default-product.webp fallback)
categories/Category tiles512×512; category-1.webp ... category-39.webp
brands/Brand logos (directory, home slider, filter rows)512×512 transparent marks (brand-1.png ... brand-10.png), one per brand in brands.ts
banners/Home hero slider (stories)1200×600 (2:1), art-directed with the CTA baked in
backgrounds/Home section backdropsbackground-1..6 (band art; keep the aspect ratio since band height derives from it)
collections/Collection artwork960×600; collection-1.webp ... collection-7.webp
lookbook/Lookbook chapterslookbook-1..8.webp (900×1200) plus look-book-featured.webp (1200×600)
offers/Offers screen + offer popupoffer-1..5, offer-dresses, offer-hero, offer-shoes (2:1) plus popup-offer.webp (portrait)
onboarding/Onboarding carouselportrait; 01.webp ... 05.webp
  • Format: WebP for photography, displayed through expo-image on iOS and Android; PNG for transparent brand marks. If you need to support an older OS image decoder, convert the affected assets to JPEG/PNG.
  • Icons are untouched: flags, payment-method brand icons and social icons live in src/assets/icons/.
  • Promo cards: pass imageOnly to PromoProductRow / the offer showcase when the artwork already contains the badge, headline and CTA; omit it to render the code overlay instead.
  • Banners are listed in src/lib/data/stories.ts in slider order.

Colors & Theme

All colors flow from design tokens in src/global.css, with the ten palettes mirrored in src/lib/theme/themes.ts. Change the default once and the whole app follows:

--color-primary: #183B32;        /* brand forest (Zoven Signature) */
--color-background / --color-foreground
--color-card / --color-muted / --color-border

The default palette is Zoven Signature - forest #183B32, leather #3D3028, sage #8FA892, oat canvas #E8E1D5, paper #FBF7EE. To add your own, append an entry to PALETTES; the picker, the CSS variables and the contrast gate all pick it up. Run npm run theme:check to verify every palette clears WCAG AA, and npm run theme:check also fails if global.css drifts from the default palette. The app is intentionally light-only.

Demo Data

All catalog content lives in plain TypeScript files - no database:

FileContents
src/lib/data/products/*272 products with colour/size options, variants, prices, stock and badges
src/lib/data/categories.ts39 categories (root / sub / child tree)
src/lib/data/brands.ts10 in-house labels (ZOVRA, VENZEL, ZENOVA, NOVEN, ZOVELLE, ENZORA, ZOVINE, ZENVOR, ZOVANI, VEZRA)
src/lib/data/offers.ts, stories.ts, lookbook.tsOffers, hero banners and lookbook stories. The fictional outlet fixtures are in src/lib/data/outlets.ts and served by the content mock handler; src/lib/data/fashionStores.ts supplies demo locations for product availability.
src/lib/data/sizeCharts.ts, fitFinder.tsSize charts and the fit-finder recommender
src/lib/data/loyalty.ts, giftCards.ts, mockCommerce.tsLoyalty reward and gift-card catalog fixtures (served through the content adapter), plus mock commerce fixtures
src/lib/data/notifications.ts, returns.ts, orderTimeline.tsNotification feed, return reasons, tracking timeline
src/services/mock/db.tsIn-memory mock database assembled from categories, brands and products, with product/category/brand relations joined for API responses. Users, orders and coupons are handled in separate mock handlers or stores.
src/config/homeSections.tsWhich categories appear in which home section

After editing data, run npm run verify - it checks that every reference (product variants, category slugs, offer/story products, asset paths) still resolves.

Translations

  • Translation files: src/lib/locales/*.ts (en, bn, ar, es, ja, hi, fr, de, ru, pt).
  • English is complete; the other nine ship a translated core, with missing keys falling back to English. Add the missing keys to reach full coverage.
  • Register a new language in src/lib/i18n.ts and add its flag to src/assets/icons/flags.
  • RTL languages (Arabic) flip layout direction automatically.
  • Language switching is live and persisted.

Currency

Add or remove currencies in src/store/currencyStore.ts (code, symbol, locale, sample rate). All prices format through useFormatCurrency, so a new currency applies everywhere at once. Rates in the demo are sample values - fetch production rates from a trusted service and keep prices in a single server-side base currency.

Backend Integration

All server-owned app data follows one adapter path. The bundled demo uses mock handlers and mock persistence; connecting your server does not require screen-by-screen data-source changes.

  1. Set EXPO_PUBLIC_API_BASE_URL to your API URL.
  2. Implement the typed request and response contracts in src/services/api/*. These cover catalog and content, authentication initiation, addresses, payment methods, favorites, reviews, delivery and tax quotes, order reads/writes, and other server resources.
  3. Implement the generic customer-state contract: GET /me/state/{resource}/{key} returns { "value": string | null }; PUT accepts { "value": "<serialized Zustand state>" }; DELETE removes the key. Authenticate and scope every request to the current customer.
  4. Set EXPO_PUBLIC_USE_MOCK_API=false. Resource adapters and the Zustand storage bridge then send their calls to your server. Mock mode remains the default for the offline preview.

The server must validate prices, stock, discounts, tax quotes, gift-card balances, payment state and order totals. Coupon validation and gift-card balance operations have dedicated resource endpoints. Generic customer-state snapshots provide a convenient integration contract for UI-kit feature state; a production commerce backend can replace the generic snapshots with normalized resource APIs, but you should review the mock-mode feature seeds and static presentation content before claiming all screens are server-driven. Password recovery/verification, guest/social login and AI widgets are demos and require provider-specific implementation before production.

Auth headers are attached by the Axios client in src/services/apiClient.ts. Keep map providers configured with appropriate production credentials and usage policies.

Map Providers

Maps are Leaflet + raster tiles inside a WebView. Provider attribution is enabled on every map (required by the providers' terms). Pick a provider in .env:

ProviderKeyNotes
osm (default)noneOpenStreetMap tiles - community server, demo use only
maptilerEXPO_PUBLIC_MAPTILER_KEYFalls back to OSM if the key is missing

Before going live, configure your own production providers. The defaults are public community services whose policies only cover light/demo traffic:

  • Tiles: use your own MapTiler key or another tile host - see the OSM tile usage policy: operations.osmfoundation.org/policies/tiles
  • Routing: the public OSRM demo server is not for production - self-host OSRM or use a commercial routing API
  • Geocoding: the public Photon and BigDataCloud services are used by the address picker as demo defaults. Review their usage policies and configure providers you are authorized to use, or self-host/use a commercial geocoder.

Provider config lives in src/lib/mapConfig.ts; the Leaflet HTML is built in src/components/maps/leafletMapHtml.ts and the address map in src/screens/addresses/components/addressMapHtml.ts. Google Maps would require the native react-native-maps/expo-maps module plus a billing-enabled API key - the map logic is isolated in a single component, so the swap stays contained.

Social Auth & AI Provider

  • Social buttons (Google / Facebook on login & signup) are simulated in the demo - wire them to Firebase, Supabase, Auth0 or your own OAuth in src/app/(auth)/login.tsx and signup.tsx.
  • AI provider - set EXPO_PUBLIC_USE_MOCK_AI=false and implement the provider interface in src/services/ai/index.ts. The assistant uses that provider; the remaining AI helpers are exported from the same layer and stay simulated until you replace each helper. No keys ship in the app either way.

Quality Checks

npm run lint       # ESLint (expo config)
npm test           # dependency-free smoke tests
npm run verify     # data + navigation integrity checks
npm run theme:check # WCAG AA contrast of every palette
npx tsc --noEmit   # TypeScript
npx expo-doctor    # Expo SDK / dependency validation

npm test covers the search matcher, variant pricing, coupon math (percentage, fixed, caps, minimums), order totals (including gift wrap and gift cards), size-chart integrity, the fit-finder recommender and loyalty tier maths. npm run verify validates order seed items, home-section slugs, offer/story references, every asset require() target on disk, and every static navigation target against the route table. npm run theme:check measures every palette against WCAG AA and fails if global.css drifts from the default palette.

Demo Data Reference

  • Login: demo@zoven.com / Demo@123, or phone +880 1712 345678 / Demo@123. Password login signs in directly; the One-time-code tab uses OTP 123456.
  • Addresses: five saved demo addresses across Greenfield, Fairview, Northvale, Lakeshore and Stonebridge
  • Orders: seeded history with varied statuses plus live tracking timelines
  • Coupons: WELCOME10 (10% off, min $100, max $30), FLAT25 ($25 off, min $150), SAVE8 ($8 off, min $120) and SAVE50 ($50 off, min $400)
  • Gift card: ZOVEN-DEMO-25 ($25 demo balance), or buy a card from the Gift Cards screen
  • Returns & requests: sample entries in every status
  • Shopping lists: pre-filled demo lists with to-buy and purchased items
  • Loyalty: Silver / Gold / Platinum tiers with sample points
  • Notifications: order, promo and system entries with unread states

Troubleshooting

SymptomFix
Images look stale or missing after replacing assetsRestart with a cleared cache: npx expo start -c
Image cropped on one screenExport at the placeholder's exact dimensions / ratio - several bands size themselves from the artwork, so a matching ratio is never cropped.
Ripple not visible on a buttonThe ripple sits behind opaque content on image/solid buttons; the pressed dim still shows. Circular ripples apply to square/round buttons automatically.
Local release build uses the wrong package nameRun npx expo prebuild --clean after changing app.json, then rebuild.
EAS asks for a keystoreLet EAS generate one (recommended) or supply your own for store releases.
EAS asks for a projectRun eas init to create a project under your account; the template intentionally ships without an owner or project id.
Map tiles blankCheck EXPO_PUBLIC_MAP_PROVIDER; maptiler without a key falls back to OSM automatically.
Untranslated text in a non-English localeAll shipped UI keys are present in every locale. If you add a new key, add it to src/lib/locales/*.ts; until then it falls back to English.

Source & Credits

Built with open-source software. Main libraries and their licenses:

  • Expo / React Native - MIT
  • Expo Router - MIT
  • NativeWind - MIT
  • Zustand - MIT
  • TanStack React Query - MIT
  • i18next / react-i18next - MIT
  • react-hook-form / Zod - MIT
  • react-native-reanimated / gesture-handler - MIT
  • Leaflet - BSD-2-Clause; map data © OpenStreetMap contributors
  • Lucide icons - ISC

Demo catalog text, brand names (ZOVRA, VENZEL, ZENOVA ...), outlet names, addresses, coordinates and imagery are fictional placeholders created for this kit and are not affiliated with any real company or retail location.

Version Log

  • v1.0.0 (10 Nov 2026) - Initial release: 78 screens / 80 routes (5 system, 10 auth & legal, 17 discovery, 4 cart & checkout, 7 orders & after-sales, 24 account & settings, 4 AI, 7 policy pages), full shopping + checkout + orders + tracking + returns & exchanges + product requests + shopping lists + gift cards + loyalty + AI demo, 10 palettes, 22 stores, 10 selectable locales with complete UI key coverage, 20 currencies, mock API layer, Leaflet maps, EAS profiles.

Support

Questions, bug reports or feature requests? Get in touch:

Author: MKTemplateWizard

Email: khanmonir1335@gmail.com

Portfolio: codecanyon.net/user/mktemplatewizard/portfolio

Theme Color: #183B32 (Primary) - see src/global.css --color-primary

We typically respond within 24 hours (6 months support included, extendable to 12 months).

Thank you for choosing ZOVEN.