MSmsameer
HomeProjectsExperienceAboutBlogContact
Let's talk
MSmsameer© 2026 Muhammad Sameer. All rights reserved.
HomeProjectsExperienceAboutBlogContact

Made with ❤️ in Azad Kashmir, Pakistan

Back to projects

EFG AfroMarket — B2B Marketplace Platform

A worldwide B2B marketplace connecting African suppliers with buyers, spanning supplier, buyer, local-administrator and platform-operator surfaces. My scope was the supplier mobile app and the platform's six-language localization layer.

E-Commerce2026Flutter Developer — Supplier App & Localization
EFG AfroMarket — B2B Marketplace Platform — E-Commerce project by Muhammad Sameer
B2B MarketplaceFlutterLocalizationRTLREST APIKYCEscrow

Case study

How this was built, in the order I'd walk someone through it.

  1. 01

    Problem

    AfroMarket connects suppliers across Africa with buyers worldwide, and the platform side of that already existed as web dashboards. The gap was the supplier: someone who is often mobile-first, frequently not an English speaker, and who needs to register, list, respond to buyer inquiries and watch their orders from a phone. An English-only web dashboard was not going to reach them.

  2. 02

    Users

    Suppliers (the app I built)Buyers (web)Local administrators (web)Platform super admin (web)
  3. 03

    Architecture

    A Flutter client for iOS and Android talking to the platform's REST API — the same backend behind the web buyer, supplier and super-admin dashboards. Localization is Flutter's own `AppLocalizations` codegen over structured ARB files, one per locale.

  4. 04

    My responsibility

    The supplier-side mobile app and the localization layer across the whole app. Delivered as a production-ready handover — the client publishes it.

  5. 05

    One important feature

    Six languages, including right-to-left Arabic

    English, French, Spanish, Arabic, Swahili and Hausa. Arabic is the one that matters technically: it isn't a string swap but a full directional flip — navigation drawer slides from the right, chevrons reverse, icon and label order mirrors, and every layout has to hold up under both directions.

  6. 06

    How it works internally

    Copy lives in structured ARB files keyed by meaning rather than by screen, so a shared label is translated once and reused, and no string is left hard-coded in a widget. Flutter's codegen turns those into a typed `AppLocalizations` accessor, which means a missing key is a build error rather than a blank space discovered in production. Directionality is derived from the active locale rather than set per widget, so RTL propagates through the tree instead of needing per-screen handling. Language selection sits in the drawer and applies immediately across the app.

  7. 07

    Challenge

    RTL is where localization stops being translation and becomes layout engineering. Anything positioned with a hard-coded left or right — padding, alignment, a trailing chevron, an avatar beside a name — is correct in five languages and visibly broken in the sixth. And it degrades quietly: nothing crashes, it just looks wrong to exactly the users you can't easily get feedback from.

  8. 08

    How I solved it

    I worked in direction-relative terms throughout — start/end rather than left/right — so mirroring falls out of the framework instead of being hand-maintained per screen, and reviewed every screen in Arabic as a first-class pass rather than a final check. Keying ARB entries by meaning kept the translation surface small enough that six locales stayed maintainable as screens changed.

  9. 09

    Trade-off

    Six locales is a real ongoing tax: every new string is six edits and a re-translation before the feature can ship, which slows feature work down measurably. For a marketplace whose entire value is cross-border reach, shipping a feature late in six languages beats shipping it early in one — but it is a genuine cost, and on a product with a narrower audience I would not pay it.

  10. 10

    What I learned

    Design the localization architecture before writing the second screen, not after the tenth. Retro-fitting direction-awareness is a per-widget audit across the whole app; building on start/end primitives from the start makes RTL close to free. I also came away treating language as part of the product surface rather than a setting — for these users it decides whether the app is usable at all.

Screens

Platform super admin (web)

The wider platform the supplier app plugs into — countries, administrators, suppliers, farmers, buyers and orders across the marketplace.

Buyer dashboard (web)

The other side of the trade: RFQs, orders, shipments and trade documents.

Supplier dashboard (web)

The desktop counterpart to the app I built — same supplier, same data, different surface.

More projects

See all
BarqiBazar — Offline-First Commerce & Delivery PlatformE-Commerce

BarqiBazar — Offline-First Commerce & Delivery Platform

S-Shop — MERN E-Commerce Web AppE-Commerce

S-Shop — MERN E-Commerce Web App

NuxusEd — Multi-Tenant School Management SaaSSaaS

NuxusEd — Multi-Tenant School Management SaaS