اللغات والتقنيات المستخدمة في الموقع مقسمه
Backend:
Node.js (v18+) — بيئة التشغيل
Express.js — إطار عمل السيرفر والـ API
SQLite (عبر better-sqlite3) — قاعدة البيانات، ملف واحد بدون سيرفر منفصل
bcryptjs — تشفير كلمات السر (بدون تجميع native، لأمان أعلى وتوافق أسهل)
express-session — إدارة جلسات تسجيل الدخول
express-rate-limit — الحماية من محاولات الدخول والطلبات المتكررة
helmet — حماية الـ HTTP headers
dotenv — إدارة متغيرات البيئة (الأسرار)
Frontend:
HTML5 (RTL بالكامل، عربي)
CSS3 (Custom Properties / متغيرات تصميم، بدون أي framework خارجي)
JavaScript (Vanilla ES6+، بدون React أو أي مكتبة — DOM API مباشرة)
SVG مرسوم يدويًا (شعار الدلة والأيقونات)
خطوط Google Fonts: El Messiri / Almarai / Fraunces
لا يوجد build step — كل حاجة تشتغل مباشرة بدون Webpack/Vite.
بنية المشروع (Architecture)
نمط Monolith بسيط: سيرفر Express واحد بيخدم الـ API والملفات الثابتة مع بعض — مفيش فرونت اند وباك اند منفصلين، ده بيسهّل النشر (مشروع واحد، أمر واحد للتشغيل).
server.js → نقطة الدخول، يربط كل حاجة
routes/public.js → API عام (المنيو، تسجيل الطلبات)
routes/admin.js → API محمي (دخول، طلبات، إحصائيات، إدارة منيو)
middleware/ → التحقق من الدخول + التحقق من صحة البيانات
database/db.js → الاتصال بقاعدة البيانات + الجدول + بيانات ابتدائية
public/ → كل ملفات الموقع الظاهرة للمستخدم
قاعدة البيانات (5 جداول)
admins (حساب الأونر) · categories (أقسام المنيو) · menu_items (الأصناف) · orders (الطلبات) · order_items (تفاصيل كل طلب)
الحماية المطبقة فعليًا
تشفير كلمات السر (bcrypt, 12 rounds)
الجلسات: httpOnly + secure (production) + sameSite
Rate limiting على الدخول (8 محاولات/15 دقيقة) والطلبات (20/15 دقيقة)
التحقق من كل المدخلات على السيرفر (مش بس الفرونت)
السعر بيتحسب من قاعدة البيانات نفسها وقت الطلب — مش من اللي العميل بيبعته (منع التلاعب)
Prepared statements في كل الاستعلامات (حماية من SQL injection)
Helmet + Content-Security-Policy + حماية HTTPS إجبارية في الإنتاج
الـ API (REST, JSON)
عام: GET /api/menu · POST /api/orders
محمي بالجلسة: POST /api/admin/login|logout · GET /api/admin/orders|stats · PATCH /api/admin/orders/:id/status · CRUD كامل على categories و menu-items