Skip to content

VegMove

A connected grocery commerce platform. From the first item in a cart to the last mile of delivery.

Built for Customers, administrators, warehouse teams, packers and delivery partners.

VegMove customer storefront displayed on a phone, from the original product website
ONE CONNECTED PLATFORMShop.
Fulfill.
Deliver.
Web · Mobile · Operations
Role
Backend & full-stack engineer
Timeline
May 2025 — Present
Team
Techsfera
Core stack
NestJS, Next.js, Flutter, PostgreSQL
Scope
6 connected experiences

01 / BUSINESS CONTEXT

The problem to solve.

A grocery order crosses several teams. Stock, preparation, delivery, and payment need to agree even when customers and staff act at the same time.

RESPONSIBILITY

My contribution

At Techsfera, I built backend and full-stack workflows for checkout, inventory, barcode picking, payments, refunds, live updates, and operational reporting.

Team project. My contribution covers the operational software described here; the six-app platform represents the wider team’s work.

WHAT THE SOLUTION ENABLES

A connected order lifecycle: customers place orders while staff work from linked stock, fulfillment, and payment records.

02 / WORKFLOW SUMMARY

Follow the business process.

  1. 01

    Order

    Check stock, expiry, availability, and payment state.

  2. 02

    Pick & pack

    Connect shelf scans and quantities to the order.

  3. 03

    Deliver

    Assign a driver and track delivery confirmation.

  4. 04

    Reconcile

    Trace collections, refunds, and stock movements.

03 / SOLUTION DECISIONS

Business rules, made practical.

Two people can act on the same stock.
Approach
Validate checkout and picking inside database transactions.
Why it matters
Keep an order decision tied to the stock available when that decision is made.
A payment callback or stock request may arrive again.
Approach
Use idempotent operations and movement records.
Why it matters
Make retries recoverable without applying the same business change twice.
An order may change before a reminder or timeout runs.
Approach
Recheck current state in background jobs and publish live updates.
Why it matters
Keep automated actions and staff decisions aligned with the order.

DELIVERY CONTEXT

Active company project · May 2025–present. Customer web, Android, and iOS experiences are publicly linked below.

ABOUT THE EVIDENCE

Editorial workflow summary based on the project’s documented business rules. The galleries show supplied product presentations and interface examples.

One platform, many experiences

Six applications work together to move groceries from discovery to doorstep.

Built around real operations

The capabilities that connect a customer order to the people fulfilling it.

6

Connected experiences

Customer commerce and staff operations in one order lifecycle.

Stock-safe

Transactional checkout

Stock, expiry and availability checked before an order is confirmed.

Live

Operational visibility

Order, driver and staff updates delivered through server-sent events.

Traceable

Payments & inventory

Movement ledgers and payment records connect actions to outcomes.

Reliability where the work connects

Explore the rules and decisions behind the everyday workflows.

01

Inventory & checkout

Protect stock while customers and warehouse teams act at the same time.

View detailsClose details

Inventory drives most of the order flow. Checkout uses database transactions and row locks to recheck warehouse stock, current quantity, expiry, and sellable-until rules before creating an order.

Shelf and cabinet inventory track physical quantity separately from reserved quantity. Each movement writes a ledger record with before and after balances plus an idempotency key, so a retry does not count the same movement twice.

The system also blocks common inventory mistakes, including negative shelf balances, reserved stock above physical stock, blocked cabinet locations, mismatched product assignments, and moving reserved units during relocation.

02

Warehouse operations

Connect a physical scan to the right order, product and stock movement.

View detailsClose details

Warehouse picking is tied to the inventory ledger. Staff must belong to the right warehouse, the order must be in the right state, the cabinet QR code must match the shelf, and the scanned barcode must match the product or variation.

A successful scan updates the picked quantity, records the scan, and applies the shelf movement in the same transaction. The physical warehouse action and the stock accounting stay together.

The warehouse apps and admin screens support inventory batches, shelf allocation, expired stock handling, refund and exchange returns, barcode lookup, and live order updates.

03

Payments & delivery

Handle retries, refunds, online payments and driver cash collection.

View detailsClose details

VegMove supports online payments and cash collection. Razorpay orders and UPI QR payments are used during checkout and delivery collection, with webhooks updating the related order records.

The payment code handles repeated payment requests, cancelled orders, QR closure, partial refunds, late QR payments after cash collection, and refund records for returns or exchanges.

Delivery workflows cover driver assignment, delivery routes, location tracking, delivery PIN confirmation, cash collection, warehouse cash receipt, and outstanding driver-balance calculations.

04

Live updates & jobs

Keep staff informed and background actions aligned with current order state.

View detailsClose details

Operations teams need current order information. VegMove uses Redis-backed server-sent events for order, staff, driver, refund, and exchange updates, with heartbeat handling for long-running connections.

BullMQ handles background work such as order-created side effects, payment timeouts, delivery extensions, delay alerts, low-stock alerts, first-order welcomes, refund reminders, search logging, and scheduled notifications.

Several jobs re-read the current order state before acting. For unpaid online orders, a timeout cancels the order only if it is still pending and unpaid.

05

Reporting & admin

Bring catalog, fulfillment, finance and permissions into one workspace.

View detailsClose details

The admin dashboard is the central operating workspace. Catalog management covers products, variations, categories, brands, prices, banners, and home sections. Commercial controls include coupons, promotions, reward tiers, and points redemption.

Fulfillment tools cover warehouse-filtered orders, delivery and payment status, inventory batches, barcodes, expiry and sellable-until dates, shelf grids, cabinet mapping, and stock entries. Driver management, delivery slots, cash deposits, refunds, and exchanges connect fulfillment to the finance and support workflows. Reports cover sales, category revenue, customer signups, orders, and stock changes; PostgreSQL queries also support cohorts and repeat-purchase reporting.

Sensitive areas use role and permission checks, TOTP, CAPTCHA verification, Redis-backed attempt controls, blocked-device checks, and expiring customer phone-access grants.

System architecture

A high-level view of the applications and services behind the order lifecycle.

Clients / applications

Customer appFlutter
Customer websiteNext.js
Admin dashboardNext.js
Warehouse appFlutter
Packaging appFlutter
Delivery appFlutter

Backend / NestJS

REST APIOrders, stock, staff & auth
Background jobsBullMQ workers
Live updatesServer-sent events

Data layer

PostgreSQLPrisma + transactional SQL
RedisPub/sub, queues & state

Connected workflows

Razorpay / UPIPayments & refunds
DeliveryLocation & PIN confirmation
NotificationsAlerts & reminders
Explore technical decisions

The backend is a NestJS API with services for orders, carts, products, inventory, payments, staff workflows, delivery drivers, promotions, rewards, search, notifications, and reporting.

PostgreSQL stores the main transactional data through Prisma. Direct SQL is used where row locking, ledger calculations, or reporting queries need tighter control. Redis supports live event streams and short-lived operations state, while BullMQ runs deferred and scheduled work.

Next.js powers the customer storefront and admin console. Flutter apps support customer mobile use as well as warehouse, packing, and delivery workflows.

Checkout and picking guard shared stock inside database transactions. Movement ledgers retain before-and-after balances, while idempotency keys keep a repeated action from changing stock twice.

What I built

Reliability at the points where workflows meet.

Guarded shared state

Transactions and row locks protect checkout and stock changes.

Real-time operations

Redis-backed SSE connects order updates to customers and staff.

Inventory accountability

Movement ledgers and idempotency keys make stock retries safe.

State-aware background work

BullMQ jobs recheck order state before timeouts and reminders.

Tools & technologies

  • NestJS
  • TypeScript
  • PostgreSQL
  • Prisma
  • Redis
  • BullMQ
  • Server-sent events
  • Razorpay
  • Next.js
  • TanStack Query
  • Flutter
  • Docker

Have a workflow that needs connecting?

Let’s turn your business problem into a practical solution, from the first plan through launch and handover.