πŸ“± React Native Β· Expo SDK 54

Axpo Documentation

Complete guide to install, run, customize, and ship your car rental mobile app template. Purple light theme, booking flow, profile screens, and 5-language support.

Expo Router Reanimated i18n TypeScript v1.0.0

Overview

Axpo is a marketplace-ready React Native / Expo template for car rental, ride-share, or automotive booking apps. All UI screens are included β€” connect your own backend when ready.

🏠

Home & Explore

Search, categories, brand filters, featured vehicles, and filterable grid views.

πŸš—

Car Details

Image gallery, specs, features, favorites, and Book Now call-to-action.

πŸ“…

Booking Flow

Dates, location, add-ons β†’ checkout β†’ success confirmation screens.

πŸ‘€

Profile Hub

Settings, payments, documents, bookings, help, and language picker.

πŸ”

Auth Screens

Polished login and sign-up UI β€” wire to your auth provider.

✨

Animated Splash

Branded purple gradient splash with logo animation on launch.

Features

Everything included in the template out of the box.

AreaDetails
HomeLocation picker UI, search bar, brand filters, featured card, nearby cars
ExploreCategory chips, price/rating filters, vehicle grid
Car DetailImage gallery, specs, features, favorites toggle, Book Now
BookingPickup date/duration, location, add-ons, price breakdown, checkout form
ProfileStats, menu items, sign out β†’ login
Profile sub-screensSettings, language, edit profile, payments, documents, bookings, help
AuthLogin & sign-up with gradient styling (UI only)
ChatPlaceholder screen ready for messaging integration
SplashPurple gradient animated splash with logo
i18nEnglish, French, Spanish, German, Korean β€” persisted via AsyncStorage

Requirements

Software you need before installing the project.

Required

ToolVersionNotes
Node.js18.x or 20.x LTSnodejs.org
npm9+Bundled with Node.js (Yarn or pnpm also work)
Code editorβ€”VS Code recommended

For testing on devices

PlatformWhat to install
Physical deviceExpo Go (iOS App Store / Google Play)
iOS SimulatormacOS + Xcode
Android EmulatorAndroid Studio with an AVD
Web browserChrome, Firefox, or Edge (optional)
This template uses Expo SDK 54 with the New Architecture enabled. Expo Go from the store supports SDK 54. For production builds, use EAS Build or npx expo prebuild.

Optional

  • EAS CLI β€” npm install -g eas-cli for cloud builds
  • Watchman (macOS) β€” faster file watching for React Native
  • Git β€” version control

Installation

Follow these steps to set up the project on your machine.

1

Extract the project

Unzip the template package into your workspace. Open a terminal in the folder that contains package.json and app.json.

2

Install dependencies

npm install

Or with Yarn: yarn install

3

Start the dev server

npm start
# or
npx expo start
No .env file is required. Vehicle images load from Unsplash URLs β€” internet is needed for images, but UI navigation works with bundled mock data offline.

Running the App

Once Expo is running, choose how to preview the app.

Expo terminal shortcuts

KeyAction
iOpen iOS Simulator (macOS only)
aOpen Android Emulator
wOpen in web browser
QR codeScan with Expo Go on your phone

Direct platform commands

npm run ios       # expo start --ios
npm run android   # expo start --android
npm run web       # expo start --web

Clear Metro cache

Use after dependency changes, splash updates, or if stale code appears:

npx expo start -c

After native config changes

If you modify app.json splash settings or native plugins:

npx expo prebuild --clean
npx expo start -c

Folder Structure

Key directories and what they contain.

Axpo/ β”œβ”€β”€ app/ # Expo Router β€” file-based routes β”‚ β”œβ”€β”€ _layout.jsx # Root stack, splash, language provider β”‚ β”œβ”€β”€ (tabs)/ # Home, Explore, Chat, Profile β”‚ β”œβ”€β”€ (auth)/ # Login, Signup β”‚ β”œβ”€β”€ car/[id].jsx # Vehicle detail β”‚ β”œβ”€β”€ booking/ # Booking flow (3 screens) β”‚ └── profile/ # Settings, language, help, etc. β”œβ”€β”€ assets/images/ # App icon, splash, favicon β”œβ”€β”€ components/ # Tab bar, splash, UI components β”œβ”€β”€ constants/ # vehicles.js, booking.js, theme.ts β”œβ”€β”€ context/ # language-context.jsx β”œβ”€β”€ i18n/translations/ # en, fr, es, de, ko JSON files β”œβ”€β”€ styles/ # Per-screen StyleSheet modules β”œβ”€β”€ app.json # Expo config └── package.json
PathRole
app/All screens and routes (Expo Router)
components/Shared UI β€” tab bar, splash, themed components
constants/Vehicle mock data, booking helpers, theme tokens
context/React context (language / i18n)
i18n/Translation files and translator logic
styles/Per-screen StyleSheet modules
assets/images/Icons, splash image, favicon

Path alias

Imports use @/ mapped to the project root (see tsconfig.json):

import { useTranslation } from '@/context/language-context';
import { VEHICLES } from '@/constants/vehicles';

Tech Stack

Libraries and frameworks used in this template.

TechnologyVersionPurpose
Expo SDK~54.0.33React Native framework & tooling
React Native0.81.5Mobile UI
React19.1.0UI library
Expo Router~6.0.23File-based navigation
React Navigationv7Stack & tab navigators
Reanimated~4.1.1Splash & animations
expo-linear-gradient^15.0.8Gradients
expo-image~3.0.11Optimized images
AsyncStorage2.2.0Locale persistence
@expo/vector-icons^15.0.3Ionicons icon set
TypeScript~5.9.2Type checking (strict)

npm Scripts

ScriptCommandDescription
startexpo startStart dev server
androidexpo start --androidOpen on Android
iosexpo start --iosOpen on iOS
webexpo start --webRun in browser
lintexpo lintESLint check

Color Palette

Axpo uses a purple & white light theme. Change colors in the style files listed at the bottom.

Primary

Primary Purple#6C3CE1Headers, buttons, splash
Purple Dark#3B1A9EGradients, depth
Purple Deep#2D1580Splash dark mode
Purple Light#F0EEFFChips, badges
Purple Alt#8C6BFFProfile accents
Purple Tint#EEE8FFCard highlights

Backgrounds

Root BG#0F0E1AHome outer background
Page BG#F8F9FCProfile, booking screens
Card BG#FFFFFFCards, sheets
Input BG#F3F4F8Search, form fields

Text

Text Primary#1A1A2EHeadings, body
Text Secondary#6B7280Captions, labels
Grey Light#9CA3AFPlaceholders

Semantic

Success#10B981
Warning#F59E0B
Error#EF4444
Info#3B82F6
Yellow Accent#F5E642

Where colors are defined

FileObjectUsed for
styles/home.styles.jsCHome screen theme
styles/booking.styles.jsBCBooking flow
styles/profile.styles.jsβ€”Profile screens
styles/account.styles.jsβ€”Account sub-screens
constants/theme.tsColorsLegacy themed components
To rebrand: search and replace #6C3CE1 across the styles/ folder, then update splash colors in app.json and components/splash/animated-splash.jsx.

Typography & Fonts

The template uses system fonts β€” no custom font files are bundled.

PlatformFont family
iOSSF Pro Display / system-ui
Androidsans-serif / sans-serif-medium
Websystem-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial

Font weights used

WeightUse
400 (normal)Body text
600Labels, buttons
700–800Section titles, prices, headers

Adding custom fonts

1

Add font files

Place .ttf or .otf files in assets/fonts/

2

Load with expo-font

In app/_layout.jsx, load fonts before rendering:

import { useFonts } from 'expo-font';

const [loaded] = useFonts({
  'MyFont-Regular': require('../assets/fonts/MyFont-Regular.ttf'),
  'MyFont-Bold': require('../assets/fonts/MyFont-Bold.ttf'),
});
3

Apply in StyleSheets

title: {
  fontFamily: 'MyFont-Bold',
  fontSize: 24,
}

Icons

Icons use Ionicons from @expo/vector-icons.

import { Ionicons } from '@expo/vector-icons';

<Ionicons name="search" size={20} color="#6C3CE1" />

Browse all icon names: icons.expo.fyi

Logo & Branding

How to change the app name, logo, splash screen, and icons.

πŸ“›

App name & slug

Edit app.json β€” change expo.name, expo.slug, and expo.scheme (deep link).

"name": "Axpo", "slug": "Axpo", "scheme": "axpo"
πŸ–ΌοΈ

App icon

Replace assets/images/icon.png with your logo (recommended 1024Γ—1024 px, PNG, no transparency for iOS).

✨

Splash screen image

Replace assets/images/splash-icon.png. Configure size and background in app.json:

"plugins": [[
  "expo-splash-screen",
  {
    "backgroundColor": "#6C3CE1",
    "image": "./assets/images/splash-icon.png",
    "imageWidth": 100,
    "dark": { "backgroundColor": "#2D1580" }
  }
]]
πŸ€–

Android adaptive icons

Replace these files in assets/images/:

  • android-icon-foreground.png
  • android-icon-background.png
  • android-icon-monochrome.png

Background color in app.json β†’ android.adaptiveIcon.backgroundColor (default: #E6F4FE)

🌐

Web favicon

Replace assets/images/favicon.png

🎬

Animated splash (in-app)

The animated splash shown after the native splash is in components/splash/animated-splash.jsx. It uses the icon from assets/images/icon.png and displays the app name from i18n key splash.appName.

🎨

Primary brand color

Update purple #6C3CE1 in all styles/*.styles.js files, splash constants in animated-splash.jsx, and app.json splash backgroundColor.

πŸ“

App name in UI (all languages)

Update splash.appName in every file under i18n/translations/ (en, fr, es, de, ko).

After changing icons or splash in app.json, run npx expo prebuild --clean for native dev builds, then npx expo start -c.

Languages (i18n)

5 languages built in. User selection is saved to AsyncStorage (@axpo/locale).

πŸ‡ΊπŸ‡Έ English (en)
πŸ‡«πŸ‡· FranΓ§ais (fr)
πŸ‡ͺπŸ‡Έ EspaΓ±ol (es)
πŸ‡©πŸ‡ͺ Deutsch (de)
πŸ‡°πŸ‡· ν•œκ΅­μ–΄ (ko)

Using translations in code

import { useTranslation } from '@/context/language-context';

const { t, locale, setLanguage, dateLocale } = useTranslation();

<Text>{t('home.greeting')}</Text>
<Text>{t('booking.totalPrice', { amount: '299' })}</Text>

Users change language via Profile β†’ Settings β†’ Language (app/profile/language.jsx).

Adding a new language

1

Copy translation file

Copy i18n/translations/en.json β†’ i18n/translations/xx.json and translate all keys.

2

Register in i18n/index.js

Import the file, add to translations, LANGUAGES, and LOCALE_MAP.

Translation files location

i18n/translations/en.json, fr.json, es.json, de.json, ko.json β€” ~271 keys each.

Mock Data & Customization

Vehicles

Edit constants/vehicles.js β€” the VEHICLES array and helper functions (getVehicleById, getFeaturedVehicle, etc.).

Booking pricing

Edit constants/booking.js for tax rates, service fees, add-ons, and i18n-aware location/duration helpers.

Connecting a backend

The template is UI-first. To connect a real API:

  1. Create a services/ or api/ folder for fetch logic
  2. Replace constants/vehicles.js reads with API responses
  3. Wire auth screens to Firebase, Supabase, or your REST API

Production Build

EAS Build (recommended)

npm install -g eas-cli
eas login
eas build:configure
eas build --platform ios
eas build --platform android

Docs: expo.dev/build

Local prebuild

npx expo prebuild
npx expo run:ios
npx expo run:android

Troubleshooting

IssueSolution
Stale bundle / old codenpx expo start -c
Splash not updatingChange app.json, then npx expo prebuild --clean
Metro port in useKill other Expo processes or --port 8082
Property error after editsClear cache and reload app
iOS simulator not openingxcode-select --install
Android emulator not foundAndroid Studio β†’ Device Manager β†’ start AVD
Images not loadingCheck internet β€” Unsplash URLs need network
@/ path not resolvingRestart TS server; check tsconfig.json