MyMeals is a full-stack restaurant ordering platform built to solve a practical operational problem: let guests order from the table while staff and managers keep a live view of what needs attention.
This repository is the project hub. It ties together the Go API, the React frontend, and the Docker-based local environment.
- Role-based flows for customers, staff, and admins
- Real-time pending order updates for staff via Server-Sent Events
- Image-backed meal management with Cloudinary integration
- Dockerized local setup with reverse proxy and Postgres
- Split into focused backend and frontend codebases with clean responsibilities
- Guests can browse the menu, place an order, add more meals later, and leave a review
- Staff can monitor incoming work in real time and update order item status
- Admins can manage meals, review orders, and create or remove employee accounts
- Authentication and authorization are enforced in the API with role-aware middleware
| Orders | Reviews |
|---|---|
![]() |
![]() |
Backend
- Go
- Gin
- PostgreSQL
- JWT auth
- Server-Sent Events
- Cloudinary image storage
Frontend
- React 19
- TypeScript
- Vite
- TanStack Query
- Zustand
- React Hook Form + Zod
- Tailwind CSS
Infrastructure
- Docker Compose
- Caddy reverse proxy
MyMeals/Go backend APIMymealsfe/React frontenddemo/README media assetsdocker-compose.ymllocal full-stack environment
The frontend talks to the backend through a relative /api base path. In local frontend development, Vite proxies /api to http://localhost:8080. In the Docker setup, Caddy serves the frontend and reverse-proxies API traffic to the Go service. PostgreSQL persists application data, and Cloudinary handles image uploads for meals.
- Initialize submodules:
git submodule update --init --recursive
- Create a root
.envif you want to override defaults used bydocker-compose.yml. - Ensure the backend has the required environment values available, especially
CLOUDINARY_URL. - Add this hosts entry on Windows:
127.0.0.1 meals.local
- Start the stack:
docker compose up --build
- Open
http://meals.local.
Backend
- Create
MyMeals/.envusing the variables described in MyMeals/README.md - Start Postgres
- Run:
cd MyMeals go run ./cmd
Frontend
- Install dependencies:
cd Mymealsfe npm ci - Start Vite:
npm run dev
- Open the Vite URL and make sure the backend is running on
http://localhost:8080
The backend creates a default admin account at startup unless overridden:
admin/password
- Backend:
https://github.com/Ruclo/MyMeals - Frontend:
https://github.com/Ruclo/Mymealsfe


