سياحة الحج والعمرة · منتج من Kachix

Safe — تتبع لحظي للحجاج في الحج والعمرة

تطوير تطبيقات الموبايلالباك-إند والـ APIs والتكاملاتتطوير الويب
Safe — تتبع لحظي للحجاج في الحج والعمرة — صورة الغلاف

التحدي

الحج بيركّز ملايين البشر في كيلومترات معدودة، كتير منهم كبار في السن، وأغلبهم بعاد عن بيوتهم، وعدد مش قليل من غير لغة مشتركة مع اللي حواليهم. الحاج اللي يتوه من مجموعته مش بس تايه — في الزحمة دي والحر ده، هو في خطر.

والناس اللي محتاجة تعرف مش جمهور واحد، دول تلاتة، وكل واحد محتاج حاجة مختلفة خالص. شركة السياحة محتاجة إشراف على كل المجموعات اللي هي مسؤولة عنها. المشرف على الأرض محتاج يلاقي شخص واحد بعينه حالًا. والعيلة في البيت محتاجة طمأنينة وبس — لو اديتهم أدوات تشغيل هتبقى حاجة مالهاش لازمة وخطرة في نفس الوقت.

والهاردوير بيصعّب الموضوع. السوارة على حاج بيتحرك تغطيتها متقطعة وبطاريتها بتخلص، فالسكوت ملخبط: ممكن مفيش حاجة غلط، وممكن الخبر الوحيد اللي كان لازم يوصلك عمره ما وصل.

الحل

فريقنا بنى الخط على الأحداث من أوله. السوارات بتنشر الموقع والمؤشرات الحيوية وضغطات الزرار عبر MQTT بتشفير TLS لخدمة استقبال مخصصة، وهي بتسلّم لـ RabbitMQ بدل الكتابة المباشرة في قاعدة بيانات. وبعدها خدمات مشتركة بشكل مستقل للتنبيهات وتقييم المناطق الآمنة وكشف الانقطاع والتصعيد، وجنبهم خدمة Python بتطبّق قواعد صريحة وكشف شذوذ على تدفق المؤشرات الحيوية.

الفصل ده هو اللي بيخلي السكوت مقروء. عشان كشف الانقطاع مشترك لوحده مش أثر جانبي لكتابة، السوارة اللي تبطّل تبعت بترفع تنبيه بحالها — غياب البيانات بيبقى حدث بدل ما يبقى شاشة فاضية.

والتخزين على شكل البيانات: PostgreSQL 16 بـ PostGIS لهندسة المناطق الآمنة، وTimescaleDB للسلاسل الزمنية للموقع والمؤشرات، وRedis للقراءات الساخنة. والـ API بيقدّم REST للحالة وSignalR للدفع اللحظي اللي خريطة تتبع محتاجاه.

والتلات جماهير بقوا تلات واجهات على باك-إند واحد — لوحة عمليات React للشركة، وتطبيقات Flutter للمشرف والعيلة كنكهتين من كود واحد. وتحديد الأدوار حقيقي مش شكلي: دخول العيلة برقم موبايل وكود مؤقت وبيوصل لشاشة قراءة فقط لحاج واحد، بينما المشرف معاه التتبع وكشوف الركاب وإعادة تشغيل المسار ورسم المناطق الآمنة وصحة الأجهزة.

وقيد واحد مقصود شكّل الخرايط: مفيش مفتاح Google Maps في أي حتة. الواجهتين بيرسموا بلاطات OpenStreetMap — flutter_map على الموبايل وreact-leaflet على الويب — وده بيشيل فاتورة على كل طلب من منتج شغلته الأساسية إنه يسيب خريطة مفتوحة.

النتايج

المنظومة شغالة من الآخر للآخر على التلات واجهات: قراءات السوارة بتوصل عبر MQTT، والخدمات بتقيّمها، والمشرفين بيتابعوا الحجاج بيتحركوا على خريطة حية لمنى بينما العيلات شايفة شاشة واحدة مطمّنة.

التنبيهات بتفرّق بين أسبابها — جهاز انقطع، أو شذوذ اكتشفه الذكاء الاصطناعي، أو زرار استغاثة اتداس — وبتمشي بحالة صريحة من اتسلّم لاتصعّد لاتأكد عليه، فالتنبيه اللي من غير رد حالة ظاهرة مش رسالة محدش صادف إنه شافها. وكشوف الأجهزة بتوضّح بطارية السوارة وقِدم آخر قراءة، فالسوارة الساكتة بتبقى حاجة المشرف يقدر يتصرف فيها قبل ما تفرق.

والتسليم متحكوم في CI: صور الحاويات بتسقّط الخط لو فحص الثغرات لقى حاجة، بدل ما تطلع وتتصلّح بعدين.

Safe — تتبع لحظي للحجاج في الحج والعمرة — صورة 1 من 4
Safe — تتبع لحظي للحجاج في الحج والعمرة — صورة 2 من 4
Safe — تتبع لحظي للحجاج في الحج والعمرة — صورة 3 من 4
Safe — تتبع لحظي للحجاج في الحج والعمرة — صورة 4 من 4
تطبيقا المشرف والعيلة شغالين على المنظومة من الآخر للآخر. الشريط الأحمر DEBUG هو بانر نسخة التطوير في Flutter، مش جزء من الواجهة.

عايز نتايج زي دي؟ قول لنا بتحاول تبني إيه.

ابدأ مشروعك