Mobile frontend for an Ethiopian marketplace app built with Expo Router, React Native, and TypeScript.
# Bazaar.ET — React Native Frontend App
Ethiopia's peer-to-peer marketplace mobile frontend. Built with **Expo SDK 54** + **Expo Router 6**.
---
## Tech Stack
| Layer | Technology |
|---|---|
| Framework | React Native 0.81 + Expo SDK 54 |
| Navigation | Expo Router 6 (file-based routing) |
| Language | TypeScript 5.3 |
| Auth Storage | `expo-secure-store` (JWT tokens) |
| Images | `expo-image` (CDN-cached, fast) |
| Gradients | `expo-linear-gradient` |
| Icons | `@expo/vector-icons` (Ionicons) |
| State | React Context (AppContext + LanguageContext) |
| API | Supabase-first client access with mock-mode fallback |
| Builds | EAS Build (Expo Application Services) |
| OTA Updates | EAS Update |
---
## Folder Structure
```
mobile-app/
├── app/ # Expo Router screens (file-based routing)
│ ├── _layout.tsx # Root layout — wraps all screens in providers
│ ├── index.tsx # Entry redirect (→ onboarding / role dashboard)
│ ├── onboarding.tsx # 4-slide onboarding carousel
│ ├── (auth)/
│ │ ├── login.tsx # Sign in with demo quick-login chips
│ │ ├── register.tsx # 2-step role-select + details registration
│ │ └── forgot-password.tsx
│ ├── (buyer)/ # Bottom tab navigator (5 tabs)
│ │ ├── home.tsx # Hero, categories, hot deals, featured products
│ │ ├── products/
│ │ │ ├── index.tsx # Searchable, filterable, infinite-scroll product grid
│ │ │ └── [id].tsx # Product detail — images, specs, reviews, cart
│ │ ├── cart.tsx # Cart with ETB summary + checkout CTA
│ │ ├── orders/
│ │ │ ├── index.tsx # All buyer orders
│ │ │ └── [id].tsx # Order detail with progress tracker + actions
│ │ ├── favorites.tsx # Wishlist grid
│ │ ├── checkout.tsx # 2-step checkout: address → payment
│ │ ├── disputes.tsx # Open/view disputes
│ …