The problem
Grocery is the hardest e-commerce category — products are perishable, baskets are large, and customers care deeply about when the order arrives. Generic e-commerce templates handle products and carts but not slot-based fulfillment, perishable stock or delivery-capacity planning. This project makes the delivery slot central: slots are capacity-controlled database entities with cut-off times, so the store never accepts more orders than it can deliver in a window. Around that sit a familiar storefront (categories, search, offers, unit pricing), a cart with bill computation, a customer order-tracking timeline, and a store dashboard showing inventory with expiry awareness, slot-wise packing queues and sales reports.
How it works
- The customer browses categories, adds items to the cart and proceeds to slot selection.
- Only slots with remaining capacity and before cut-off are offered; the customer picks one.
- Placing the order atomically decrements slot capacity and product stock, and creates the order.
- The store dashboard shows a packing queue grouped by slot; staff mark orders packed, then out for delivery.
- Each transition updates the customer's tracking timeline; delivery completion closes the order.
- Low-stock and near-expiry products surface as alerts for clearance action.
Tech stack:
- React 18 single-page storefront
- Django 5 + Django REST Framework API
- PostgreSQL relational database
- Atomic slot-capacity decrement
- Order state machine (placed/packed/shipped/delivered)
- Notification hooks (SMS/email gateway)
- Token authentication
| Parameter | Value |
|---|---|
| Slot capacity | Per-slot order caps, atomic decrement |
| Cut-off | Server-side enforced per slot |
| Order states | Placed, packed, out for delivery, delivered, cancelled |
| Payment modes | UPI, cash on delivery |
| Stock | Decremented on order placement |
| Deployment | Self-hosted; API ready for a future mobile app |
Project features
- [Delivery slot engine] Slots with per-slot capacity caps and cut-off times, decremented atomically — full slots simply disappear from selection.
- [Grocery storefront] Categories, search, product cards with MRP versus offer price and unit pricing (per kg, litre, pack).
- [Fast cart] Quantity steppers with live bill computation — item total, delivery fee, handling fee.
- [Order tracking timeline] Placed to packed to out-for-delivery to delivered, with status notifications to the customer.
- [Packing queue] Store staff see orders grouped by slot, in packing priority order.
- [Inventory with expiry awareness] Stock alerts plus near-expiry flags so the store can run clearance offers on perishables.
- [Payment modes] UPI and cash-on-delivery with address management.
What is included
- Complete source code (React storefront, DRF API, models, seed catalog)
- Slot-engine and order-state-machine documentation
- Setup guide (local run, database setup, deployment notes)
- Project report PDF (background, slot-capacity design, fulfillment flow, testing notes)
- PPT presentation for final review
- Viva Q&A preparation document (REST design, atomicity, state machines, e-commerce domain)
Limitations & prerequisites
- Delivery itself is handled by the store's own riders — no third-party logistics integration.
- Notifications need an SMS/email gateway account; hooks are included.
- The demo ships with a sample catalog; real products, prices and slots must be configured.
- Route optimization for riders is out of scope (listed under future scope).
- Subscription/recurring orders are not part of this build.
- Very high order volumes would need queue-based processing beyond the student build.
Frequently Asked Questions
How do delivery slots prevent overbooking?
Each slot has a capacity counter decremented atomically when an order is placed — once full, the slot is no longer offered. Cut-off times are enforced server-side.
What happens to perishables?
Products carry expiry awareness; near-expiry stock is flagged so the store can discount it before it spoils.
Can customers change slots after ordering?
Yes, before the cut-off — the old slot's capacity is released and the new one decremented in the same transaction.
How does the store know what to pack?
The dashboard shows a packing queue grouped by delivery slot, in priority order.
Is payment online?
UPI is supported alongside cash on delivery; the gateway runs in sandbox mode in the demo.
Is this project suitable for a final-year project?
Yes — for Computer Science, IT and related programs. It demonstrates full-stack development, capacity-constrained scheduling, state machines and e-commerce fulfillment logic. Suitable for B.E./B.Tech final-year projects in Computer Science, IT and Web Development.
Components & software requirements
- React 18 single-page storefront
- Django 5 + Django REST Framework API
- PostgreSQL relational database
- Atomic slot-capacity decrement
- Order state machine (placed/packed/shipped/delivered)
- Notification hooks (SMS/email gateway)
- Token authentication
Delivery information
Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.
Support terms
Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.