A modern, responsive restaurant menu website built with Next.js and Bootstrap 5. The menu content is fully configurable through a JSON file, making it easy to update items, categories, images, and branding without code changes.
- JSON-Driven Content: All menu items, categories, restaurant info, logo, and cover image are loaded from
public/menuData.json - Mobile Responsive: Fully responsive design using Bootstrap 5, optimized for all screen sizes
- Category-Based Navigation: Organized menu items by food categories with smooth transitions
- Rich Item Details: Each menu item displays name, description, price, vegetarian/vegan indicators, and spice level
- Modern UI: Clean, professional design with hover effects and animations
- Fast Loading: Built with Next.js for optimal performance and SEO
website-menu/
├── app/
│ ├── layout.js # Root layout with Bootstrap import
│ ├── page.js # Main menu page
│ └── globals.css # Global styles
├── components/
│ ├── Header.js # Restaurant header with logo
│ ├── CategoryTabs.js # Category navigation tabs
│ ├── MenuGrid.js # Menu items grid layout
│ ├── MenuItem.js # Individual menu item card
│ └── Footer.js # Footer component
├── public/
│ └── menuData.json # Menu data configuration
├── next.config.js # Next.js configuration
├── package.json # Dependencies
├── netlify.toml # Netlify deployment config
└── tsconfig.json # TypeScript/JavaScript config
-
Install Dependencies
npm install
-
Configure Menu Data Edit
public/menuData.jsonto customize:- Restaurant name and description
- Logo and cover image URLs
- Food categories
- Menu items with prices and details
-
Development Server
npm run dev
-
Build for Production
npm run build npm start
Edit public/menuData.json:
{
"restName": "Your Restaurant",
"description": "Restaurant tagline",
"logo": {
"url": "/path/to/logo.png",
"alt": "Logo alt text"
},
"coverImage": {
"url": "/path/to/cover.jpg",
"alt": "Cover image alt text"
},
"categories": [
{
"id": 1,
"name": "Category Name",
"icon": "🍛",
"description": "Category description",
"items": [
{
"id": 101,
"name": "Dish Name",
"description": "Dish description",
"price": 350,
"image": "/path/to/image.jpg",
"vegetarian": true,
"spicy": true
}
]
}
]
}- Push your code to GitHub/GitLab/Bitbucket
- Connect your repository to Netlify
- Build command:
npm run build - Publish directory:
.next - Deploy!
Or deploy directly:
npm install -g netlify-cli
netlify deploy --prod- Colors can be modified in
app/globals.css - CSS variables are available at the root level
- Bootstrap 5 classes can be used throughout
- Place images in the
public/folder - Update image URLs in
menuData.json - Images support jpg, png, webp formats
- Mobile: < 480px
- Tablet: 480px - 768px
- Desktop: > 768px
- Next.js 14: React framework
- Bootstrap 5: CSS framework
- React 18: UI library
- Netlify: Hosting & deployment
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
- Mobile browsers (iOS Safari, Chrome Mobile)
MIT License - feel free to use this for your restaurant
- Make Image heavy menu and non image menu versions
- Add WhatsApp - Confirm Order feature
- Make a localhost JSON file Editor for Managing Menu Items and Cover Page Contents - copy the JSON in menuData.json and deploy for making the changes live.