A customer mobile app, a web storefront and an admin dashboard for an electronics and phone retailer, all on one backend that stays in step with the shop's accounting and stock. Live at mobilyiq.com.

A customer mobile app, a web storefront and an admin dashboard on one backend, kept in sync both ways with the shop's accounting and stock system. Customers browse, compare, save and order. The shop runs its catalogue, stock, campaigns and orders from the dashboard.

E-COMMERCE — MOBILE APP — ERP INTEGRATION

Client
Mobily, an electronics and phone retailer in Iraq (TODO: confirm the client is happy to be named)
My role
Product design and full-stack engineering across mobile, web, admin and backend.
Duration
August – September 2026
Tools

Overview

Mobily is an electronics and phone retailer. I designed and built its digital storefront end to end: a customer mobile app, a web storefront and an admin dashboard on one backend. That backend stays in sync both ways with the accounting and stock system the shop already runs on.

It is fully bilingual and Arabic-first. Live at mobilyiq.com.

Context

The shop's stock, prices and accounting already lived in its ERP. The project added everything customer- and staff-facing around it: • browsing, search and product comparison • cart, checkout and order tracking • reviews, wishlists and back-in-stock alerts • campaigns • a full admin dashboard

All three apps share one codebase, so a product, a price or a label means the same thing everywhere.

Problem

Selling online usually means running a second system that slowly drifts from the real one. Prices go wrong, items get sold that aren't on the shelf, and orders never reach the books.

The data was the other half of the problem. The ERP held sparse, English-only records: item codes, not catalogue pages. Nothing in it was ready to show an Arabic-speaking customer comparing two phones.

The storefront had to sell from the same truth the shop counts with, and present it properly.

Constraints

The ERP is the system of record. It stays the single source of truth for stock, prices and accounting.

No card payments. Customers pay cash on delivery or by bank transfer, so stock must be held between order and delivery.

Bilingual from the data up, across mobile, web and admin.

Real-world data. The product records were built for accounting, not for customers: codes instead of names, missing images, and no Arabic.

Architecture

One backend serves three products: • the mobile app (Expo and React Native) • the web storefront (React) • the admin dashboard (React)

The connection to the ERP is isolated and runs in the background. A slow or unavailable ERP never slows a customer down, and nothing is lost if it's briefly offline. The ERP always has the final word on stock and prices, and history is never deleted.

Key decisions

The ERP stays the source of truth. An accepted order becomes an invoice, and received stock becomes a stock receipt. Price changes reach the storefront automatically. Stock held by undelivered orders is reserved, so nothing is sold twice.

A catalogue built from accounting data. A catalogue tool turns bare ERP items into real product pages, with Arabic names, brands, categories, colour variants, descriptions, key specs and photos.

Shop by real specs. Each category defines its own key specs, such as storage, RAM, screen and battery. Customers filter and compare on values taken from real products.

One codebase for every app. Shared building blocks keep mobile, web and admin consistent, and a change lands everywhere at once.

Pages search engines can read. Every storefront page has its own title and description, and missing pages return proper not-found responses.

Measure before optimising. Load testing maps the busiest paths through the store, so performance work goes where the measurements point.

Hard problems

One bad record shouldn't stop the store. A single problematic product could hold up the whole catalogue update. Updates now handle each product independently, so one item never blocks the rest.

Missing data overwriting good data. An empty field in the ERP could replace a good product photo. Updates now only ever improve a product page, never blank it.

Orders that changed after the fact. Renaming a product used to change past orders too. Each order now keeps the product details exactly as they were at purchase.

A slow dashboard and app. Full-size photos made both sluggish. Images are now optimised on upload, including every existing one.

Security

• Customer accounts are verified, passwords are protected with modern hashing, and sign-in is protected against abuse. • Separate access. Admin and customer access are completely separate. • Honest reviews. Only customers who actually received a product can review it.

Result

Live at mobilyiq.com. The mobile app, web storefront and admin dashboard run on one backend that stays in step with the shop's accounting and stock.

TODO: launch month, and one concrete change for the shop. Examples: first online orders in week one; staff no longer update prices in two places; no item sold online that wasn't in stock.

Stack

Mobile: Expo · React Native Web and admin: React · Vite Backend: Node.js · TypeScript Integration: two-way ERP sync

What I'd do differently

Make the ERP connection the backbone from the first commit, built from the start to handle a bad record or a brief outage gracefully.

Settle the bilingual data model before building screens. Adding Arabic and English fields later meant touching every app.

Load-test before launch traffic, not after. It's cheap, and it tells you exactly where to optimise first.

Selected projects / Keep exploring

A little more of my work.

View all work

Have a project in mind?


Get in touch