Live atlas

UNews Map

Event

About us

منصة مفتوحة المصدر

منصة إدارة الخرائط

منصة متكاملة لإدارة الأحداث الجغرافية — رسم الأحداث، نشرها، وتكاملها مع تيليغرام وواجهة 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
🌐 الخريطة العامة: localhost:3000 — لوحة الإدارة: localhost:3000/admin
bash
# نسخ وتعديل ملف البيئة
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_REGIONS3منطقة AWS
AWS_ACCESS_KEY_IDS3مفتاح وصول AWS
AWS_SECRET_ACCESS_KEYS3المفتاح السري AWS
AWS_S3_BUCKETS3اسم حاوية 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
أدخل النطاق العام في الإعدادات ← عام حتى تعمل روابط الأحداث في الرسائل