π Public menu website for LocalStore Platform - Fast, mobile-first Next.js site for customer-facing restaurant menus. Powers {tenant}.lsp.menu domains with QR code support and Vietnamese formatting. Optimized for 4G on entry-level Android devices.
This repository contains the public-facing menu application that Vietnamese small businesses use to display their restaurant menus to customers. Built with Next.js 14 and optimized for mobile devices, it provides a fast, accessible, and localized experience for viewing menus via QR codes or direct links.
Target Market: Vietnamese small businesses (restaurants, street food vendors, cafes)
Key Features:
- π Static site generation for optimal performance (<2s TTI on 4G)
- π± Mobile-first design (360x640px minimum viewport)
- π»π³ Vietnamese localization (vi-VN locale, VND currency formatting)
- π·οΈ Multi-tenant architecture (
{tenant}.lsp.menu) - π· QR code session support
- β‘ Lighthouse performance score > 90
- Framework: Next.js 14 (App Router, Static Export)
- Language: TypeScript (strict mode)
- Styling: Tailwind CSS 3
- Deployment: Vercel
- API: REST (public endpoints, no authentication)
- Node.js 18+ and npm 9+
- Access to LocalStore Platform API (see
.env.example)
# Clone the repository
git clone https://github.com/localstore-platform/menu.git
cd menu
# Install dependencies
npm install
# Copy environment variables
cp .env.example .env.local
# Update .env.local with your API base URL
# NEXT_PUBLIC_API_BASE_URL=http://localhost:8080
# Run development server
npm run devOpen http://localhost:3000 to view the application.
npm run dev # Start development server
npm run build # Build for production (static export)
npm run start # Serve production build locally
npm run lint # Run ESLint
npm run type-check # Run TypeScript type checkingmenu/
βββ app/ # Next.js App Router
β βββ [tenant]/ # Tenant-specific routes
β βββ components/ # Shared components
β βββ lib/ # Utilities and API clients
βββ public/ # Static assets
βββ docs/ # Documentation
β βββ SPEC_LINKS.md # Specification references
βββ .github/ # GitHub configuration
β βββ CODEOWNERS
β βββ copilot-instructions.md
β βββ ISSUE_TEMPLATE/
βββ next.config.js # Next.js configuration
βββ tailwind.config.js # Tailwind CSS configuration
βββ tsconfig.json # TypeScript configurationThis repository follows a specification-driven development approach. All features and implementations must align with the specifications in the specs repository.
Important Specifications:
- API Specification - Menu public endpoints
- Database Schema - Menu items and categories
- Wireframes & UX Flow - Customer menu views
- Vietnam Market Strategy - Localization requirements
See docs/SPEC_LINKS.md for a complete list of relevant specifications.
Always use Vietnamese number formatting for prices:
const formatted = new Intl.NumberFormat('vi-VN', {
style: 'currency',
currency: 'VND',
minimumFractionDigits: 0,
}).format(75000);
// Output: 75.000β«- Date format:
DD/MM/YYYY - Time format: 24-hour (
HH:mm) - Use
vi-VNlocale withIntl.DateTimeFormat
All user-facing text must be in Vietnamese with proper diacritics.
- First Contentful Paint: < 1.5s
- Time to Interactive: < 2s on 4G
- Lighthouse Performance: > 90
- Bundle Size: < 200KB (gzipped)
Test on:
- Entry-level Android devices (2020+)
- Slow 4G connections (throttled)
- Viewport: 360x640px minimum
- Browsers: Chrome, Safari, Firefox
- Check
docs/SPEC_LINKS.mdfor relevant specifications - Review the GitHub Copilot Instructions
- Follow the code style guidelines
- Ensure Vietnamese localization is correct
- Test on mobile devices and slow networks
- Submit a PR using the template
See CODEOWNERS for code review requirements.
- specs - Central specifications and documentation
- api - Go backend service
- admin - Admin dashboard for managing menus
GNU Affero General Public License v3.0 (AGPL-3.0)
This project is licensed under AGPL-3.0 to ensure that all modifications and network-accessible deployments remain open source and benefit the community.
For questions, issues, or contributions:
- π Open an issue
- π Read the specs
- π¬ Contact the maintainers via GitHub
Version: v1.1-specs | Last Updated: 2025-11-25