منصة إخبارية عربية متكاملة مبنية بتقنيات Node.js و Express للواجهة الخلفية، مع واجهة أمامية بسيطة باستخدام Vanilla JavaScript، وقاعدة بيانات SQLite خفيفة الوزن.
- 🗞️ نشر وإدارة الأخبار: إنشاء وتعديل وحذف المقالات الإخبارية بسهولة.
- 🏷️ تصنيف متقدم: تنظيم الأخبار حسب الأقسام (سياسة، اقتصاد، رياضة...) والمناطق الجغرافية.
- ⚡ العواجل: نظام مخصص للأخبار العاجلة يظهر في أعلى الصفحة.
- 🔐 نظام صلاحيات: فصل بين المديرين (Admins) والقراء (Readers).
- 🎨 تخصيص الهوية: تغيير ألوان الموقع، الشعار، والأسماء من لوحة الإعدادات.
- 🔍 بحث متطور: البحث في العناوين، الملخصات، والمحتوى الكامل.
- 📱 تصميم متجاوب: يعمل بسلاسة على جميع الأجهزة (كمبيوتر، لوحي، جوال).
- 🛡️ أمان عالي: تشفير كلمات المرور بـ
bcrypt، وجلسات آمنة محمية من هجمات XSS و SQL Injection.
| المجال | التقنية |
|---|---|
| الواجهة الخلفية | Node.js, Express.js |
| قاعدة البيانات | SQLite3 |
| الواجهة الأمامية | HTML5, CSS3, Vanilla JavaScript |
| الأمان | bcryptjs, crypto, httpOnly Cookies |
| معالجة الملفات | fs (File System) |
- Node.js (الإصدار 14 أو أحدث)
- npm (يأتي مثبتاً مع Node.js)
-
استنساخ المشروع أو الانتقال إلى مجلده:
cd /workspace -
تثبيت المكتبات المطلوبة:
npm install
ملاحظة: إذا واجهت أخطاءً تتعلق بـ
sqlite3، قم بتشغيل الأمر التالي لإعادة بنائه:npm rebuild sqlite3
-
تشغيل الخادم:
node server.js
-
فتح المتصفح: انتقل إلى الرابط: http://localhost:3000
/workspace
├── server.js # ملف الخادم الرئيسي (API + منطق الأعمال)
├── package.json # إعدادات المشروع والمكتبات
├── README.md # هذا الملف
│
├── public/ # ملفات الواجهة الأمامية
│ ├── index.html # صفحة تسجيل الدخول
│ ├── signup.html # صفحة إنشاء حساب جديد
│ ├── dashboard.html # لوحة تحكم الإدارة
│ ├── news-home.html # الصفحة الرئيسية للأخبار
│ ├── article-detail.html# صفحة عرض تفاصيل المقال
│ ├── section.html # صفحة عرض قسم معين
│ ├── search.html # صفحة نتائج البحث
│ ├── site-settings.html # صفحة إعدادات الموقع
│ │
│ ├── script.js # منطق المصادقة وتسجيل الدخول
│ ├── dashboard.js # منطق لوحة التحكم (إضافة/تعديل أخبار)
│ ├── news-home.js # منطق عرض الصفحة الرئيسية
│ ├── article-detail.js # منطق عرض التفاصيل
│ ├── site-config.js # تطبيق إعدادات الموقع (الألوان والشعار)
│ ├── analytics.js # (ملف احتياطي/تحليلات)
│ ├── search.js # منطق البحث
│ └── section.js # منطق عرض الأقسام
│
└── data/ # مجلد البيانات (يُنشأ تلقائياً)
├── news.db # قاعدة بيانات SQLite
├── articles.json # بيانات تجريبية أولية (اختياري)
└── site-settings.json # حفظ تخصيصات الموقع
عند تشغيل النظام لأول مرة، قم بزيارة صفحة "إنشاء حساب" (signup.html).
- أول مستخدم يسجل سيحصل تلقائياً على صلاحية مدير (Admin).
- المستخدمون اللاحقون سيكونون قراء (Readers) افتراضياً ما لم يتم تعديلهم يدوياً في قاعدة البيانات.
بعد تسجيل الدخول كمدير، يمكنك:
- إضافة خبر جديد: اكتب العنوان، الملخص، المحتوى، اختر القسم والمنطقة، وأضف رابط صورة.
- تعديل الأخبار: قائمة بجميع المقالات مع خيارات التعديل والحذف.
- إدارة العواجل: إضافة عناوين عاجلة تظهر في شريط الأخبار العاجلة.
من صفحة الإعدادات، يمكنك تغيير:
- اسم الموقع والشعار (رابط الصورة).
- الألوان الرئيسية (لون الهيدر، لون الروابط، الخلفيات).
- النصوص الثابتة مثل "حقوق النشر".
يعرض الخادم مجموعة من مسارات API التي تستخدمها الواجهة الأمامية:
| الطريقة | المسار | الوصف | الصلاحية |
|---|---|---|---|
POST |
/api/register |
تسجيل مستخدم جديد | عام |
POST |
/api/login |
تسجيل الدخول | عام |
POST |
/api/logout |
تسجيل الخروج | مستخدم |
GET |
/api/articles |
جلب قائمة المقالات (مع فلاتر) | عام |
GET |
/api/articles/:id |
جلب تفاصيل مقال محدد | عام |
POST |
/api/articles |
إنشاء مقال جديد | Admin |
PUT |
/api/articles/:id |
تحديث مقال موجود | Admin |
DELETE |
/api/articles/:id |
حذف مقال | Admin |
GET |
/api/breaking |
جلب عناوين العواجل | عام |
POST |
/api/breaking |
إضافة عاجل | Admin |
GET |
/api/settings |
جلب إعدادات الموقع | عام |
POST |
/api/settings |
حفظ إعدادات الموقع | Admin |
GET |
/api/search |
البحث في الأخبار | عام |
يستخدم المشروع قاعدة بيانات SQLite محلية (data/news.db). تتكون من الجداول التالية:
- users: تخزين بيانات المستخدمين (الاسم، البريد، كلمة المرور المشفرة، الصلاحية).
- sessions: تخزين جلسات الدخول النشطة لضمان الأمان.
- articles: تخزين جميع المقالات والتفاصيل المرتبطة بها.
- breaking_headlines: تخزين عناوين الأخبار العاجلة.
لا حاجة لتثبيت خادم قاعدة بيانات منفصل؛ فالملف يُنشأ ويُدار تلقائياً عند بدء التشغيل.
- كلمات المرور: مشفرة باستخدام خوارزمية
bcryptقبل التخزين. - الجلسات: تُولد رموز جلسات عشوائية آمنة باستخدام
cryptoوتخزن فيHttpOnly Cookiesلمنع الوصول إليها عبر JavaScript (حماية من XSS). - SQL Injection: جميع استعلامات قاعدة البيانات تستخدم
Prepared Statementsلمنع حقن الأكواد الخبيثة. - التحقق من المدخلات: يتم التحقق من صحة البيانات المرسلة من قبل المستخدم قبل معالجتها.
لحذف جميع البيانات والبدء من جديد، قم بحذف ملف data/news.db وأعد تشغيل الخادم. سيتم إنشاء قاعدة بيانات جديدة تلقائياً.
يمكنك وضع ملف باسم articles.import.json في مجلد data/ يحتوي على مصفوفة من المقالات ليتم استيرادها تلقائياً عند بدء التشغيل لأول مرة.
هذا المشروع مفتوح المصدر ومتاح للاستخدام الشخصي والتعليمي.
نرحب بالمساهمات لتحسين المنصة! يمكنك الإبلاغ عن الأخطاء أو اقتراح ميزات جديدة عبر فتح Issue في المستودع.