SafeRide Africa — Expo React Native driving school landing page
# Safe Ride Africa — Driving School App
Cross-platform application for **Safe Ride Africa Driving School** (Nairobi, Kenya). Built with Expo + React Native, serving iOS, Android, and Web from a single codebase.
## Tech Stack
| Layer | Technology |
|---|---|
| Framework | Expo ~51 / React Native 0.74 |
| Routing | Expo Router (file-based) |
| Styling | NativeWind 4 + Tailwind CSS 3 |
| Backend | Supabase (PostgreSQL, Auth, Edge Functions) |
| Payments | M-Pesa Daraja STK Push |
| Animations | React Native Reanimated 3 + Skia |
| Forms | React Hook Form + Zod |
| i18n | i18next (EN, SW, FR, ZH, AR) |
| Maps | pigeon-maps (web) / react-native-maps (native) |
## Getting Started
### Prerequisites
- Node.js 18+
- Expo CLI: `npm install -g expo-cli`
### Install
```bash
npm install
```
### Environment
Copy `.env.example` to `.env` and fill in your keys:
```bash
cp .env.example .env
```
Required variables:
```
EXPO_PUBLIC_SUPABASE_URL=
EXPO_PUBLIC_SUPABASE_ANON_KEY=
MPESA_CONSUMER_KEY=
MPESA_CONSUMER_SECRET=
MPESA_PASSKEY=
MPESA_SHORTCODE=
MPESA_CALLBACK_URL=
MPESA_CALLBACK_SECRET=
```
### Run locally
```bash
# Web (recommended for development)
NODE_TLS_REJECT_UNAUTHORIZED=0 npx expo start --web --port 8081 --offline
# iOS simulator
npx expo start --ios
# Android emulator
npx expo start --android
```
Open
localhost in your browser.
## Project Structure
```
app/ # Expo Router pages
_layout.tsx # Root layout, fonts, auth + modal providers
index.tsx # Landing page
about.tsx # About Safe Ride
courses.tsx # Course catalogue
services.tsx # Services overview
branches.tsx # Branch map & directory
gallery.tsx # Photo gallery
blog.tsx # Blog listing
login.tsx / register.tsx
account/index.tsx # Student dashboard
admin/index.tsx # Branch admin panel
classes/ # Class browsing & enrolment
enrollments/[id]/pay.tsx # M-Pesa payment s …