Quickmi is a role-based parcel delivery mobile app built with Expo + React Native + Expo Router. It includes separate user and agent experiences, onboarding/auth flows, map-based booking/tracking screens, and reusable bottom-sheet driven UI flows.
- Expo SDK 54
- React Native 0.81 + React 19
- Expo Router (file-based routing)
- TypeScript
- NativeWind (Tailwind for React Native)
- React Native Maps
- Expo Location
- AsyncStorage
- Gorhom Bottom Sheet
- Role selection (
useroragent) persisted in local storage. - 3-step onboarding flow.
- Phone-based auth UI with OTP verification screen.
- User flow:
- Home with instant/scheduled delivery entry points.
- Vehicle selection and multi-step booking bottom sheet.
- History (completed/ongoing/cancelled) and detail pages.
- Profile, payment, address/place, and shared settings screens.
- Agent flow:
- Document verification flow.
- Map-based agent home with live location permission + tracking.
- Offer/accept/price/trip status bottom sheet states.
- Shared screens for notifications, chat, profile updates, and settings.
app/
_layout.tsx # Root stack + custom font loading
index.tsx # Entry redirect logic (role/onboarding/auth)
role-selection.tsx
(onboarding)/ # step1 -> step3
(auth)/ # signup + verify-code
(user)/ # tabs: home, history, profile + booking flow
(agent)/ # agent home + profile/ride/wallet
(agent-verification)/ # KYC/document upload flow
(shared)/ # settings, chat, notifications, shared profile screens
components/ # reusable cards, headers, buttons, booking/ride UI blocks
utils/
storage.ts # AsyncStorage helpers for app state gates
useUserRole.ts # role lookup hook
assets/ # fonts + images/svgOn launch, app/index.tsx checks persisted state in AsyncStorage:
- Role selected?
- Onboarding completed?
- Auth completed?
- Selected role =
agentoruser?
Navigation result:
- Missing role ->
/role-selection - Missing onboarding ->
/(onboarding)/step1 - Missing auth ->
/(auth)/signup - Agent ->
/(agent-verification) - User ->
/(user)/home
Create a .env file (or copy .env.example) and set:
GOOGLE_MAPS_API_KEY_ANDROID=your_android_maps_key
GOOGLE_MAPS_API_KEY_IOS=your_ios_maps_keyThese are wired in app.config.js for native map configuration.
npm installnpm run startThen open in Expo Go / simulator / emulator from the Expo CLI menu.
npm run android
npm run ios
npm run web- Many screens currently use mocked/static data (trip details, history cards, some map points).
- OTP verification completes when any 4 digits are entered.
- Social login buttons are present as UI only.
- Some actions are placeholder-only (e.g., share/call stubs, partial settings actions).
npm run reset-projectexists inpackage.json, but the referenced script file is not present (scripts/reset-project.js).
The media/ folder contains demo materials including screenshots and quickmi_demo.mp4.
npm run start- start Expo dev servernpm run android- run Android native targetnpm run ios- run iOS native targetnpm run web- run web targetnpm run lint- run Expo lint