1. 你能拿到什么(一图看完)What you get (at a glance)
| 三块前端Three frontends | 谁在用Who uses it | 干什么What it does |
|---|---|---|
menu.feioz.com/?restaurant=<店码code> |
顾客手机Customer's phone
扫桌上二维码即开Scan the QR on the table |
扫码点餐、催菜、自助付款、自助订座、抽奖券QR order, rush, self-pay, self-reserve, reward coupons |
admin.feioz.com |
老板 + 店员Owner + staff
任何浏览器登录Any browser, sign in |
接待台、KDS 厨房屏、菜单、库存、报表、对账、营销Reception, KDS, menu, stock, reports, recon, marketing |
ad.feioz.com |
潜在客户Prospects
你给同行老板看的宣传站The pitch page you share with peers |
演示介绍 + 预约 demo(就是你正在看的这个)Demo + booking page (you're on it now) |
后端是托管在 AWS(悉尼)上的 .NET API + MongoDB Atlas + Redis 缓存 + Cloudflare R2 图床。你不用管这些,本手册只讲老板用得到的功能。 Backend is .NET API on AWS Sydney + MongoDB Atlas + Redis cache + Cloudflare R2. You don't have to worry about any of that; this guide only covers what owners actually use.
2. 核心功能(按你每天最头疼的事分组)Core features (grouped by daily pain)
2.1 顾客扫码点餐(menu.feioz.com)Customer QR ordering (menu.feioz.com)
- 多语言Bilingual: 中文 / 英文一键切换,菜品名 + 描述都双语。Chinese / English one-tap switch; dish names & descriptions both languages.
- 多层菜品属性Multi-layer options: 原生支持中餐"主菜 + 配菜 + 多档辣度 + 备注" — 一道宫保鸡丁可同时配饭/面、配辣度、配荤素,不需要硬拆 SKU。Native support for "main + side + spice level + note". A single Kung Pao Chicken can carry rice/noodle, spice level, veg/meat — no SKU splitting needed.
- 图片 CDNCDN images: 所有菜品图走 Cloudflare R2 + CDN,加载比同类系统快 2-3 倍。All dish images on Cloudflare R2 CDN — loads 2-3× faster than peers.
- 库存联动Stock-aware: 售完的菜自动灰显,下单按钮锁住,免得收单一半发现没货。Sold-out items auto-grey, add-button disabled — no embarrassing "we just ran out" mid-order.
- 桌号识别Table-aware QR: 扫不同桌的二维码自动带桌号,订单自带"桌号"标签到厨房。Different table QRs carry the table number; orders arrive in the kitchen pre-tagged.
- 外卖模式Takeaway mode: 堂食/外卖切换;外卖会提示取餐窗口(默认 15 分钟,可调)。Dine-in / takeaway toggle; takeaway shows a pickup window (default 15 min, configurable).
- 老顾客存"最近"信息Remembers regulars: 二次下单不用重填手机号、姓名。Repeat orders don't ask for phone/name again.
2.2 KDS 厨房屏Kitchen Display (KDS)
- 下单后自动入队,厨师按一下"出餐"客人那边自动叫号。Orders auto-queue; the chef taps "ready" and the customer gets called automatically.
- 积压告警Backlog alert: queued + preparing 超过阈值(默认 10 单)顶部红色横幅,提醒老板加人或暂停接单。Once queued + preparing exceeds the threshold (default 10), a red banner pings the owner to staff up or pause intake.
- 支持多终端(一个屏在凉菜档、一个在热菜档),订单按品类分流。Multi-display support (cold-dish station, hot-dish station) with category-based routing.
- 实时推送走 WebSocket,不用刷页面。Real-time push via WebSocket — no page refresh.
2.3 接待台 / 订单管理Reception / Order Management
- 一张列表看所有桌One list, all tables: 待付款 / 已下厨 / 出餐中 / 已完成 / 已取消,颜色分明。Pending / firing / ready / done / cancelled, color-coded.
- 状态机受保护Protected state machine: 状态变更走 CAS(Compare-And-Set),同一单同时两人改不会"撞单"或"重复扣库存"。State transitions use CAS — two staff modifying the same order never "collide" or double-deduct stock.
- 付款方式齐All payment types: Square 卡支付(线上 token 化,不接触卡号)、现金、转账、自定义;金额服务端用订单原始总额,前端改不了。Square card (online tokenized, never touches our server), cash, transfer, custom. Amount comes from the server-side order total — front-end can't tamper.
- 自动入厨房Auto-fire to kitchen: 可设"下单即送厨房(堂食)"或"付款后才送厨房(外卖)"。Set "fire on order (dine-in)" or "fire on payment (takeaway)".
- 退款留痕Refund audit trail: Square 已收款但订单状态推不动会自动写错误日志 + 在订单里挂 paymentId,方便人工核账。If Square captures payment but the order state fails to advance, an error log + paymentId is attached for manual reconciliation.
2.4 菜单与库存Menu & Stock
- 菜品 CRUDMenu CRUD: 分类、价格、描述、图片、主推 / 新品 / 推荐 / 辣度 标签。Category, price, description, image, signature / new / recommended / spice tags.
- 批量导入Bulk import: CSV / Excel 拖进来直接建菜单;图片可在批量过程中逐个上传。Drag a CSV / Excel to build the menu; images uploaded one by one during the batch.
- 库存追踪Stock tracking: 可选给某些菜(瓶啤、特价折扣品)开"剩余数量",下单时 CAS 扣减,售完自动锁。Optional "remaining count" on selected items (bottled beer, specials). CAS decrement on order; auto-locks at zero.
- 菜品上限Item cap: 免费版 30 道;Basic 60 道;Pro/Enterprise 无限(数字以管理后台 PlanManagement 为准,SuperAdmin 可调)。Free 30; Basic 60; Pro/Enterprise unlimited. Actual numbers come from the in-admin PlanManagement page (SuperAdmin can tune).
- 图片防越权Image isolation: 服务端强制把所有上传文件 key 锁到
restaurants/{你的店ID}/…,别家餐厅永远拿不到、也删不动你的图。Server pins every upload key underrestaurants/{your-id}/…. Other restaurants can't read or delete your images, ever.
2.5 在线订座(Pro 或被特批开通)Online reservations (Pro or override)
- 客户扫码 → 选时间 → 留电话 → submit;老板在 admin 后台审核 + 分配桌号。Customer scans → picks time → leaves phone → submits; owner reviews and assigns a table in admin.
- 老板配:开放时间窗口(最早提前 X 分钟、最远 N 天)、单次最大人数、时段切片粒度(默认 30 分钟)。Owner configures: lead time (min X minutes, max N days ahead), max party size, slot granularity (default 30 min).
- 自动按营业时间切 slot;客户看不到关店的天。Slots auto-cut by business hours; customers can't book closed days.
- 防恶意刷单Anti-abuse: 同手机号 24h 内 ≥ 3 单返回 429,给客户提示"请直接联系餐厅"。Same phone with ≥ 3 requests in 24 h returns 429, prompting "please call the restaurant".
- 提交成功后给餐厅邮箱自动发提醒邮件。Reservation confirmation auto-emails the restaurant inbox.
2.6 现金日结对账(Pro / 被特批开通)Daily cash reconciliation (Pro / override)
- 当班店员"交班"时按提示录入:开班浮动金 → 收到现金 → 付出零钱 → 最后清点实物现金。At shift handover staff enter: opening float → cash received → change given → physical cash counted at close.
- 系统按当日"现金类订单合计"算应收,自动算差额;超过容差阈值(默认 $5)触发异常告警。System computes expected cash from the day's cash orders and auto-computes the variance; over threshold (default $5) triggers an anomaly alert.
- 历史记录可看每班结果、每个店员当月差额合计 — 谁手脚不干净,三天就看出来。History shows per-shift results and per-staff monthly totals — questionable staff show up within three days.
2.7 营销 / 复购Marketing / Repeat business
a) 欢迎页摇一摇(Welcome Game)— Pro 功能Shake-to-win welcome modal — Pro
- 顾客扫码进店即弹浮层"摇一摇得整单折扣"。A "shake for whole-order discount" modal pops up the moment a customer scans in.
- 老板配多档奖品池(≥3 档),后端按权重加权抽取 — 可做"高额奖少、低额奖多"。Owner configures a multi-tier reward pool (≥3 tiers); server weighted-randomly draws — high-value rare, low-value common.
- 防刷:单店单日发放上限、同设备指纹冷却(默认 24h 1 张)。Anti-abuse: per-store daily issue cap, per-device-fingerprint cooldown (default 1 / 24 h).
- 券有效期默认 24 小时(当天有效);可设最低消费门槛。Coupon validity default 24 h (same-day); minimum-spend threshold supported.
b) 等餐翻牌(Wait Game)Wait-time card-flip game
- 下单后顾客在等餐页玩翻牌记忆游戏,按分数给折扣券(90 → 20% off / 70 → 10% off / 50 → $2 off,可配置)。Customers play a card-match memory game on the waiting screen; coupons issued by score (90 → 20% off / 70 → 10% off / 50 → $2 off, configurable).
- 把"等餐焦虑"变成"下次还来"的钩子。Turns "waiting anxiety" into a "come back next time" hook.
c) 邮件营销活动(Pro 功能)Email marketing campaigns — Pro
- 群发:节日促销、新品上新、季节菜单。Blast festival promos, new dishes, seasonal menus.
- 用 Gmail SMTP 发,老板自己配 from-email 即可;模板带店名、菜品图、地址、电话。Sends via Gmail SMTP, owner sets the from-email; template includes restaurant name, dish image, address, phone.
d) 通用促销(Promotion)General promotions
- 满减、打折、买赠、特定品类折扣等组合。Spend-threshold, percentage, BOGO, category-targeted, and combos.
- 顾客端自动显示可用券;下单时按优先级 + 服务端计算最终价(前端价做不得数)。Customer client auto-lists available coupons; server-side final-price calc by priority (front-end prices not trusted).
2.8 销售分析 & 报表Sales analytics & reports
- Dashboard: 今日销售、订单数、客单价、热销 Top 10、时段分布、客流热力图。Today's revenue, orders, AOV, top 10 sellers, hour-of-day distribution, traffic heatmap.
- 趋势Trends: 日 / 周 / 月对比,节假日同比。Day / week / month comparisons, year-over-year on holidays.
- 客户Customers: 复购率、新客 / 回头客占比、按手机号串起来的消费记录。Repeat rate, new vs returning share, spending history threaded by phone.
- BAS 季度税务报表Quarterly BAS tax report(澳洲合规AU-compliant): 自动算 G1(含税总销售)+ 1A(GST 应付)等关键字段,支持 JSON + CSV 下载,喂给会计软件或 ATO portal 手动录入。Auto-computes G1 (tax-inclusive sales) + 1A (GST payable) etc.; JSON + CSV download to feed your accounting software or the ATO portal manually.
2.9 Google My Business 同步Google Business sync
- 老板填一次 OAuth 授权 + Location,系统帮你把营业状态、临时变化(如端午歇业)同步到 Google 地图。One-time OAuth + Location, then opening status and temporary changes (e.g. holiday closure) sync to Google Maps automatically.
- 顾客在 Google 搜店看到的营业时间永远是最新的,不会带着空胃来扑空。Hours on Google search results stay current — no more hungry walk-ins on a closed day.
2.10 异常告警中心(防内贼 / 防漏单)Anomaly alert center (anti-theft / anti-leak)
实时推送给老板手机:Pushed live to the owner's phone:
- 现金差额 > 阈值Cash variance > threshold
- 库存被改 / 菜品价格被改 / 折扣被改(谁改的、何时、原值新值都留痕)Stock / dish price / discount changes (who, when, before/after — all logged)
- 同一手机号短时间内反复下单 / 退单Same phone repeatedly ordering / refunding in a short window
- 关键配置改动(支付配置、Square token 更新)Critical config changes (payment config, Square token update)
- 厨房积压超阈值Kitchen backlog over threshold
历史告警可在管理后台 通知中心 翻阅,按严重度分级。 History lives in the admin notification center, classified by severity.
2.11 团队 / 权限Team / permissions
- 角色制:SuperAdmin(平台)→ RestaurantOwner(你)→ Manager → StaffRole-based: SuperAdmin (platform) → RestaurantOwner (you) → Manager → Staff
- 老板可自建店内角色 + 分配 7 大类权限(订单 / 菜单 / 库存 / 财务 / 营销 / 设置 / 团队)。Owner can create custom in-store roles with 7 permission groups (orders / menu / stock / finance / marketing / settings / team).
- 每个员工独立账号、独立密码,永远不要让大家共用一个号 — 查谁干的就靠这个。Each staff has their own login. Never share accounts — that's the only way you'll know who did what.
- 操作审计:关键写操作都进
AuditLogs表,谁、何时、改了什么、IP 都记下来。Audit: every critical write lands inAuditLogswith who / when / what / IP.
2.12 多店(连锁)支持Multi-store (chain) support
- 每家店一个
restaurantCode,URL 即menu.feioz.com/?restaurant=<code>。OnerestaurantCodeper store; URL ismenu.feioz.com/?restaurant=<code>. - 平台账号(SuperAdmin)可跨店看数据;老板账号严格锁在自己店。Platform account (SuperAdmin) can view across stores; owner accounts are strictly locked to their own store.
- 同手机号顾客在不同店之间不会"被认错店"— 租户隔离做在数据库 query 层。A same-phone customer is never mis-attributed across stores — tenant isolation lives at the database query layer.
3. 套餐对照(功能与限额)Plan comparison (features & limits)
| Free 永久免费forever free |
Basic | Pro | Enterprise | |
|---|---|---|---|---|
| 菜品上限Menu item cap | 30 | 100 | 无限∞ | 无限∞ |
| Square 在线支付Square online payments | — | ✓ | ✓ | ✓ |
| 销售分析报表Sales analytics | — | ✓ | ✓ | ✓ |
| 邮件营销Email marketing | — | ✓ | ✓ | ✓ |
| 短信营销SMS marketing | — | — | ✓ | ✓ |
| 现金日结对账Daily cash recon | — | — | ✓ | ✓ |
| 在线订座Online reservations | — | — | ✓ | ✓ |
| 欢迎摇一摇Welcome shake-to-win | — | — | ✓ | ✓ |
| 独立网址(专属子域名)Dedicated URL (subdomain) | — | — | ✓ | ✓ |
| 多店管理Multi-store | — | — | — | ✓ |
| BAS 报表导出BAS report export | ✓ | ✓ | ✓ | ✓ |
| KDS 厨房屏KDS display | ✓ | ✓ | ✓ | ✓ |
| 异常告警Anomaly alerts | ✓ | ✓ | ✓ | ✓ |
特批机制:Override mechanism: SuperAdmin 可以给单店"特批"某项功能(如 Free 餐厅试用 reservations 30 天),不需要切整套套餐,所有特批操作都进审计日志。 SuperAdmin can grant a single store a one-off feature (e.g. a Free shop trialing reservations for 30 days) without switching the whole plan. Every override is logged in the audit trail.
4. 数据安全 & 合规Security & compliance
- 租户隔离Tenant isolation: 所有数据按 restaurantId 严格隔离,跨店 API 一律 403。文件上传 key 服务端强制锁到本店前缀,删除接口拒绝跨店 fileKey。All data is strictly partitioned by restaurantId; cross-store API calls return 403. Upload keys are pinned to the store's prefix; DELETE refuses cross-store fileKeys.
- 密码Passwords: BCrypt 哈希存储;登录失败给"用户不存在"和"密码错"返回一致响应耗时(防用户名枚举)。BCrypt hashed; "user not found" and "wrong password" share identical response timing (prevents username enumeration).
- JWTJWT: HS256 对称密钥;refresh token 走 Redis 共享存储,多实例无感切换;启动时密钥缺失或 < 32 bytes 直接 fail-fast。HS256 symmetric key; refresh tokens shared via Redis across instances; startup fail-fasts if the key is missing or < 32 bytes.
- 限流Rate limiting: 登录 / 注册 / refresh-token 每 IP 5 次 / 分钟(用 X-Forwarded-For 最右一段,不被前端伪造头绕过)。Login / register / refresh-token: 5/min per IP, keyed on the rightmost X-Forwarded-For hop (can't be bypassed by spoofing the header).
- 支付Payments: Square production token 化收款,服务器不接触信用卡号;订单金额服务端从订单总额计算,前端篡改 amount 只写日志不生效。Square production tokenization, card numbers never touch our servers; charge amount is derived server-side from the order total, front-end tampering is just logged.
- 审计 / 追责Audit / traceability: 关键写操作 → AuditLogs;现金对账差额 / 配置改动 / 库存改动 → AnomalyAlerts → 实时推送给老板。Critical writes → AuditLogs; cash variance / config / stock changes → AnomalyAlerts → live push to owner.
- HTTPS-onlyHTTPS-only: 所有前端域名(menu / admin / ad)走 CloudFront + ACM 通配证书;API 直连 App Runner HTTPS。All front-end domains (menu / admin / ad) on CloudFront + ACM wildcard cert; API direct over App Runner HTTPS.
- 数据库Database: MongoDB Atlas(托管)+ Redis(托管)。每日自动备份,全部位于 AU 区域。MongoDB Atlas (managed) + Redis (managed); daily auto-backup; all in AU region.
5. 接入流程(从 0 到开张大概 30 分钟)Onboarding (about 30 min from zero to open)
- 打开Open admin.feioz.com/register
- 填店名(中 + 英)+ 店码(URL 用,只允许字母数字短横,3-50 字符)+ 老板邮箱 + 密码Fill in restaurant name (Chinese + English), store code (URL-safe, alphanumeric + dash, 3-50 chars), owner email, password
- 自动登录到管理后台Auto-signed into admin
- 设置 → 营业时间 / 税务 / 主题Settings → Hours / Tax / Theme (5 分钟5 min)
- 菜单 → 新建分类 + 菜品Menu → Add categories & dishes (或批量导入 CSVor bulk import CSV) (15-20 分钟15-20 min)
- 打印桌牌Print table QR cards: 菜单页 → 二维码生成器 → 按桌号下载二维码 → 桌上一贴Menu page → QR generator → download by table number → stick on tables
- 试单Test order: 自己手机扫一下、走一遍流程scan with your own phone and walk through
- 加员工Add staff: 团队 → 新增成员 → 选角色 → 发激活邮件Team → New member → assign role → send activation email
- 开张Open for business
想用 Square 收款?「设置 → 支付」填 Square Application ID + Location ID + Access Token(在 Square Dashboard 拿)。
其他模块(GMB / 邮件营销 / 在线订座)老板侧只是 toggle 开关,开通后直接用。 Want Square payments? Settings → Payment → fill in Square Application ID + Location ID + Access Token (grab them from Square Dashboard).
Other modules (GMB / email marketing / online reservations) are just toggles for owners — flip on and use.
6. 技术备忘(老板不用看)Tech notes (owners can skip)
- 后端:.NET 8 / AWS App Runner(ap-southeast-2 悉尼)Backend: .NET 8 on AWS App Runner (ap-southeast-2 Sydney)
- 数据库:MongoDB Atlas + Redis(菜单 / refresh token / 库存 CAS)Database: MongoDB Atlas + Redis (menu / refresh token / stock CAS)
- 文件:Cloudflare R2(兼容 S3,0 出站流量费)Files: Cloudflare R2 (S3-compatible, zero egress fees)
- 前端:Vite + React + TS,CloudFront 分发Frontend: Vite + React + TS, CloudFront-distributed
- CI/CD:push 到 master 自动 ECR + S3 + CloudFront invalidateCI/CD: push to master → ECR + S3 + CloudFront invalidate automatically
- 闲时省钱Off-hour cost saving: App Runner 自动在 UTC 07:00(布里斯班 17:00)暂停,UTC 02:00(布里斯班 12:00)恢复 — 半夜没人用,省 70% 算力费App Runner auto-pauses at UTC 07:00 (Brisbane 5 pm) and resumes at UTC 02:00 (Brisbane noon) — no nighttime use, saves ~70% compute.
7. 反馈 / 联系Feedback / contact
- 邮箱:Email: feiozaustralia@gmail.com
- 任何 bug / 功能建议、想要的报表样式、或者觉得"这功能应该长这样" — 直接邮件,48 小时内回。 Any bug / feature request / "this should work differently" — just email. Reply within 48 hours.