SoleLux: Building a Premium Luxury Shoe E-Commerce Platform
How I built a luxury e-commerce platform with a cinematic storefront, admin dashboard, and multiple payment options including Razorpay and COD.
SoleLux is a premium luxury shoe e-commerce platform that I built to explore the full complexity of modern e-commerce systems. The platform includes a cinematic customer storefront, a comprehensive admin dashboard, and support for multiple payment methods including credit cards, Razorpay, UPI, and cash on delivery.
I chose React with TypeScript and Vite for the frontend because I wanted the development experience to be fast and the codebase to be maintainable over time. TypeScript catches a significant class of bugs at compile time that would otherwise appear as runtime errors in production. For state management, I used Zustand for client-side state and TanStack Query for server state caching. This separation is important because client state and server state have fundamentally different requirements. Client state like UI toggles and form inputs needs immediate updates, while server state like product listings and user profiles benefits from caching, background refetching, and optimistic updates.
The e-commerce architecture required careful consideration of the checkout flow. A typical e-commerce checkout has multiple steps: cart review, shipping information, payment method selection, and order confirmation. Each step has validation requirements, and users should be able to navigate back and forth without losing their data. I implemented a multi-step form with persistent state and per-step validation. The form data is stored in Zustand, so navigating between steps is instant and does not require server roundtrips.
Payment integration was the most technically demanding part. Razorpay's SDK requires careful handling of the payment lifecycle: initiating the payment, handling the callback, and verifying the payment signature on the server side to prevent tampering. The cash on delivery option adds another layer of complexity because it requires a different order fulfillment workflow. I built a payment service abstraction that unifies these different payment methods behind a common interface, so the rest of the application does not need to know which payment method was used.
The admin dashboard supports product CRUD operations, order management, customer management, and analytics. The product management interface includes image upload with automatic resizing and optimization, inventory tracking with low-stock alerts, and bulk editing capabilities. The order management interface provides a pipeline view showing orders in various stages from pending to shipped to delivered, with drag-and-drop status updates.
Building SoleLux taught me about the importance of handling payment webhooks correctly. Payment providers send asynchronous notifications about payment events, and these webhooks must be processed reliably even if the application is restarted or experiences errors. I implemented a webhook processing system with idempotency keys, retry logic with exponential backoff, and a dead letter queue for events that cannot be processed after multiple attempts. This ensures that no payment event is ever lost, and no payment is ever processed twice.
The analytics dashboard provides insights into sales trends, popular products, customer demographics, and conversion rates. I built this using materialized views in PostgreSQL that are refreshed periodically, providing fast queries even over large datasets without impacting the performance of the transactional database.