Skip to content
rdodiyaPublic

About

Restroly

Resources

Code of conduct

Contributing

Stars

34 stars

Watchers

1 watching

Forks

Repository files navigation

🍽️ Restroly (RestroHub)

Digital Menu, Order & Multi-Tenant Restaurant Management Platform

MIT License PRs Welcome GSSOC Java Spring Boot React PostgreSQL Gradle

Empowering Indian Restaurants to Go Digital β€” Simple, Fast & Powerful!

About β€’ Features β€’ System Flow & Architecture β€’ Tech Stack β€’ Quick Start β€’ API Surface β€’ Contributing β€’ Support


πŸ“‹ Table of Contents


🎯 About

Restroly is a full-stack, multi-tenant digital restaurant operating platform engineered specifically for Indian food establishments β€” from street-side dhabas, food carts, and takeaway outlets to trendy cafes and multi-branch fine-dining chains.

Restroly eliminates heavy aggregator commissions (Zomato/Swiggy) and technical barriers by providing every restaurant with:

  1. Auto-Generated Branded Website & Digital Menu (<restaurantname>.restroly.in) with live theme customization, item catalog, and contact sections.
  2. Dual-Mode Contactless QR Ordering:
    • Table QR Codes: Unique QR for each physical table, automatically attributing orders to that table and enabling diner waiter calls.
    • Counter / Takeaway QR Code: Master QR code with table_number = 0 for direct counter ordering, takeaway menus, and business cards.
  3. Commission-Free Direct UPI Payments: Generates instant peer-to-merchant UPI deep links via upi-deeplink-builder targeting the restaurant's configured UPI VPA (GPay, PhonePe, Paytm, BHIM) with zero third-party gateway deductions.
  4. Automated WhatsApp Notifications: Dispatches WhatsApp order confirmations and UPI payment links via Meta Cloud API upon checkout and when orders transition to Ready.
  5. Kitchen Display System (KDS): Real-time ticket management for kitchen staff (Pending, Preparing, Ready).
  6. Multi-Branch Operations: Centralized management of multiple branches, tables, and active menu mappings.
  7. Super Admin Platform Governance: Multi-tenant RBAC, plan-based feature catalog, and restaurant subscription management.

πŸ’‘ Key Design Decisions

The following design choices are deliberate architectural foundations of Restroly:

Architectural Choice Why It Matters
Zero Gateway Overhead / No Webhook Tracking Restroly routes payments directly from diner to restaurant owner via UPI deep links (upi://pay?pa=...). Payment status is marked Billed / confirmed manually by staff. No PSP fees, zero merchant onboarding delays.
Frictionless Guest Ordering Diners checkout with only Customer Name and Customer Mobile Number. No customer login, passwords, or mandatory mobile apps.
No Intrusive User Tracking On-site diner behavioral analytics (heatmaps, bounce tracking) are intentionally out of scope to prioritize privacy and ultra-fast page loads.
Subdomain Multi-Tenancy Public customer sites resolve dynamically via per-restaurant subdomains (restaurantname.restroly.in) backed by a shared multi-tenant backend.

✨ Features & System Status

βœ… Implemented & Working

Module Features
πŸ“± Customer Dynamic Site & Menu Responsive landing page (Hero, About, Menu, Contact, Lang dropdown), table banner, guest cart drawer, and table service requests (Call Waiter).
πŸͺ‘ Tables & Dual QR Codes Table CRUD per branch; downloadable/printable table QR codes; master Counter QR (table_number = 0).
πŸ’³ Direct UPI Payments Automated UPI deep link generation (upi-deeplink-builder) for GPay, PhonePe, Paytm, BHIM; branch UPI ID configuration and test modal.
πŸ’¬ WhatsApp Notifications Automated order confirmation and payment link dispatch via Meta Cloud API; order ready alerts.
πŸ“‚ Menu & Food Catalog Menus, categories, food items, dietary badges (Veg, Non-Veg, Egg, Vegan), and instant availability toggle.
πŸ“Š Excel Bulk Menu Operations Bulk upload and download of entire food catalogs via .xlsx spreadsheets (Apache POI).
🏒 Multi-Branch Store Operations Multi-branch CRUD per restaurant; active menu binding per branch.
🍳 Kitchen Display System (KDS) Live kitchen queue filtering orders across Pending, Preparing, and Ready states with elapsed time counter.
🎨 Marketing Website Customizer Real-time theme editor (colors, typography), section content editor (Hero, About, Contact), and live layout preview.
πŸ” Authentication & Security JWT stateless auth, Google OAuth 2.0 integration, protected admin routes, CORS configuration.
πŸ‘‘ Super Admin Platform Governance Dynamic User $\leftrightarrow$ Restaurant $\leftrightarrow$ Branch $\leftrightarrow$ Role assignment; Subscription plans CRUD, feature catalog management, and restaurant plan assignments.
πŸŒ“ Admin UX & Theming Header notification bell with audio chimes; Dark Mode and Light Mode support.

🚧 Active Backlog (@Todo Items)

The following items are actively being built and represent the current priority focus:

ID Task Description
@Todo-1 Subdomain Dynamic Routing Resolve restaurant websites dynamically from the Host header (restaurantname.restroly.in) without manual path parameters.
@Todo-2 Admin Header Branch Switcher Add a persistent branch dropdown in the top header of the Admin panel to seamlessly switch working branch context across all views.
@Todo-3 Order History API & Filtering Implement backend API and frontend view for historical orders with date-range filters, status sorting, diner phone search, and pagination.
@Todo-4 Dashboard Analytics Backend Integration Connect existing DashboardController.java endpoints to the React Dashboard.jsx charts and metric cards.
@Todo-5 Free Tier Marketing Template Gating Enforce a limit of 2 default templates for restaurants on the Free subscription plan in the website customizer.
@Todo-6 Granular Role Permission Guards Fine-tune backend @PreAuthorize guards for Manager/User (hide financial/UPI data) and Staff (order status updates only).

πŸ“ System Flow & Architecture

System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                             CLIENT LAYER                               β”‚
β”‚      React 18 + Vite  β”‚  Tailwind CSS  β”‚  React Router v6  β”‚  Axios     β”‚
β”‚   (Customer Dynamic Site  β”‚  Admin Dashboard  β”‚  Kitchen Display KDS)  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚ HTTP / REST / JSON (JWT Auth)
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                           SPRING BOOT API                              β”‚
β”‚       Spring Security 6  β”‚  JWT Filter  β”‚  Swagger OpenAPI Docs        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚   Public Site & Order Controller  β”‚   Branch & Table Controllers       β”‚
β”‚   Menu & Category Controllers     β”‚   Excel Feature (Apache POI)       β”‚
β”‚   Order & Notification Service    β”‚   UpiLinkController (UPI Builder)  β”‚
β”‚   Kitchen Display Service         β”‚   SuperAdmin Subscription Service  β”‚
β”‚   User & Role Controller          β”‚   WhatsApp Service (Meta API)      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚ Spring Data JPA
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                            DATABASE LAYER                              β”‚
β”‚             PostgreSQL 14+ (Local MySQL dev profile maintained)        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

End-to-End Order Flow

Customer scans Table/Counter QR
   β”‚
   β–Ό
Opens dynamic website: <restaurantname>.restroly.in
   β”‚
   β–Ό
Selects dishes β†’ Adds to cart β†’ Checks out with Name + Mobile
   β”‚
   β–Ό
Backend creates Order (Table # or 0 for Takeaway)
   β”œβ”€β”€β–Ί Pushes live order notification to Admin & KDS (Bell + Audio chime)
   └──► Dispatches WhatsApp message with direct UPI Payment Link (Meta API)
            β”‚
            β–Ό
Customer pays directly via GPay / PhonePe / Paytm to owner's UPI VPA
   β”‚
   β–Ό
Kitchen cooks order (KDS: Pending βž” Preparing βž” Ready)
   β”‚
   β–Ό
Staff confirms receipt & marks order "Billed"

πŸ‘₯ Actors & Role-Based Access (RBAC)

Restroly uses multi-tenant role bindings managed by the Super Admin:

Super Admin (Platform Owner)
  └── Links: User ↔ Restaurant ↔ Branch ↔ Role
        β”œβ”€β”€ Restaurant Admin (Full store, branch, menu, table, payment, website control)
        β”œβ”€β”€ Manager (Branch operations, live orders, active menu)
        β”œβ”€β”€ Manager/User (Operational read-only; EXCLUDED from payments & revenue)
        └── Staff (Live order status updates, primary user of Kitchen Display System)
  • Customer / Diner: No account required. Scans QR code, browses menu, places guest order, receives WhatsApp updates.
  • Restaurant Admin: Full operational and financial management of their restaurant and assigned branches.
  • Manager / User: Read-only oversight of menus and orders; cannot view or edit UPI links or financial figures.
  • Staff: Updates order statuses (Pending $\rightarrow$ Preparing $\rightarrow$ Ready) on the live board and KDS.
  • Super Admin: Platform administrator (approves registrations, assigns roles, configures subscription plans and feature flags).

πŸ”§ Tech Stack

Backend

Component Technology Version Purpose
Language Java 21 (LTS) Core backend language
Framework Spring Boot 3.x Application framework
Build Tool Gradle 8.0+ Dependency management and build automation
Security Spring Security + JJWT 0.11.5 Stateless JWT authentication & role authorization
Database PostgreSQL 14+ Primary relational database (dev MySQL profile supported)
ORM Spring Data JPA / Hibernate 6.x Persistence and entity mapping
Integrations upi-deeplink-builder 1.0.0 Dynamic peer-to-merchant UPI payment deep links
Notifications Meta WhatsApp Cloud API β€” Automated customer order confirmation & payment links
Spreadsheets Apache POI 5.2.5 Bulk menu import and export via .xlsx
API Docs SpringDoc OpenAPI 2.5.0 Interactive Swagger UI documentation

Frontend

Component Technology Purpose
Library React 18 Declarative component-based UI
Build Tool Vite Ultra-fast local dev server and bundling
Styling Tailwind CSS Utility-first responsive design, Dark/Light mode
Routing React Router v6 Client-side routing with role-protected layouts
HTTP Client Axios REST API communication with auth interceptors
Auth @react-oauth/google Google OAuth 2.0 Sign-In integration
Icons Lucide React Modern, consistent icon library
Notifications React Hot Toast In-app alerts, success toasts, and error handling

πŸ“‹ Prerequisites

Before setting up Restroly locally, ensure the following are installed:

Tool Required Version Verification Command Download Link
JDK 21 (LTS) java -version Adoptium Eclipse Temurin 21
Gradle 8.0+ (or use ./gradlew) gradle -version Gradle Releases
Node.js 18.0+ node -version Node.js Official
npm 9.0+ npm -version Included with Node.js
PostgreSQL 14+ psql --version PostgreSQL Downloads
Git Latest git --version Git SCM

πŸš€ Quick Start Guide

1 Β· Clone & Branch

# Clone the repository
git clone https://github.com/rdodiya/RestroHub.git
cd RestroHub

# Switch to the active development branch (GSSoC 2026)
git checkout gssoc_develop
git pull origin gssoc_develop

2 Β· Backend Setup (Spring Boot)

A. Create the Database

# Using PostgreSQL CLI
psql -U postgres -c 'CREATE DATABASE "RestroHub_DB";'

# Or using createdb
createdb -U postgres RestroHub_DB

B. Environment Configuration

The backend loads configuration from application.properties and application-dev.properties. Configure your environment variables or update application-dev.properties:

# Database credentials
export DB_USERNAME=postgres
export DB_PASSWORD=your_postgres_password
export SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/RestroHub_DB

# Security & JWT
export JWT_SECRET=your-secure-256-bit-secret-key-for-local-development
export JWT_EXPIRATION=86400000
export JWT_REFRESH_EXPIRATION=604800000

# Google OAuth (matching frontend client ID)
export GOOGLE_OAUTH_CLIENT_ID=your_google_client_id.apps.googleusercontent.com

C. Build & Run Backend

cd RestroHub

# Grant execution rights (macOS/Linux)
chmod +x gradlew

# Compile and start the Spring Boot server
./gradlew bootRun

The backend starts at http://localhost:8181/restroly:

  • API Base: http://localhost:8181/restroly/api/v1
  • Swagger UI: http://localhost:8181/restroly/swagger-ui.html
  • Health Check: http://localhost:8181/restroly/actuator/health

3 Β· Frontend Setup (React / Vite)

Open a new terminal window:

cd RestroHub-FrontEnd

# Install dependencies
npm install

# Set up local environment file
cp .env.example .env

Edit .env to configure API and Google Client ID:

# Spring Boot API context path (no trailing slash)
VITE_API_BASE_URL=http://localhost:8181/restroly

# Google OAuth Client ID (from Google Cloud Console)
VITE_GOOGLE_CLIENT_ID=your_google_client_id.apps.googleusercontent.com

# Optional environment flags
VITE_NODE_ENV=development

Run Frontend Dev Server

npm run dev

The client will start at http://localhost:3000 (or Vite's next available port).


πŸ“ Project Structure

RestroHub/
β”œβ”€β”€ RestroHub/                                 # Backend: Java / Spring Boot 3
β”‚   β”œβ”€β”€ src/main/java/com/restroly/qrmenu/
β”‚   β”‚   β”œβ”€β”€ admin/dashboard/                  # Analytics & dashboard controllers
β”‚   β”‚   β”œβ”€β”€ auth/                             # Google OAuth, JWT authentication
β”‚   β”‚   β”œβ”€β”€ branch/                           # Multi-branch CRUD & menu binding
β”‚   β”‚   β”œβ”€β”€ category/                         # Menu categories
β”‚   β”‚   β”œβ”€β”€ config/                           # SecurityConfig, CorsConfig, SwaggerConfig
β”‚   β”‚   β”œβ”€β”€ dto/                              # Request / Response DTOs
β”‚   β”‚   β”œβ”€β”€ excel/                            # Excel bulk menu import & export
β”‚   β”‚   β”œβ”€β”€ exception/                        # Global exception handlers
β”‚   β”‚   β”œβ”€β”€ food/                             # Food items CRUD & availability
β”‚   β”‚   β”œβ”€β”€ menu/                             # Menus management
β”‚   β”‚   β”œβ”€β”€ model/                            # JPA domain entities
β”‚   β”‚   β”œβ”€β”€ notification/                     # Waiter service requests
β”‚   β”‚   β”œβ”€β”€ notifications/                    # Admin notification bell feed
β”‚   β”‚   β”œβ”€β”€ order/                            # Public & Admin order management
β”‚   β”‚   β”œβ”€β”€ payment/                          # UPI deep-link generation
β”‚   β”‚   β”œβ”€β”€ repository/                       # Spring Data JPA repositories
β”‚   β”‚   β”œβ”€β”€ restaurant/                       # Restaurant profile management
β”‚   β”‚   β”œβ”€β”€ service/                          # Business logic layer
β”‚   β”‚   β”œβ”€β”€ subscription/                     # SuperAdmin plans & features
β”‚   β”‚   β”œβ”€β”€ table/                            # Tables & QR code generation
β”‚   β”‚   β”œβ”€β”€ template/                         # Public dynamic website configuration
β”‚   β”‚   └── user/                             # User & SuperAdmin role management
β”‚   β”œβ”€β”€ src/main/resources/
β”‚   β”‚   β”œβ”€β”€ application.properties            # Base properties
β”‚   β”‚   └── application-dev.properties        # Local development profile
β”‚   └── build.gradle                          # Gradle build script
β”‚
β”œβ”€β”€ RestroHub-FrontEnd/                        # Frontend: React 18 / Vite / Tailwind
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”‚   β”œβ”€β”€ admin/                        # Admin dashboard, KDS, Orders, Menus,
β”‚   β”‚   β”‚   β”‚                                 # Tables, Branches, Subscriptions, Roles
β”‚   β”‚   β”‚   β”œβ”€β”€ customer/                     # Customer dynamic site, Hero, Cart drawer
β”‚   β”‚   β”‚   └── common/                       # Reusable UI components & modals
β”‚   β”‚   β”œβ”€β”€ context/                          # AdminThemeContext, SiteContext, ThemeContext
β”‚   β”‚   β”œβ”€β”€ layouts/                          # AdminLayout, CustomerLayout, PublicLayout
β”‚   β”‚   β”œβ”€β”€ pages/                            # Public landing, Customer menu, Auth pages
β”‚   β”‚   β”œβ”€β”€ routes/                           # AppRoutes, ProtectedRoute, AdminRoute
β”‚   β”‚   β”œβ”€β”€ services/                         # Axios instances and API services
β”‚   β”‚   β”œβ”€β”€ styles/                           # Global Tailwind and theme styling
β”‚   β”‚   β”œβ”€β”€ App.jsx                           # App entry point
β”‚   β”‚   └── main.jsx                          # React root
β”‚   β”œβ”€β”€ .env.example                          # Environment template
β”‚   β”œβ”€β”€ package.json
β”‚   β”œβ”€β”€ tailwind.config.js
β”‚   └── vite.config.js
β”‚
β”œβ”€β”€ agent/                                    # PRD, ImplementationPlan, Schema, Rules, TechStack, frontend-design (planning & AI-agent docs)
β”œβ”€β”€ scripts/                                  # run_local.sh/.bat (local runner), setup_jules.sh
β”œβ”€β”€ AGENTS.md / CLAUDE.md                     # AI agent instructions (must stay at root)
β”œβ”€β”€ CONTRIBUTING.md                           # Contribution guidelines
β”œβ”€β”€ LICENSE                                   # MIT License
└── ReadMe.md                                 # Main Project Readme

πŸ“š API Documentation

Interactive Swagger API documentation is automatically available when the backend is running:

http://localhost:8181/restroly/swagger-ui.html

Core API Surface

Group Method Endpoint Description Auth
Public Site GET /public/api/v1/sites/{siteId}/config Fetch dynamic website config & active menu Public
Public Orders POST /api/v1/public/orders Place guest order (Name + Mobile + Table) Public
Public Orders GET /api/v1/public/orders/{id}/status Track live order status Public
Service Requests POST /api/v1/service-requests Diner triggers "Call Waiter" assistance Public
Live Orders GET /api/v1/orders List today's live orders (Admin / KDS) JWT
Order Status PUT /api/v1/orders/{id}/status Update order status (Pending $\rightarrow$ Ready) JWT
Order History GET /api/v1/orders/history Paginated past orders with date/status filter (@Todo) JWT
Menus GET/POST /secure/api/v1/menus List / create restaurant menus JWT
Food Items GET/POST /api/v1/foods List / add food items with availability toggle JWT
Excel Bulk POST /api/v1/excel/upload Bulk upload menu via .xlsx JWT
Branches GET/POST /api/v1/branches Multi-branch CRUD and active menu mapping JWT
Tables & QR GET/POST /api/v1/tables Table CRUD & downloadable QR codes JWT
UPI Links GET/POST /api/v1/upi Configure branch UPI VPA & test links JWT
Dashboard GET /api/v1/admin/dashboard/stats Analytics KPIs, trends, top dishes (@Todo) JWT
SuperAdmin Sub GET/POST /api/v1/super-admin/subscriptions/plans CRUD subscription plans & feature flags SuperAdmin
Roles & Users POST /api/v1/roles/assign Link User $\leftrightarrow$ Restaurant $\leftrightarrow$ Branch $\leftrightarrow$ Role SuperAdmin

🀝 Contributing (GSSoC 2026)

We welcome all open-source contributions β€” bug fixes, UI improvements, new features, tests, and documentation!

🎯 Active @Todo Backlog & Good First Issues

Issue / Feature Area Difficulty Tag Description
Branch Selector Dropdown Frontend [good-first-issue] Add branch selection dropdown to top header in AdminLayout.jsx
Counter QR Code Generator Frontend [good-first-issue] Add quick action in Tables.jsx to generate master Counter QR (0)
Free Tier Template Limiting Frontend [good-first-issue] Lock non-default templates on Free plan in WebsiteWrapper.jsx
Order History API & View Fullstack [intermediate] Add backend paginated query & frontend filter view in Orders.jsx
Dashboard Analytics API Wiring Fullstack [intermediate] Connect DashboardController.java to Dashboard.jsx charts
Granular RBAC Guards Backend [intermediate] Add @PreAuthorize guards for Manager/User and Staff
Dynamic Subdomain Resolution Backend [advanced] Extract tenant slug from Host header in PublicSiteController
WebSocket Real-Time Orders Fullstack [advanced] Spring STOMP broker + SockJS live order board updates

🌿 Git Workflow & PR Standards

# 1. Fork repository on GitHub, then clone your fork
git clone https://github.com/YOUR_USERNAME/RestroHub.git
cd RestroHub

# 2. Add upstream remote
git remote add upstream https://github.com/rdodiya/RestroHub.git

# 3. Pull latest changes from gssoc_develop
git fetch upstream
git checkout gssoc_develop
git merge upstream/gssoc_develop

# 4. Create your feature branch (always from gssoc_develop!)
git checkout -b feature/your-feature-name

# 5. Make changes, test thoroughly locally:
#    Backend:  cd RestroHub && ./gradlew clean build
#    Frontend: cd RestroHub-FrontEnd && npm run build

# 6. Commit using Conventional Commits
git commit -m "feat(branch): add branch selection dropdown in admin header"

# 7. Push to your fork and submit a PR to gssoc_develop
git push origin feature/your-feature-name

Commit Message Format

type(scope): concise description in present tense

Types:
  feat      β†’ New feature
  fix       β†’ Bug fix
  docs      β†’ Documentation update
  style     β†’ Formatting, white-space, no logic change
  refactor  β†’ Code refactoring without behavioral change
  test      β†’ Adding or updating tests
  chore     β†’ Build/dependency maintenance

PR Checklist

  • Branched from gssoc_develop
  • ./gradlew build passes with zero errors
  • npm run build passes with zero errors
  • Tested end-to-end locally (both mobile and desktop)
  • No hardcoded secrets, API keys, or .env files committed
  • PR description clearly explains what changed and why

πŸš€ Deployment

Docker Setup

# Build and start all services (Backend, Frontend, PostgreSQL)
docker-compose build
docker-compose up -d

# Check service logs
docker-compose logs -f

# Shutdown services
docker-compose down

Frontend Production Build

cd RestroHub-FrontEnd
npm run build
# Dist output ready for deployment on Vercel, Netlify, or Cloudflare Pages

Backend Production Build

cd RestroHub
./gradlew clean bootJar
# Executable JAR generated in build/libs/
java -jar build/libs/restroly-0.0.1-SNAPSHOT.jar

πŸ”§ Troubleshooting

PostgreSQL connection refused
# Verify PostgreSQL is running
# Linux
sudo systemctl status postgresql
sudo systemctl start postgresql

# macOS
brew services restart postgresql

# Windows
# Open Services (services.msc) -> Ensure "postgresql-x64-XX" is Running
Port 8181 already in use
# macOS / Linux
lsof -i :8181
kill -9 <PID>

# Windows (PowerShell)
netstat -ano | findstr :8181
Stop-Process -Id <PID> -Force
Frontend API 404 errors

Ensure your .env file does not end with /api/v1:

# Correct:
VITE_API_BASE_URL=http://localhost:8181/restroly

# Incorrect:
VITE_API_BASE_URL=http://localhost:8181/restroly/api/v1

πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE file for details.


πŸ“ž Contact & Support

Raj Dodiya β€” Project Owner & Lead

Channel Link
πŸ™ GitHub @rdodiya
πŸ’Ό LinkedIn Raj Dodiya
πŸ“§ Email rdodiya2601@gmail.com
🐦 Twitter / X @rdodiya2001
πŸ“ Bug Reports & Issues GitHub Issues

Made with ❀️ for Indian Restaurants

⬆ Back to top

About

Restroly

Resources

Code of conduct

Contributing

Stars

34 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages