|
1 | 1 | # TonyMenu |
2 | 2 |
|
3 | | -Self-hostable digital restaurant menu, built on Next.js and Cloudflare. Diners scan a QR code, browse a localized menu, and can ask an optional AI assistant for recommendations. |
| 3 | +Self-hostable digital restaurant menu, built on Next.js. Cloudflare is the recommended hosted target; Docker + SQLite is available when you do not want a Cloudflare account. Diners scan a QR code, browse a localized menu, and can ask an optional AI assistant for recommendations. |
4 | 4 |
|
5 | 5 | Restaurant owners manage the menu from `/admin`. QR codes should point to `/`; the app detects the locale and redirects diners to the localized menu. |
6 | 6 |
|
@@ -46,18 +46,29 @@ service, embedding it in a paid product) requires a separate license. See |
46 | 46 |
|
47 | 47 | | Component | What | |
48 | 48 | |---|---| |
49 | | -| `web/` | Next.js 16 (App Router), deployed to Cloudflare Pages | |
50 | | -| `backend/` | Hono API on Cloudflare Workers, Drizzle ORM over Cloudflare D1 | |
51 | | -| `web/workers/chat/` | Separate Cloudflare Worker for the AI chat assistant with SSE streaming and tool calls | |
| 49 | +| `web/` | Next.js 16 (App Router), deployed to Cloudflare Pages or static Docker | |
| 50 | +| `backend/` | Hono API on Cloudflare Workers/D1 or Node/SQLite | |
| 51 | +| `web/workers/chat/` | Chat service on Cloudflare Workers or Node, with SSE streaming and tool calls | |
52 | 52 | | `packages/schemas/` | Shared Zod schemas (`@menu/schemas`) | |
53 | | -| Auth | Cloudflare Access with backend JWT verification | |
54 | | -| Storage | Cloudflare R2 for images and catalog snapshots, Cloudflare KV for the chat menu cache | |
| 53 | +| Auth | Cloudflare Access, or trusted reverse-proxy header in Docker | |
| 54 | +| Storage | R2/KV on Cloudflare, or filesystem uploads + in-memory chat cache in Docker | |
55 | 55 |
|
56 | 56 | ## Self-hosting |
57 | 57 |
|
58 | | -Full walkthrough: **[docs/self-hosting.md](docs/self-hosting.md)**. |
| 58 | +- Cloudflare walkthrough: **[docs/self-hosting.md](docs/self-hosting.md)**. |
| 59 | +- No-Cloudflare Docker walkthrough: **[docs/self-hosting-without-cloudflare.md](docs/self-hosting-without-cloudflare.md)**. |
59 | 60 |
|
60 | | -Prerequisites: Node 22+, npm 10+, Git, and a Cloudflare account with Zero Trust enabled. |
| 61 | +Cloudflare prerequisites: Node 22+, npm 10+, Git, and a Cloudflare account with Zero Trust enabled. |
| 62 | + |
| 63 | +No-Cloudflare quick start: |
| 64 | + |
| 65 | +```bash |
| 66 | +cp .env.self-host.example .env |
| 67 | +# set ADMIN_PASSWORD_HASH; see docs/self-hosting-without-cloudflare.md |
| 68 | +docker compose up --build |
| 69 | +``` |
| 70 | + |
| 71 | +Then open the proxy on port 8080. |
61 | 72 |
|
62 | 73 | Quick local setup: |
63 | 74 | ```bash |
@@ -147,7 +158,8 @@ admin UI changes that require operator action) live in [CHANGELOG.md](CHANGELOG. |
147 | 158 | ## Documentation |
148 | 159 |
|
149 | 160 | - [Changelog](CHANGELOG.md) — per-release notes including upgrade hints |
150 | | -- [Self-hosting guide](docs/self-hosting.md) — deploy your own copy |
| 161 | +- [Cloudflare self-hosting guide](docs/self-hosting.md) — deploy your own copy on Cloudflare |
| 162 | +- [Docker self-hosting guide](docs/self-hosting-without-cloudflare.md) — deploy without Cloudflare |
151 | 163 | - [Secrets & env vars](docs/secrets-and-env-vars.md) — full reference |
152 | 164 | - [Architecture & coding conventions](CLAUDE.md) |
153 | 165 | - [Contributing](CONTRIBUTING.md) |
|
0 commit comments