هویت محصول:
RAMENنام برند فعلی وOnline-Menuنام مخزن و نسخهٔ محصول است. نامROMANOدر شناسههای فنی، Edge Functionها و اسناد تاریخی برای سازگاری با محیط موجود حفظ شده است.
Online Menu vq.3 مسیر مهمان را از اسکن QR تا ثبت، پرداخت و پیگیری سفارش کوتاه میکند و همزمان به تیم رستوران یک پنل مدیریت منو و برد زندهٔ سفارشها میدهد. پول سفارش مستقیماً با درگاه همان شعبه تسویه میشود؛ پلتفرم وجه رستوران را نگهداری نمیکند.
مهمان و QR میز کارکنان رستوران
│ │
▼ ▼
منوی موبایل → سبد → سفارش → برد زنده / KDS
│ │ │
│ └──── Supabase/PostgreSQL
▼ │
پرداخت زرینپال ← verify سرور ←───┘
پنل مدیریت
منو · ترجمه · رسانه · شعبه
| بخش | وضعیت در سورس |
|---|---|
| منوی مشتری | جستجو، فیلتر، علاقهمندی، چهار زبان، RTL/LTR و طراحی responsive/image-first |
| سفارش QR | نشست امن میز، سبد، قیمتگذاری سمت سرور، ثبت idempotent و پیگیری وضعیت |
| عملیات | صف زنده، KDS، ماشین وضعیت، optimistic locking و رویدادهای immutable |
| پرداخت | آداپتر زرینپال، request/verify سمت سرور، callback idempotent و کنترل پرداخت تکراری |
| مدیریت | CMS منو و رسانه، snapshot اتمیک، نقشهای tenant-aware و audit log |
| زیرساخت | Vercel، Supabase Edge Functions، PostgreSQL 17، CSP و RLS fail-closed |
فعالشدن سفارش واقعی هر شعبه به ساخت شعبه/میز، QR امضاشده، تنظیم واحد پول و Merchant ID معتبر نیاز دارد. این قابلیت عمداً با feature flag شعبه بسته میماند تا تنظیمات مالی کامل شود.
index.html, js/, css/ رابط مشتری
admin/ پنل مدیریت و KDS
supabase/functions/ API عمومی، ادمین، سفارش و پرداخت
supabase/migrations/ مدل داده و invariantهای تراکنش
backend/ مسیر محلی Fastify/PostgreSQL
qa/, backend/test/ تستهای استاتیک، قراردادی، مرورگر و دیتابیس
.github/workflows/ CI و smoke testهای محیط زنده
docs/ تحلیل محصول، امنیت و راهنمای انتشار
در Production، vercel.json درخواستهای /api/v1/* را به Edge Functionهای Supabase هدایت میکند. مرورگر هیچوقت service-role key، Merchant ID یا حقیقت مبلغ سفارش را در اختیار ندارد.
پیشنیازها: Node.js 22+، npm، PostgreSQL 17 یا Docker.
git clone https://github.com/cianium/Online-Menu.git
cd Online-Menu
npm --prefix backend ci
cp backend/.env.example backend/.env
# فقط credential محلی را در backend/.env قرار دهید.
docker compose up -d postgres
npm run backend:migrate
npm run backend:seed
npm run backend:startسپس http://localhost:3000/ برای منوی مشتری و http://localhost:3000/admin/ برای پنل مدیریت در دسترس است. فایل .env، کلید service role و tokenها نباید commit شوند.
npm run qa # syntax + static audit + unit/contract tests
npm run qa:db # اجرای واقعی migrationها و smoke test روی PostgreSQL 17
npm run qa:customer # سناریوهای مرورگر منوی مشتری
npm run qa:browser # سناریوهای مرورگر پنل مدیریتتست مرورگر به Playwright/Chromium و preview محلی نیاز دارد. موفقیت تستهای mock جای تست callback واقعی PSP، backup/restore و tenant isolation روی staging را نمیگیرد.
- قیمت، مبلغ نهایی و مجازبودن پرداخت فقط در سرور تعیین میشود.
- نشستها با cookie امن و token هششده نگهداری میشوند؛ QR با HMAC امضا و قابل ابطال است.
- سفارش، شروع پرداخت و callback در برابر retry و concurrency idempotent هستند.
- وضعیت
paid/refundedبه عقب برنمیگردد و پرداخت مبهم برای reconciliation علامت میخورد. - جدولهای حساس برای
anonوauthenticatedبستهاند و RPCهای مالی فقط در اختیارservice_roleهستند. - CSP، HSTS، محدودیت origin/CSRF و audit trail در لایههای وب و API اعمال شدهاند.
گزارش آسیبپذیری را عمومی ثبت نکنید؛ روش گزارش در SECURITY.md آمده است.
- تعریف محصول، بازار و مدل درآمد
- راهنمای استقرار و Definition of Done
- Release notes نسخهٔ vq.3
- سیاست نسخهها و سوابق قدیمی
- معماری و قرارداد API
مخزن عمومی است اما مجوز متنباز برای آن انتخاب نشده؛ نبود فایل LICENSE به معنی اعطای مجوز استفاده، تغییر یا توزیع نیست.
Maintainer: Kian Khayat
Repository: https://github.com/cianium/Online-Menu
Production: https://food.kiankhayat.me