Mobile client for Sema — a WhatsApp AI agent that answers customer messages on behalf of small businesses in East Africa, in English or Swahili.
Sema is Swahili for "speak".
This is the app a business owner uses: connect a WhatsApp number, walk through onboarding for their industry, load a catalogue, and watch orders and conversations arrive. Expo, so it runs on iOS, Android and web from one codebase.
Backend: sugarshaneaz/Sema-API
The user is a shop owner with an Android phone and a prepaid data bundle, not a developer with a laptop. That shapes most of the decisions here.
Onboarding is the product. The agent is only as good as what the business
tells it — the backend tracks every required field left blank and feeds that gap
to the model as an explicit "you do not know this". So the onboarding flow
(client/screens/onboarding, client/lib/onboarding) is not a signup form to
get past. Each answered question measurably widens what the agent can safely say.
Swahili is not a translation layer bolted on. LanguageSwitcher and
OnboardingLanguageSwitcher exist as separate components because language gets
chosen before the account does — a business owner should not have to read
English to reach the setting that turns English off.
Catalogues come in as photographs. Most businesses here have a printed price
list or a menu on the wall, not a spreadsheet. So the client leans on
expo-image-picker, expo-document-picker and expo-image-manipulator to get a
PDF or a photo to the backend, which OCRs it into structured catalogue items.
Failure has to be survivable. ErrorBoundary and ErrorFallback are
top-level: a render crash on a cheap device should show a recoverable screen, not
a white rectangle in front of the person paying for this.
client/
navigation/ root, tabs, and per-area stacks (home, orders, profile, admin)
screens/ home, chat, product detail, cart, orders, profile
onboarding/ the industry questionnaire that feeds the AI context
admin/ business management
components/ themed primitives, error boundary, language switchers
lib/
api/ typed backend client
queries/ React Query hooks
onboarding/ questionnaire state
src/backend/ routes, services, middleware, prisma (co-located dev server)
shared/ types shared across the boundary
Expo · React Native (iOS · Android · web) · React Navigation · TanStack Query ·
TypeScript · Zod
JWT auth with expo-secure-store · bcryptjs
Reanimated · Gesture Handler · Keyboard Controller · Expo Glass Effect
Prisma · PostgreSQL · Express (dev server)
npm install
npx expo startNeeds the API base URL and the backend from Sema-API reachable.