Files
meezi/docs/DEMO.md
T
soroush.asadi 03376b3ea1 feat(docker): multi-stage Dockerfiles with npmmirror registry
Rewrites dashboard and finder Dockerfiles to use a clean multi-stage
build (deps → builder → runner) that installs npm packages inside
Alpine Linux, avoiding the SWC musl binary issue when building from
Windows host. Uses registry.npmmirror.com for reliable installs from
restricted networks (Iran).

- docker/api/Dockerfile: .NET 10 multi-stage build
- docker/web/Dockerfile: Node 20-alpine multi-stage, npmmirror
- docker/finder/Dockerfile: Node 20-alpine multi-stage, npmmirror
- docker/website/Dockerfile: marketing website build
- scripts/: PowerShell helper scripts for local dev

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-05-27 21:33:29 +03:30

96 lines
3.4 KiB
Markdown

# Meezi development demo
## Café
| Field | Value |
|-------|--------|
| Slug | `demo-cafe` |
| ID | `cafe_demo_001` |
| Branch | `branch_demo_main` |
## Staff (OTP login)
Phones and roles are listed in [`data/demo-credentials.json`](../data/demo-credentials.json).
| Role | Phone | Name |
|------|-------|------|
| Owner | `09121234567` | مدیر دمو |
| Manager | `09121111111` | مدیر شعبه |
| Cashier | `09122222222` | صندوقدار |
| Waiter | `09123333333` | گارسون |
| Waiter | `09124444444` | گارسون ۲ |
| Chef | `09125555555` | آشپز |
| Delivery | `09126666666` | پیک |
In **Development**, OTP is logged by the API (no SMS).
## System admin
| Field | Value |
|-------|--------|
| Login URL | `http://localhost:3101/fa/admin/login` |
| Phone | `09120000001` |
After OTP login you can manage **plans/prices**, **integrations** (ZarinPal, NextPay, Vandar tokens + Kavenegar SMS), **notifications** (broadcast to all cafes, list/delete), **app settings**, **feature flags**, **cafes** (suspend/activate), and **support tickets**.
| Admin page | Path |
|------------|------|
| Integrations | `/fa/admin/integrations` |
| Notifications | `/fa/admin/notifications` |
Apply migration `SystemAdminPlatform` if the database was created before this feature.
## Merchant support
Dashboard → **پشتیبانی** (`/fa/support`) — open tickets; platform admins reply from **Admin → Tickets**.
## Appearance (per café)
Each café can customize **dashboard + guest menu** colors in **تنظیمات → ظاهر و رنگ‌بندی**:
- **17 color palettes** (Meezi green, ocean, wine bar, espresso, …)
- **8 panel styles** (flat, modern, glass, minimal, bold, soft, elevated, outline)
- **6 menu layouts** (cards, compact, grid, list, magazine, classic)
- **Density** + **corner radius**
- **9 custom hex colors** (primary, secondary, accent, background, …)
Preset catalog: [`data/cafe-theme-presets.json`](../data/cafe-theme-presets.json)
## Category icons
Menu categories support **preset icons** (26 types) with **10 design styles**: flat, modern, real, minimal, outline, soft, bold, gradient, pastel, duotone — or pick from **100+ emojis** grouped by category theme.
- Pick style + food/drink preset under **مدیریت منو → دسته جدید → آیکون آماده**
- Catalog: [`data/category-icon-presets.json`](../data/category-icon-presets.json)
## Menu (Food-101)
- **48** demo items across 6 categories — see [`data/demo-menu-food101.json`](../data/demo-menu-food101.json)
- Images: Unsplash URLs in [`data/menu-image-manifest.json`](../data/menu-image-manifest.json) until you import real JPEGs
- Items without a Kaggle file still get a class-matched fallback image
### Reseed menu (existing DB)
Restart the API in Development — `DevelopmentDataSeeder` adds any **missing** catalog rows and refreshes images/translations.
### Import real Food-101 photos (optional)
1. Download [Food-101](https://www.kaggle.com/datasets/kmader/food41) (or `food-101` images folder).
2. Run:
```bash
dotnet run --project tools/MenuImageImporter -- --food101 "C:\path\to\food-101\images" --cafe cafe_demo_001
```
3. Update manifest `imageUrl` to `/uploads/cafe_demo_001/{itemId}.jpg` or restart API seeder after copying files.
### Regenerate manifest from catalog
```bash
dotnet run --project tools/SyncMenuManifest/SyncMenuManifest.csproj
```
## Tables
- Table **1** QR: `demo_table_01``/api/q/demo_table_01`