A comprehensive restaurant ordering and management platform that enables QR-based ordering, group sessions, bill splitting, and real-time management.
- QR Code Ordering: Guests scan QR codes at tables to access menus instantly
- Group Sessions: Multiple guests can join the same order session
- Interactive Menu: Browse categories, search items, filter by dietary preferences
- Real-time Ordering: Place orders that sync instantly with restaurant systems
- Bill Splitting: Split bills by item, percentage, or custom amounts
- Waiter Requests: Call waiters directly through the app
- Multi-tenant Architecture: Support for multiple restaurants with isolated data
- Menu Management: Create categories, items, variations, and pricing
- Table Management: QR code generation and table status tracking
- Order Management: Real-time order tracking and status updates
- Session Management: Monitor active dining sessions
- Analytics & Reporting: Comprehensive insights into sales and operations
- Mobile-first Design: Optimized for mobile devices with PWA capabilities
- Real-time Updates: WebSocket-based real-time synchronization
- Multi-language Support: Internationalization ready
- Offline Capability: Works offline with data synchronization
- Security: JWT-based authentication with multi-tenant isolation
src/main/java/com/numa/
βββ config/ # Configuration classes
βββ controller/ # REST API controllers
βββ domain/
β βββ entity/ # JPA entities
β βββ enums/ # Enumerations
βββ dto/
β βββ request/ # Request DTOs
β βββ response/ # Response DTOs
βββ exception/ # Custom exceptions
βββ mapper/ # MapStruct mappers
βββ repository/ # JPA repositories
βββ security/ # Security configuration and JWT
βββ service/ # Business logic services
src/
βββ app/ # Next.js App Router pages
βββ components/
β βββ guest/ # Guest-facing components
β βββ admin/ # Admin dashboard components
β βββ ui/ # Reusable UI components
βββ services/ # API services and utilities
βββ store/ # State management (Zustand)
βββ types/ # TypeScript type definitions
βββ utils/ # Utility functions
βββ styles/ # CSS and styling
- Multi-tenant: Restaurants are isolated with proper data separation
- Scalable: Optimized for high-volume operations
- Flexible: Supports various order types and payment methods
- Analytics: Built-in tracking for business intelligence
- Framework: Spring Boot 3.2
- Database: PostgreSQL with Liquibase migrations
- Security: Spring Security with JWT
- API Documentation: OpenAPI/Swagger
- Caching: Redis (optional)
- Message Queue: RabbitMQ (optional)
- Framework: Next.js 14 with App Router
- Styling: Tailwind CSS
- State Management: Zustand + React Query
- UI Components: Headless UI + Custom components
- Forms: React Hook Form with Yup validation
- PWA: Next-PWA for offline capability
- Containerization: Docker & Docker Compose
- CI/CD: GitHub Actions
- Monitoring: Actuator endpoints
- Logging: Structured logging with correlation IDs
- Java 17+
- Node.js 18+
- PostgreSQL 13+
- Docker (optional)
-
Clone the repository
git clone https://github.com/your-org/numa.git cd numa -
Database Setup
# Create PostgreSQL database createdb numa_db # Update application.yml with your database credentials
-
Run the application
# Using Maven ./mvnw spring-boot:run # Using Docker docker-compose up -d
-
API Documentation
- Swagger UI: http://localhost:8080/swagger-ui.html
- API Docs: http://localhost:8080/v3/api-docs
-
Navigate to frontend directory
cd frontend -
Install dependencies
npm install
-
Environment configuration
cp .env.example .env.local # Update environment variables -
Run development server
npm run dev
-
Access the application
- Guest Interface: http://localhost:3000
- Admin Dashboard: http://localhost:3000/admin
- Visit
/restaurants/register - Fill in restaurant details and owner information
- Verify email and complete setup
- Configure menu, tables, and settings
- Scan QR code at restaurant table
- Join or create dining session
- Browse menu and add items to cart
- Place order and track status
- Split bill and complete payment
- Login to admin dashboard
- Manage menu items and categories
- Monitor live orders and sessions
- Generate QR codes for tables
- View analytics and reports
# Database
DB_USERNAME=numa_user
DB_PASSWORD=numa_password
# JWT
JWT_SECRET=your-secret-key
# CORS
CORS_ALLOWED_ORIGINS=http://localhost:3000
# File Storage
FILE_STORAGE_PATH=./uploads
# Email (optional)
MAIL_HOST=smtp.gmail.com
MAIL_USERNAME=your-email
MAIL_PASSWORD=your-passwordNEXT_PUBLIC_API_URL=http://localhost:8080/api/v1
NEXT_PUBLIC_APP_URL=http://localhost:3000
GOOGLE_SITE_VERIFICATION=your-verification-code# Run all tests
./mvnw test
# Run specific test class
./mvnw test -Dtest=RestaurantServiceTest
# Integration tests
./mvnw test -Dtest=**/*IT# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Generate coverage report
npm run test:coverage- Health Checks:
/actuator/health - Metrics:
/actuator/metrics - Prometheus:
/actuator/prometheus
- Order volume and revenue tracking
- Popular items and category analysis
- Table utilization rates
- Peak hours identification
- Customer behavior insights
- JWT-based authentication
- Role-based access control (RBAC)
- Multi-tenant data isolation
- Session management for guests
- Input validation and sanitization
- SQL injection prevention
- XSS protection
- CSRF protection
- Rate limiting
- HTTPS enforcement
- CORS configuration
- Request/response logging
- Error handling without data exposure
-
Build applications
# Backend ./mvnw clean package -DskipTests # Frontend cd frontend && npm run build
-
Docker deployment
docker-compose -f docker-compose.prod.yml up -d
-
Environment setup
- Configure production database
- Set up SSL certificates
- Configure CDN for static assets
- Set up monitoring and logging
- Database read replicas
- Redis caching layer
- Load balancer configuration
- CDN for static assets
- Horizontal scaling with Docker Swarm/Kubernetes
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow conventional commit messages
- Write tests for new features
- Update documentation
- Ensure code passes linting
- Follow security best practices
This project is licensed under the MIT License - see the LICENSE file for details.
Numa - Transforming restaurant operations with modern technology π½οΈβ¨