In India, the wholesale-retail supply chain still runs on phone calls, WhatsApp messages, and handwritten ledgers. ApnaVyapar was built to digitize this relationship, and working on it taught me a lot about building for a market I thought I understood but didn't.
A retailer in a small town needs to restock inventory. Currently, they either:
ApnaVyapar puts the wholesale market in their pocket. Browse products, compare prices across suppliers, place orders, track deliveries. Simple concept, complex execution.
The project is a monorepo with two distinct React Native applications:
End-User App - For retailers browsing and ordering products. Clean catalog interface, cart management, order history, push notifications for price drops and new stock.
Admin App - For wholesalers and platform admins. Inventory management, order processing, analytics dashboard, user management, and reporting.
Both apps share a common component library and utility functions through the monorepo structure. This saved significant development time - a button component updated once reflects in both apps.
I chose NestJS over Express for its opinionated structure. When you're building a platform with dozens of endpoints, having modules, services, and controllers enforced by the framework prevents spaghetti code.
@Module({
imports: [TypeOrmModule.forFeature([Product, Category, Order])],
controllers: [ProductController],
providers: [ProductService],
})
export class ProductModule {}
TypeORM handles the database layer with MySQL. The migration system keeps the schema versioned and deployable across environments.
Not all features are free. Wholesalers subscribe to different tiers based on their needs:
The subscription logic integrates with payment gateways and automatically manages feature access based on plan level.
Nobody wants spam notifications. ApnaVyapar's notification system is context-aware:
Each notification type can be individually toggled by the user.
The backend runs on EC2 instances managed by PM2. The architecture is straightforward but reliable:
B2B apps are fundamentally different from consumer apps, and this was a major learning for me. Retailers order in bulk - 500 units, not 1. Pricing depends on quantity, relationship history, and negotiation. Payment terms include credit (net 30, net 60).
Building these B2B-specific workflows into a mobile-friendly interface required me to rethink standard e-commerce patterns from scratch.
Building for the Indian market taught me about localization beyond just language. It's about understanding business practices, payment preferences (UPI is king), and connectivity challenges (many retailers have spotty internet). This project changed how I approach building for emerging markets.
Built with excellence in mind
Optimized for speed & scalability
Battle-tested with real users
Responsive across all devices
Maintainable & well-documented
Explore other projects
I built a multi-tenant SaaS platform for dairy business management as a TurboRepo monorepo with API, web dashboard, and mobile app, featuring super admin management, tenant isolation, SMS notifications, and shared packages across all applications.
I rebuilt my brass manufacturing corporate website from scratch — new brand identity, modernized color system, static export optimization, local product photography, and cleaner URL architecture.
I built a production-grade corporate website for a brass component manufacturer and exporter based in Jamnagar, Gujarat. Fully static, zero-backend architecture with a custom design token system, 55+ product catalog with detailed specifications