Solving for Street Food
India's street food ecosystem is massive β millions of vendors, crores of customers, and an invisible supply chain that nobody talks about. Every vendor selling chaat, dosa, or biryani has one persistent problem: sourcing raw materials reliably and cheaply.
There is no platform where a street vendor can browse available ingredients and supplies, place an order, and have it dispatched by a supplier β all in one place. Vendors rely on word of mouth, local middlemen, and physical markets with inconsistent pricing and zero accountability.
VnDyn (Vendor Dynamics) was built to fix this. It connects three stakeholders:
- Street Vendors who need raw materials and supplies
- Retailers / Suppliers who provide those materials
- Admins who manage the platform and ensure smooth operations
VnDyn gives every party their own portal with exactly the tools they need β order management, payment tracking, complaint filing, and resource browsing β all in a single web application backed by a real MongoDB database.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β VnDyn Platform β
β β
β VENDOR SUPPLIER ADMIN β
β ββββββ ββββββββ βββββ β
β Browse Resources β View Orders β View Complaints β
β Add to Cart β Approve/Reject β Resolve/Delete β
β Place Order β Dispatch β Add Resources β
β Pay Online β β View Payments β
β File Complaint β β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββ
β USER β
β (Browser) β
ββββββββ¬βββββββββ
β HTTP Request
βΌ
ββββββββββββββββββββββββ
β React Frontend β
β (Vite + React) β
β localhost:5173 β
ββββββββββββ¬ββββββββββββ
β fetch() calls
β to /api/*
βΌ
ββββββββββββββββββββββββ
β Flask Backend β
β (Python + PyMongo) β
β localhost:3001 β
ββββββββββββ¬ββββββββββββ
β PyMongo driver
βΌ
ββββββββββββββββββββββββ
β MongoDB Atlas β
β (Cloud Database) β
β VnDynCluster001 β
ββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββ
β VnDyn System β
β β
Vendor βββββββββββΊ 1.0 Authentication βββββββββ Supplier β
β β β
β βΌ β
β 2.0 Resource Browse βββΊ Resource DB β
β β β
β βΌ β
β 3.0 Order Management βββΊ Orders DB β
β β β
β βΌ β
β 4.0 Payment Processing βββΊ Payments DB β
β β β
Admin ββββββββββββΊ 5.0 Complaint System βββΊ Complaints DB β
β β
βββββββββββββββββββββββββββββββββββββββββββ
Vendor Journey:
Register β Login β Dashboard β Vendor Portal
β Browse Resources β Add to Cart β Place Order
β Payment Modal β Pay (Card/UPI/Net Banking/COD)
β Order appears as "pending" in My Orders
β [Supplier approves] β Status changes to "approved"
Supplier Journey:
Register β Login β Dashboard β Supplier Portal
β See pending orders from vendors
β Review order details (items, address, amount)
β Approve & Dispatch OR Reject
β Order status updates for vendor in real time
Admin Journey:
Login β Dashboard β Admin Dashboard
β Complaints tab: View all complaints, Resolve or Delete
β Resources tab: Add new resources for vendors to browse
β Payments: View pending/settled/rejected payments
A street food vendor is someone running a small food stall or cart β selling chaat, momos, dosa, or any other street food. They need raw materials like vegetables, cooking oil, plates, and napkins regularly. On VnDyn, vendors can:
- Browse all available resources listed by suppliers
- Add items to a cart and place an order
- Pay online through the payment modal (Card, UPI, Net Banking, COD)
- Track their order status (pending β approved)
- File complaints if something goes wrong
A supplier is a retailer or wholesaler who stocks raw materials and sells them to vendors. On VnDyn, suppliers can:
- View all incoming orders placed by vendors
- See full order details β which vendor, what items, delivery address, total amount
- Approve an order (marks it as dispatched) or Reject it
- Access the payment processing page to track payments
The admin manages the entire platform. On VnDyn, admins can:
- View all complaints filed by any user and resolve or delete them
- Add new resources/products for vendors to browse (e.g. new ingredient categories)
- View and manage all payments across the platform
- Access both the complaint dashboard and the resource management panel
VnDyn/ β Root of frontend project
β
βββ index.html β Entry HTML, loads Vite app
βββ package.json β Node dependencies and scripts
βββ vite.config.js β Vite build configuration
β
βββ src/
βββ main.jsx β React entry point, mounts App
βββ App.jsx β Route definitions, protected routes
βββ AuthContext.jsx β Global auth state (user login/logout)
βββ api.js β All API calls to Flask backend
βββ index.css β Global styles (glassmorphism UI)
β
βββ components/
βββ Home.jsx β Landing page with typewriter animation
βββ Login.jsx β Login form with demo account shortcuts
βββ Signup.jsx β 2-step registration (account + address)
βββ Dashboard.jsx β User dashboard after login
βββ VendorPortal.jsx β Vendor: browse, cart, orders
βββ SupplierPortal.jsx β Supplier: pending orders, approve/reject
βββ Admin.jsx β Admin: complaints + resources
βββ PaymentProcessing.jsx β Payment list with settle/reject actions
βββ PaymentModal.jsx β Payment flow modal (card/UPI/COD)
βββ ComplaintForm.jsx β Complaint submission form
Before you begin, make sure you have:
| Tool | Version | Download |
|---|---|---|
| Node.js | v18 or higher | https://nodejs.org |
| npm | comes with Node | β |
| Git | any | https://git-scm.com |
| Flask backend | running on port 3001 | See backend README |
Important: The frontend talks to the Flask backend. You must start the backend first before using the frontend. See
README-backend.mdfor backend setup.
git clone https://github.com/gitgyana/VnDyn.git
cd VnDynOr if you downloaded a ZIP, extract it and open a terminal inside the folder.
npm installThis installs React, React Router, and Vite. It may take a minute.
Open a separate terminal and start the Flask backend (see README-backend.md). Make sure you see:
VnDyn Flask API running on http://localhost:3001
Back in your VnDyn terminal:
npm run devYou should see:
VITE v5.x.x ready in xxx ms
β Local: http://localhost:5173/
Open http://localhost:5173 in your browser.
Use the demo accounts on the login page to instantly access each role:
| Role | Password | |
|---|---|---|
| Admin | admin@vndyn.com | admin123 |
| Vendor | vendor@test.com | vendor123 |
| Supplier | supplier@test.com | supplier123 |
Click the "Use" button next to any demo account on the login page to auto-fill the credentials.
- Go to http://localhost:5173 and click "Join as Vendor" or use the demo vendor account
- After login, click "Go to Vendor Portal"
- In the Browse Items tab, you'll see all available resources. Click "Add" to add items to your cart
- Switch to the Cart tab to review your selection and see the total
- Click "Place Order and Pay" β a payment modal will appear
- Select a payment method (Card, UPI, Net Banking, or COD) and complete the payment
- Your order appears in the My Orders tab with status "pending"
- Once the supplier approves it, the status changes to "approved"
- To file a complaint, click "File Complaint" at the bottom of any page
- Log in with the supplier demo account
- Click "Go to Supplier Portal"
- The Pending Orders tab shows all orders waiting for your approval
- Each order card shows: vendor name, items ordered, delivery address, and total amount
- Click "Approve and Dispatch" to fulfill the order, or "Reject" to decline
- Switch to All Orders to see the complete history
- Click "Payment Processing" to view payment status for all orders
- Log in with the admin demo account
- Click "Go to Admin Dashboard"
- In the Complaints tab, you'll see all complaints filed by vendors and suppliers
- Click "Resolve" to mark a complaint as resolved, or "Delete" to remove it
- Switch to the Manage Resources tab to add new products for vendors to browse
- Fill in the resource name, description, price, and category, then click "Add Resource"
- Click "Payment Processing" to view and manage all payments
| Role | Phone | Password | |
|---|---|---|---|
| Admin | admin@vndyn.com | 9999999999 | admin123 |
| Street Vendor | vendor@test.com | 8888888888 | vendor123 |
| Supplier | supplier@test.com | 7777777777 | supplier123 |
You can also register a new account using the Sign Up button on the home page.
| Component | What It Does |
|---|---|
Home.jsx |
Landing page with animated typewriter effect cycling through user types. Has "Join as Vendor" and "Join as Retailer" buttons that go directly to signup with the role pre-selected |
Login.jsx |
Email or phone-based login. Includes demo account shortcuts that auto-fill credentials with one click |
Signup.jsx |
Two-step registration form. Step 1 collects account info and role selection. Step 2 collects delivery address. Both steps validate inputs before proceeding |
Dashboard.jsx |
Shown after login. Displays user info, account type, address, and quick action buttons to navigate to the appropriate portal |
VendorPortal.jsx |
Three-tab interface for vendors: Browse Items (with Add to Cart), Cart (with order placement), and My Orders (with status badges) |
SupplierPortal.jsx |
Two-tab interface for suppliers: Pending Orders (with Approve/Reject buttons and full order details) and All Orders (history view) |
Admin.jsx |
Two-tab interface for admins: Complaints management (resolve/delete) and Resource management (add new items to the catalog) |
PaymentProcessing.jsx |
Shows payments filtered by status (pending/settled/rejected). Pending payments can be settled via the PaymentModal or rejected directly |
PaymentModal.jsx |
Full payment flow modal with method selection (Card, UPI, Net Banking, COD), input fields, simulated processing animation, and success/failure screens |
ComplaintForm.jsx |
Category-based complaint form (Order, Payment, Delivery, Product Quality, Service, Other) with character counter and confirmation redirect |
AuthContext.jsx |
React context that stores the logged-in user globally so all components can access it without prop drilling |
api.js |
Centralized API layer. All fetch calls to the Flask backend go through here. Makes it easy to change the backend URL in one place |
| Layer | Technology |
|---|---|
| Framework | React 18 |
| Build Tool | Vite 5 |
| Routing | React Router v6 |
| Styling | Custom CSS (glassmorphism) |
| Fonts | Syne + DM Sans (Google Fonts) |
| API Communication | Fetch API (REST) |
| State Management | React useState + Context API |
This project was built for a contest, which challenged participants to solve a real problem in India's street food ecosystem. The challenge: street food vendors struggle to source raw materials from trusted and affordable suppliers.
VnDyn addresses this by creating a structured digital marketplace where vendors can discover suppliers, place orders, make payments, and raise issues β all without needing to leave their phone or computer.
This project is licensed under the VnDyn License v1.0. See the LICENSE file for details.
Built with purpose. Made for the streets.