Hamza-AyedandClaude Opus 4.8 d2a34f753c feat: TLS — إغلاق المنافذ المكشوفة + الثقة بالبروكسي + دليل الإصدار
النطاق: tripz-api.intaleqapp.com (قرار المالك) — مملوك وجاهز، ومحايد عن
اسم العلامة الذي لم يُحسم فلا يحتاج تغييراً لاحقاً.

ثغرتان كانتا ستُبطلان TLS من أصله:
- API كان منشوراً على 0.0.0.0:4010 → صار 127.0.0.1. بلا هذا يبقى
  http://IP:4010 مفتوحاً فيتجاوز TLS كلياً وتصير الشهادة زينة
- **Postgres كان مكشوفاً على 0.0.0.0:55432** — القاعدة على الإنترنت مباشرة
  → صار 127.0.0.1. المنفذ غير القياسي إخفاء لا أمان. الوصول من الماك عبر
  نفق SSH (docs/20 §4)

trust proxy = 1: خلف Nginx كان req.ip يصير 127.0.0.1 للجميع فيمتلئ سجل
التدقيق المالي (I7) بعنوان البروكسي بدل السائق — أثرٌ بلا قيمة عند النزاع.
قفزة واحدة فقط: الثقة المفتوحة تسمح للعميل بتزوير X-Forwarded-For.

docs/20: DNS → موقع reverse proxy → شهادة → **إعداد ترقية WebSocket**
(بدونه يسقط التتبّع الحيّ) + مهلة 3600s للنبضات طويلة العمر + فحص تحقّق
أهمّه أن http://IP:4010 يجب أن **يفشل**.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 16:36:14 +03:00
2026-07-16 16:01:28 +03:00

Tripz — منصة نقل ذكي متعددة المستأجرين (White-Label)

منصة SaaS لتأجير تطبيقات نقل بعلامة تجارية خاصة لكل مستأجر (مكتب تكسي / أسطول / مشغّل مرخّص) في دول متعددة. تُبنى لتكسر نموذج Onde عبر أربع فجوات: الشفافية السعرية، الاستضافة داخل الدولة (السيادة)، خرائط انطلق الذاتية (بلا فاتورة خرائط)، والعربية أولاً.

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


القرارات المحسومة (لا نقاش فيها عند البناء)

الطبقة القرار لماذا
الباك إند NestJS 11 + TypeORM + PostgreSQL/PostGIS + Redis باك إند انطلق مبني به أصلاً وفيه Tenant + Usage جاهزان
الـ Realtime Socket.IO Gateway (@nestjs/websockets) + redis-adapter لغة واحدة، فريق واحد، توسّع أفقي
الموبايل Flutter + flutter_bloc (Cubit افتراضياً، Bloc لدورة الرحلة والعروض) قابلية اختبار وتدقيق لمنتج يُرخّص + قرب من عقلية GetX
التوجيه/الحقن go_router + get_it معيار صناعي مقبول
الخرائط انطلق (Martin tiles + geocoding + routing ذاتي) الخندق التنافسي: بلا اعتماد على Google
الاستئجار قاعدة واحدة + tenant_id (قياسي)، ونسخة معزولة (وضع سيادة) أرخص تشغيلاً + منتج مضاد لثغرة Onde

تفاصيل كل قرار في docs/02-backend-plan.md وdocs/03-mobile-plan.md.


خريطة الوثائق

ابدأ من الأعلى للأسفل. كل ملف مستقل لكنه يشير للبقية.

# الملف يجيب عن
00 نظرة عامة الرؤية، الجمهور، التمايز، ما ليس ضمن النطاق
01 البنية كيف تتحدث الأنظمة معاً (مخطط عام)
02 الباك إند وحدات NestJS، الطبقات، الحرّاس
03 الموبايل هيكل فلاتر، الحالة، الشاشات، الـ flavors
04 محرك التعرفة كيف نسعّر الرحلة (JSON قواعد)
05 تسعير المنتج والفوترة الباقات وخوارزمية فاتورة المستأجر
06 نموذج الاستئجار tenant_id، وضع السيادة، حزم الدول
07 التكاملات الدفع، OTP/SMS، واجهة المنظّم، Webhooks
08 نموذج البيانات الجداول الأساسية والعلاقات
09 الطبقة الحية قنوات Socket، الحضور، الإسناد
10 خطة التنفيذ P0→P3 بالأسابيع وشروط الخروج
11 النشر والأتمتة CI، flavors، fastlane، البيئات
12 اللاندنج والبيع الموقع، قنوات البيع بلا إعلانات
13 المخاطر والقرارات المفتوحة ما يحتاج حسم المالك
14 اصطلاحات السيرفر والعزل قرارات تشغيلية محسومة: البادئة، Redis DB، سيرفر مشترك، سيرو
🌳 شجرة المستودع البنية الكاملة للمجلدات والملفات

البدء السريع (عند جهوزية القرار)

  1. اقرأ 00-overview → 01-architecture.
  2. احسم القرارات المفتوحة (الاسم، سوق الانطلاق، دور سيرو).
  3. نفّذ P0 — تأسيس الـ Monorepo.
  4. تابع الشجرة المرجعية في project-tree.

الحالة: تخطيط · آخر تحديث: 2026-07-16 · الاسم المؤقت: Tripz

S
Description
No description provided
Readme
110 MiB
Languages
Dart 56.8%
JavaScript 21.3%
PHP 12.3%
TypeScript 4%
Kotlin 1.8%
Other 3.5%