سندي
كان التاجر العراقي يدير عمله كاملاً بين دفتر ورقي وتطبيق محادثة وثلاث شركات توصيل. سندي يجمع العملية بالكامل في نظام واحد.

الواجهة أعلاه نموذج عرض للمنتج، وليست لقطة شاشة ملتقطة من نظام قيد التشغيل. أمّا تصوّرات الواجهات في بقية الصفحة فمبنية على البنية الفعلية لوحدات المنصة — فهذه منصات خاصة بعملاء وتجارية.
- الدور
- مؤسس · مهندس برمجيات متكامل
- السنة
- 2026
- الحالة
- في الإنتاج · تجّار تجريبيون
- التصنيف
- SaaS
سندي منصة SaaS متعددة المستأجرين يدير فيها التاجر الطلبات والعملاء والمنتجات والمخزون والمخازن والمتاجر الإلكترونية والتوصيل والسائقين والمدفوعات والمصاريف والاشتراكات والتحليلات من لوحة واحدة. أسّستُ المشروع، وصمّمتُ المنتج، وأبني منصة الواجهة الأمامية بالتعاون مع فريق الخادم.
المشكلة
التاجر في بغداد يسجّل الطلبات في دفتر أو جدول بيانات، ويستقبلها عبر إنستغرام أو واتساب، ويسلّم التوصيل إلى شركتين أو ثلاث، ولا يعرف التكلفة الحقيقية للطلب إلا بعد انتهائه. لا شيء يتطابق، والمخزون ينحرف، ولا أحد يستطيع الإجابة عن سؤال «هل ربح هذا الشهر؟» بدون جرد يدوي.
النتيجة
نظام واحد معزول لكل مستأجر ينقل الطلب من المتجر إلى التسليم، ويطابق المخزون والدفع والتكلفة في الطريق — بالعربية أولاً والإنجليزية ثانياً، ومُختبر مع تجّار تجريبيين حقيقيين.
التقنيات
- React 19
- TypeScript
- Tailwind CSS
- shadcn/ui
- Vite
- TanStack Query
- Zustand
- React Hook Form
- Zod
- i18next
- SignalR
- ASP.NET Core
- PostgreSQL
- DigitalOcean
- Railway
العملية قبل البرمجيات
لم يبدأ سندي من فكرة تقنية، بل من ملاحظة كم من يوم التاجر العراقي يُستهلك في نقل المعلومة نفسها بين أنظمة لا تتحدّث مع بعضها. والمنصة تعمل اليوم على sendyiq.com.
تصل الطلبات عبر إنستغرام وواتساب، ثم تُنسخ إلى دفتر أو جدول بيانات. يُعدَّل المخزون من الذاكرة. ويُسلَّم التوصيل إلى أي من شركتين أو ثلاث تستجيب في ذلك اليوم، ولكل منها جدولها ومصطلحاتها الخاصة بالحالات. تُسوّى المدفوعات بعد أيام، نقداً، مقابل قائمة انحرفت أصلاً عن الواقع.
وثمن ذلك ليس «قلة كفاءة» مجرّدة، بل تاجر لا يستطيع فعلياً أن يخبرك أي منتجاته يربح، وكم تكلّف خدمة منطقة توصيل معيّنة، وهل كان الشهر الماضي رابحاً — دون أن يجلس مساءً كاملاً مع آلة حاسبة.
من يستخدمه فعلياً
سندي ليس منتجاً لشخصية واحدة. سبعة أدوار مختلفة تتعامل مع سجل الطلب نفسه من زوايا مختلفة، ويحتاج كل دور إلى قدر مختلف من النظام.
التاجر / صاحب المتجر
يدير العمل بالكامل. يحتاج الصورة الكاملة — المنتجات والمخزون والطلبات والمال — دون أن يفهم التفاصيل الداخلية للنظام.
مركز الاتصال والصندوق
إدخال متكرر بحجم عالٍ. مُحسَّن للسرعة والعمل بلوحة المفاتيح، لا للاستكشاف.
شركة التوصيل والأسطول
ترى المهام وتحوّلات الحالة عبر تجّار كثر — لكن فقط الحقول التي يخوّلها عقدها.
السائق
تطبيق منفصل صغير عن قصد. شاشة واحدة ومهمة واحدة، قابل للاستخدام على هاتف متوسط بإشارة ضعيفة.
العميل النهائي
لا يرى اللوحة أبداً. يلتقي بالتاجر عبر متجر عام يجب أن يُحمَّل بسرعة على بيانات الهاتف.
انضباط النطاق
الخطر في منصة بهذا الاتساع واضح: بناء إحدى عشرة وحدة متوسطة بدل نظام واحد. القاعدة التي وضعتُها أن الوحدة لا تُطلق إلا إذا غيّرت حالة طلب أو منتج أو مال — وأن يكون تغيّر الحالة مرئياً لكل وحدة أخرى تعتمد عليه.
- الطلبات والعملاء والمنتجات والمخزون والمخازن تشكّل النواة التشغيلية — لا شيء آخر يُطلق قبل أن تتطابق هذه.
- المتاجر والتوصيل والسائقون يمدّون دورة حياة الطلب نحو العميل والطريق.
- المدفوعات والمصاريف والخصومات والاشتراكات تربط المال بسجلات موجودة بدل إنشاء دفتر موازٍ.
- التحليلات وإدارة العملاء تقرأ من المصدر الواحد — ولا تحتفظ بأرقامها الخاصة أبداً.
قرارات الواجهة المؤثّرة
سندي عربي أولاً. هذا قرار بنيوي لا مهمة ترجمة. الاتجاه الافتراضي RTL واللغة الافتراضية العربية، والواجهة الإنجليزية هي النسخة المعكوسة — وهو عكس ما تُبنى عليه معظم منصات المنطقة، ويغيّر طريقة كتابة كل تخطيط.
- التحدّي
أكثر من ٧٠ جدول بيانات كان كل منها يحل الترقيم والتصفية وحالات الفراغ والخطأ بطريقة مختلفة قليلاً.
القراردقّقتُ كل جدول وكل واجهة معتمدة على البيانات، ثم جمعتُها في بنية جداول واحدة قابلة للتركيب بعقود حالة مشتركة.
المقايضةإعادة هيكلة كبيرة وغير براقة لم تنتج ميزات جديدة — لكنها سدّدت نفسها في كل شاشة بُنيت بعدها.
- التحدّي
عكس الواجهة للإنجليزية كان يكسر باستمرار الحقول الرقمية والنقدية والتقنية.
القرارالتخطيط الاتجاهي يُعكس؛ أما المعرّفات والعملة وأرقام الهواتف والروابط والرموز التقنية فتُعزل كجزر LTR بغضّ النظر عن اللغة.
المقايضةكل حقل جديد يجب أن يعلن سلوكه الاتجاهي — انضباط أكبر في البداية، وصفر أخطاء ثنائية الاتجاه لاحقاً.
- التحدّي
شركاء التوصيل والتجّار احتاجوا شاشة الطلب نفسها بمستويات ظهور مختلفة جوهرياً.
القرارتحقّق الصلاحيات يعمل على مستوى الحقل لا المسار فقط، فتُعرض الشاشة الواحدة بصدق لسبعة أدوار.
المقايضةمنطق عرض أعقد، لكن دون شاشات مكرّرة تتباعد مع الوقت.
معمارية النظام
العملاء
ثلاث واجهات بلغة مكوّنات واحدة
- Merchant dashboard
- Driver app
- Public storefronts
حالة العميل
فصل مقصود بين حالة الخادم والحالة الفورية
- TanStack Query
- Zustand
- React Hook Form + Zod
- i18next
النقل
REST للسجلات، وSockets للتتبّع الحي
- REST API
- SignalR / socket.io
- JWT + RBAC
الخدمات
قواعد عمل محدّدة بالمستأجر
- ASP.NET Core
- PostgreSQL
- Payment gateways
- Delivery providers
المنصة
بيئتا تطوير وإنتاج منفصلتان
- DigitalOcean App Platform
- Railway
- Custom domains + DNS
- 01
مُنشأ
يُنشأ من المتجر أو مركز الاتصال أو التاجر مباشرة. السجل نفسه في كل الحالات.
- 02
محجوز
يُحجز المخزون مقابل المخزن حتى لا يطالب طلبان بالوحدة نفسها.
- 03
مُسند
يُوجَّه إلى شركة توصيل أو سائق داخلي، مع ظهور الإسناد للطرفين.
- 04
قيد التوصيل
تتدفّق تحديثات السائق مباشرة؛ ويرى التاجر الحالة نفسها التي يبلّغ عنها السائق.
- 05
مُسوّى
تُسجَّل نتيجة التوصيل والدفع والتكلفة على الطلب — فلا تحتاج التحليلات إلى مطابقة يدوية.
التحديات الهندسية
تعدّد المستأجرين دون تسريب
كل استعلام وكل اشتراك Socket وكل ملف مرفوع محدّد بالمستأجر. الفشل هنا ليس خللاً عادياً بل رؤية تاجر لعملاء تاجر آخر — لذلك يُفرض نطاق المستأجر في طبقة البيانات لا بالثقة بالعميل.
التتبّع الحي دون فوضى
التتبّع الحي والسجلات المخزّنة نوعان مختلفان من الحالة. خلطهما ينتج واجهات ترتجف وتكذب. حالة الخادم تبقى في ذاكرة الاستعلام، بينما المواقع الحية وتحديثات الحالة في مخزن فوري منفصل.
التخطيط ثنائي الاتجاه على نطاق واسع
دعم RTL سهل في صفحة تعريفية وصعب فعلاً عبر جداول تشغيلية كثيفة ومخططات ومنتقيات تواريخ وقوائم جانبية. بناء التخطيط بخصائص منطقية من البداية كان أرخص من عكس منتج LTR مكتمل.
تكاملات تفشل بلباقة
بوابات الدفع ومزوّدو التوصيل خارجيون وقد ينقطعون. جلسات الدفع ومعالجة Webhooks وواجهات حالة المعاملات مبنية بحيث يُضعف انقطاع المزوّد وحدة واحدة بدل إيقاف عمل التاجر.
أين وصل
- الحالة
في الإنتاج، مُختبر مع تجّار تجريبيين
- دوري
مؤسس ومهندس برمجيات متكامل
- الواجهات المُنجزة
لوحة التاجر، تطبيق السائق، المتاجر
- اللغات
العربية (افتراضية) والإنجليزية
أهم ما علّمني إياه سندي أن البرمجيات التشغيلية تُقيَّم يوم يحدث خطأ، لا يوم العرض. لا يهم التاجر أن تكون اللوحة أنيقة إذا انقطع مزوّد التوصيل وعلق الطلب في حالة لا يفسّرها أحد. معظم الجهد الهندسي المهم ذهب إلى النصف غير البرّاق — فحوص الصلاحيات، وحالات الخطأ، والمطابقة، وجعل الفشل مقروءاً.