Modern Supply
Client work · Design & Engineering
A bilingual storefront and admin console for Modern Supply, an F&B ingredients distributor in Oman. Customers browse 654 packs across five brand catalogues, build one cart, and an order is saved with a tracking number before the branch picks the order up on WhatsApp. Client work, live, with the catalogue still being priced.


- Products
- 654Products
- Brand catalogues
- 5Brand catalogues
- Languages
- 2Languages
- Unit tests
- 119Unit tests
- Governorates / wilayats
- 11 / 61Governorates / wilayats
01 / 07
The distributor
Modern Supply sells the things a kitchen runs on. Chocolate, fillings, sauces, fruit purees, ice cream powders, syrups. Their customers are cafes, restaurants and hotels across Oman, and they work from five branches.
02 / 07
A shop you had to visit
Before this site, Modern Supply had an Instagram account and its branches. Customers saw some products on Instagram, but there was no full menu, and many products were never shown. To buy, they went to a branch in person, or searched Google Maps for a branch to find its number. There was no delivery, and no way to follow an order.
For a restaurant this is not a small inconvenience. Comparing what is available means going. Checking a price means asking. And once the order is placed there is nothing to point at afterwards if the delivery arrives short.
03 / 07
The shop comes to you
The decision was not to move customers off the way they already buy. A cafe owner who talks to a branch on WhatsApp will keep talking to a branch on WhatsApp, and a site insisting on being the only route would simply go unused.
So the order is written down first. The customer browses the full catalogue, fills one basket, and picks the branch. The order is saved with a tracking number, the stock is set aside, and only then does WhatsApp open with everything already typed out. The conversation still happens. What changed is where the conversation starts: from a record both sides share.
And the customer follows the order afterwards with the order number and their phone, through pending, confirmed, being prepared, on the way, delivered.


04 / 07
A catalogue that arrived broken
The client sent two printed catalogues typed into one file: 654 products, each with an English name and an Arabic name beside. The Arabic column had been damaged before arriving, saved in the wrong text encoding somewhere along the way. Whole letters were missing, including some of the most common in the language. Repair was impossible, because nothing was left to repair.
So all 654 Arabic names were rebuilt from the English, by rule, with wording corrected by hand wherever a rule produced something no buyer would say. No native speaker has read these names yet, which is worth knowing rather than assuming otherwise.
The catalogue also changed shape. The same cream in a five kilo tub and a one kilo tub is two different things to sell, each with its own price and its own stock, not one product in two sizes.


- Products rebuilt
- 654
- Brand catalogues
- 5
05 / 07
Behind the storefront
Staff get one place to run everything. Orders arrive there with all the branch needs, and staff move them along, mark them paid, set the delivery company and fee, and leave a note the customer sees on the tracking page.
The same place holds the catalogue: adding a product, restocking, changing a price, running a discount on one product or a whole brand, and setting a delivery fee for each of the eleven governorates. A product with orders behind is hidden rather than deleted, because deleting would take the history along.
06 / 07
Getting money and stock right
Two things had to be right before anything else, because both cost real money when they are wrong.
The first is the price. The basket lives in the customer's browser, and anything living there is editable by whoever sits in front of the screen. So the basket only ever says what was chosen and how many. When the order is placed the site looks up every price itself, applies any discount, adds the delivery fee, and writes the prices onto the order, so a later change never rewrites what somebody already agreed to pay.
The second is the last item on the shelf. If two customers order the last one at the same moment, one has to be told no, and the earlier version would have quietly sold the same item twice. Now stock is taken only when stock is still there at the instant of taking, so exactly one order wins and the other is refused, with the short lines named. The site is designed for this rather than proven under real traffic. No order has been placed yet.
A third case comes from the client's data rather than from code. A product with no price yet has no total to add up. Instead of refusing the order, the site saves a price request, with a tracking number, and the branch confirms the amount in the chat.
07 / 07
Where it stands
The site is live at modernsupply.om, in Arabic and English, with all 654 products loaded. What remains is the client's part. Prices, stock levels and product photos are entered by the company, and most of the entry has not happened yet, so most of the catalogue still reads as unavailable.
Delivery is built and covers all eleven governorates and sixty-one wilayats, but the fee for each one is set by the company and none has been set yet. Payment is cash on delivery. Card payment is not built.
No order has been placed through the site yet, so nothing here is a claim about customers, sales or traffic. Built, and waiting for its first order.