Modern platform for creating digital menus for restaurants with QR codes
π·πΊ Π ΡΡΡΠΊΠΈΠΉ | π¬π§ English
API (Koyeb): https://fat-cherlyn-chatman-d593e748.koyeb.app
Web App (Vercel): https://qr-asia-web.vercel.app
Admin Panel (Vercel): https://qr-asia-admin.vercel.app
π‘ See PRODUCTION.md for detailed deployment info and monitoring links.
QR Menu Platform is a full-featured digital menu management system for restaurants. The platform allows restaurant owners to easily create multilingual menus, generate QR codes, and track analytics.
- π Multilingual Support: 5 languages (EN, TH, RU, CN, AR)
- π± QR Codes: Generation with Vercel Blob Storage and scan tracking
- πΌοΈ Image Upload: Vercel Blob Storage + automatic resizing (4 versions)
- π Full CRUD: Restaurants, categories, menu items
- π¨ Modern UI: Built with Next.js 16 + shadcn/ui + Tailwind CSS
- β‘ Fast Backend: Bun.js + PostgreSQL (25+ API endpoints)
- π Security: JWT access tokens (1h) + refresh tokens (7d) with automatic rotation
- π± Responsive Design: Sidebar navigation on desktop, mobile-first
- β Testing: E2E tests with Playwright (195 tests)
- π CI/CD: GitHub Actions with automated testing
- Bun 1.0+
- PostgreSQL (or Neon database)
- Vercel Blob Storage token (for image upload in production)
# Clone repository
git clone <repository-url>
cd qr-menu-platform
# Install dependencies
bun install
# Set up environment variables
cp apps/api/.env.example apps/api/.env
cp apps/admin/.env.example apps/admin/.env
cp apps/web/.env.example apps/web/.env
# Set up database
cd packages/database
bun run db:push
bun run db:seed
# Run all services
bun run dev- π± Client Web App: http://localhost:3001
- π¨ Admin Panel: http://localhost:3000
- π API: http://localhost:4004
- ποΈ Database Studio: http://localhost:5555
Super Admin:
Email: superadmin@qr-menu.com
Password: password123
Admin:
Email: admin@qr-menu.com
Password: password123
Restaurant Owner:
Email: owner@example.com
Password: password123
qr-menu-platform/
βββ apps/
β βββ web/ # Next.js client application (port 3001)
β βββ admin/ # Next.js admin panel (port 3000)
β βββ api/ # Bun.js API server (port 4004)
βββ packages/
β βββ database/ # Prisma schema + migrations
β βββ ui/ # Reusable components
β βββ types/ # Shared TypeScript types
β βββ utils/ # Utilities and helper functions
βββ docs/
βββ en/ # English documentation
βββ ru/ # Russian documentation
- Framework: Next.js 16.0.1 (App Router)
- Library: React 19.2.0
- Language: TypeScript 5.9.3
- Styling: Tailwind CSS 4.0
- UI Components: shadcn/ui (Radix UI)
- Forms: React Hook Form + Zod 4.1
- HTTP Client: Fetch API
- Runtime: Bun.js 1.3.1
- HTTP Server: Bun.serve()
- Database: PostgreSQL (Neon with connection pooling)
- ORM: Prisma 6.0+
- Authentication: JWT access tokens (1h) + refresh tokens (7d) + SHA-256 hashing
- Storage: Vercel Blob Storage with fallback to local storage
- Image Processing: Sharp (4 versions: thumbnail, small, medium, large)
- QR Codes: qrcode library with upload to Vercel Blob
Detailed documentation is available in two languages:
- π Project Status - current status (100%)
- β Development Checklist - detailed task plan
Version: MVP v1.0 Overall Progress: 100% β
- Backend API - 100% (25+ endpoints)
- β Refresh token authentication with automatic rotation
- β JWT access tokens (1h) + refresh tokens (7d)
- β Device tracking (userAgent, ipAddress)
- β Restaurant CRUD with moderation
- β Menu CRUD (categories + items)
- β Image upload (Vercel Blob + Sharp, 4 versions)
- β QR code generation with upload to Vercel Blob
- β Analytics tracking
- Admin Panel - 100%
- β Login page with refresh token support
- β Dashboard with statistics
- β Restaurant management + moderation
- β Menu builder with drag & drop
- β Category and item management
- β Image upload (drag & drop, 5MB limit)
- β QR code generation and viewing
- β Analytics page
- Client Web App - 100%
- β Menu display by slug
- β Sidebar navigation by categories (desktop)
- β Horizontal category scrolling (mobile)
- β Language switcher (EN, TH, RU, CN, AR)
- β "Home" button for navigation
- β Responsive design (mobile-first)
- β Menu item cards with images
- Production Deployment - 100%
- β API on Koyeb (https://fat-cherlyn-chatman-d593e748.koyeb.app)
- β Web App on Vercel (https://qr-asia-web.vercel.app)
- β Admin Panel on Vercel (https://qr-asia-admin.vercel.app)
- β CI/CD via GitHub Actions
- β Automated testing
- Testing - 100%
- β E2E tests (195 tests)
- β Linting/Formatting (Biome)
- β GitHub Actions CI
- Documentation - 100%
- Analytics dashboard with charts
- Email notifications for owners
- Rate limiting for API endpoints
- Sentry error tracking
- WebSocket real-time updates
- PDF export for menus
The project uses Playwright for E2E testing.
# Run all tests
bun test
# Run in UI mode
bun test:ui
# By category
bun test:api # API tests
bun test:admin # Admin panel tests
bun test:web # Web app testsCurrent Test Status: 195 tests
- β API tests: auth, restaurants, menu, upload, QR codes, analytics, dashboard, settings, admin access, public menu
- β Admin tests: login, register, restaurants, settings, QR codes
- β Web tests: menu, homepage
The project uses Biome for code linting and formatting.
# Check code (linting + formatting + imports)
bun run check
# Auto-fix
bun run check:fix
# Format only
bun run format:write
# Lint only
bun run lint:fixOverall Progress: 100% β (Backend 100%, Frontend 100%, Tests 100%, Docs 100%, Production 100%)
We welcome contributions! Please see Contributing Guide.
MIT License - see LICENSE for details.
Developed for restaurants in Thailand πΉπ
If you have questions or issues:
- Check the documentation
- Create an issue on GitHub
- Contact support@example.com
Last Updated: 2025-11-05
New Features in v1.0:
- β¨ Refresh token authentication with automatic rotation
- π Arabic language support (5 languages)
- π± Sidebar navigation for menu categories
- π "Home" button for navigation
- π Production deployment with CI/CD
Made with β€οΈ using Bun.js + Next.js 16