Vendora
Independent stores. One cart. Live delivery.
Live demo: vendora.yusufhussain.in. On the login page, pick Explore with a demo account to sign in as a shopper, admin or rider.
Vendora is a multi-vendor marketplace for India: fashion, fresh groceries and Indian pantry brands, the latest iPhone, Mac and Galaxy devices, and home goods, all priced in rupees. Shoppers check out across many independent stores in a single cart and follow their rider live on a map. Sellers run their own storefronts with an AI listing assistant and flash deals, admins approve stores and dispatch riders, and riders hand over orders with a 4-digit door code.
What's new in 2.0
Vendora 2.0 merges five separate course e-commerce projects into one product and rebuilds it from the ground up:
| Came from | What it brought |
|---|
| GoCart (multi-vendor, Next.js) | Stores with admin approval, coupons, ratings, AI product descriptions, seller dashboard |
| Forever (MERN fashion store) | Size variants, collection filters and sorting, multi-image product pages |
| Grocery Delivery Live Tracking | Riders, live map tracking, delivery OTP, status history, flash deals |
| Greencart (grocery store) | Grocery departments, pack sizes, saved addresses, seller order handling |
| QuickCart (Next.js store) | Covered entirely by the above, folded in |
On top of the merge:
- Neon Postgres + Prisma instead of three different MongoDB setups
- Better Auth (self-hosted, no third-party account) instead of Clerk and hand-rolled JWTs
- An editorial redesign: warm ivory and deep forest green, Instrument Serif headlines with Inter for everything you shop with, art-directed lifestyle photography, fine borders instead of glass and gradients, and an optional dark evening theme. Responsive from 390 px phones to wide desktops
- Real checkout logic: server-side price, size and stock checks, stock reserved in a transaction, per-store orders and delivery fees, coupon expiry enforced, Stripe payments verified with Stripe before orders count as paid
- One shared design system and loading skeletons, empty states, toasts and keyboard-friendly controls on every screen
Design
Editorial luxury meets Swiss precision: a calm grid, generous spacing and real photography, so the products and stores carry the page.
| Token | Value | Used for |
|---|
| Ivory | #F7F5EF | Page background |
| Cream | #EEE9DF | Secondary panels |
| Forest | #0E3B2E | Primary buttons, selected states, brand moments |
| Ink | #171916 | Text |
| Charcoal | #656761 | Secondary text |
| Warm grey | #DDD9D0 | Borders |
| Sale red | #D83A36 | Sale prices and discount badges |
- Type: Instrument Serif for the hero and campaigns, DM Serif Display for the wordmark and section titles, Inter for navigation, prices and controls
- Shape: 6–10 px radii on cards and inputs, pill buttons, hairline borders, almost no shadow
- Motion: slight image zoom on hover, colour transitions, nothing that loops;
prefers-reduced-motion respected
- Homepage: a three-slide hero (iPhone 17 Pro, MacBook Pro M5, Kirana Corner) with real prices from the catalog, keyboard controls and autoplay that pauses on hover and for reduced motion; serif section titles with subtitles
- Product photography: new products have their backgrounds removed (rembg, ISNet) so cut-outs sit cleanly in the catalog; the original lifestyle photo follows in the gallery and leads on the New launches cards
- Header: forest announcement bar (the live coupon and the real free-delivery rule), Categories dropdown, search, and a delivery-address picker that sets your default address for checkout
- Dark theme: opt-in from the footer or dashboards, saved per browser and applied before first paint
All tokens live in src/app/globals.css.
Built for India
- Rupees everywhere: prices, delivery fees and coupons in ₹ with Indian digit grouping (₹1,34,900) and compact lakh figures on dashboards
- All states and union territories in the address form, loaded live from the CountriesNow API (with a bundled fallback), plus city suggestions per state
- PIN code lookup: type a 6-digit PIN and the city and state fill in from the India Post directory (api.postalpincode.in), with tappable locality suggestions
- Map placement by PIN: addresses without a GPS pin are placed with OpenStreetMap Nominatim so the delivery map still works
- +91 mobile numbers validated and formatted on the server; only Indian addresses are accepted
- Delivery rule: free delivery on each store's items over ₹499, otherwise ₹49
Features
Shoppers
- Search across products, brands, tags and store names; filter by department, type, price, rating, flash deals and stock; sort and paginate (all in the URL)
- Product pages with image gallery and lightbox, size picker, quantity, wishlist, full review breakdown and related items
- Flash deals with live countdowns on the home page, deals page and product cards
- One cart across stores, grouped by seller, with a free-delivery progress hint per store and coupon codes
- Guest cart in the browser, merged into the account cart on login
- Checkout with saved addresses (add one inline, optional "use my location" pin), cash on delivery or Stripe card payments
- Order tracking: status timeline, store/home/rider on an OpenStreetMap map that updates every 5 seconds, rider card with call button, and the delivery code
- Cancel before packing, rate items after delivery, wishlist and address book
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗