
About the project
The online shop of a Tunisian low voltage, surveillance and broadcast distributor, rebuilt off PrestaShop onto a custom trilingual platform connected to the company ERP.
My role: Full stack developer of the replacement platform and of its integration with the back office.
IMC sells low voltage equipment, surveillance and broadcast hardware, and their shop originally ran on PrestaShop. It worked, but every real requirement fought the platform. Arabic never laid out properly, prices rounded in ways that did not match the invoices, and the fiscal stamp had to be remembered rather than applied. Worst of all, the shop knew nothing about the stock in the back office, so a product could be sold twice.
I rebuilt the storefront on the white label platform I had already developed for other Tunisian retailers, rather than starting from nothing. That gave IMC a trilingual catalogue with genuine right to left support for Arabic, a money model stored in millimes so totals never drift, and cash on delivery as the primary checkout path instead of an afterthought. The fiscal stamp is applied on every order because it belongs to the order domain itself.
The part that mattered most is not visible on the site. Orders placed online are ingested directly into the company ERP, so the storefront and the back office share one stock level, one price list and one customer record. Selling a product now decrements the same stock the warehouse counts. The stack is Next.js 16 with the App Router in strict TypeScript, PostgreSQL on Cloud SQL through Drizzle, and Firebase for authentication, storage and hosting.
Main features
- 🔄 Migration off PrestaShop: The catalogue moved to a custom platform without losing product history or search visibility.
- 🔗 Live ERP integration: Online orders are ingested straight into the company ERP, so the shop and the warehouse share one stock level.
- 🌍 Trilingual catalogue: French, English and Arabic, with right to left layout handled properly rather than approximated.
- 💵 Cash on delivery first: The dominant local payment method shapes the checkout instead of being added as an alternative.
- 🪙 Prices that match the invoice: Amounts are stored in millimes, so what the customer sees online is what the accounting system bills.
- 🧾 Automatic fiscal stamp: The Tunisian legal stamp is part of the order domain, so every invoice is compliant without manual steps.
- 📱 Mobile first storefront: The layout is built for the phone, which is where most of the shop's traffic comes from.
- ⚡ Modern rendering stack: Next.js 16 with the App Router replaces the PrestaShop theme layer, cutting page weight and improving load times.
Problems and solutions
Problem: The PrestaShop storefront and the back office did not share data, so stock counted in the warehouse and stock shown online were two different numbers. A product could be sold after it had already left the shelf, and every fix meant a human comparing two screens.
Solution: Rebuilding the shop on a platform that ingests orders directly into the ERP removed the gap entirely. Stock, pricing and customer records now have a single source, and an online sale decrements the same stock the warehouse counts.
Problem: Generic international platforms handle neither the millime nor the Tunisian fiscal stamp nor Arabic layout correctly, so each one was patched locally until the patches became the real system.
Solution: These rules are part of the domain model on the new platform. Money is stored in millimes, the fiscal stamp is applied by the order itself, and Arabic is a first class locale with real right to left layout.

