Boutiques en ligne clés en main pour la Tunisie
Une plateforme e-commerce prête à vendre conçue pour les habitudes d'achat en Tunisie : paiement à la livraison, commande rapide, suivi et support bilingue.

The brief
A Tunisian shop that sells on Instagram takes orders in the comments, writes the address in a notebook and calls the courier by hand. The platforms that exist expect a credit card at checkout and an owner who reads English. What that shop needs is not a website — it is the store their customers already know how to use: cash on delivery, an order that takes seconds, a parcel number, and a WhatsApp button.
So I built one store application and turned it into a product: the shop owner fills in a form, we talk, and their own store is online within 24 hours. Creating it is free; they pay a subscription that covers hosting, the domain, updates and support.
The order that actually happens
The checkout is built around the only payment method most Tunisian buyers use. Cash on delivery means no card, no account, no sign-up: name, phone, address, done. A fast order path takes a customer from a product to a placed order without ever seeing a cart, because that is how a phone buyer behaves.
After the order, the store keeps answering the question the shop owner would otherwise answer by phone: parcel tracking by number, order status, and a WhatsApp button that opens the conversation with the product already written into the message.
Delivery companies, not a carrier text field
Couriers are first-class in the data model. Each store configures the companies it works with, waybills go out to them, and their tracking comes back into the order — so the status a customer reads is the status the courier reported, not one the shop owner retyped.
Arabic or French, right to left included
The storefront and the dashboard are both translated, and the client picks the store's language at launch. Arabic is a genuine right-to-left layout — logical CSS, mirrored components, Arabic typefaces — rather than translated strings dropped into a left-to-right shell.
A dashboard the owner can actually run
One application serves both the shop and its admin, so there is no second system to learn or host. Inside it: products with variants, attributes and images, stock with movement history, quantity offers, categories and brands, promo codes, customers, reviews, order tags, sales statistics, the Facebook and Instagram pixel, extra staff accounts, and push notifications when an order lands. Coming from WooCommerce is an import, not a retype.
Plans the software enforces
Three subscriptions — 40, 60 and 90 TND a month, or ten months' price for a year — and their limits are real: the store carries its own subscription record and refuses what the tier does not include (100 products on Essentiel, 500 products plus two staff accounts on Business, an agreed catalogue on Premium). A limit that only exists on the pricing page is a limit that gets discovered at the worst possible moment.
One image, one isolated stack per client
Every client runs the same container image — nothing is baked per shop, the app reads its own site URL at runtime — but each gets an isolated Docker stack: the store, its own PostgreSQL database, and a nightly dump sidecar, behind its own nginx vhost and Let's Encrypt certificate. One client's data is never one query away from another's.
Deployment is a button in this portfolio's admin: it generates the secrets, renders the compose file, pulls the image, brings the stack up, verifies the first boot and then strips the first-boot admin credentials from the server. The client changes their own password afterwards; I keep no readable copy of it anywhere.
Under the hood
A single full-stack Next.js 16 application on React 19 and TypeScript: Server Components read Prisma 7 directly, mutations are Server Actions validated with Zod, and the schema runs to around thirty models covering the catalogue, orders, delivery, subscriptions and notifications. PostgreSQL 18 for the data, Auth.js for sessions, next-intl for Arabic and French, Tailwind and shadcn/ui for the interface, Recharts for the statistics, Web Push for order alerts, Sentry for errors, Docker and GHCR for shipping.
Where it stands
The stores are live and selling for real clients, and the offer has its own page on this site — the plans, the shops already online, and the form that starts a launch.