
Fishlo
A full-stack B2C fish marketplace modernizing traditional wet markets with multi-store management, zone-based geospatial delivery logistics, and real-time order lifecycle tracking.
About This Project
What I built and why
Fishlo is a production-grade B2C e-commerce platform built specifically for the fresh fish trade, designed to digitize traditional wet market operations at scale. The platform features a multi-store management system where each store manager operates an isolated dashboard with real-time inventory tracking (weight & piece-based), dynamic store-specific pricing with full price history, staff management, and a comprehensive Profit & Loss analytics module with COGS breakdown and expense auditing. The delivery infrastructure leverages PostGIS with MultiPolygon-based geospatial zones for hyper-local delivery eligibility, distance-based dynamic delivery charge calculation, and a batch-based delivery partner ecosystem with OTP-verified handoff, wallet management, and Firebase push notifications. Payment processing is handled through Razorpay integration with an automated reconciliation engine powered by Celery that detects missed callbacks, handles partial pre-order payments, and enforces configurable COD eligibility rules per store. The entire platform is containerized using Docker Compose orchestrating PostgreSQL (PostGIS), Redis, Celery workers & beat scheduler, Nginx reverse proxy with SSL, and Gunicorn — ensuring reliable concurrent order processing through PostgreSQL sequences and atomic transactions.
Key Features
What makes this project stand out
Built a multi-zone delivery management system using PostGIS with geospatial polygon-based delivery zones, distance-based dynamic delivery charge calculation, and batch-based order assignment with OTP-verified delivery confirmation and real-time status tracking across 8 order lifecycle stages.
Developed a multi-store management dashboard with role-based access control, real-time inventory tracking (weight & piece-based), dynamic store-specific pricing with price history, staff management, and a Profit & Loss analytics module featuring COGS breakdown, expense auditing with soft-delete, and period-over-period comparison charts.
Integrated Razorpay payment gateway with automated payment reconciliation via Celery scheduled tasks, handling edge cases like callback failures, payment timeouts, and partial pre-order payments — supporting UPI, cards, netbanking, and Cash on Delivery with configurable eligibility rules per store.
Engineered a delivery partner ecosystem with a dedicated partner app featuring wallet management (credit/debit/withdrawal workflows), batch accept/reject flows, Firebase Cloud Messaging push notifications for real-time order alerts, and comprehensive delivery logging for full audit trails.
Containerized the entire platform using Docker Compose orchestrating PostgreSQL (PostGIS), Redis, Celery workers & beat scheduler, Nginx reverse proxy with SSL (Certbot), and Gunicorn — handling concurrent order processing with PostgreSQL sequences and atomic transactions for data integrity.
Challenges & Solutions
Problems I faced and how I solved them
Challenges Faced
Replacing traditional zip-code delivery validation with high-precision, hyper-local geospatial eligibility checks for multi-zone fish delivery across different storage locations.
Handling payment callback failures where users complete Razorpay payments but the app never receives confirmation — leading to paid orders stuck in 'Pending' status.
Ensuring strict multi-store data isolation so that each store manager only sees their own inventory, orders, pricing, staff, and P&L analytics — without cross-store data leakage.
Managing concurrent order creation under high traffic without generating duplicate order numbers or causing race conditions in inventory stock deduction.
Orchestrating a complex 8-stage order lifecycle (Pending → Delivered) with batch-based delivery assignment, OTP-verified handoff, and real-time status sync across customer, store, and delivery partner interfaces.
My Solutions
Integrated GeoDjango and PostGIS with MultiPolygon-based delivery zones linked to storage locations, enabling precise Point-in-Polygon spatial queries with distance-based dynamic delivery charge calculation per zone.
Built an automated Payment Reconciliation Service using Celery scheduled tasks that polls Razorpay's order API, detects captured payments missed by callbacks, and atomically finalizes orders — with a 30-minute timeout auto-cancel fallback.
Implemented role-based store isolation by resolving the manager's StoreManagerProfile → StorageLocation FK, then filtering all backend selectors (inventory, orders, expenses, P&L) through this location context at the query level.
Leveraged PostgreSQL sequences (nextval) for atomic, lock-free order number generation (FL-YYMMDD-XXXX) with retry + UUID fallback, and deferred weight-based stock deduction to the Processing stage to avoid premature inventory conflicts.
Designed a state-machine order tracking system with DeliveryAssignmentBatch grouping, batch accept/reject flows, OTP-verified delivery confirmation via 2FA service, and Django signals triggering Firebase push notifications for real-time status updates across all user roles.