Why it exists
Give a Tunisian business a bilingual storefront and a practical way to manage digital-product orders.
2026 / Project case study
Digital Storefront · Deployed on an Ubuntu VPS
A live digital-products store for a Tunisian client, with a bilingual catalog, game and gift-card collections, a multi-item basket, manual-payment checkout, and an owner-managed admin workspace.
Deployed · OVH Ubuntu VPS · Docker Compose · Caddy HTTPS
Give a Tunisian business a bilingual storefront and a practical way to manage digital-product orders.
Designed the shopping and admin experiences, engineered checkout and persistence, and deployed the complete product on an Ubuntu VPS.
Live client website · Storefront, admin & deployment
Explore the implementationI designed, built, and deployed Sobly from the customer-facing storefront to the tools used by the shop owner. French and English shoppers can browse games, subscriptions, game-credit packs, and gift-card amounts, then combine products into one order. The admin manages products, images, prices, collections, payment recipients, and order verification. I also prepared the Ubuntu VPS deployment with Docker Compose, Caddy-managed HTTPS, persistent SQLite storage, backups, and a GitHub-based update workflow so the client can maintain the business as the product evolves.
Client digital-commerce project in TunisiaSearch, category navigation, platform filters, favorites, and product details across French and English storefronts.
Choose a game or gift-card brand first, then compare its amounts, prices, and product images.
Persistent quantities and platform selections combine several products into one server-validated checkout total.
D17 is presented first; IZI Payment and Wafacash are configurable. The customer submits a transfer reference for manual verification.
The owner edits prices, availability, featured offers, game groups, gift-card brands, and artwork without changing code.
Enable or disable recipients, choose a destination manually, or rotate enabled destinations automatically between new orders.
An order queue records customer details, products, total, assigned recipient, and transfer reference for the owner to review and deliver.
HTTPS, persistent data volumes, backups, container health checks, and a GitHub update script support ongoing client improvements.
The client VPS runs the storefront and admin behind Caddy. Application releases can change while catalog data, images, orders, and certificate storage remain in persistent volumes.
The same catalog powers the bilingual storefront, grouped product pages, basket, and owner workspace. Server-side validation uses current stored prices before an order is accepted; the order keeps an immutable product and payment snapshot.
A multi-stage Docker build produces the standalone Next.js application. Docker Compose runs it on an Ubuntu OVH VPS alongside Caddy, which serves the public domain over HTTPS and redirects the www address to the canonical domain.
The project moved from ZIP-based delivery to a Git checkout on the VPS. A repository-scoped, read-only SSH deploy key lets the update script fetch releases; the script checks for local changes, backs up data, rebuilds the image, and starts the updated services. Deployment is deliberately initiated on the VPS after a GitHub push.
Actual project screens and documented visuals. Open any image for the full view.







Flattened currency and gift-card offers became difficult to browse. Grouping offers by game or brand gives customers a clear first choice while preserving each pack’s price, image, and admin editability.
A submitted reference is a request for verification, not proof of payment. Durable order snapshots, transactional recipient rotation, and idempotent request handling preserve the assigned destination across retries and refreshes.
Application code, environment secrets, and business data have separate lifecycles. GitHub carries source changes; the VPS keeps its environment configuration and persistent volumes, with backups before updates.
Open a technology to see its role in this project.
Bilingual storefront, customer checkout, and protected admin routes
Shared catalog contracts and validated server inputs
Burgundy and cream identity across desktop and mobile
Owner-uploaded product images converted to WebP
Durable catalog, settings, payment configuration, and order snapshots
Precise Tunisian-dinar basket totals
Consistent payment-recipient rotation and duplicate-request handling
Catalog, basket, migrations, payment rules, and deployment checks
Self-hosted production environment for the client
Standalone Node application and reverse proxy with restart policies
HTTPS certificates, canonical-domain redirects, and reverse proxy
Versioned releases pulled by a guarded VPS update script
Sobly is deployed at sobly.tn over HTTPS on an Ubuntu VPS, with the application and reverse proxy managed through Docker Compose.
Products, images, groups, shop settings, payment recipients, and order verification can be managed from one admin workspace.
Versioned GitHub updates, persistent storage, and backup tooling support continued improvements after the initial client handoff.
Explore the available resources or talk with me about the design and engineering behind this project.