Mobile App

Guzo

A social-club and travel app for Ethiopia: trending sites on a shared city map, agency group tours with live seat booking, and community-submitted spots verified by support - a high-fidelity mobile prototype backed by an Expo, NestJS and Supabase monorepo with Chapa payments.

  • TypeScript
  • React Native
  • Expo
  • NestJS
  • Node.js
  • Supabase
  • PostgreSQL
  • MapLibre GL
The Guzo prototype on a moss-green page: the headline Find the roads less travelled beside a phone showing the Discover screen - a street map of Addis Ababa with photo pins, a search bar, category chips and a Trending in Addis Ababa sheet above a bottom bar with a lime plus button.

Overview

Guzo starts from an interactive prototype rather than a specification: a self-contained mobile app in plain HTML, CSS and JavaScript that opens from a single file and runs the four flows the product depends on - discovering trending sites on a full-screen Leaflet map of Addis Ababa, opening a spot and getting there by bus, bike or light rail, booking seats on an agency group tour, and submitting a new spot for Customer Support to verify. The map is genuinely interactive, with switchable dark, satellite and light tile layers and transit routes drawn over them, and the design is deliberate: a dark moss-green base with lime and coral accents, photography-forward glass cards, and a concentric radar motif for what is nearby. Behind it sits the production monorepo: a React Native and Expo mobile app, a NestJS API on Drizzle ORM, Supabase for Postgres with PostGIS, phone-OTP auth, storage and realtime, and Chapa for Ethiopian payments - Telebirr, CBE Birr and cards, settled in birr - behind a provider abstraction, all wired together with pnpm and Turborepo.

Engineering highlights

  • A single-file prototype with no build step that validates the four core flows before committing to the production stack
  • A real Leaflet map under the interface: dark, satellite and light tile layers, spot markers with popups, and bus, bike and light-rail routes with a legend
  • Tour detail with a live seat map and booking, a spot-submission flow, and a light-themed Customer Support queue for verifying community submissions
  • Monorepo layout: an Expo app, a NestJS API with Drizzle ORM, a shared package of design tokens and Zod schemas, and Supabase migrations with PostGIS and row-level security
  • Payments through Chapa behind a provider abstraction, so Telebirr, CBE Birr and card payments settle in Ethiopian birr