Layer 04 · Product
Ghaiari
A car-parts marketplace for Libya. Mobile app for buyers, web dashboard for sellers, all backed by Supabase.
What it does
Ghaiari connects auto parts buyers and sellers. Buyers find parts through a React Native app and pay from an in-app wallet; sellers manage listings and orders through an Astro web portal. Vehicle compatibility data shows whether a part fits the buyer's car.
Architecture
Two frontends, one backend:
- Mobile app: React Native (Expo). Browse by vehicle, search parts, order, and receive push notifications.
- Seller and admin web: server-rendered Astro for listings, orders and moderation.
- Backend: Supabase handles auth, Postgres with Row Level Security, storage, cron jobs and push dispatch.
Key decisions
Vehicle compatibility in the database. A dedicated table links parts to vehicle models, and a Postgres function answers whether a part fits a given model.
Supabase RLS for multi-tenant data. Every row in the database has a seller_id, and Row Level Security policies enforce that sellers only see their own orders and inventory. Buyers see only public listing data. This means the mobile app queries Postgres directly: no custom API layer needed for reads.
Saying no to features was harder than building them.
The hard parts
Search. Catalog search runs ILIKE queries across Arabic, English and French titles, backed by trigram indexes so the wildcard matches stay usable.
Screenshots
Screenshots show an earlier build, from when the project was called Axto.
What I learned
This was my first full-stack marketplace and the project where I learned to say no. The feature list kept growing, and every addition had to work across the app, the web portal and the database rules.