Restaurant menu management and ordering system with QR code support.
- Create a new branch for each task
- Branch names should start with
feature/,chore/orfix/ - Please add tests for any new features added, particularly integration tests
- Please run formatters, linters and tests before committing changes
- When finished please commit and push to the new branch
- Please mention GitHub issue if provided
- After working on an issue from GitHub, update issue's tasks and open PR
- Backend: Rust + Actix Web + SQLite + Litestream
- Admin: SolidJS + TypeScript + Tailwind + solid-ui
- Menu: Astro + TypeScript + Tailwind
- Auth: JWT with settings.ini config
- Monitoring: Sentry
backend/ # Actix Web API
admin/ # Restaurant management app
menu/ # Guest ordering app
shared/ # Common types/utils
- Restaurant registration (2+ managers required)
- Menu management with sections/items
- Table/room QR code generation
- Guest ordering without login
- Real-time order viewing for managers
Restaurant → Manager → Table → MenuSection → MenuItem → Order
- Settings in
settings.iniorlocal.settings.ini - No Docker, plain SSH deployment
- CloudFlare for web apps, VPS for backend
The backend uses ts-rs to automatically generate TypeScript types from Rust structs, ensuring type safety between backend and frontend applications.
Run the type generation command from the backend directory:
cd backend
SQLX_OFFLINE=true cargo run --bin generate_typesThis will:
- Export all API-facing Rust structs to TypeScript types
- Generate
admin/src/types/api.tsfor the admin app - Generate
menu/src/types/api.tsfor the menu app
When adding new API structs in Rust:
- Add
TSto the derive macro:#[derive(..., TS)] - Add the export annotation:
#[ts(export)] - Run the generation script to update frontend types
Example:
#[derive(Debug, Clone, Serialize, Deserialize, TS)]
#[ts(export)]
pub struct MyApiType {
pub id: String,
pub name: String,
}