- E-commerce
- Back office
- Online payments
Africa Toner
- Sector
- Retail
- Delivered as
- Website
- Back office
- Year
- 2025
“Vos cartouches, livrées demain.”
(The project)
A complete online store for compatible printer toners in Morocco: catalogue, cart, Stripe and PayPal checkout, a full back-office and a guided printer-to-toner finder, built as one Laravel and React application.
(Context)
A complete store, end to end.
Africa Toner sells compatible toners to consumers and professionals. Customers browse and compare products, manage a cart, pay with Stripe or PayPal, track their orders and request toners that are not listed yet.
Behind the storefront sits a full administration area for products, brands, orders, users and toner requests, alongside the printer finder. Everything runs in one Laravel 13 application rendering React 19 through Inertia.
(Key figures)
- payment gateways
- 2
- back-office modules
- 6
- one-click sign-in
- delivery pricing
- Per city
The decisions that shaped it
One application, no separate API
Laravel controllers render React pages through Inertia.js, so there is no second REST API to maintain. Named routes are shared with the browser.
Monolith by design
Routing separated by role
Public pages, customer areas (checkout, orders, profile), guest sign-in and the administration each sit behind their own middleware.
Access control
Two payment gateways
Stripe and PayPal are both wired into checkout, giving customers a choice while one order flow runs behind them.
Flexible payments
Hybrid client state
Redux Toolkit holds interface and cart state, React Query handles server data, and hashed identifiers keep sequential IDs out of URLs.
Pragmatic state
(How it works)
The order pipeline
Catalogue to cart
Customers filter the catalogue with instant search and brand or printer facets, compare products and add them to a persistent cart.
Checkout
Checkout collects the address and delivery city, priced per city, and routes payment through Stripe or PayPal.
Order and back-office
An order is created with an obfuscated reference, and the team manages products, brands, orders, users and requests from the dashboard.
Inside the project
Captures of the delivered build, grouped by product. Select one to see it at full size.
Website
2 captures
Back office
1 captures
Technology
- Back end
- Laravel 13
- PHP 8.3
- Inertia.js 3
- Front end
- React 19
- MUI
- Tailwind CSS 4
- Vite 8
- State
- Redux Toolkit
- React Query
- axios
- Payments
- Stripe
- PayPal
- Google OAuth
(Next project)
Badging SaaS
Events, 2025


