موقع مطعم احترافي: منيو، سلة، Checkout، الدفع عند الاستلام، PayPal Sandbox، إشعارات (WhatsApp Cloud API + بريد + لوحة الإدارة + رابط wa.me)، ولوحة إدارة كاملة.
- Node.js 20+
- PostgreSQL 16+ (أو Docker)
- انسخ الإعدادات:
copy .env.example .envعدّل DATABASE_URL وJWT_SECRET وNEXT_PUBLIC_APP_URL.
- شغّل قاعدة البيانات (اختياري عبر Docker):
docker compose up -d- تهيئة Prisma + البيانات الافتراضية:
npm install
npx prisma db push
npm run db:seed- التطوير (المنفذ 3002 باش ما يتصادمش مع مشروع آخر على 3000):
npm run dev- الموقع:
http://localhost:3002 - الإدارة:
http://localhost:3002/admin/login- افتراضي بعد الـ seed:
admin@barakagrill.ma/Almilyar2030
- افتراضي بعد الـ seed:
غالباً cache قديم بعد build مقطوع أو تبديل فرع. دير:
- وقف السيرفر (Ctrl+C) وتأكد ما بقاش
nodeخدام على المشروع. - من جذر المشروع:
npm run cleanأو يدوياً: احذف مجلد .next بالكامل (Remove-Item -Recurse -Force .next فـ PowerShell).
- شغّل من جديد:
npm run devتشغيل نظيف دفعة وحدة: npm run dev:fresh (كيحيد .next ثم يشغّل dev على 3002).
- تأكد من
.env:
NEXT_PUBLIC_APP_URL=http://localhost:3002- إلا بقا الخطأ: clean install (حذف
node_modules+package-lock.jsonثمnpm install).
كان السبب الشائع: استيراد قيم من @prisma/client داخل مكوّنات "use client" (مثلاً enum كـ DeliveryBand أو OrderStatus) كيدخل عميل Prisma للمتصفح وقد يطيح React بلا رسالة واضحة.
فالمشروع: DeliveryBand خرج لـ src/lib/delivery.ts، وحالات الطلب فالإدارة كـ قائمة نصية بدل Object.values(OrderStatus).
بعد أي تعديل كبير: npm run clean && npm run dev.
- أنشئ تطبيق Sandbox من PayPal Developer.
- ضع
PAYPAL_CLIENT_IDوPAYPAL_CLIENT_SECRETفي.envمعPAYPAL_MODE=sandbox. - في إعدادات تطبيق PayPal، أضف Return URL:
${NEXT_PUBLIC_APP_URL}/payment/paypal-return
ملاحظة: PayPal قد لا يدعم عملة MAD في كل الحسابات؛ إذا فشل إنشاء الطلب جرّب حساباً/تطبيقاً يدعم MAD أو عدّل الكود لعملة مدعومة في بيئتك.
- إن وُجدت
WHATSAPP_CLOUD_TOKENوWHATSAPP_PHONE_NUMBER_IDيتم إرسال رسالة عبر Cloud API. - بدون ذلك: يتم إنشاء إشعار في لوحة الإدارة + (اختياري) بريد عبر SMTP + رابط wa.me يظهر في استجابة إنشاء الطلب للواجهة.
المشروع على Next.js 15.5.15 وReact 19.2.5 (إصدارات خارج النطاق اللي كاتبلوكيها Netlify). ما تبقّاش على 15.3.3 أو أقل.
- أنشئ قاعدة بيانات PostgreSQL (Neon / Supabase / Railway).
- اضبط متغيرات البيئة في Vercel مثل
.env.example. npm run buildيجب أن ينجح بعدprisma generate(يُشغَّل تلقائياً عبرpostinstall).- بعد أول نشر: نفّذ
prisma db pushوdb:seedمن جهازك متصلاً بنفسDATABASE_URLأو عبر وظيفة migration في CI.
ملاحظة: لا يمكن لهذا المساعد نشر نسخة عامة تلقائياً؛ اتبع الخطوات أعلاه على حسابك (Vercel مثلاً) للحصول على رابط تجربة.
الملف src/i18n/index.ts يوفّر قاموساً عربياً كاملاً ومفاتيح أولية للفرنسية/الإنجليزية — يمكن توسيعها لاحقاً.
انظر src/lib/payments/moroccan-gateways.placeholder.ts كنقطة توسعة (CMI / Payzone).
- لا يتم تخزين بيانات البطاقة في قاعدة البيانات.
- الدفع أونلاين يمر عبر PayPal فقط.
- لوحة الإدارة محمية بـ JWT في Cookie
httpOnly.
npm run dev— تطويرnpm run build/npm start— إنتاجnpm run db:push— مزامنة المخططnpm run db:seed— بيانات تجريبية
خاص بالمشروع التجريبي للمطعم.