Empowering Indian Restaurants to Go Digital — Simple, Fast & Powerful!
Features • Quick Start • Docs • Contributing • Contact
- About
- Features
- Tech Stack
- Prerequisites
- Quick Start
- Project Structure
- API Documentation
- Contributing
- Deployment
- Troubleshooting
- License
- Contact & Support
Restroly is a comprehensive digital solution designed specifically for Indian restaurants. From street-side dhabas to fine dining establishments, Restroly helps restaurants create digital menus, accept payments, manage orders, and build their online presence with minimal effort.
| Challenge | Our Solution |
|---|---|
| 🇮🇳 Complex payment integration | Direct UPI payment links & QR codes |
| 📱 Limited digital presence | Auto-generated restaurant websites with QR menus |
| 🌐 Language barriers | Multi-language menu support |
| 📊 Manual order management | Centralized order dashboard |
| 📦 Aggregator hassles | One-platform menu & order management |
- 📱 QR Menu Generation - Generate scannable QR codes for contactless menus
- 📂 Menu Management - Organize items into categories with images and descriptions
- 💳 UPI Payment Integration - Direct payment links supporting GPay, PhonePe, Paytm, and BHIM
- 🌐 Restaurant Website - Auto-generated landing pages with live menus
- 📊 Order Dashboard - Centralized order management and tracking
- 🔐 Authentication - Secure login for restaurant owners and admins
- 📈 Analytics - Track orders, revenue, and popular items
- 🎨 Customizable Templates - Different themes for Cafes, Dhabas, Fine Dining, etc.
- WhatsApp Business API integration for status updates
- AI-powered menu translation (25+ languages)
- Zomato & Swiggy aggregator sync
- Multi-branch management
- Inventory & stock management
- Language: Java 21
- Framework: Spring Boot
- Build Tool: Gradle
- Database: PostgreSQL
- Cache: Redis (planned for some features; not required for local development)
- API Documentation: Swagger/OpenAPI
- Framework: React 18+
- Styling: Tailwind CSS
- Build Tool: Vite
- State Management: Context API / Local State
- HTTP Client: Axios
- Routing: React Router v6+
- Containerization: Docker & Docker Compose
- Frontend Hosting: Vercel / Netlify
- Version Control: Git
Before starting, ensure you have the following installed on your machine:
For Backend (Java Development):
- Java Development Kit (JDK) 21 or higher
- Gradle 8.0 or higher
- PostgreSQL 14 or higher
- Git
- IDE: IntelliJ IDEA (recommended) or Eclipse
- Maven/Gradle plugin for your IDEFor Frontend (Web Development):
- Node.js 18.0 or higher
- npm 9.0 or higher (comes with Node.js)
- Git
- Code Editor: VS Code (recommended)# Check Java version
java -version
# Check Gradle version
gradle --version
# Check Node.js version
node --version
# Check npm version
npm --version
# Verify PostgreSQL (if installed locally)
psql --version# Clone the repository
git clone https://github.com/rdodiya/RestroHub.git
# Navigate to project directory
cd RestroHub
# For GSSoC contributions, work from this branch
git checkout gssoc_develop
git pull origin gssoc_developCreate a PostgreSQL database named RestroHub_DB (must match the default JDBC URL; use quotes in SQL if you need mixed case):
createdb RestroHub_DB
# or: psql -U postgres -c 'CREATE DATABASE "RestroHub_DB";'Ensure the PostgreSQL user you use can connect to that database. By default the app expects username postgres with password postgres. Override with environment variables if your setup differs:
export DB_USERNAME=postgres
export DB_PASSWORD=your_password
# Optional: full JDBC URL
export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/RestroHub_DBThe active Spring profile is dev by default (spring.profiles.active in application.properties). Database settings are merged from application.properties and application-dev.properties.
Most defaults are already in RestroHub/src/main/resources/application.properties and application-dev.properties. Prefer environment variables for secrets (for example DB_PASSWORD, JWT_SECRET) instead of committing passwords.
# Navigate to backend directory
cd RestroHub
# If ./gradlew is not executable: chmod +x gradlew
# Ensure the Gradle wrapper JAR is present (commit includes RestroHub/gradle/wrapper/gradle-wrapper.jar).
# If it is missing, regenerate with: gradle wrapper --gradle-version 8.7
# Build the project
./gradlew clean build
# Run the application
./gradlew bootRunThe backend will be available at:
http://localhost:8181/restroly/api/v1
Swagger API Documentation:
http://localhost:8181/restroly/swagger-ui.html
# Navigate to frontend directory
cd RestroHub-FrontEnd
# Install dependencies
npm installCreate a .env file in RestroHub-FrontEnd/ (see .env.example):
# Base URL for the Spring context path (no trailing slash). Vite only reads VITE_* variables.
VITE_API_BASE_URL=http://localhost:8181/restrolyOptional:
VITE_NODE_ENV=development
VITE_ENABLE_ANALYTICS=false# Start development server
npm run devThe frontend dev server uses port 3000 by default (see RestroHub-FrontEnd/vite.config.js). If that port is busy, Vite picks the next free port (for example 3001).
http://localhost:3000
-
Backend health (Spring Boot Actuator):
curl http://localhost:8181/restroly/actuator/health
Expect
{"status":"UP"}. API routes live under/restroly/api/v1(and related paths); there is no/api/v1/healthendpoint. -
Frontend: Open the URL printed by Vite (usually
http://localhost:3000).
RestroHub/
├── RestroHub/ # Backend (Java/Spring Boot)
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/com/restroly/
│ │ │ │ ├── controller/ # REST API endpoints
│ │ │ │ ├── service/ # Business logic
│ │ │ │ ├── repository/ # Database access
│ │ │ │ ├── model/ # Entity classes
│ │ │ │ ├── dto/ # Data Transfer Objects
│ │ │ │ ├── config/ # Configuration classes
│ │ │ │ └── exception/ # Custom exceptions
│ │ │ └── resources/
│ │ │ ├── application.properties
│ │ │ ├── application-dev.properties
│ │ │ ├── application-prod.properties
│ │ │ └── logback-spring.xml
│ │ └── test/
│ ├── build.gradle # Gradle build configuration
│ ├── settings.gradle
│ └── README.md
│
├── RestroHub-FrontEnd/ # Frontend (React)
│ ├── src/
│ │ ├── components/
│ │ │ ├── admin/ # Admin dashboard components
│ │ │ ├── customer/ # Customer-facing components
│ │ │ └── common/ # Reusable components
│ │ ├── pages/
│ │ │ ├── admin/
│ │ │ ├── customer/
│ │ │ └── public/
│ │ ├── services/
│ │ │ ├── api.js # API client configuration
│ │ │ └── ApiService.js # API service functions
│ │ ├── context/
│ │ │ └── SiteContext.jsx # Context for state management
│ │ ├── styles/
│ │ │ ├── global.css
│ │ │ ├── landing.css
│ │ │ └── variables.css
│ │ ├── App.jsx
│ │ └── main.jsx
│ ├── public/
│ ├── package.json
│ ├── vite.config.js
│ ├── tailwind.config.js
│ ├── .env.example # Template for Vite env (copy to .env)
│ ├── .env # Local env (create from .env.example; not committed)
│ └── README.md
│
├── ReadMe.md # Main project README (this file)
├── LICENSE
└── CONTRIBUTING.md
Once the backend is running, access the complete API documentation at:
http://localhost:8181/restroly/swagger-ui.html
GET /api/v1/menus- Get all menusPOST /api/v1/menus- Create new menuPUT /api/v1/menus/{id}- Update menuDELETE /api/v1/menus/{id}- Delete menu
GET /api/v1/categories- Get all categoriesPOST /api/v1/categories- Create category
GET /api/v1/foods- Get all food itemsPOST /api/v1/foods- Add food itemPUT /api/v1/foods/{id}- Update food itemDELETE /api/v1/foods/{id}- Delete food item
GET /api/v1/orders- Get all ordersPOST /api/v1/orders- Place new orderGET /api/v1/orders/{id}- Get order details
We love contributions from the community! Whether you're fixing bugs, adding features, or improving documentation, your help is valuable.
1. Fork the Repository
# Click the Fork button on GitHub2. Clone Your Fork
git clone https://github.com/YOUR_USERNAME/RestroHub.git
cd RestroHub3. Create a Feature Branch from gssoc_develop branch
git checkout -b feature/your-feature-name gssoc_develop
# or for bug fixes:
git checkout -b fix/bug-name gssoc_develop4. Make Your Changes
- Write clean, well-commented code
- Follow the project's coding standards
- Test your changes thoroughly
5. Build & Test Locally
For Backend:
cd RestroHub
./gradlew clean build
./gradlew bootRun
# Test at: http://localhost:8181/restroly/swagger-ui.htmlFor Frontend:
cd RestroHub-FrontEnd
npm install
npm run dev
# Test at: http://localhost:3000 (or the URL Vite prints)6. Commit with Conventional Commits
git commit -m "type(scope): description"
# Examples:
git commit -m "feat(menu): add menu categories"
git commit -m "fix(api): resolve food item endpoint"
git commit -m "docs(readme): update setup instructions"Commit Types:
feat:- New featurefix:- Bug fixdocs:- Documentation changesstyle:- Code style changes (formatting, semicolons, etc.)refactor:- Code refactoring without feature changestest:- Adding or updating testschore:- Maintenance tasks, dependency updates
7. Push to Your Fork
git push origin feature/your-feature-name8. Open a Pull Request
- Go to the original repository
- Click "New Pull Request"
- Select your branch and provide a clear description
- Wait for review and feedback
- Code Style: Follow existing code patterns
- Testing: Test your changes locally before submitting
- Documentation: Update ReadMe.md if adding new features
- Commit Messages: Use clear, descriptive messages
- PR Descriptions: Explain what and why, not just what
| Feature | Difficulty | Impact |
|---|---|---|
| Backend Api Changes as per requirements of Frontend | Low | High |
| Frontend Highly Responsive UI | Low | High |
| Frontend & Backend Integration | Low | High |
| WhatsApp Integration | Medium | High |
| UPI Payment Service | Medium | High |
| Menu Templates | Easy | Medium |
| Aggregator Sync | Hard | High |
| Analytics Dashboard | Medium | Medium |
| Multi-language Support | Easy | Medium |
1. Build Docker Images
# Build the entire stack
docker-compose build2. Run with Docker Compose
# Start all services
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose downnpm run dev
# Install Vercel CLI
npm install -g vercel
# Navigate to frontend
cd RestroHub-FrontEnd
# Deploy
vercel --prod# Build the project
npm run build
# Deploy using Netlify CLI or upload the dist folder manually
netlify deploy --prod --dir=distFor local development, use the embedded Tomcat server from Spring Boot (./gradlew bootRun).
# Build JAR
cd RestroHub
./gradlew build
# Create Docker image and push to registry
docker build -t your-registry/restrohub:latest .
docker push your-registry/restrohub:latest# Build JAR
./gradlew build
# Copy WAR to server
build/libs/restroly-0.0.1-SNAPSHOT-plain.war user@server:/opt/tomcat/webapps/restroly
# Restart web server
systemctl restart tomcatIssue: PostgreSQL Connection Failed
Error: org.postgresql.util.PSQLException: Connection refused
Solution:
# Check if PostgreSQL is running
psql -U postgres -c "SELECT version();"
# If not running, start PostgreSQL service
# On Windows: Services > PostgreSQL
# On macOS: brew services start postgresql
# On Linux: sudo systemctl start postgresqlIssue: Port 8181 Already in Use
# Find process using port 8181
lsof -i :8181 # macOS/Linux
netstat -ano | findstr :8181 # Windows
# Kill process (get PID from above)
kill -9 <PID> # macOS/Linux
taskkill /PID <PID> /F # WindowsIssue: Dependencies Installation Failed
# Clear cache and reinstall
rm -rf node_modules package-lock.json
npm installIssue: API Calls Returning 404
# Verify backend is running:
curl http://localhost:8181/restroly/actuator/health
# Check .env: base URL should be the server + context path (not .../api/v1)
grep VITE_API_BASE_URL .envIssue: Port 3000 Already in Use
# Run on a different port (ensure CORS_ALLOWED_ORIGINS on the backend includes that origin)
npm run dev -- --port 5173Issue: Git Clone Fails
# Check git is installed
git --version
# Verify SSH/HTTPS connection
git ls-remote https://github.com/rdodiya/RestroHub.gitThis project is licensed under the MIT License - see the LICENSE file for details.
You are free to:
- ✅ Use commercially
- ✅ Modify the code
- ✅ Distribute the software
- ✅ Use privately
You must:
- ✅ Include license and copyright notice
Raj Dodiya
- 👨💻 LinkedIn : @rdodiya
- 🐙 GitHub: @rdodiya
- 📧 Email: rdodiya2601@gmail.com
- 💬 Twitter: @RestroHub
- 📝 Issue Tracker: GitHub Issues
- 📧 Email: rdodiya2601@gmail.com
When reporting bugs, please include:
- Description of the issue
- Steps to reproduce
- Expected vs actual behavior
- Screenshots/error logs (if applicable)
- Your environment (OS, Java version, Node version, etc.)
- Spring Boot Team - For the amazing backend framework
- React Team - For the powerful frontend library
- Tailwind CSS - For beautiful styling
- PostgreSQL Community - For reliable database
- All Contributors - For making RestroHub better
Made with ❤️ for Indian Restaurants