VStitch by Anjali Nanda — Custom Fashion E-Commerce Engineering Case Study
Engineering a Custom Fashion Commerce Platform Beyond the Storefront
WebNest Studio engineered VStitch as a full-stack fashion commerce platform using React, Python and PostgreSQL — combining customized dress workflows, secure payment processing, transactional communication, automated invoice generation and a scalable architecture designed for future expansion.
- React
- Python
- PostgreSQL
- Vector Search
- Razorpay
- Resend
- PDF Generation

Project Overview
The Challenge
VStitch required more than a conventional e-commerce storefront.
The platform needed to manage the complete customer journey — from product discovery and customized dress requirements to checkout, payment verification, order processing, customer communication and invoice generation.
The architecture also needed to remain maintainable and extensible so additional capabilities could be introduced in Phase 2 without rebuilding the core platform.
Challenge
Build a flexible fashion commerce experience.
Approach
Separate experience, business logic, data and external services.
Outcome
A modular full-stack commerce architecture ready for continued expansion.
Architecture
Under the Hood
The architecture powering VStitch beyond the customer-facing storefront.
- 01
React Frontend
- Product discovery
- Product detail
- Customization
- Cart
- Checkout
- Responsive experience
- 02
API Security Layer
- Authentication
- Authorization
- Input validation
- Rate limiting
- Protected endpoints
- 03
Python Backend
- REST APIs
- Business rules
- Order orchestration
- Payment workflows
- Service integrations
- 04
Performance & Reliability
- Caching
- Idempotency
- Duplicate request protection
- Error handling
- Logging
- 05
PostgreSQL + Vector Layer
- Customer data
- Products
- Orders
- Payments
- Customization
- Invoice metadata
- Vector capabilities
- 06
External Services
- Razorpay
- Resend
- PDF generation
From Product Discovery to Fulfilment
VStitch was engineered as one interconnected commerce workflow rather than a set of disconnected website features. Each step hands its result to the next, so an order carries its customization, payment and invoice with it all the way to fulfilment.
- 1Product Discovery
- 2Product Detail
- 3Dress Customization
- 4Cart
- 5Checkout
- 6Order Creation
- 7Payment
- 8Payment Verification
- 9Database Update
- 10Invoice Generation
- 11Transactional Email
- 12Fulfilment
Commerce That Supports Customization
A key VStitch requirement was supporting customers who buy customized dresses, rather than treating every purchase as a standard SKU transaction.
Customization information is part of the order workflow, not an isolated field on a product page. The requirements a customer provides are associated with the order itself, travel with it through payment, and are still attached when the order reaches the people who make the garment.
- 1Select Product
- 2Choose Customization
- 3Provide Requirements
- 4Associate Requirements with Order
- 5Payment
- 6Preserve Customization for Fulfilment
Payments Designed Around Transaction Integrity
Payments run through Razorpay. The order is created on the backend before payment starts, and the result of the payment is verified by the backend before anything that depends on it — the order status change, the invoice, the customer email — is allowed to run.
Frontend payment success is not treated as the authoritative transaction state.
- 1Customer Checkout
- 2Order Created
- 3Payment Initiated
- 4Razorpay
- 5Backend Verification
- 6Order Status Updated
- 7Invoice Generated
- 8Customer Notified
Preventing Duplicate Transactions
Real checkouts are messy: customers double-click the pay button, networks retry requests, and external systems can resend the same event. Without safeguards, any of these could produce a duplicate order, a duplicate transaction, a second invoice or a repeated email.
Critical operations are therefore tied to a unique transaction reference. If a request with that reference has already been processed, the existing result is returned; only a genuinely new request is processed and persisted. This matters most around payment and order workflows, where repeating an operation has a direct cost to the customer.
- 1Request
- 2Idempotency Key / Unique Transaction Reference
- 3Already Processed?
- 4Yes: Return Existing Result
- 5No: Process, Persist, Respond
Security Beyond the Frontend
Frontend restrictions are never treated as sufficient protection for sensitive backend operations. Every request that changes data is checked again on the server.
Public APIs receive traffic from genuine customers, bots, accidental request loops and malicious clients alike. Incoming requests are identified and checked against a rate limit before they reach application logic, and sensitive endpoints use stricter policies than ordinary read operations.
Authentication
Who is making the request?
Authorization
Is the user permitted to perform the operation?
Server-Side Validation
Can this input be trusted?
Payment Verification
Has the transaction actually been verified?
- 1Incoming Request
- 2Client / Request Identification
- 3Rate Limit Check
- 4Allowed: API Processing
- 5Not Allowed: Throttle / Reject
Performance Without Unnecessary Database Work
Information that is requested often and changes rarely is served from a cache instead of repeating the same database work on every request. A cache hit returns immediately; a miss reads from the database, stores the result and then responds.
Cached data is invalidated when the underlying record changes, so customers do not see stale product or order information.
- 1Request
- 2Cache Lookup
- 3Hit: Respond
- 4Miss: Read Database
- 5Update Cache
- 6Respond
Structured Commerce Data
Commerce data is relational by nature: a customer places an order, the order contains items, each item refers to a product and may carry customization, and the order is linked to a payment and an invoice. PostgreSQL was selected because it enforces those relationships and keeps transactional data consistent.
Alongside the relational data, vector capabilities provide a foundation for semantic retrieval and future intelligent experiences. PostgreSQL handles the deterministic transactional information; the vector layer prepares the platform for similarity and context-based features as they are introduced.
- 1Customer
- 2Order
- 3Order Items
- 4Product + Customization
- 5Payment
- 6Invoice
From Transaction to Invoice and Email — Automatically
Transactional communication is connected to application events. When a business event occurs, the Python backend gathers the customer and order context, generates the message and sends it through Resend.
Invoices are produced the same way. After a successful order, the backend reads the customer, order and payment records, generates the invoice as a PDF, associates it with the order and delivers it to the customer. Invoice details come from the authoritative transaction data rather than being typed in again by hand.
- 1Successful Order
- 2Retrieve Customer, Order and Payment Data
- 3Generate Invoice
- 4Create PDF
- 5Associate with Order
- 6Send via Resend
- 7Customer
Engineering Beyond the UI
Engineering Challenges We Solved
Payment Integrity
Synchronizing application order state with external payment processing.
Customization
Preserving customer-specific dress requirements throughout the order lifecycle.
Duplicate Operations
Designing critical workflows around idempotency and duplicate-event protection.
API Protection
Using authentication, authorization, validation and rate-limiting principles.
Performance
Reducing unnecessary processing through appropriate caching and optimized data access.
Automation
Connecting orders with transactional emails and PDF invoice generation.
Data Integrity
Maintaining relationships between customers, products, customization, orders, payments and invoices.
Extensibility
Keeping the architecture modular enough to support Phase 2.
Technology
Technology Stack
- Frontend
- React
- Backend
- Python
- Database
- PostgreSQL
- Intelligence Layer
- Vector capabilities
- Payments
- Razorpay
- Transactional Email
- Resend
- Documents
- PDF generation engine
- Architecture
- REST / API-driven modular architecture
- Security
- Authentication · Authorization · Validation · Rate limiting
- Reliability
- Caching · Idempotency · Duplicate-event protection
What This Project Reinforced
Building VStitch reinforced an important engineering principle for our team: a modern e-commerce platform is much more than the storefront customers see.
Behind every successful checkout are interconnected systems responsible for data integrity, payments, order state, customization, security, communication, documents and fulfilment.
Engineering these systems as part of one architecture creates a much stronger foundation than treating them as isolated integrations.
Learn the technologies behind this build: React tutorial, Python tutorial, PostgreSQL tutorial, Database design tutorial.
What's Next
VStitch was designed with continued expansion in mind.
The modular React, Python and PostgreSQL architecture allows additional commerce, automation, intelligence and customer-experience capabilities to be introduced progressively without rebuilding the core platform.
Follow WebNest Studio for the next engineering update.
Building More Than a Website?
We engineer the systems behind digital businesses — from customer-facing experiences to APIs, databases, payments, automation and intelligent workflows.
A beautiful storefront is what customers see. Reliable engineering is what makes it work.