منصة مفتوحة المصدر
منصة إدارة الخرائط
منصة متكاملة لإدارة الأحداث الجغرافية — رسم الأحداث، نشرها، وتكاملها مع تيليغرام وواجهة REST API عامة.
Next.js 16الإطار الأساسي
MapLibre GL 5محرك الخرائط
PostgreSQLقاعدة البيانات
Elysia 1.4REST API
المكدس التقني
الإطارNext.js 16App Router
اللغةTypeScript 5
واجهة المستخدمMantine v8
الخرائطreact-map-gl 8MapLibre
ORMPrisma 7
قاعدة البياناتPostgreSQL
التحققZod v4
النماذجreact-hook-form
جلب البياناتTanStack Query v5
API العامElysia 1.4/api/v1
المصادقةJWT + bcrypt
التخزينAWS S3 / محلي
النص الغنيTiptap v3
المراسلةTelegram Bot API
البدء السريع
bash
# تثبيت التبعيات
bun install
# إعداد متغيرات البيئة
cp .env.example .env
# دفع المخطط إلى قاعدة البيانات
bunx prisma db push
# إنشاء المستخدم الأولي
bun run seed
# تشغيل خادم التطوير
bun dev
bun install
# إعداد متغيرات البيئة
cp .env.example .env
# دفع المخطط إلى قاعدة البيانات
bunx prisma db push
# إنشاء المستخدم الأولي
bun run seed
# تشغيل خادم التطوير
bun dev
🌐
الخريطة العامة:
localhost:3000 — لوحة الإدارة: localhost:3000/admin
bash
# نسخ وتعديل ملف البيئة
cp .env.example .env
# تشغيل التطبيق مع PostgreSQL
docker compose up -d
cp .env.example .env
# تشغيل التطبيق مع PostgreSQL
docker compose up -d
🐳
يشغّل التطبيق مع PostgreSQL تلقائياً — متاح على
localhost:3000
| المتغير | مطلوب | الوصف |
|---|---|---|
| DATABASE_URL | ✓ | سلسلة اتصال PostgreSQL |
| JWT_SECRET | ✓ | مفتاح سري لتوقيع JWT |
| MEDIA_LOCATION | — | LOCAL (افتراضي) أو S3 |
| MEDIA_FOLDER_NAME | — | مجلد الرفع المحلي (افتراضي: uploads) |
| AWS_REGION | S3 | منطقة AWS |
| AWS_ACCESS_KEY_ID | S3 | مفتاح وصول AWS |
| AWS_SECRET_ACCESS_KEY | S3 | المفتاح السري AWS |
| AWS_S3_BUCKET | S3 | اسم حاوية S3 |
المميزات
🗺️ محرر الخرائط
رسم العلامات والمضلعات والخطوط مع تحرير الرؤوس والسحب والتراجع/الإعادة
📋 إدارة الأحداث
سير عمل النشر/المسودة مع قسمين مخصصين في الشريط الجانبي للمحرر
🖼️ مكتبة الوسائط
تخزين S3 أو محلي مع تنظيم المجلدات
✈️ تكامل تيليغرام
ربط قنوات البوت بالخرائط ومشاركة تلقائية أو يدوية للأحداث المنشورة
📄 الصفحات والقوائم
صفحات CMS بمحتوى نصي غني وإعدادات SEO وقوائم تنقل
🌍 إدارة الدول
دعم الاسم باللغة الأصلية مع عرض ثنائي اللغة في الواجهة العامة
🔑 إدارة مفاتيح API
مفاتيح بتواريخ انتهاء وقيود وصول حسب IP/المضيف
📊 سجل التدقيق
مسار كامل لجميع الإجراءات الإدارية
🗺️ خريطة تفاعلية
MapLibre GL مع دعم النص العربي RTL
🌐 تبويبات الدول
عرض ثنائي اللغة — الاسم الأصلي والإنجليزية
🔍 فلترة الأحداث
حسب الفئة والطرف مع روابط قابلة للمشاركة عبر
?event=📅 عرض الجدول الزمني
جدول زمني تسلسلي للأحداث
🌙 الوضع الداكن/الفاتح
تبديل آمن من الترطيب، بلا وميض عند التحميل الأول
📱 متجاوب
دعم كامل للأجهزة المحمولة
واجهة برمجة التطبيقات — REST API
🔗
الرابط الأساسي:
/api/v1/ — التوثيق التفاعلي: /api/v1/swagger
المصادقة: X-Api-Key: <key> أو Authorization: Bearer <key> أو ?api_key=
| الطريقة | نقطة النهاية | الوصف |
|---|---|---|
| GET | /api/v1/maps | قائمة جميع الخرائط النشطة |
| GET | /api/v1/maps/:id | تفاصيل خريطة واحدة |
| GET | /api/v1/events | قائمة الأحداث مع فلترة وترقيم الصفحات |
| GET | /api/v1/events/:id | تفاصيل حدث واحد مع جميع العلاقات |
| GET | /api/v1/countries | قائمة الدول |
| GET | /api/v1/categories | قائمة الفئات |
| GET | /api/v1/parties | قائمة الأطراف |
| GET | /api/v1/swagger | توثيق API التفاعلي |
ملفات الوسائط تُخدَّم على /api/media/ — لا تتطلب مصادقة
إعداد تيليغرام
1
أنشئ بوتاً عبر @BotFather وانسخ رمز البوت
2
أضف البوت إلى قناة تيليغرام كمسؤول
3
في الإدارة ← تيليغرام، أنشئ قناة بإدخال رمز البوت ومعرف الدردشة
4
اربط القناة بخريطة وفعّل المشاركة التلقائية إن أردت
5
أدخل النطاق العام في الإعدادات ← عام حتى تعمل روابط الأحداث في الرسائل