تفاصيل العمل

اللغات والتقنيات المستخدمة في الموقع مقسمه

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

بطاقة العمل

اسم المستقل
عدد الإعجابات
0
تاريخ الإضافة
تاريخ الإنجاز
المهارات