Skip to content
Emmanuel Lubwama

Software engineer
Mobile & web products.

Case study

2024Mobile

Easy Gas

Expo app for shopping, orders, delivery, favorites, and notifications—plus admin catalog, orders, and broadcasts.

  • React Native
  • Expo
  • TypeScript
  • Supabase
  • TanStack Query
  • Redux Toolkit

App previews

Simulator and device captures—scroll horizontally to see more screens.

Easy Gas screenshot 1
Easy Gas screenshot 1
Easy Gas screenshot 2
Easy Gas screenshot 2
Easy Gas screenshot 3
Easy Gas screenshot 3

Easy Gas is an Expo / React Native product for ordering fuel and related goods with delivery details, favourites, and notifications—plus an in-app admin area for teams who manage the catalogue, watch orders, and send broadcast messages to customers.

My role

I contributed as part of a multi-author team (I’m credited as package author alongside other engineers on the project). My work sits in the consumer flows and the shared data layer: Supabase-backed auth, typed database models, orders with stage and status, maps and delivery fields, and the glue between Redux (auth and cart) and TanStack Query for server-backed lists that stay fresh when data changes.

What we built

  • One app, two experiences: shopper routes versus an admin tab experience gated by role after sign-in.
  • Live-feeling orders: realtime subscriptions that invalidate the right queries when order rows change.
  • Push and messaging: Expo notifications and OneSignal wired through config and edge automation so alerts line up with what’s in the database.
  • Account safety: flows for sign-out and account deletion that respect in-flight orders before destructive actions.

Stack

Expo Router, TypeScript (strict), Supabase (Auth, Postgres, Realtime, Edge Functions), Redux Toolkit with persistence for auth and cart, TanStack Query, maps and location, OneSignal, and EAS for builds and store submission.

What made it hard

Shipping admin and consumer behaviour in a single binary means clear separation of routes, permissions, and state. Pairing Realtime with query cache invalidation—without fighting Redux for the same concerns—took care so support staff and customers each see a coherent, fast UI.

Highlights

  • Supabase Realtime invalidating React Query for live orders
  • User + admin surfaces (catalog CRUD, notifications, account deletion rules)
  • OneSignal + Edge Functions; EAS builds and OTA updates