
Context
The problem
My role
What I built
- Catalog with nested categories, product variations (size, color) and reusable product-type specification templates.
- Cart, guest checkout and member checkout, with Cash on Delivery and online payment through SSLCommerz, plus payment retry.
- Order status workflow with courier consignments (Steadfast) and return handling.
- Inventory ledger where every stock change is a recorded movement.
- Admin dashboard for products, stock, orders, customers and reports, with permission-based access.
- Customer CRM, notifications and marketing source tracking (website, Facebook, WhatsApp).
- Offline-first mobile order app built with Flutter.
- AI features that work only from the store's own data: product questions, AI-assisted search, draft descriptions and SEO text, comparison summaries and suggested replies for staff.
Key workflow
A customer
- Browses a category and picks a variation
- Adds to cart and checks out as a guest or with an account
- Pays by Cash on Delivery or online
- Tracks the order status
The store team
- Reviews and confirms the order
- Creates the courier consignment
- Follows delivery, or handles a return
- Reads stock and sales reports
Why this stack
- Django REST Framework
- Keeps business rules and permissions in one backend that the website, admin and mobile app all use.
- PostgreSQL
- Orders, stock and payments are relational data that must stay consistent.
- Redis and Celery
- Background work such as courier consignments and notifications runs outside the request.
- Next.js
- A fast, search-friendly storefront.
- React and Vite
- A separate admin dashboard for staff.
- Flutter
- A mobile order app that keeps working with poor connectivity.
Challenges and decisions
Stock that can be trusted
Stock is never edited directly. Every change goes through a stock movement record, so any number can be explained from its history.
Access without hardcoded roles
Staff access is controlled by a permission system rather than role checks scattered through the code. Sensitive data such as buying prices is restricted in the API and the admin.
Offline orders without duplicates
The mobile app can create orders offline. Each order carries a client reference so a retried sync does not create the same order twice.
AI that cannot invent facts
Every AI answer is built from database rows. Price, stock and warranty are shown by the system, not written by the model. Draft content is saved as a draft for a person to approve, staff replies are suggested but sent by a person, and a template fallback runs if the AI provider is unavailable.
Guest customers keep their history
Guest orders are linked to a customer's phone number, so past orders appear when that customer later signs in.
Current status
Limits
- No sales or traffic figures are published here.
- I am the only developer, so the roadmap moves at the pace of one person.
- The AI features are built and tested in the platform. A shopping assistant on Messenger and WhatsApp is still a plan.
