A multi-tenant SaaS platform enabling restaurants to manage menus, orders, and offers through a centralized system. Built solo from scratch — currently live with 2+ paying restaurant clients.
- Multi-tenant architecture — each restaurant gets its own isolated data and custom menu
- QR-based ordering — customers scan a QR code to view the menu and place orders instantly
- Restaurant dashboard — manage menu items, categories, offers, and incoming orders in real time
- Secure authentication — JWT-based auth with role separation (admin vs customer)
- API security — rate limiting, CORS policies, and input validation on all endpoints
- Image management — Cloudinary integration for scalable menu image storage
| Layer | Technology |
|---|---|
| Frontend | React.js, Tailwind CSS |
| Dashboard | React.js, Tailwind CSS |
| Backend | Node.js, Express.js |
| Database | MongoDB Atlas |
| Auth | JWT (JSON Web Tokens) |
| Image Storage | Cloudinary |
| Deployment | Vercel (frontend) · Render (backend) · MongoDB Atlas (DB) |
├── Frontend/ # Customer-facing menu & ordering UI (React)
├── Dashboard/ # Restaurant admin panel (React)
├── Backend/ # REST API server (Node/Express)
│ ├── routes/ # API route handlers
│ ├── models/ # MongoDB schemas
│ ├── middleware/ # Auth, rate limiting, validation
│ └── controllers/ # Business logic
- JWT authentication with token expiry and refresh logic
- Rate limiting on all public API endpoints to prevent abuse
- CORS configured per tenant domain
- Input sanitization and validation on all POST/PUT routes
- Node.js v18+
- MongoDB Atlas account
- Cloudinary account
# Clone the repo
git clone https://github.com/Mahato-Rambabu/qrar.git
cd qrar
# Install backend dependencies
cd Backend
npm install
# Install frontend dependencies
cd ../Frontend
npm install
# Install dashboard dependencies
cd ../Dashboard
npm installCreate a .env file in the Backend folder:
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret
CLOUDINARY_CLOUD_NAME=your_cloudinary_name
CLOUDINARY_API_KEY=your_cloudinary_key
CLOUDINARY_API_SECRET=your_cloudinary_secret
PORT=5000# Start backend
cd Backend && npm run dev
# Start frontend (new terminal)
cd Frontend && npm run dev
# Start dashboard (new terminal)
cd Dashboard && npm run devRambabu Mahato
Portfolio · LinkedIn · GitHub
MIT License — see LICENSE for details.