# Listado

Multi-tenant digital menus. Restaurants get a public menu at `https://listado.eu/<slug>/` and an admin app. Phase 1 is view-only: menus, variants, modifiers, allergens, and a free plan of 30 dishes and 30 drinks.

## Local development

Node.js 24 (npm is included) and PostgreSQL 18.

```bash
# roles menu_owner (BYPASSRLS), menu_app (NOBYPASSRLS), menu_system (BYPASSRLS)
cp .env.example .env
# fill DATABASE_URL_* , APP_ENCRYPTION_KEY, APP_HMAC_KEY
npm ci
npm run db:migrate
npm run db:seed
npm run dev -w @menu/api
npm run dev -w @menu/visitor
npm run dev -w @menu/admin
```

Seeded logins (development):

- Amara (USD, English and Khmer): `owner@amaradining.local` / `amara-owner-pass` at `/amaradining/`
- Casa Pepe (EUR, Spanish): `owner@casapepe.local` / `casapepe-owner-pass` at `/casapepe/`
- The platform admin password is printed once by `npm run db:seed`

`PAYMENT_PROVIDER` and `TRANSLATION_PROVIDER` default to `none`. See [DEPLOY.md](DEPLOY.md) and [DECISIONS.md](DECISIONS.md).

## Tests

```bash
npm test -w @menu/shared
npm test -w @menu/api
```

The API tests expect PostgreSQL 18 with the three roles and `menu_test`, as in [`.github/workflows/ci.yml`](.github/workflows/ci.yml).
