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.
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.
| Area | Details |
|---|---|
| Home | Location picker UI, search bar, brand filters, featured card, nearby cars |
| Explore | Category chips, price/rating filters, vehicle grid |
| Car Detail | Image gallery, specs, features, favorites toggle, Book Now |
| Booking | Pickup date/duration, location, add-ons, price breakdown, checkout form |
| Profile | Stats, menu items, sign out β login |
| Profile sub-screens | Settings, language, edit profile, payments, documents, bookings, help |
| Auth | Login & sign-up with gradient styling (UI only) |
| Chat | Placeholder screen ready for messaging integration |
| Splash | Purple gradient animated splash with logo |
| i18n | English, French, Spanish, German, Korean β persisted via AsyncStorage |
Requirements
Software you need before installing the project.
Required
| Tool | Version | Notes |
|---|---|---|
| Node.js | 18.x or 20.x LTS | nodejs.org |
| npm | 9+ | Bundled with Node.js (Yarn or pnpm also work) |
| Code editor | β | VS Code recommended |
For testing on devices
| Platform | What to install |
|---|---|
| Physical device | Expo Go (iOS App Store / Google Play) |
| iOS Simulator | macOS + Xcode |
| Android Emulator | Android Studio with an AVD |
| Web browser | Chrome, Firefox, or Edge (optional) |
npx expo prebuild.
Optional
- EAS CLI β
npm install -g eas-clifor 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.
Extract the project
Unzip the template package into your workspace. Open a terminal in the folder that contains package.json and app.json.
Install dependencies
npm install
Or with Yarn: yarn install
Start the dev server
npm start
# or
npx expo start
.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
| Key | Action |
|---|---|
| i | Open iOS Simulator (macOS only) |
| a | Open Android Emulator |
| w | Open in web browser |
| QR code | Scan 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.
| Path | Role |
|---|---|
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.
| Technology | Version | Purpose |
|---|---|---|
| Expo SDK | ~54.0.33 | React Native framework & tooling |
| React Native | 0.81.5 | Mobile UI |
| React | 19.1.0 | UI library |
| Expo Router | ~6.0.23 | File-based navigation |
| React Navigation | v7 | Stack & tab navigators |
| Reanimated | ~4.1.1 | Splash & animations |
| expo-linear-gradient | ^15.0.8 | Gradients |
| expo-image | ~3.0.11 | Optimized images |
| AsyncStorage | 2.2.0 | Locale persistence |
| @expo/vector-icons | ^15.0.3 | Ionicons icon set |
| TypeScript | ~5.9.2 | Type checking (strict) |
npm Scripts
| Script | Command | Description |
|---|---|---|
| start | expo start | Start dev server |
| android | expo start --android | Open on Android |
| ios | expo start --ios | Open on iOS |
| web | expo start --web | Run in browser |
| lint | expo lint | ESLint check |
Color Palette
Axpo uses a purple & white light theme. Change colors in the style files listed at the bottom.
Primary
Backgrounds
Text
Semantic
Where colors are defined
| File | Object | Used for |
|---|---|---|
styles/home.styles.js | C | Home screen theme |
styles/booking.styles.js | BC | Booking flow |
styles/profile.styles.js | β | Profile screens |
styles/account.styles.js | β | Account sub-screens |
constants/theme.ts | Colors | Legacy themed components |
#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.
| Platform | Font family |
|---|---|
| iOS | SF Pro Display / system-ui |
| Android | sans-serif / sans-serif-medium |
| Web | system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial |
Font weights used
| Weight | Use |
|---|---|
| 400 (normal) | Body text |
| 600 | Labels, buttons |
| 700β800 | Section titles, prices, headers |
Adding custom fonts
Add font files
Place .ttf or .otf files in assets/fonts/
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'),
});
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.pngandroid-icon-background.pngandroid-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).
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).
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
Copy translation file
Copy i18n/translations/en.json β i18n/translations/xx.json and translate all keys.
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:
- Create a
services/orapi/folder for fetch logic - Replace
constants/vehicles.jsreads with API responses - 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
| Issue | Solution |
|---|---|
| Stale bundle / old code | npx expo start -c |
| Splash not updating | Change app.json, then npx expo prebuild --clean |
| Metro port in use | Kill other Expo processes or --port 8082 |
| Property error after edits | Clear cache and reload app |
| iOS simulator not opening | xcode-select --install |
| Android emulator not found | Android Studio β Device Manager β start AVD |
| Images not loading | Check internet β Unsplash URLs need network |
@/ path not resolving | Restart TS server; check tsconfig.json |