A full-stack digital restaurant menu application for NOVA Ethiopian Cuisine, featuring a responsive customer menu and a secure admin dashboard for managing dishes, availability, and daily menu selections.
# NOVA — Digital Restaurant Menu
A full-stack Ethiopian restaurant menu application. Customers can browse the available dishes selected for today, while administrators can manage the restaurant's complete menu and curate the daily menu.
## Features
### Customer website
- Browse today's available menu without an account.
- Filter dishes by category.
- View each dish's image, description, category, and price in ETB.
- Responsive design for desktop, tablet, and mobile.
- Helpful loading, empty-menu, image fallback, and retryable error states.
### Admin dashboard
- Secure admin signup and login using an HTTP-only JWT cookie.
- Protected dashboard, menu-management, and daily-menu screens.
- Create, edit, delete, and toggle availability for reusable menu items.
- Create today's daily menu automatically when an admin opens the page.
- Add existing menu items to today's menu.
- Remove a dish from today's menu without deleting it from the main collection.
## Tech stack
| Area | Technology |
| --- | --- |
| Frontend | React, Vite, JavaScript, CSS, Fetch API |
| Backend | Node.js, Express, Zod |
| Database | PostgreSQL / Neon, Prisma ORM |
| Authentication | bcryptjs, JSON Web Tokens, HTTP-only cookies |
## Project structure
```text
Digital-restaurant-menu/
├── backend/
│ ├── prisma/ # Prisma schema and migrations
│ ├── src/
│ │ ├── controllers/ # Auth, menu, and daily-menu logic
│ │ ├── middlewares/ # JWT and validation middleware
│ │ ├── routes/ # Public and protected API routes
│ │ └── validators/ # Zod request schemas
│ └── app.js
├── frontend/
│ └── src/
│ ├── components/ # Customer and admin UI components
│ ├── context/ # Client-side admin session state
│ ├── pages/ # Home and admin pages
│ ├── routes/ # Protected route wrapper
│ └── services/ # Fetch API helpers
└── README.md
```
## Getting started
### …