

In productionLive at jemamove.com
JEMA Move
a two-sided junk-removal marketplace, on every platform at once
The problem
On-demand removal work has two sides that want opposite things. A customer wants a price and a time. An independent hauler wants to be shown only the jobs they can actually take — close enough, big enough, and worth the drive. Serving both means one system that matches on geography and capacity, moves money safely between strangers, and never shows either side a screen it cannot act on.
What I built
Two separate products — one for customers, one for haulers — each shipping natively on iOS and Android and on the web, plus a privileged operations console for staff. Six clients over one backend: one account signs into all of them, a pickup requested in a browser is one an iPhone hauler can quote on, and which product a build is gets decided when the binary is made.
- Clients over one backend
- 6 + console
- Edge functions
- 100
- Database migrations
- 309
- Matching
- PostGIS, one indexed query
- Swift 6
- SwiftUI
- Kotlin
- Compose
- Next.js
- TypeScript
- Postgres
- PostGIS
- Row-level security
- Stripe Connect











