Cross-border commerce · 2024 · iOS + Android
Amanah
Cross-border marketplace connecting travelers and shoppers across 10+ countries. Offers, tracking, and secure messaging — 40% engagement lift in beta.
Technical Product Owner + Mobile Engineer
10+
Countries
Two-sided
Shoppers and travelers
40%
Beta engagement lift
Click any screen to zoom
01
Context
Amanah (“Your Journey. Their joy.”) is a two-sided mobile product: shoppers who want an item from abroad, and travelers who can carry it. A trip (Toronto → Amman) becomes a capacity. Offers, orders, in-thread chat, and a fee stack (item, tax, service, processing, traveler reward) have to make sense in CAD and JOD.
02
My role
I owned
- Two-sided flow: shopper order vs. traveler trip
- Offer / order states and in-order chat
- Pricing breakdown and multi-currency display
- Flutter implementation, auth, and messaging UI
The team owned
- Payments and payout rails
- Trust & safety policy
- Backend matching of trips to orders
03
The problem
Cross-border shopping usually means a forwarder or a cousin. Neither is structured. Travelers have unused luggage space; shoppers have Amazon links and a deadline. Without offers, status, and a conversation tied to the item, the handshake falls apart in WhatsApp.
04
Discovery
We split the jobs: a traveler publishes a trip and sees orders/offers; a shopper places an item (URL, price, qty) and a reward. Chat is not a generic inbox — it is scoped to the order, with a progress strip and the product card pinned. Social login exists because this is a consumer product, not an enterprise SSO.
05
Product decisions
Chat lives on the order
- The decision
- Messaging is inside the order thread, with the item, expected date, and stage tracker above the bubbles.
- Why
- Context switching to WhatsApp is how money and dates get lost.
- The trade-off
- We did not ship a global social inbox. Conversations are transactional on purpose.
- The result
- Shopper and traveler negotiate against the same Nike, the same date, the same stages.
Show every fee, including traveler reward
- The decision
- The summary screen lists item, Canadian tax, service, processing, and traveler reward, then estimated CAD and the JOD billed note.
- Why
- Trust dies in surprise totals. The traveler’s cut must be visible or the supply side will not show up.
- The trade-off
- The checkout looks “expensive” compared to a fake low headline price.
- The result
- Both sides can argue about a number that is honest before anyone flies.
Trips as the traveler home
- The decision
- Travelers manage Active / All trips (route, date, details) rather than a generic feed.
- Why
- Capacity is a flight, not a profile. The unit of work is Toronto → Amman on a date.
- The trade-off
- Less social discovery. More operational clarity.
- The result
- Offers and orders hang off a trip. Earning is visible even when it is still zero.
06
UX / user flow
Teal, white, and light blue. Ahlan on sign-in, Google / Facebook / Apple, then Home, orders, messages, trips, profile. Offer cards show rater, status (Accepted), product image, source URL, and placed offer. Settings expose email, phone, and payout — the traveler’s real account, not a toy profile.
07
Technical architecture
Flutter, REST-backed orders and trips, real-time or polled chat, image attachments, coupon hooks, and multi-currency presentation. Auth is email plus social. Payout method is a first-class account setting because the supply side is paid people, not ads.
08
What I built
- Auth (email + social) and account settings
- Trip list and trip detail (orders / offers)
- Item edit flow with summary, coupons, and fee stack
- Order-scoped chat with stage tracker
- Shopper and traveler navigation
09
Trade-offs
KYC, insurance, and customs automation were not v1. We shipped the commercial handshake: trip, offer, price honesty, and a thread. Marketplace liquidity features waited until the core loop was usable.
10
Launch
Consumer Flutter app for iOS and Android, bilingual in spirit (Ahlan, JOD/CAD) for a Jordan–Canada corridor first.
11
Outcome
Shoppers and travelers can complete an offer, see a full cost stack, and talk on the order. Scale and GMV figures stay unpublished. The product exists as a working two-sided loop, not a concept deck.
12
What I learned
Two-sided products fail when you design only the shopper. The traveler needs trips, offers, and payout in the same mental model. I would have put traveler empty states (no trips yet) on the same polish level as the shopper checkout from the start.