π Live Demo β’ β¨ Features β’ π§± Tech Stack
Experiencia premium, elegante y responsive.
Multi-idioma Β· Mobile-first Β· CategorΓas
VOR-MENU by Vorluno - Modern digital menu PWA (Progressive Web App) for restaurants with public menu viewing and admin panel for content management.
- Landing page with all menu categories
- Category pages displaying products with images and prices
- Bilingual support (Spanish/English) with next-intl
- PWA capabilities - Install as app, offline support
- Mobile-first design - Optimized for smartphones and tablets
- Responsive images with automatic fallback for broken URLs
- Authentication with Supabase Auth (email/password)
- Categories CRUD - Create, edit, delete, restore
- Products CRUD - Full product management
- Image upload to Supabase Storage
- Search & Filters - Find products/categories quickly
- Soft delete - Items can be restored after deletion
- Dual pricing - Support for glass/bottle pricing
- Sort order - Custom ordering of items
| Category | Technologies |
|---|---|
| Framework | Next.js 15 (App Router, React Server Components) |
| Language | TypeScript (strict mode) |
| Backend | Supabase (PostgreSQL + Auth + Storage) |
| Styling | Tailwind CSS v4 + shadcn/ui components |
| i18n | next-intl (Spanish/English) |
| PWA | next-pwa with offline caching |
| Deployment | Vercel-ready |
- Node.js 18+
- npm/pnpm/yarn
- Supabase account (free tier works)
git clone https://github.com/vorluno/menu.git
cd menu
npm installCreate a .env.local file (see .env.example):
NEXT_PUBLIC_SUPABASE_URL=your_supabase_project_url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
SUPABASE_SERVICE_ROLE_KEY=your_supabase_service_role_keyRun the SQL from supabase/schema.sql in your Supabase SQL Editor to create:
categoriestableproductstable- Row Level Security (RLS) policies
See SUPABASE_SETUP.md for detailed instructions.
Create a public bucket named product-images for product photos.
See SUPABASE_STORAGE_SETUP.md for setup guide.
In Supabase Dashboard β Authentication β Users β Add user:
Email: admin@example.com
Password: [your-secure-password]
npm run devOpen http://localhost:3000 to see the public menu.
Admin panel: http://localhost:3000/login
menu/
βββ src/
β βββ app/
β β βββ [locale]/ # Internationalized routes
β β β βββ (public)/ # Public menu pages
β β β β βββ page.tsx # Landing/categories
β β β β βββ menu/[category]/ # Products by category
β β β βββ (admin)/ # Protected admin routes
β β β βββ login/ # Admin authentication
β β β βββ dashboard/ # Admin CRUD pages
β β βββ globals.css
β βββ components/
β β βββ ui/ # shadcn/ui components
β β βββ menu/ # Public menu components
β β βββ admin/ # Admin panel components
β βββ lib/
β β βββ supabase/ # Supabase clients & utilities
β β βββ i18n/ # Internationalization config
β β βββ utils.ts
β βββ types/
β β βββ database.ts # TypeScript types from Supabase
β βββ proxy.ts # Next.js 16 middleware
βββ messages/ # i18n translations (es.json, en.json)
βββ supabase/ # Database schema & seed data
βββ public/ # Static assets
βββ [config files]
- Primary: Navy blue
#1a1a2e - Accent: Gold
#c9a227 - Background: Light variations
- Headings: Playfair Display (serif)
- Body: Inter (sans-serif)
All UI components from shadcn/ui, fully customizable for your brand.
- β Installable - Add to home screen on mobile
- β Offline support - Service worker caching
- β Fast loading - Next.js + Turbopack
- β Responsive - Works on all screen sizes
- Row Level Security (RLS) - Public users can only read active items
- Authenticated admin - Full CRUD access requires login
- Environment variables - Secrets not committed to Git
- Soft deletes - Data never permanently removed from DB
Supports Spanish (default) and English:
- Routes:
/es/...or/en/... - Dynamic locale switching with next-intl
- All content (categories, products) has
_esand_enfields
npm run dev # Development server
npm run build # Production build
npm run start # Start production server
npm run lint # ESLint check- Push code to GitHub β (already done)
- Import project in Vercel
- Add environment variables from
.env.local - Deploy!
Vercel automatically detects Next.js and configures everything.
Works on any platform supporting Next.js:
- Netlify
- Cloudflare Pages
- Railway
- Render
CLAUDE.md- Project overview and code conventionsPROJECT_STRUCTURE.md- Detailed file structureSUPABASE_SETUP.md- Database setup guideSUPABASE_STORAGE_SETUP.md- Image storage configuration
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License.
- Next.js - React framework
- Supabase - Backend as a service
- shadcn/ui - Beautiful UI components
- Tailwind CSS - Utility-first CSS
- Vercel - Hosting platform
For questions or support, please open an issue on GitHub.
Developed by Vorluno
