work

An end-to-end e-commerce platform for a retail brand · Full-stack, from scratch

Canes: a from-scratch e-commerce platform running in LIVE mode

Ship payment, shipping, stock, a multilingual storefront and an admin panel as one self-sufficient platform, with no marketplace lock-in.

data models
~48
panels
2 (customer + admin)
live integrations
4
mode
LIVE (real payment + shipping labels)
homepage image weight
28MB to 1.9MB
mobile speed score
64 to 85+
  • Django
  • select_for_update
  • Fernet
  • Service-layer integrations
  • TR/EN

Problem

Canes needed a full e-commerce platform built from scratch: payment, shipping, stock, a multilingual storefront, and an admin panel, all under one roof, without depending on a marketplace or a hosted SaaS. One codebase had to serve both the customer-facing store and the operations team running it.

Constraint

The hardest part was that the integrations were live, with real money and real physical shipping.

Running payment and shipping providers in LIVE mode means a single edge case has real consequences. A wrongly formatted phone number or an exception inside a payment callback could leave an order that never got created, or worse, one where the money was taken but no shipment was ever dispatched. All of this had to run on a single server while keeping stock consistent under concurrent orders.

Architecture decision

I built a service-layered Django monolith rather than a distributed system it did not need.

Integrations as service modules. Payment, shipping, and marketplace integrations were abstracted into separate service modules, so the fragile external edges were isolated from the core order flow.

Atomic stock. On payment success, stock is decremented atomically with select_for_update(), which closes the race condition where two concurrent orders could both claim the last unit.

Encryption at the application layer. Sensitive data is encrypted with Fernet in the application layer, not left to sit in the clear.

One codebase, clean separation. The customer storefront and the admin panel live in the same codebase but stay cleanly separated, and content plus UI were bilingual (TR/EN) from the start rather than retrofitted.

Result

The platform runs about 48 data models across two panels, with four external integrations, payment, shipping, marketplace sync, and a product feed, live in production. It generates real payments and real shipping labels in LIVE mode.

On performance, the homepage image payload was cut from about 28MB to 1.9MB, moving the mobile speed score from 64 to 85 and up. The correctness work, atomic stock and isolated integration edges, is what let a single-server monolith carry real money and real shipments without dropping orders.

available for contract work