عن المشروع
منصة تتبّع أساطيل عبر GPS بعلامة بيضاء على Firebase، يخدم فيها الموزّع عملاءه تحت علامته ونطاقه الفرعي، دون أي خادم يُدار.
دوري: مهندس ومطوّر full stack، من نقطة استقبال بيانات المتتبّعات إلى واجهة الخريطة وقواعد تعدّد المستأجرين.
بنيت هذه المنصة ليتمكن موزّع من دخول سوق تتبّع الأساطيل دون تشغيل أي بنية تحتية. يفرض النموذج التقليدي خادمًا يعمل باستمرار لاستقبال إطارات GPS، وطبقة websocket لدفع المواقع، وقاعدة بيانات محسوبة لأسوأ الحالات. وبالنسبة لموزّع لديه حفنة عملاء، تصل هذه الكلفة الثابتة قبل أول دينار من الإيرادات بوقت طويل.
أزلت الخادم بالكامل. تعيش الواجهة البرمجية كلها ونقطة استقبال المتتبّعات داخل دالة سحابية واحدة تشغّل Express 5 بتزامن قدره ثمانون، فتستوعب نسخة واحدة عددًا كبيرًا من المركبات قبل أن تبدأ ثانية. ويمرّ الزمن الحقيقي عبر مستمعي Firestore بدل طبقة websocket، أي أن المتصفح يشترك مباشرة في البيانات، وبنية الدفع التي كان عليّ بناؤها ثم إبقاؤها حية لا وجود لها أصلًا.
الواجهة الأمامية مبنية بـReact 19 على Vite، مع خريطة Leaflet فوق OpenStreetMap، قابلة للتثبيت كتطبيق ويب تقدّمي، ومخزن Zustand صغير يغذّيه مستمعو Firestore. ويقوم تعدّد المستأجرين على بيانات Firebase Auth الحاملة للمستأجر والدور، مع قواعد Firestore التي تفرض العزل على مستوى قاعدة البيانات لا في كود التطبيق. وتتصل المتتبّعات عبر بروتوكول OsmAnd الذي يتحدثه أي هاتف ذكي أو صندوق GPS قياسي، فلا يحتاج إدراج مركبة إلى عتاد خاص. ويشغّل موزّع تونسي المنصة في الإنتاج اليوم، يخدم بها عملاء أساطيله تحت علامته الخاصة، وهو النموذج نفسه الذي سيدخل فيه موزّع ثانٍ.
أهم الميزات
- 🗺️ خريطة أسطول حية: تتحدث مواقع المركبات على خريطة Leaflet يغذّيها مستمعو Firestore مباشرة، دون طبقة websocket تُدار.
- 🏷️ إعادة بيع بعلامة بيضاء: يخدم كل موزّع عملاءه تحت علامته على نطاقه الفرعي، انطلاقًا من نشر واحد مشترك.
- 📡 بروتوكول متتبّع قياسي: تتصل الأجهزة عبر OsmAnd الذي تتحدثه الهواتف الذكية وصناديق GPS الشائعة، فلا حاجة إلى عتاد خاص.
- ☁️ دالة سحابية واحدة لكل الواجهة البرمجية: يبقي Express 5 بتزامن ثمانين الكلفة متناسبة مع الاستخدام الفعلي.
- 🔒 عزل مفروض في قاعدة البيانات: تطبّق قواعد Firestore فصل المستأجرين مباشرة، فلا يستطيع خطأ برمجي كشف أسطول عميل آخر.
- 📲 تطبيق ويب تقدّمي قابل للتثبيت: يفتح المديرون الأسطول من شاشة الهاتف الرئيسية دون متجر تطبيقات.
- 🎬 أسطول تجريبي مدمج: تحرّك دالة مجدولة مركبات واقعية، فيرى العميل المحتمل أسطولًا متحركًا قبل تركيب أي متتبّع.
- 🚦 الحالة اليوم: يشغّلها موزّع واحد في الإنتاج. واستقبال موزّع ثانٍ يعني مستأجرًا يُنشأ ونطاقًا فرعيًا يُوجَّه، لا نشرًا يُعاد بناؤه.
مشكلات وحلول
المشكلة: يتطلب تتبّع الأساطيل عادة خادمًا يعمل باستمرار لاستقبال إطارات GPS وطبقة websocket لدفع المواقع. ويدفع موزّع يبدأ بعدد قليل من العملاء هذه الكلفة الثابتة قبل أن يجني منها شيئًا بوقت طويل.
الحل: تعمل الواجهة البرمجية كلها ونقطة الاستقبال داخل دالة سحابية واحدة عالية التزامن، ويحل مستمعو Firestore محل طبقة websocket بالكامل. صارت كلفة البنية التحتية تتبع الاستخدام الفعلي بدل أن تسبقه، وهو ما يجعل نموذج إعادة البيع مجديًا من أول عميل.
المشكلة: لا يستطيع موزّع أن يضع اسمه على منصة تعرض اسم غيره. وحين يتقاسم عدة موزّعين نشرًا واحدًا، يعتمد إخفاء مركبات كل واحد عن الآخرين عادة على صحة كل استعلام في التطبيق.
الحل: تندرج العلامة والنطاق الفرعي ضمن إعدادات المستأجر، فيثبّت الموزّع هويته دون المساس بالكود. ويُفرض العزل بقواعد Firestore على مستوى قاعدة البيانات لا عبر استعلامات التطبيق، فلا يستطيع خطأ في الواجهة كشف أسطول موزّع آخر.


