انتقل إلى المحتوى
كل الأعمال

نسخة تجريبية خاصةسوق تنقلقراءة في دقيقة

خذني معك

سوق للتنقل في الأردن مبني حول المسار لا حول الإعلان.

التقنيات
  • Flutter (PWA)
  • NestJS
  • TypeScript
  • PostgreSQL
  • PostGIS
خذني معك: الصفحة التعريفية بالعربية بمساريها بجانب شاشة الدفع للكابتن، مع بيانات تجريبية

المشكلة

مشاركة الرحلات تتم في مجموعات التواصل: العروض تضيع، والأرقام مكشوفة، والمقاعد المتاحة غير واضحة.

الحل

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

مساهمتي

المنتج وتجربة المستخدم والهندسة والنشر.

أبرز المزايا

  • رحلات مجدولة ومتكررة
  • مطابقة المسار مع انحراف مضبوط
  • دفع قيمة المقعد مباشرة عبر كليك بتأكيد الكابتن
  • العربية والإنجليزية

النتيجة

مجاني للراكب، ويدفع للكابتن قيمة المقعد الظاهرة مباشرة عبر كليك.

نسخة تجريبية خاصة بالدعوات، ولم يتم إطلاق عام بعد، لذلك لا توجد أرقام استخدام.

التفاصيل التقنية ودراسة الحالة كاملةالبنية والأمان والاختبار والقرارات، لمن يريد التفاصيل.

نظرة عامة

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

نسخة تجريبية خاصة: المنصة منشورة على khodnimaak.3dot.tech، والدخول إليها برمز لمرة واحدة من الفريق يطلب عبر نموذج في الموقع أو في التطبيق. لم تطلق للعموم، ونموذج التشغيل بانتظار مراجعة قانونية أردنية.

المجالات
  • مشاركة رحلات مجدولة
  • مطابقة المسار
  • رحلات متكررة
  • الدفع عبر كليك
  • اشتراك الكابتن
  • العربية والإنجليزية

المشكلة

التنقل المشترك بين المدن الأردنية موجود اليوم، وأغلبه يتم عبر مجموعات واتساب وفيسبوك. المجموعات تصلح كلوحة إعلانات ولا تصلح كنظام: العروض تضيع بين الرسائل، أرقام الهواتف مكشوفة، لا أحد يعرف كم مقعدا بقي فعلا، والسائق الذي يوافق على «أخذ الركاب» قد يجد نفسه يلف المدينة كلها. لا تقويم لمشوار يتكرر خمسة أيام في الأسبوع، ولا قائمة انتظار، ولا سجل عندما لا يحضر أحدهم.

سياق السوق

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

نموذج العمل

استخدام خذني معك مجاني للراكب. تدفع فقط قيمة المقعد للكابتن حسب السعر الظاهر في الرحلة.

ثلاثة أطراف ودفعتان فقط. لكل دفعة شاشاتها وكلماتها وألوانها، ولا تختلطان أبدا.

  • من الراكب إلى الكابتن: سعر المقعد الذي حدده الكابتن لتلك الرحلة، يدفع مباشرة عبر كليك ويؤكد الكابتن استلامه.
  • من الكابتن إلى المنصة: اشتراك ثابت، 10 دنانير بالشهر افتراضيا، يتحقق منه المشرف قبل أن يمنح الكابتن أي صلاحية.
  • من الراكب إلى المنصة: لا شيء. لا رسوم حجز وبدون عمولة، والمنصة لا تستلم أموال الركاب ولا تحتفظ بها.

ما الذي تغير منذ النسخة الأولى

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

  • الدخول: رقم الجوال وكلمة سر. رمز دخول لمرة واحدة من الفريق يستخدم مرة واحدة، عند التفعيل الأول أو نسيان كلمة السر، وينتهي دائما بكلمة سر. يطلب الناس الدخول عبر نموذج «اطلب دخول» في الموقع أو في التطبيق، والمساعدة نموذج كذلك، في التطبيق أو في الموقع.
  • التطبيق: نظام تصميم موحد؛ بحث تعني فيه المدينة أو المنطقة أو المحافظة أي مكان داخلها، ونتائج تشرح مناسبة الرحلة بكلام بسيط؛ الدفع للكابتن في شاشة واحدة مختصرة؛ شاشة «اليوم» للكابتن؛ نشر في ثلاث شاشات؛ تسجيل كابتن يبدأ بالتوثيق؛ مجموعات رحلة للمقاعد الثابتة على رحلة متكررة؛ صفحات السياسات داخل التطبيق؛ وبحث أماكن يتسامح مع إملاء العربية والإنجليزية.
  • الصفحة التعريفية: نحو ست شاشات جوال، في مركزها مساران، «أريد رحلة» و«أنا كابتن»، مع قسم «مين بيدفع لمين؟» ودليل تثبيت واحد.
  • لوحة المالك: قائمة من تسعة عناصر، قائمة مهام واحدة تعرض أيضا ما يمنع الإطلاق، قوائم لطلبات الدخول وطلبات المساعدة، مركز إشعارات، إدارة الفريق دون الدخول إلى الخادم، بطاقة مراجعة لتوثيق الكابتن، ومراجعة دفعات الاشتراك.
  • الأمن: مراجعات مستقلة متكررة، آخرها شمل الدخول الجديد ونماذج الطلب العامة وحالات الخلاف على الدفع؛ أصلحت الملاحظات وغطيت باختبارات تمنع عودتها.
  • الاختبارات: اختبارات آلية للواجهة البرمجية تشمل سيناريو عمل كاملا من البداية للنهاية، اختبارات لواجهات التطبيق ووحداته، فحوص ثابتة للوحة المالك، واختبار إنتاج من 32 خطوة.

تجربة الراكب

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

تجربة الكابتن

البداية بالتوثيق أولا، ولا يطلب من الكابتن أي مبلغ قبل توثيقه؛ الاشتراك يأتي بعد ذلك. شاشة «اليوم» تبدأ بشريط واحد «بانتظارك»، ثم الرحلة القادمة. النشر ثلاث شاشات: إلى أين، متى، ثم عدد المقاعد وسعر المقعد فوق بطاقة المراجعة؛ وكل ما عدا ذلك تحت «خيارات إضافية». الرحلات المتكررة تظهر في تقويم يومي وأسبوعي وشهري وقائمة، ويمكن تخطي يوم واحد أو إيقاف رحلة متكررة مؤقتا أو حجب إجازة. قائمة الركاب تبين من سيحضر، أين يركب، وحالة دفع كل راكب بالكلمات. لا يمكن إنهاء رحلة ما دامت دفعة مرسلة بلا رد، وإلغاء رحلة فيها ركاب دفعوا يعرضهم أولا ويفتح المبالغ التي على الكابتن إرجاعها.

مطابقة المسار الذكية

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

الانحراف المضبوط

كل كابتن يحدد أقصى انحراف بالدقائق. كل راكب مقبول خارج المسار يستهلك جزءا من هذا الحد، فلا تتراكم الانحرافات الصغيرة إلى انحراف كبير. الكابتن يرى دائما مدة رحلته الأصلية ومدتها مع الركاب.

نقاط التجمع

الجامعات والمجمعات والتقاطعات الرئيسية سجلات أساسية يديرها المشرف. يستطيع الكابتن حصر الركوب في نقاط التجمع، وعندما يكون عدة ركاب قريبين من النقطة نفسها تقترح قائمة الركاب اللقاء عندها مع تقدير الدقائق الموفرة.

التقويم والرحلات المتكررة

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

الدفع عبر كليك

المال لا يمر عبر المنصة. الترتيب ثابت: الراكب يطلب مقعدا أو يحجز فوريا، الكابتن يقبل، الراكب يحول سعر المقعد من تطبيق بنكه ويدخل رقم العملية، الكابتن يؤكد الاستلام، وعندها فقط يتأكد المقعد ويظهر رمز الصعود. «أرسلت» لا تعرض أبدا على أنها «تم التأكيد». الدفع شاشة واحدة مختصرة: انسخ الاسم المستعار للكابتن، اكتب رقم العملية، ثم انتظر الكابتن. يصل الطرفين تذكير، ويبقى المقعد محجوزا ما دامت الدفعة قيد المراجعة، وإذا اختلف الطرفان تنتقل الحالة إلى الفريق. رقم العملية الواحد يسند دفعة واحدة فقط على مستوى المنصة كلها. لا نستخدم ولا ندعي وجود واجهة برمجية لكليك.

الأهلية: قاعدة واحدة

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

مراجعة دفعات الاشتراك

اشتراك الكابتن هو الدفعة الوحيدة التي تستلمها المنصة نفسها، لذلك يراجع المالك كل دفعة. قائمة تعرض ما ينتظر، ولكل دفعة صفحة مراجعة فيها المبلغ المتوقع والمبلغ الذي ذكره الكابتن ورقم العملية والإيصال. يظهر تنبيه هادئ «يحتاج مراجعة» عندما يكون الإيصال مستخدما من قبل أو يختلف المبلغان: تنبيه لا حكم. يستطيع المراجع أن يسأل الكابتن ويستلم ردا واحدا، ثم يقبل أو يرفض مع قيد في سجل التدقيق. الدفعة المرسلة لا تمنح أي صلاحية؛ الدفعة المتحقق منها فقط تمنحها. تقرير المالك المالي يحتسب دفعات الاشتراك المتحقق منها فقط، أما دفعات سعر المقعد بين الركاب والكباتن فتعرض منفصلة ولا تحتسب للمنصة.

الأمان

تراجع هوية الكابتن ومركبته ووثائقه قبل أن يتمكن من النشر. يؤكد الصعود برمز من أربعة أرقام، أو برمز QR يفتح لذلك الراكب وحده. يستطيع الراكب مشاركة رحلته برابط مؤقت قابل للإلغاء. التقييم للرحلات المكتملة فقط، والبلاغات والاعتراضات تصل لفريق الدعم مع تسلسل زمني موحد، واتهام واحد لا يهدم سجل الموثوقية.

الخصوصية

أرقام الهواتف وبيانات كليك ورقم اللوحة تظهر فقط بين طرفي حجز مقبول. نتائج البحث تعرض المناطق لا العناوين. بيانات الطلب التي يراها الكباتن مجمعة على مستوى المدن. وثائق الهوية وإيصالات الدفع ملفات خاصة لا تعرض إلا لصاحبها وللموظف المخول.

لقطات من الواجهة

الصفحة التعريفية العامة وقسم «مين بيدفع لمين؟» فيها، ثم ست شاشات من التطبيق التقطت من نسخة محلية ببيانات تجريبية: أسماء وأسماء مستعارة على كليك وأرقام عمليات تجريبية. لا يظهر فيها أي مستخدم حقيقي.

البنية التقنية

  • التطبيق: Flutter كتطبيق ويب قابل للتثبيت (العربية من اليمين لليسار افتراضيا، والإنجليزية)، بقاعدة كود واحدة مهيأة لأندرويد و iOS لاحقا.
  • الواجهة البرمجية: NestJS و TypeScript واستعلامات SQL مباشرة، آلة حالات واحدة للحجوزات وقاعدة أهلية واحدة للكباتن.
  • قاعدة البيانات: PostgreSQL مع PostGIS: هندسة المسارات، فهارس مكانية، وأقفال على مستوى الصف للمقاعد.
  • الخرائط والمسارات: مزودون خلف واجهات؛ بلاطات OpenStreetMap للعرض ومحرك مسارات قابل للإضافة.
  • الصفحة التعريفية: HTML ثابت بالعربية والإنجليزية دون خطوة بناء.
  • لوحة المالك: تطبيق ويب بلا مكتبات خارجية لتوثيق الكباتن ودفعات الاشتراك والاعتراضات والجغرافيا والتحليلات.
التقنيات
  • Flutter (PWA)
  • NestJS
  • TypeScript
  • PostgreSQL
  • PostGIS
  • Nginx
  • systemd

الأمن السيبراني

جلسات محفوظة على الخادم في ملفات تعريف HttpOnly، حماية من CSRF، فحص الصلاحيات على الخادم لكل مورد، تحقق صارم من الملفات المرفوعة مع إعادة ترميزها، تخزين خاص للملفات، حدود للطلبات، سياسة أمان محتوى صارمة، وسجل تدقيق لكل إجراء حساس. لا توجد كلمة مرور افتراضية ولا رمز دخول عام.

النشر

خادم لينكس واحد مشترك مع مشاريع أخرى، بمسارات معزولة، مستخدم نظام وقاعدة بيانات مخصصان، خدمة systemd مقيدة، Nginx مع HTTPS، نسخ احتياطي يومي مع استعادة مجربة، وإصدارات ذرية يمكن التراجع عنها بتبديل رابط.

تجربة المستخدم والتصميم

كل شاشة تجيب عن سؤال واحد، على نظام تصميم واحد يشترك فيه التطبيق والصفحة التعريفية ولوحة المالك. الخيارات المتقدمة مطوية. النص العربي بصياغة أردنية يومية، ومسرد واحد يثبت الكلمات: هو دائما «سعر المقعد»، و«أرسلت» ليست «تم التأكيد». الحركة للتغذية الراجعة وتحترم إعداد تقليل الحركة. الألوان تبتعد عن أصفر التاكسي نحو الأخضر المزرق والكحلي والرملي.

التحديات والحلول

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

النتيجة

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

يفتح الرابط أدناه الصفحة التعريفية العامة فقط. التطبيق في نسخة تجريبية خاصة والدخول إليه برمز من الفريق.

الدروس

مشاركة الرحلات مشكلة مطابقة قبل أن تكون مشكلة إعلان؛ المسار يجب أن يكون كيانا أساسيا. شرح سبب مناسبة الرحلة بكلام بسيط يبني ثقة أكثر من أي نسبة. والسوق الذي لا يلمس المال ما زال عليه أن يمثله بدقة، ومن يدفع لمن يجب أن يقال في جملة واحدة يتفق عليها النص والكود والتقارير.

الخطة القادمة

إرسال رموز الدخول عبر الرسائل النصية، محرك مسارات مستضاف ذاتيا لمسافات طرق دقيقة، إشعارات فورية، نسختا أندرويد و iOS، مجموعات تنقل لجهات العمل والجامعات، ودفع متكامل عند توفر مزود.