From e25f58083b7b09f432676a1d4642f74b583e0032 Mon Sep 17 00:00:00 2001 From: abhigyan24-ops Date: Tue, 12 May 2026 01:50:22 +0530 Subject: [PATCH 1/3] fix: add scroll animation and customer flow to homepage --- RestroHub-FrontEnd/index.html | 3 +- RestroHub-FrontEnd/src/data/defaultData.js | 60 ++++++------ .../src/pages/public/Landing.jsx | 92 +++++++++++++++++-- 3 files changed, 115 insertions(+), 40 deletions(-) diff --git a/RestroHub-FrontEnd/index.html b/RestroHub-FrontEnd/index.html index 749afd9..c796d94 100644 --- a/RestroHub-FrontEnd/index.html +++ b/RestroHub-FrontEnd/index.html @@ -3,7 +3,8 @@ - Restroly + RestroHub + diff --git a/RestroHub-FrontEnd/src/data/defaultData.js b/RestroHub-FrontEnd/src/data/defaultData.js index a43b14d..5e24dbc 100644 --- a/RestroHub-FrontEnd/src/data/defaultData.js +++ b/RestroHub-FrontEnd/src/data/defaultData.js @@ -19,46 +19,46 @@ export const defaultSiteData = { // Brand Information brand: { - name: "ADK", - fullName: "Arts District Kitchen", - tagline: "Modern American cuisine with a creative twist, served in the heart of LA's vibrant Arts District", - established: "Est. 2019 • Los Angeles", + name: "RestroHub", + fullName: "RestroHub", + tagline: "Empowering restaurants to go digital with QR menus and contactless ordering", + established: "Est. 2024 • India", logo: null }, // Navigation Links navigation: [ { label: "About", href: "#about" }, - { label: "Menu", href: "#menu" }, - { label: "Gallery", href: "#gallery" }, + { label: "Features", href: "#features" }, + { label: "Pricing", href: "#pricing" }, { label: "Contact", href: "#contact" } ], // Hero Section hero: { - title: ["ARTS DISTRICT", "KITCHEN"], - backgroundImage: "https://images.unsplash.com/photo-1414235077428-338989a2e8c0?w=1600&q=80", - ctaPrimary: { label: "View Menu", href: "#menu" }, - ctaSecondary: { label: "Book a Table", href: "#reservations" } + title: ["RESTRO", "HUB"], + backgroundImage: "https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?w=1600&q=80", + ctaPrimary: { label: "Get Started", href: "#features" }, + ctaSecondary: { label: "Learn More", href: "#about" } }, // About Section about: { - subtitle: "Our Story", - title: ["Where Art Meets", "Gastronomy"], + subtitle: "Our Mission", + title: ["Digital Transformation", "For Restaurants"], description: [ - "Nestled in the creative heart of Los Angeles, Arts District Kitchen brings together culinary innovation and artistic expression. Our chefs craft each dish as a masterpiece, using locally-sourced ingredients and time-honored techniques.", - "From our open kitchen, witness the passion and precision that goes into every plate. Whether you're here for an intimate dinner or a celebration, expect an experience that engages all your senses." + "RestroHub is dedicated to helping Indian restaurants embrace the digital age. We provide simple, powerful tools for QR menus, payments, and order management.", + "Our platform is built to handle everything from small dhabas to large restaurant chains, ensuring a seamless experience for both owners and customers." ], - image: "https://images.unsplash.com/photo-1600891964092-4316c288032e?w=800&q=80", + image: "https://images.unsplash.com/photo-1552566626-52f8b828add9?w=800&q=80", stats: [ - { value: "15+", label: "Awards" }, - { value: "50k+", label: "Happy Guests" }, - { value: "5", label: "Years" } + { value: "500+", label: "Restaurants" }, + { value: "1.2M+", label: "Orders" }, + { value: "₹50Cr+", label: "Revenue" } ], hours: { - title: "Open Daily", - time: "5:00 PM - 11:00 PM" + title: "Support Available", + time: "24/7 Digital Support" } }, @@ -256,30 +256,30 @@ export const defaultSiteData = { // Contact Section contact: { location: { - title: "Location", - lines: ["828 Traction Ave", "Los Angeles, CA 90013"], + title: "Support", + lines: ["Surat, Gujarat", "India"], mapUrl: "https://maps.google.com" }, hours: { - title: "Hours", - lines: ["Monday - Thursday: 5PM - 10PM", "Friday - Sunday: 5PM - 11PM"] + title: "Support Hours", + lines: ["Monday - Saturday: 9AM - 8PM", "Sunday: Emergency Support Only"] }, contact: { - title: "Contact", - lines: ["Phone: (213) 555-0128", "info@artsdistrictkitchen.com"] + title: "Connect", + lines: ["Email: support@restrohub.com", "Web: www.restrohub.com"] } }, // Social Media Links social: [ - { name: "Twitter", url: "https://twitter.com", icon: "twitter" }, - { name: "Instagram", url: "https://instagram.com", icon: "instagram" }, - { name: "Facebook", url: "https://facebook.com", icon: "facebook" } + { name: "Twitter", url: "https://twitter.com/restrohub", icon: "twitter" }, + { name: "Instagram", url: "https://instagram.com/restrohub", icon: "instagram" }, + { name: "Facebook", url: "https://facebook.com/restrohub", icon: "facebook" } ], // Footer footer: { - copyright: "© 2024 Arts District Kitchen. All rights reserved.", + copyright: "© 2024 RestroHub. All rights reserved.", links: [ { label: "Privacy Policy", href: "/privacy" }, { label: "Terms of Service", href: "/terms" } diff --git a/RestroHub-FrontEnd/src/pages/public/Landing.jsx b/RestroHub-FrontEnd/src/pages/public/Landing.jsx index 2965882..b26f442 100644 --- a/RestroHub-FrontEnd/src/pages/public/Landing.jsx +++ b/RestroHub-FrontEnd/src/pages/public/Landing.jsx @@ -1,4 +1,5 @@ import { useState } from 'react'; +import { motion } from 'framer-motion'; import { Link } from 'react-router-dom'; import { UtensilsCrossed, @@ -79,6 +80,15 @@ const Landing = () => { { num: '04', icon: BarChart3, title: 'Grow Revenue', desc: 'Track analytics and optimize your business.' }, ]; + const customerSteps = [ + { num: '01', icon: QrCode, title: 'Scan QR', desc: 'Scan the QR code at your table to get started.' }, + { num: '02', icon: UtensilsCrossed, title: 'Select Food', desc: 'Browse the menu and pick your favorite items.' }, + { num: '03', icon: ShoppingCart, title: 'Add to Cart', desc: 'Review your selection and add them to your cart.' }, + { num: '04', icon: CheckCircle2, title: 'Place Order', desc: 'Confirm your order and send it to the kitchen.' }, + { num: '05', icon: MessageSquare, title: 'Live Updates', desc: 'Receive real-time notifications on your order status.' }, + { num: '06', icon: CreditCard, title: 'UPI Payment', desc: 'Pay instantly and securely using any UPI app.' }, + ]; + const plans = [ { name: 'Starter', @@ -110,7 +120,7 @@ const Landing = () => { { name: 'Ramesh Patel', role: 'Owner, Rajkot Dhaba', - text: 'Restroly doubled our order efficiency. Customers love the QR menu and we love the zero-error billing!', + text: 'RestroHub doubled our order efficiency. Customers love the QR menu and we love the zero-error billing!', rating: 5, }, { @@ -159,7 +169,7 @@ const Landing = () => { - Restroly + RestroHub @@ -373,13 +383,27 @@ const Landing = () => {
{steps.map((step, i) => ( -
+ {/* Connector */} {i < steps.length - 1 && ( -
+ )} -
+
{step.num} @@ -388,7 +412,56 @@ const Landing = () => {

{step.title}

{step.desc}

-
+ + ))} +
+
+ + + {/* ================================================ */} + {/* CUSTOMER JOURNEY */} + {/* ================================================ */} +
+
+
+ + Customer Journey + +

+ Seamless Ordering Experience +

+
+ +
+ {customerSteps.map((step, i) => ( + + {/* Connector line for all but last */} + {i < customerSteps.length - 1 && ( + + )} +
+ + + {step.num} + +
+

{step.title}

+

{step.desc}

+
))}
@@ -520,7 +593,7 @@ const Landing = () => { Ready to Digitize Your Restaurant?

- Join 5+ restaurants across India already using Restroly to + Join 5+ restaurants across India already using RestroHub to serve customers faster.

@@ -538,6 +611,7 @@ const Landing = () => {
+
{/* ================================================ */} {/* FOOTER */} @@ -552,7 +626,7 @@ const Landing = () => {
- Restroly + RestroHub

@@ -585,7 +659,7 @@ const Landing = () => { {/* Bottom Bar */}

- © {new Date().getFullYear()} Restroly. All rights reserved. + © {new Date().getFullYear()} RestroHub. All rights reserved.

Made with ❤️ in India

From 5aa701fabec80ebda3aa17954f6700abbc3fb760 Mon Sep 17 00:00:00 2001 From: abhigyan24-ops Date: Tue, 12 May 2026 02:11:05 +0530 Subject: [PATCH 2/3] fix: resolve CORS config and login form field mismatch --- RestroHub-FrontEnd/src/pages/public/Login.jsx | 8 +-- .../main/resources/application-dev.properties | 62 +++---------------- 2 files changed, 13 insertions(+), 57 deletions(-) diff --git a/RestroHub-FrontEnd/src/pages/public/Login.jsx b/RestroHub-FrontEnd/src/pages/public/Login.jsx index 9190a44..5abc207 100644 --- a/RestroHub-FrontEnd/src/pages/public/Login.jsx +++ b/RestroHub-FrontEnd/src/pages/public/Login.jsx @@ -152,7 +152,7 @@ const Login = () => { const [isLoading, setIsLoading] = useState(false); const formik = useFormik({ - initialValues: { email: "", password: "" }, + initialValues: { username: "", password: "" }, validationSchema, onSubmit: async (values) => { setIsLoading(true); @@ -267,9 +267,9 @@ const Login = () => {
- {formik.touched.email && formik.errors.email && ( -

{formik.errors.email}

- )} + {formik.touched.username && formik.errors.username && ( +

{formik.errors.username}

+ )} {/* Password */} diff --git a/RestroHub/src/main/resources/application-dev.properties b/RestroHub/src/main/resources/application-dev.properties index aaa0243..3587c0f 100644 --- a/RestroHub/src/main/resources/application-dev.properties +++ b/RestroHub/src/main/resources/application-dev.properties @@ -1,54 +1,10 @@ -# =============================== -# Datasource (PostgreSQL) -# =============================== -spring.datasource.url=jdbc:postgresql://localhost:5432/RestroHub_DB -spring.datasource.username=${DB_USERNAME:postgres} -spring.datasource.password=${DB_PASSWORD:MySQL03@} -spring.datasource.driver-class-name=org.postgresql.Driver -# =============================== -# HikariCP -# =============================== -spring.datasource.hikari.maximum-pool-size=5 -spring.datasource.hikari.minimum-idle=2 -spring.datasource.hikari.connection-timeout=20000 -spring.datasource.hikari.idle-timeout=300000 -spring.datasource.hikari.max-lifetime=1200000 - -# =============================== -# JPA / Hibernate -# =============================== +server.port=8181 +server.servlet.context-path=/restroly +spring.application.name=RestroHub +spring.datasource.url=jdbc:postgresql://localhost:5432/restrohub_db +spring.datasource.username=postgres +spring.datasource.password=abhi244 spring.jpa.hibernate.ddl-auto=update -spring.jpa.show-sql=true - -# =============================== -# H2 Console -# =============================== -spring.h2.console.enabled=false - -# =============================== -# SpringDoc OpenAPI / Swagger -# =============================== -springdoc.api-docs.enabled=true -springdoc.api-docs.path=/v3/api-docs -springdoc.swagger-ui.enabled=true -springdoc.swagger-ui.path=/swagger-ui.html -springdoc.swagger-ui.operations-sorter=method -springdoc.swagger-ui.tags-sorter=alpha -springdoc.swagger-ui.display-request-duration=true - -# =============================== -# Logging -# =============================== -logging.level.com.restrohub=DEBUG - -# Maximum size per file -spring.servlet.multipart.max-file-size=10MB -# Maximum total request size (all files + form data) -spring.servlet.multipart.max-request-size=10MB - -# =============================== -# Security / JWT -# =============================== -security.jwt.secret=${JWT_SECRET:your-256-bit-secret-key-here-change-in-production} -security.jwt.expiration=${JWT_EXPIRATION:86400000} -security.jwt.refresh-expiration=${JWT_REFRESH_EXPIRATION:604800000} \ No newline at end of file +spring.jpa.show-sql=false +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect +security.cors.allowed-origins=http://localhost:5173,http://localhost:3000,http://localhost:3002 \ No newline at end of file From 3dacaa4d1f10a564d1e4a38b380ed977ed9442c9 Mon Sep 17 00:00:00 2001 From: abhigyan24-ops Date: Fri, 15 May 2026 02:57:12 +0530 Subject: [PATCH 3/3] fix: keep only CORS config change, revert all unrelated modifications --- CONTRIBUTING.md | 163 ++++++++++++++--- RestroHub-FrontEnd/index.html | 3 +- .../src/components/customer/Navigation.jsx | 8 +- .../src/pages/public/Landing.jsx | 171 ++++++------------ RestroHub-FrontEnd/src/pages/public/Login.jsx | 8 +- RestroHub/gradle.zip | 1 - RestroHub/logs/RestroHub-2026-05-11.0.log.gz | Bin 8494 -> 0 bytes .../qrmenu/template/entity/Section.java | 6 +- .../template/entity/SectionTemplate.java | 6 +- .../qrmenu/template/entity/SiteConfig.java | 12 +- .../main/resources/application-dev.properties | 44 +++-- .../application-dev.properties.example | 10 - 12 files changed, 253 insertions(+), 179 deletions(-) delete mode 100644 RestroHub/gradle.zip delete mode 100644 RestroHub/logs/RestroHub-2026-05-11.0.log.gz delete mode 100644 RestroHub/src/main/resources/application-dev.properties.example diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 19cc203..2327f05 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,6 +51,40 @@ Before you start contributing, ensure you have: --- +## Creating Issues + +### Before Creating a New Issue + +**Always check existing issues first** to avoid duplicates: +1. Search the [Issues page](https://github.com/rdodiya/RestroHub/issues) using relevant keywords +2. Check both open and closed issues +3. If a similar issue exists, comment on it instead of creating a new one + +### Issue Requirements + +**Every issue must include:** + +- **Clear Title**: Describe the feature/bug concisely +- **Detailed Description**: Provide enough context for others to understand the issue + - What is the problem/feature request? + - Why is it needed? + - Expected vs. actual behavior (for bugs) + - Steps to reproduce (for bugs) +- **Scope**: Clearly mention which part can be changed: + - `[FRONTEND ONLY]` - React/Tailwind changes only + - `[BACKEND ONLY]` - Java/Spring Boot changes only + - `[FULL STACK]` - Both frontend and backend changes +- **Expected Outcome**: What should be the result after implementation? + +### Issue Assignment + +- **Maximum 2 people per issue** - One primary contributor and one reviewer +- **No duplicate assignments** - Each issue is assigned only once +- Maintainers will assign issues; contributors should wait for assignment +- Comment on an issue to express interest; assignment will follow + +--- + ## 📋 Development Workflow ### 1. Create a Feature Branch @@ -78,6 +112,16 @@ git checkout -b docs/description gssoc_develop - Add comments for complex logic - Keep changes focused and atomic - Don't mix multiple features in one branch +- **UI Changes**: You can refactor/improve code, but don't change the entire UI unnecessarily + - Only make UI changes that are discussed and approved in the issue + - Avoid cosmetic changes that don't add value +- **Follow Issue Scope**: Only implement what's specified in the assigned issue + - Don't add extra features or unrelated changes + - Discuss any scope expansion with maintainers first +- **Code Refactoring**: + - You can optimize and refactor code + - But avoid large formatting changes that hide actual code logic + - Keep refactoring minimal and focused ### 3. Test Your Changes Locally @@ -119,7 +163,24 @@ Follow our commit message conventions (see below) git push origin feature/your-feature-name ``` -### 6. Create a Pull Request +### 6. Sync Before Creating PR + +**IMPORTANT:** Before creating your Pull Request, always sync with the latest changes from `gssoc_develop`: + +```bash +# Update gssoc_develop branch +git checkout gssoc_develop +git pull upstream gssoc_develop + +# Rebase your feature branch on latest gssoc_develop +git checkout feature/your-feature-name +git rebase gssoc_develop + +# If there are conflicts, resolve them locally, then: +git push origin feature/your-feature-name --force +``` + +### 7. Create a Pull Request Open the PR against the **`gssoc_develop`** branch on the upstream repository (not `main`, unless maintainers ask otherwise). See [Pull Requests](#-pull-requests) for the description template. @@ -144,33 +205,93 @@ docs(readme): update setup instructions ## 📝 Pull Requests -**Before Submitting:** -- [ ] Code works locally -- [ ] Clear commit messages -- [ ] No unnecessary changes +### Before Submitting a PR -**PR Description (Simple):** -```markdown -## What changed? -Brief summary of changes. +**Checklist:** +- [ ] Code works locally and is tested +- [ ] Latest pull from `gssoc_develop` branch (see Step 6 above) +- [ ] Clear, conventional commit messages +- [ ] Only required code changes (no extra features or local setup files) +- [ ] **DO NOT format entire existing code** - Only format changed lines + - Formatting makes it hard to identify actual code changes + - Reviewers need to see what was modified clearly +- [ ] Code follows only what's discussed in the assigned issue +- [ ] No unnecessary refactoring or cleanup outside the issue scope + +### PR Requirements -## Type -- [x] New feature / [ ] Bug fix / [ ] Documentation +- **Title** must follow commit conventions +- **Description** must include: + - Link to the issue: `Closes #ISSUE_NUMBER` or `Fixes #ISSUE_NUMBER` + - **Changes Made**: Detailed list of what was implemented + - **Testing**: Test cases performed and results + - **UI Changes** (if applicable): Screenshots/images showing the changes + - **Functionality Changes** (if applicable): Video demonstration of the feature + - **Additional Notes**: Any important information for reviewers +- **Manual verification**: Run backend and frontend locally when your change affects behavior +- **No breaking changes** without discussion (or marked as `BREAKING CHANGE`) +- **Self-review** your code before requesting reviewers -## Testing -Tested locally - working as expected +### PR Description Template -## Additional notes -Anything else reviewers should know. +```markdown +## Issue Link +Closes #ISSUE_NUMBER + +## Changes Made +- Brief description of change 1 +- Brief description of change 2 +- Brief description of change 3 + +## Type of Change +- [ ] New feature +- [ ] Bug fix +- [ ] Documentation update +- [ ] Code refactor (for discussed optimization) + +## Testing Performed + +### Backend Testing (if applicable) +- [ ] Unit tests passed +- [ ] API endpoints tested locally with Postman/curl +- [ ] Database migrations verified +- **Test Cases**: + - Test case 1: Description and result + - Test case 2: Description and result + +### Frontend Testing (if applicable) +- [ ] Component renders correctly +- [ ] Responsive on mobile/tablet/desktop +- [ ] No console errors +- **Test Cases**: + - Test case 1: Description and result + - Test case 2: Description and result + +## UI/UX Changes (if applicable) +### Screenshots/Images +- **Before**: [Add screenshot if modifying existing UI] +- **After**: [Add screenshot of new/modified UI] + +## Functionality Demo (if applicable) +- **Video Link**: [Provide link to video showing the feature in action] + - Or describe the steps to test the functionality + +## Additional Notes +- Any edge cases handled +- Known limitations +- Future improvements (if applicable) ``` -### PR Requirements +### Important PR Guidelines -- **Title** must follow commit conventions -- **Description** must be clear and detailed -- **Manual verification**: run backend and frontend locally when your change affects behavior (automated tests are not fully wired yet; `./gradlew test` is currently disabled in `build.gradle`) -- **No breaking changes** without discussion (or marked as `BREAKING CHANGE`) -- **Code reviewed** by yourself first (self-review) +1. **Code Changes Only**: Don't include local setup, environment files, or configuration files +2. **Minimal Formatting**: Only format the lines you changed, not the entire file +3. **Issue Adherence**: Implement ONLY what's in the assigned issue + - No extra features + - No additional improvements + - No scope creep +4. **One Issue = One PR**: Don't combine multiple issues in a single PR +5. **Automated Tests** are not fully wired yet; rely on manual testing --- diff --git a/RestroHub-FrontEnd/index.html b/RestroHub-FrontEnd/index.html index c796d94..749afd9 100644 --- a/RestroHub-FrontEnd/index.html +++ b/RestroHub-FrontEnd/index.html @@ -3,8 +3,7 @@ - RestroHub - + Restroly diff --git a/RestroHub-FrontEnd/src/components/customer/Navigation.jsx b/RestroHub-FrontEnd/src/components/customer/Navigation.jsx index a9d72b6..8da0100 100644 --- a/RestroHub-FrontEnd/src/components/customer/Navigation.jsx +++ b/RestroHub-FrontEnd/src/components/customer/Navigation.jsx @@ -122,7 +122,7 @@ const Navigation = () => { left: 0; right: 0; z-index: var(--z-fixed); - padding: var(--spacing-lg) var(--spacing-md); + padding: 12px 16px; transition: all var(--transition-normal); } @@ -138,10 +138,12 @@ const Navigation = () => { display: flex; justify-content: space-between; align-items: center; + gap:12px; + flex-wrap:nowrap; } .nav-logo { - font-size: var(--text-xl); + font-size: var(--text-lg); font-weight: 700; letter-spacing: 0.1em; color: var(--color-text-primary); @@ -217,7 +219,7 @@ const Navigation = () => { .nav-mobile-menu { position: fixed; - top: 70px; + top: 64px; left: 0; right: 0; bottom: 0; diff --git a/RestroHub-FrontEnd/src/pages/public/Landing.jsx b/RestroHub-FrontEnd/src/pages/public/Landing.jsx index ab1066e..156c993 100644 --- a/RestroHub-FrontEnd/src/pages/public/Landing.jsx +++ b/RestroHub-FrontEnd/src/pages/public/Landing.jsx @@ -1,5 +1,4 @@ import { useState } from 'react'; -import { motion } from 'framer-motion'; import { Link } from 'react-router-dom'; import { UtensilsCrossed, @@ -79,53 +78,61 @@ const Landing = () => { { num: '04', icon: BarChart3, title: 'Grow Revenue', desc: 'Track analytics and optimize your business.' }, ]; -<<<<<<< HEAD - const customerSteps = [ - { num: '01', icon: QrCode, title: 'Scan QR', desc: 'Scan the QR code at your table to get started.' }, - { num: '02', icon: UtensilsCrossed, title: 'Select Food', desc: 'Browse the menu and pick your favorite items.' }, - { num: '03', icon: ShoppingCart, title: 'Add to Cart', desc: 'Review your selection and add them to your cart.' }, - { num: '04', icon: CheckCircle2, title: 'Place Order', desc: 'Confirm your order and send it to the kitchen.' }, - { num: '05', icon: MessageSquare, title: 'Live Updates', desc: 'Receive real-time notifications on your order status.' }, - { num: '06', icon: CreditCard, title: 'UPI Payment', desc: 'Pay instantly and securely using any UPI app.' }, - ]; - - const plans = [ - { - name: 'Starter', - price: '₹499', - period: '/month', - desc: 'Perfect for small restaurants', - features: ['2 Branches', '15 Tables', '500 WhatsApp/month', 'Basic Analytics', 'Email Support'], - popular: false, - }, - { - name: 'Professional', - price: '₹999', - period: '/month', - desc: 'Best for growing businesses', - features: ['5 Branches', 'Unlimited Tables', '2000 WhatsApp/month', 'Advanced Analytics', 'Priority Support', 'Custom Domain'], - popular: true, - }, - { - name: 'Enterprise', - price: 'Custom', - period: '', - desc: 'For restaurant chains', - features: ['Unlimited Everything', 'Dedicated Manager', 'Custom Integrations', 'SLA Guarantee', '24/7 Phone Support', 'On-site Training'], - popular: false, - }, - ]; - +const plans = [ + { + name: 'Starter', + price: '₹499', + period: '/month', + desc: 'Perfect for small restaurants', + features: [ + '2 Branches', + '15 Tables', + '500 WhatsApp/month', + 'Basic Analytics', + 'Email Support' + ], + popular: false, + }, + { + name: 'Professional', + price: '₹999', + period: '/month', + desc: 'Best for growing businesses', + features: [ + '5 Branches', + 'Unlimited Tables', + '2000 WhatsApp/month', + 'Advanced Analytics', + 'Priority Support', + 'Custom Domain' + ], + popular: true, + }, + { + name: 'Enterprise', + price: 'Custom', + period: '', + desc: 'For restaurant chains', + features: [ + 'Unlimited Everything', + 'Dedicated Manager', + 'Custom Integrations', + 'SLA Guarantee', + '24/7 Phone Support', + 'On-site Training' + ], + popular: false, + }, +]; const [selectedPlan, setSelectedPlan] = useState( - plans.find(plan => plan.popular)?.name || plans[0].name - ); ->>>>>>> upstream/gssoc_develop + plans.find(plan => plan.popular)?.name || plans[0].name + ); const testimonials = [ { name: 'Ramesh Patel', role: 'Owner, Rajkot Dhaba', - text: 'RestroHub doubled our order efficiency. Customers love the QR menu and we love the zero-error billing!', + text: 'Restroly doubled our order efficiency. Customers love the QR menu and we love the zero-error billing!', rating: 5, }, { @@ -174,7 +181,7 @@ const Landing = () => { - RestroHub + Restroly @@ -388,27 +395,13 @@ const Landing = () => {
{steps.map((step, i) => ( - +
{/* Connector */} {i < steps.length - 1 && ( - +
)} -
+
{step.num} @@ -417,56 +410,7 @@ const Landing = () => {

{step.title}

{step.desc}

- - ))} -
-
- - - {/* ================================================ */} - {/* CUSTOMER JOURNEY */} - {/* ================================================ */} -
-
-
- - Customer Journey - -

- Seamless Ordering Experience -

-
- -
- {customerSteps.map((step, i) => ( - - {/* Connector line for all but last */} - {i < customerSteps.length - 1 && ( - - )} -
- - - {step.num} - -
-

{step.title}

-

{step.desc}

-
+
))}
@@ -601,7 +545,7 @@ const Landing = () => { Ready to Digitize Your Restaurant?

- Join 5+ restaurants across India already using RestroHub to + Join 5+ restaurants across India already using Restroly to serve customers faster.

@@ -619,7 +563,6 @@ const Landing = () => {
-
{/* ================================================ */} {/* FOOTER */} @@ -634,7 +577,7 @@ const Landing = () => {
- RestroHub + Restroly

@@ -667,7 +610,7 @@ const Landing = () => { {/* Bottom Bar */}

- © {new Date().getFullYear()} RestroHub. All rights reserved. + © {new Date().getFullYear()} Restroly. All rights reserved.

Made with ❤️ in India

diff --git a/RestroHub-FrontEnd/src/pages/public/Login.jsx b/RestroHub-FrontEnd/src/pages/public/Login.jsx index 861c0a5..f4f5def 100644 --- a/RestroHub-FrontEnd/src/pages/public/Login.jsx +++ b/RestroHub-FrontEnd/src/pages/public/Login.jsx @@ -152,7 +152,7 @@ const Login = () => { const [isLoading, setIsLoading] = useState(false); const formik = useFormik({ - initialValues: { username: "", password: "" }, + initialValues: { email: "", password: "" }, validationSchema, onSubmit: async (values) => { setIsLoading(true); @@ -267,9 +267,9 @@ const Login = () => {
- {formik.touched.username && formik.errors.username && ( -

{formik.errors.username}

- )} + {formik.touched.email && formik.errors.email && ( +

{formik.errors.email}

+ )} {/* Password */} diff --git a/RestroHub/gradle.zip b/RestroHub/gradle.zip deleted file mode 100644 index 8537307..0000000 --- a/RestroHub/gradle.zip +++ /dev/null @@ -1 +0,0 @@ -Not Found \ No newline at end of file diff --git a/RestroHub/logs/RestroHub-2026-05-11.0.log.gz b/RestroHub/logs/RestroHub-2026-05-11.0.log.gz deleted file mode 100644 index 093a459ac5562e4169aeb6b98d3e22615531bd06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8494 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

bSy8=kU|46Tu6RdISTnW^1Z-I`Qt2%=AiXj< zogli=v)<;6fy!Tf{P5xG)eVD@f4#b7KQ7;1uWl`?$f$(43omZjrZaHeTeE>%b`Ta~ z+XSH(Y}t6en@>6dQb8d68br4fc6A+FA^&b3|7lZ3qdMgnOy;~R;4$F|TaTdN9 zfHVOxx&`nW0#Embt=MR2c=c{eHw}wAq2(PDW<0DdbwYL9J<$$Fi*-44D zFaGEMRAbTQmS)vm-r9C3 z#L*k8ZQoj=XI1BGmv|;zKK%Skc4i}9#cOA5U*o?$ypSd9=mZTxt3q_k1}e@Nhfh$s z=$u{p&pEryw{AVdQ*W^R4%ElR^*9`EJR11Ck^Tw#>FlShz4a2*8-~OMvK$CBhU9P4 z7q-UB^}cbd$*mq3f4d2Py`rD~lU)bXXlSwK! zrXpD`*2zI8admTX3O?~{Ib%nQdBE*VDaWdrop5g@E)|^7$KR@3>*;l}>USWklK*rl zZ6~juUe{yl9im#FZf%RM&OP=z<=H9a0j(c}

^p3RSg-StnYxTbTBQDgO@G>I~B8 z%tf@g=I?FWjOvO_pS%j+55DUBXm@%)mQ^T!|LlL-zVi zi;jW8s&xw1BW7~z3+DbB#gPBU-mj2nw9MoE-E(K<6;<;0M-HYTDX$h|tr?+uwP8e^bu|0gpdkjRTR#&&`t zwk%2goDWE_=NPW@v$JBv`<&q`>livtlS#;4|8<{Bk|dm~q?aWot>v|rob2rGA##OGQZt#OA=sIOpouF*kz0xo0lGRsghALO&Fc=p$ zd*jeab2v*N`P>I`C)wgoKEqhhahk(K9z938Y4xjzEdffuR~N6;aP~movOS=+x3@7Q zS$-5ER^CQYwG*W2CrD8g_D6+3GXEx@pnk8oWMribEB}Ndx(WYV`DZ`7uIqVi>;Ybf zBDe82Kxyq%QG0`IH2?m&)|1rQG41vt*r$)zYxd8N&vTd$IGZYG%rk=<9(rM;GsscZ z@jySs8B{IgW$^e)=xjOS#*2i1<-m{MvA@D#h{M*jx-PK>cD<5*CfG&KwuZOaIW3f= zFTUKoKDC}P+HT7j`St;9L5$&eLuN66>8s}u4(2-h{uXSaK*L_02;y`{ z5IwUl*(`&g(kp(zQns#zPow29IE3ujB-Svp7icN1wjiwKZg_`)U>EtOb_2E;qD|8l zcw)6>(+xs+4b6ZG_EK=;y4Dvm@1Ac6FCAbcGV0ljz|PO<egbh%P_~Mayx^j33_-HmHLX#Zb~mg1tK0Af)yB&uFR}Y7A#S!# zfEM-E>!gsbZf1Q}p%ri)efet-D&u{YmF5x$2>3UfN(9zL?faV569-v2UEQu1XpFHGK2d3PvvQ!b7%M~7ubYEAXdS^L#aJA+ z@;LL`j~8QMJEWTvhb3x^#?=qsDa6Y0n7iQVJj5zMG>P~zL#!M`uf_?s2C-v^#hcdj zx{b4LzWyrT)MFOCe+r>2qn52)%c1C=ik9|JwKDpL^dEb^m=&lns*vyWm=-sDj;e z)PHH!KZ#ap`)ifDrB#}Cu4__HsePU0JLj}3RCSrdL7P21MozngZOJY71^B)>t!vNi zxf3F%l+F(3_P}<+>1IM(kh1E-grszp&=&YaQ0j8)EhxL^vW@LGE8{_FY-9U%F=p%b zH#6AUR&`0SjFzn)mb^B=P}N;M!9QBwy5dCbocVXlTMIn3yJ~c_rOkKFTMOFsmc3&4 zdFx8t{l2R8JDwUSYBy>ZdHw0~))igdYz)>mZ-sWPbCtbv*8Zh+CrapYzc#j!|9V${ z4*~Q!I@)@ZQ content; // Section-specific content @JdbcTypeCode(SqlTypes.JSON) - @Column(name = "settings", columnDefinition = "jsonb") + @Column(name = "settings") private Map settings; // Section-specific settings (layout, animations, etc.) @JdbcTypeCode(SqlTypes.JSON) - @Column(name = "style_overrides", columnDefinition = "jsonb") + @Column(name = "style_overrides") private Map styleOverrides; // Custom CSS overrides for this section @Column(name = "background_image", length = 500) diff --git a/RestroHub/src/main/java/com/restroly/qrmenu/template/entity/SectionTemplate.java b/RestroHub/src/main/java/com/restroly/qrmenu/template/entity/SectionTemplate.java index 0b21ce4..23a6032 100644 --- a/RestroHub/src/main/java/com/restroly/qrmenu/template/entity/SectionTemplate.java +++ b/RestroHub/src/main/java/com/restroly/qrmenu/template/entity/SectionTemplate.java @@ -47,15 +47,15 @@ public class SectionTemplate { private String previewImageUrl; @JdbcTypeCode(SqlTypes.JSON) - @Column(name = "default_content", columnDefinition = "jsonb") + @Column(name = "default_content") private Map defaultContent; // Default content structure @JdbcTypeCode(SqlTypes.JSON) - @Column(name = "default_settings", columnDefinition = "jsonb") + @Column(name = "default_settings") private Map defaultSettings; @JdbcTypeCode(SqlTypes.JSON) - @Column(name = "schema", columnDefinition = "jsonb") + @Column(name = "template_schema") private Map schema; // JSON schema for content validation @Column(name = "is_active") diff --git a/RestroHub/src/main/java/com/restroly/qrmenu/template/entity/SiteConfig.java b/RestroHub/src/main/java/com/restroly/qrmenu/template/entity/SiteConfig.java index 11394db..01a32f7 100644 --- a/RestroHub/src/main/java/com/restroly/qrmenu/template/entity/SiteConfig.java +++ b/RestroHub/src/main/java/com/restroly/qrmenu/template/entity/SiteConfig.java @@ -50,27 +50,27 @@ public class SiteConfig { private List

sections = new ArrayList<>(); @JdbcTypeCode(SqlTypes.JSON) - @Column(name = "brand_data", columnDefinition = "jsonb") + @Column(name = "brand_data") private Map brandData; // Brand info: name, logo, tagline, etc. @JdbcTypeCode(SqlTypes.JSON) - @Column(name = "navigation", columnDefinition = "jsonb") + @Column(name = "navigation") private List> navigation; // Navigation links @JdbcTypeCode(SqlTypes.JSON) - @Column(name = "social_links", columnDefinition = "jsonb") + @Column(name = "social_links") private List> socialLinks; @JdbcTypeCode(SqlTypes.JSON) - @Column(name = "footer_data", columnDefinition = "jsonb") + @Column(name = "footer_data") private Map footerData; @JdbcTypeCode(SqlTypes.JSON) - @Column(name = "meta_data", columnDefinition = "jsonb") + @Column(name = "meta_data") private Map metaData; // SEO, social meta, etc. @JdbcTypeCode(SqlTypes.JSON) - @Column(name = "global_settings", columnDefinition = "jsonb") + @Column(name = "global_settings") private Map globalSettings; // Site-wide settings @Column(name = "is_published") diff --git a/RestroHub/src/main/resources/application-dev.properties b/RestroHub/src/main/resources/application-dev.properties index 3da3887..8135b31 100644 --- a/RestroHub/src/main/resources/application-dev.properties +++ b/RestroHub/src/main/resources/application-dev.properties @@ -1,18 +1,10 @@ -# =============================== -# Server -# =============================== -server.port=8181 -server.servlet.context-path=/restroly -spring.application.name=RestroHub - # =============================== # Datasource (PostgreSQL) # =============================== -spring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/restrohub_db} +spring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/RestroHub_DB} spring.datasource.username=${DB_USERNAME:postgres} spring.datasource.password=${DB_PASSWORD:postgres} spring.datasource.driver-class-name=org.postgresql.Driver - # =============================== # HikariCP # =============================== @@ -26,10 +18,38 @@ spring.datasource.hikari.max-lifetime=1200000 # JPA / Hibernate # =============================== spring.jpa.hibernate.ddl-auto=update -spring.jpa.show-sql=false -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect +spring.jpa.show-sql=true + +# =============================== +# H2 Console +# =============================== +spring.h2.console.enabled=false + +# =============================== +# SpringDoc OpenAPI / Swagger +# =============================== +springdoc.api-docs.enabled=true +springdoc.api-docs.path=/v3/api-docs +springdoc.swagger-ui.enabled=true +springdoc.swagger-ui.path=/swagger-ui.html +springdoc.swagger-ui.operations-sorter=method +springdoc.swagger-ui.tags-sorter=alpha +springdoc.swagger-ui.display-request-duration=true + +# =============================== +# Logging +# =============================== +logging.level.com.restrohub=DEBUG + +# Maximum size per file +spring.servlet.multipart.max-file-size=10MB +# Maximum total request size (all files + form data) +spring.servlet.multipart.max-request-size=10MB # =============================== -# CORS +# Security / JWT # =============================== +security.jwt.secret=${JWT_SECRET:your-256-bit-secret-key-here-change-in-production} +security.jwt.expiration=${JWT_EXPIRATION:86400000} +security.jwt.refresh-expiration=${JWT_REFRESH_EXPIRATION:604800000} security.cors.allowed-origins=http://localhost:5173,http://localhost:3000,http://localhost:3002 \ No newline at end of file diff --git a/RestroHub/src/main/resources/application-dev.properties.example b/RestroHub/src/main/resources/application-dev.properties.example deleted file mode 100644 index ff43c41..0000000 --- a/RestroHub/src/main/resources/application-dev.properties.example +++ /dev/null @@ -1,10 +0,0 @@ -server.port=8181 -server.servlet.context-path=/restroly -spring.application.name=RestroHub -spring.datasource.url=jdbc:postgresql://localhost:5432/restrohub_db -spring.datasource.username=postgres -spring.datasource.password=YOUR_PASSWORD_HERE -spring.jpa.hibernate.ddl-auto=update -spring.jpa.show-sql=false -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect -security.cors.allowed-origins=http://localhost:3000,http://localhost:3002,http://localhost:5173 \ No newline at end of file