varqioSOFTWORKS / هندسة التجارة
المتجرمجرد البداية.
من أول منتج لآخر خطوة في الطلب. بنينا Varqio عشان تصميم المتجر والكتالوج والمخزون والدفع يشتغلوا كنظام واحد.



شاشات تجريبية · تصوّر للأجهزة
CATALOG × INVENTORY- المنتج
- Varqio من Softworks
- الدعم
- مستثمر ملاك غير مُعلَن
- التركيز
- التجارة في مصر
- الحالة
- بيتا · تأهيل تجريبي
الفكرة الأساسية
بيع المنتج لحظة واحدة. اللي حواليها هو النظام كله.
01 / المنصة
المتجر هو البداية.
فريق هندسة البرمجيات في Softworks · منصة تجارة إلكترونية للسوق المصري · تصميم منتج وتطوير ويب وهندسة أنظمة
إنك تعمل صفحة منتج شكلها كويس خطوة مهمة. إن الصفحة دي تفضل متفقة مع المخزون والسعر والطلب والدفع، والتاجر بيعدّل فيها والعميل بيشتري في نفس الوقت، دي مسألة هندسية أكبر بكتير.
في Softworks، بنينا Varqio حوالين الترابط ده. منصة تدي التاجر مساحة يدير منها المنتجات والمخزون والطلبات، ويبني واجهة متجر بتعبر عن البراند بتاعه، من غير ما كل جزء يبقى شغال بمنطق مختلف عن الباقي. التجربة موجهة لمصر من البداية، وده ظاهر في الجنيه المصري، الدفع عند الاستلام، مناطق التوصيل، والاهتمام بالعربي واتجاه الكتابة.
الدراسة دي بتحكي عن التنفيذ الموجود في الكود، والقرارات اللي ربطت أجزاءه ببعض. المنتج في مرحلة تأهيل لتجربة تجار محدودة. المواقف اللي هنشرحها أمثلة هندسية توضيحية مبنية على التنفيذ والاختبارات، مش حكايات عن مشاكل حصلت لعملاء من غير دليل. ومفيش هنا أرقام مبيعات أو نمو أو أداء اتقدمت باعتبارها نتائج فعلية وهي مش متقاسة.
بدأنا من رحلة التاجر، مش من قائمة شاشات
التاجر محتاج يجهّز منتج، يظبط سعره ومخزونه، يقرر هيظهر إزاي، ويعرف هيحصل إيه بعد أول طلب. لو كل خطوة ليها منطق منفصل، هيضطر هو يعمل دور الوصلة بين الأنظمة. هدفنا كان إن المنتج نفسه يشيل المسؤولية دي.
عشان كده، قسمنا الرحلة لشغل مفهوم: تجهيز المتجر، تنظيم الكتالوج، تصميم الواجهة، مراجعة الشراء، التعامل مع الطلب، متابعة التنفيذ، وفهم النتيجة من خلال البيانات. التقسيم ده أثر على شكل الصفحات وعلى تنظيم الخدمات وراها.
صفحة المنتجات محتاجة بحث وفلاتر واختيار عناصر. صفحة الطلبات محتاجة حالات واضحة وتفاصيل تساعد على القرار. محرر المتجر محتاج مساحة تصميم وطبقات وإعدادات. محاولة حشر التلاتة في نفس شكل الشاشة كانت هتطلع واجهة متناسقة في الصور، بس أقل فاعلية في الشغل.
السوق المصري كمان كان جزء من تعريف المشكلة. عنوان التوصيل مش مجرد نص، والجنيه مش مجرد علامة جنب الرقم، والدفع عند الاستلام مش مجرد اختيار إضافي. كل واحد فيهم بيأثر على رحلة الشراء والتشغيل، وبالتالي لازم يبقى له مكان في تصميم النظام.
نطاق شغل فريق Softworks
اشتغلنا على لوحة التاجر وواجهة المتجر والخدمات اللي بتوصلهم ببعض. الكود الحالي فيه إدارة منتجات فعلية ورقمية، متغيرات للمنتج، مجموعات وتصنيفات، مخزون، طلبات، عروض، توصيل، أدوات تشغيل، تحليلات، ومحرر لتصميم المتجر.
فيه كمان تنفيذ لمساعد Varq AI، وحزم قوالب، وواجهات headless، وأدوات للمطورين من خلال CLI وMCP. وجود التنفيذ هنا مش معناه إن كل ميزة اتفعلت تجاريا أو اتعتمدت عند كل مزود خارجي. كل جزء له مرحلة وأدلة قبول مناسبة ليه.
| الجزء | اللي خصصناه | أثره على طريقة البناء |
|---|---|---|
| لوحة التاجر | مساحات شغل مناسبة لكل مهمة | كل شاشة بتبدأ من القرار المطلوب، مش من قالب Dashboard ثابت |
| الكتالوج | منتجات فعلية ورقمية وحقول مخصصة | نفس معنى المنتج لازم يفضل واضح في الإدارة والشراء |
| تصميم المتجر | قوالب وأقسام وبلوكات وهوية بصرية | التصميم بيتخزن كمستند منظم قابل للحفظ والإصدارات |
| التجارة | سعر وعرض وطلب وحالات تنفيذ | التغييرات محتاجة خطوات واضحة ومتابعة لو التنفيذ اتقطع |
| السياق المصري | جنيه ومناطق توصيل وCOD وعربي | التخصيص بيوصل للبيانات والعمليات |
| المساعدة الذكية | اقتراحات مرتبطة بالسياق | المساعد يستخدم نفس نموذج المنتج بدل ما يبني طريق موازي |
02 / النظام
نموذج واحد. مهام مختلفة.
فصلنا الواجهات، ووحّدنا معنى البيانات
لوحة التاجر وواجهة العميل ليهم استخدام مختلف. التاجر ممكن يقضي وقت طويل بيعدّل ويفلتر ويراجع. العميل عايز يلاقي المنتج ويفهمه ويكمل طلبه. استخدمنا تطبيق Next.js لكل تجربة، وخدمات TypeScript مشتركة في طبقة الـAPI للتعامل مع منطق الدومين.
الجزء المشترك مش معناه إن كل زر لازم يبقى نفس الـcomponent. المشترك الأهم هو معنى المنتج، وقواعد التصميم، وعلاقة المسودة بالنسخة المنشورة، وطريقة تمثيل الطلب. كل واجهة تقدر تعرض المعنى ده بالشكل المناسب لمستخدمها.
البنية دي منصة مقسمة لمجالات واضحة. مش بندّعي إن كل مجال microservice مستقل. المهم إن كل سلوك يبقى له مكان معروف: الكتالوج مسؤول عن المنتجات، القوالب مسؤولة عن التصميم وإصداراته، التجارة مسؤولة عن الطلب والدفع، والـworkers مسؤولة عن الشغل اللي عمره أطول من طلب المتصفح.
اشتغلنا كمان مع واقع وجود كود قديم. فيه مسار توافق ومسار API حديث للدومينات، وفيه أجزاء داخلية لسه محتفظة بتسميات أقدم. التحديث هنا كان تدريجي، مع الحفاظ على السلوك المطلوب، مش إعادة كتابة كل حاجة لمجرد توحيد الأسماء.
الواجهة بتتغيّر. المعنى واحد.
اختار جزء من النظام عشان تشوف دوره والاتصالات بتاعته.
TypeScript API مسؤول عن تعريفات الكتالوج وانتقالات حالات الشغل. كل واجهة مش بتعيد تعريف قواعد التجارة لوحدها.
كل اتصالات النظام
- تعريفات القالب لوحة التاجر
- تعريفات القالب المتجر العام
- لوحة التاجر واجهة التجارة
- المتجر العام واجهة التجارة
- واجهة التجارة سجلات محفوظة
- واجهة التجارة الميديا والأصول
- واجهة التجارة المعالجة والمزوّدين
- CLI / MCP / Custom clients → واجهة التجارة
- المعالجة والمزوّدين → مزودو التجارة المضبوطون
اعرض مصدر الخريطة
flowchart LR
M[التاجر] --> D[لوحة الإدارة]
C[العميل] --> S[واجهة المتجر]
D --> A[خدمات التجارة]
S --> A
T[عقود التصميم المشتركة] --> D
T --> S
A --> DB[(MongoDB)]
A --> W[مهام الخلفية]
A --> F[تخزين الملفات]الـTech stack: الأدوات ودورها في المنتج
تطبيقات الويب في الملفات الحالية بتستخدم Next.js 15.5.27 وReact 18.3.1. TypeScript موجود في الواجهات والخدمات، وبيساعدنا نخلي العقود المشتركة واضحة. Tailwind CSS ومكونات مبنية على Radix بيدعموا نظام الواجهة، وdnd-kit بيدير التفاعل الهيكلي جوه محرر المتجر.
الـAPI مبني بـExpress، مع MongoDB وMongoose. اختيار قاعدة بيانات بتتعامل مع مستندات مناسب لوجود إعدادات منتجات وتصميمات متغيرة، بس الاختيار لوحده مش بيحل مشاكل التجارة. لازم يتحدد إيه اللي ينفع يتعدل، وإيه اللي بيمثل حدث حصل خلاص، وإيه اللي محتاج تنسيق بين أكتر من خطوة.
LiquidJS بيدعم مسار حزم القوالب المخصصة. Sharp وأدوات تخزين متوافقة مع S3 موجودين في شغل الميديا. تنفيذ الـAI بيستخدم SDK وprovider adapters. وفيه مشروع MCP منفصل بأدوات البناء بتاعته.
| الطبقة | الأدوات | ليه موجودة |
|---|---|---|
| الويب | Next.js وReact وTypeScript | تجربة تاجر وتجربة عميل فوق نفس منطق التجارة |
| الواجهة | Tailwind وRadix وdnd-kit | عناصر تفاعل واضحة وتحرير بالمؤشر واللمس والكيبورد |
| الخدمات | Express وMongoose | تنظيم سلوك الكتالوج والتصميم والطلبات |
| البيانات | MongoDB | تخزين السجلات والإصدارات والمهام |
| الميديا | S3-compatible storage وSharp | تخزين الملفات وتجهيز الصور |
| القوالب | LiquidJS | دعم حزم تصميم في مسار معروف |
| الاختبارات | Jest وSupertest وPlaywright وNode contracts | اختبار المنطق والبيانات والتجربة في المتصفح |
| التشغيل المحلي | Docker Compose وMongoDB وMinIO | بيئة ديمو وتطوير قابلة للتكرار |
وجود مكتبة في dependencies مش شهادة إنها شغالة في كل بيئة. عشان كده، وصف الأدوات هنا مرتبط بدورها في التنفيذ، مش قائمة أسماء للتزيين.
CHOSEN FOR THE WORK
كل أداة ليها دور.
من التفاعل على الشاشة لآخر عملية في الخلفية.
طبقة التجربة
تطبيقين ويب بيتعاملوا مع نفس تعريفات المنتج.
dnd-kit powers structured editing.
طبقة التجارة
خدمات للنطاق، حالات واضحة، وسجلات محفوظة.
Catalog · Orders · Payments · Inventory
الميديا وعرض القوالب
أصول محفوظة وطريقة مدعومة لعرض القوالب المخصصة.
S3-compatible storage · LiquidJS
التسليم والتحقق
بيئة محلية قابلة للتكرار واختبارات وأدوات نشر.
Supertest · Playwright · OpenNext support
تقنيات موثقة في المصدر. دعم النشر لا يعني اكتمال اعتماد كل بيئة.
03 / المحرر
اللي بتعاينه هو اللي بتنشره.
المعاينة لازم تكون نفس المتجر
واحدة من أصعب مشاكل أدوات التصميم إن المعاينة ممكن تبقى نظام لوحدها. التاجر يظبط الصفحة في المحرر، ينشرها، يلاقي المسافات أو ترتيب العناصر اختلف. ساعتها الأداة خسرت أهم وعد قدمته له.
في Varqio، المحرر بيدير مستند التصميم، والمعاينة بتشتغل من خلال runtime المتجر نفسه. يعني مش بنرسم نسخة تقريبية من الصفحة جوه لوحة التاجر ونحاول نخليها شبه الحقيقي. أدوات الاختيار والتحرير بتشتغل حوالين العرض الفعلي للمتجر.
فيه registry مشترك بيعرف الأقسام والبلوكات المدعومة. إعدادات التاجر ليها تعريف، والتخزين ليه شكل، والـruntime ليه طريقة عرض. لما نضيف مكون جديد، المطلوب إن السلسلة دي تكتمل. ظهور الاسم في قائمة الإضافة لوحده مش كفاية.
مثال توضيحي: نفس الـHero على اللابتوب والموبايل
التاجر عامل عنوان كبير ومسافات واسعة على الديسكتوب. على الموبايل، العنوان محتاج عرض أضيق ومساحة أقل فوق وتحت. لو عندنا قيمة واحدة لكل الأجهزة، هنفضل نضحي بتجربة عشان التانية.
عشان كده، التصميم بيدعم إعدادات حسب الجهاز مع inheritance. الموبايل يقدر ياخد القيمة الأساسية، أو يغيرها لما فيه سبب. كده عندنا مستند واحد بتفاصيل responsive، مش تلات صفحات مستقلة لازم التاجر يراجعهم كل مرة.
الميزة دي موجودة في التنفيذ وعقود العرض. قبولها على مستوى المنتج كله محتاج محتوى واقعي وأحجام شاشات مختلفة، لأن عنوان قصير في ديمو مش زي اسم منتج عربي طويل في متجر حقيقي.

الـBuilder مش مجرد سحب وإفلات
التاجر محتاج يحرّك قسم، يدخل جوه بلوك، يرجع خطوة، يلاقي شغله محفوظ، ويفهم هل اللي قدامه مسودة ولا النسخة اللي العميل شايفها. دي كلها أجزاء من نظام تحرير، مش إضافات جانبية.
استخدمنا dnd-kit في التعامل مع المؤشر واللمس والكيبورد. الترتيب والحركة بيغيروا مستند منظم. الـhistory بيميز بين عملية هيكلية، زي نقل قسم، وبين تعديلات صغيرة متقاربة، زي كتابة عنوان. ده بيخلي Undo أقرب للفعل اللي المستخدم فاكره.
الـautosave كان محتاج نفس الدقة. طلب الحفظ ممكن يتبعت، والتاجر يكمل تعديل قبل الرد. لو الرد القديم استبدل المحتوى الحالي، يبقى النظام مسح شغل أحدث وهو بيحاول يحفظ. الكود الحالي بيقبل نتيجة التطبيع من الحفظ لما المستند الحالي لسه مطابق للي اتبعت؛ غير كده بيحافظ على التعديل الجديد.
مثال توضيحي: الرد وصل متأخر
التاجر غيّر العنوان، وبعدها غيّر الوصف. رد حفظ العنوان وصل بعد تعديل الوصف. المطلوب إن الوصف الجديد يفضل موجود، وإن الحفظ يكمل عليه. استبداله بلقطة قديمة هيدي إحساس إن المحرر بيتصرف عكس المستخدم.
كمان فصلنا المسودة عن النشر. الـdraft مساحة شغل، والنسخة المنشورة snapshot ثابتة. الرجوع لتصميم قديم كمسودة مش هو نفس تغيير النسخة الحية. فيه savepoints وإصدارات تساعد على الاسترجاع، بس ده مش معناه إننا بنقدّم تحرير تعاوني لحظي أو نظام فروع مفتوح؛ دي قدرات تانية محتاجة تنفيذها وأدلتها.
اختبر الفكرة خطوة بخطوة.
الرد قديم. التعديل جديد.
- 01المسودة A بتتبعت
- 02التاجر بيعمل المسودة B
- 03A رجعت. B بتفضل.
المحرر بيبعت المستند الحالي للحفظ.
مثال TypeScript توضيحي لحماية التعديل الأحدث
// Illustrative model — not copied production code.
function acknowledgeSave<T>(
current: T,
submittedRevision: number,
currentRevision: number,
normalized: T,
): T {
// A late response must not erase a newer edit.
return currentRevision === submittedRevision
? normalized
: current;
}تخصيص فعلي من غير ما التصميم يفقد تنظيمه
التخصيص عندنا بيشمل ألوان وخطوط وقوالب وأقسام وبلوكات وميديا وتنقل وإعدادات حسب الشاشة. الهدف إن متجر منتجات منزلية يقدر يقدم نفسه بشكل مختلف عن متجر محتوى رقمي، مع استمرار نفس منطق الكتالوج والشراء.
كل ما المتجر يكبر، هيظهر محتوى بيتكرر في أكتر من مكان. شريط معلومات، جزء عن البراند، أو تركيب معين من العناصر. نسخ المحتوى يدويا بيعمل نسخ مستقلة؛ تعديل واحدة مش هيعدّل الباقي. المجموعات المتزامنة بتدي العلاقة دي شكل واضح.
وفي نفس الوقت، فيه فصل للنسخة المحلية لما محتاجة تختلف. صفحة حملة ممكن تبدأ من مجموعة مشتركة، وبعدها تحتاج صياغة أو ترتيب خاص. إعادة الاستخدام مش معناها فرض نفس النتيجة في كل مكان.
| مستوى التخصيص | قرار التاجر | تمثيله في النظام |
|---|---|---|
| الهوية | الألوان والخطوط | إعدادات وقيم تصميم |
| الهيكل | ترتيب الأقسام والبلوكات | مستند بإصدارات |
| المحتوى | النصوص والصور والمنتجات | إعدادات ومراجع منظمة |
| الشاشات | العرض والمسافات والظهور | قيم موروثة وتعديلات لكل جهاز |
| إعادة الاستخدام | جزء مشترك أو نسخة مستقلة | مجموعة متزامنة أو نسخة منفصلة |
| النشر | نكمّل تعديل ولا ننشر | مسودة وإصدار منشور |
حزم القوالب المخصصة ليها مسارها، والأقسام الأصلية ليها مسارها. وجودهم مش وعد إن أي إضافة خارجية تقدر تشتغل بأي شكل جوه أي مكان. نطاق الميزة لازم يفضل مفهوم للتاجر وللفريق اللي هيطوّرها بعد كده.
ONE STOREFRONT RUNTIME
04 / الكتالوج
أكتر من اسم وسعر.
الكتالوج: بيانات تخدم العرض والتشغيل مع بعض
منتج فعلي ممكن يبقى له ألوان ومقاسات ومخزون ووزن. منتج رقمي ممكن يبقى له طريقة تسليم ومكتبة عند العميل. الاتنين محتاجين سعر ووصف وحالة نشر، بس مش محتاجين نفس رحلة التنفيذ.
بنينا النموذج عشان يعبّر عن الاختلاف ده، ومعاه تصنيفات ومجموعات وحقول مخصصة. الحقل المكتوب بنوع واضح ينفع يتعرض ويتراجع ويتعامل معاه النظام بشكل أفضل من ملاحظة عشوائية متخزنة كنص وخلاص.
الاستيراد والتصدير كمان ليهم lifecycle. لما التاجر يرفع كمية منتجات، المتصفح مش المفروض يبقى هو الضامن إن العملية تكمل. وجود jobs وحالات ونتائج بيدي الشغل الطويل مكانه الطبيعي، وبيخلي الفشل الجزئي قابل للفهم بدل ما يبقى مجرد رسالة غامضة.
مثال توضيحي: المنتج اتغير بعد ما اتباع
العميل اشترى بسعر معين ووصف معين. التاجر عدّل المنتج بعدها. الطلب القديم لازم يفضل بيمثل اللي اتفق عليه وقت الشراء. عشان كده فيه فرق بين بيانات الكتالوج الحالية ولقطة البيانات داخل الطلب.
المبدأ ده مهم في الدعم والتقارير والمراجعة. لو كل حاجة بترجع لنسخة المنتج الحالية، يبقى تاريخ الطلب بيتغير من غير ما حد يعدّل الطلب نفسه. الفصل بين الكيان الحالي والحدث التاريخي بيحافظ على معنى العملية.
نفس الكتالوج. مظهرين حقيقيين.

05 / المعاملة
كل عملية ليها حالتها.
الطلب والدفع: حالات واضحة بدل نجاح شكلي
رحلة الشراء بتجمع سلة وسعر ومخزون وعرض وتوصيل ونتيجة دفع. أي خطوة ممكن تتأخر، والمتصفح ممكن يتقفل، والمزود ممكن يبعت نفس النتيجة أكتر من مرة. النظام لازم يبقى عارف هو واقف فين حتى لو المستخدم مش فاتح الصفحة.
التنفيذ فيه checkout sessions ومحاولات دفع وأحداث من المزود وحالات للطلب وشغل للمخزون والتجهيز. المبلغ بيتخزن بوحدة العملة الصغرى ومعاه العملة، مش كرقم عشري شكل عرضه هو اللي بيحدد معناه.
الـworkers بتكمل بعض الشغل بعيد عن عمر request المتصفح. ده يسمح بمتابعة العملية واسترجاع الشغل اللي اتقطع حسب قواعده، بدل ما نجاح الطلب يتوقف على إن نفس الاتصال يفضل مفتوح.
مثال توضيحي: نتيجة الدفع اتبعتت مرتين
المزود بعت النتيجة، النظام تعامل معاها، بس رد الاستلام ماوصلش للمزود. فبعتها تاني. هنا تكرار الرسالة مش معناه عملية شراء جديدة. لازم النتيجة التجارية تفضل واحدة.
شغل Kashier الظاهر في commit سبتمبر امتد للـconnector والدفع والفواتير والأحداث والواجهة. ده بيوضح إن التكامل مش زرار بيتضاف في checkout. هو مجموعة علاقات لازم تتفق على نفس النتيجة.
الاختبارات المحلية بتثبت سلوك التنفيذ في ظروفها. اعتماد رحلة دفع أو استرجاع فعلية عند المزود محتاج بيئة اختبار ونتائج فعلية منه. عشان كده مش بنقدّم نجاح simulation باعتباره اعتماد كامل لخدمة خارجية.
آخر استخدام للخصم: مشكلة صغيرة في الشكل، كبيرة في المنطق
من المشاكل الموثقة في اختبارات أكتوبر إن عرض محدود باستخدام واحد كان ممكن يستقبل أكتر من حجز ناجح تحت التزامن. المشكلة ظهرت لما قرار التخصيص اتبنى على قراءات بتحصل في لحظات مختلفة.
التصحيح ربط المكان المرشح للحجز بحد السعة الفعلي، مع الحفاظ على التعامل المحدود مع التعارض، وإعادة نفس نتيجة المحاولة، وإعادة استخدام السعة اللي اتحررت. الفكرة المهمة إن صحة كل كتابة منفردة مش كفاية لإثبات صحة الحد التجاري كله.
مثال توضيحي: ١٢ محاولة وخصم واحد
عندنا ١٢ checkout مختلفين بيتنافسوا على استخدام واحد. المقبول إن السعة المسموحة بس هي اللي تتخصص. إعادة نفس المحاولة لازم تلاقي نتيجتها، والحجز المتحرر ينفع يرجع حسب القواعد، وتقليل الحد ماينفعش يرجّع مكان قديم خارج السعة للمنافسة.
دي مواصفات أقوى من جملة «الكوبون بيشتغل». هي بتوصف اللي هيحصل مع التزامن والتكرار وتغير الإعدادات. المثال متصل باختبار MongoDB مؤقت موثق، مش قصة حادثة إنتاج بنضيفها للدراسة عشان تبان مثيرة.
المخزون والتنفيذ: كل رقم له معنى
الموجود في المخزن مش هو المحجوز، والمُتاح للبيع مش هو اللي اتخصص للتجهيز. خلط الأرقام دي بيدي شاشة بسيطة، لكنه بيصعب تشغيل التجارة.
الكود فيه مواقع مخزون، حجوزات، تعديلات، خدمات للتوزيع والتوازن، والتعامل مع مخزون الطلب المدفوع. وفيه خدمات تجهيز بتربط الطلب التجاري بالشغل المطلوب عشان يخرج للعميل.
ده معناه إن «اتدفع» و«اتجهّز» و«اتشحن» مش نفس الحالة. التاجر محتاج يشوف كل واحدة ومعناها. لو الطلب مدفوع ولسه محتاج تخصيص قطعة أو تجهيز شحنة، الواجهة لازم توضّح الشغل المتبقي بدل ما تخبيه ورا علامة نجاح واحدة.
في التوصيل المحلي، المنطقة والاختيارات المتاحة وطريقة الدفع جزء من القرار. الـconnectors بترجم مفاهيم المنصة لمتطلبات المزود. بس تنفيذ الربط مش بديل عن اختبار الرحلة الفعلية مع المزود، وده لسه جزء من بوابات التأهيل.
03 / WORDS THAT CHANGE THE WORK
كل حالة ليها معنى.
- 01الموجود
- الوحدات الموجودة فعليًا في موقع.
- 02المحجوز
- مخزون مخصص لالتزام قائم.
- 03المتاح
- المخزون اللي لسه ممكن يتعرض للبيع.
- 04التنفيذ
- الشغل المتبقي للتجهيز والتسليم.

06 / التجربة
متصمم للي بيعمل الشغل.
Varq AI: مساعد جوه رحلة الشغل
قيمة المساعد مش إنه يطلع نص طويل. قيمته إنه يفهم الجزء اللي التاجر شغال عليه، ويقترح تغيير واضح ينفع يتراجع ويتطبق. التنفيذ الحالي فيه محادثات، streaming، أدوات مرتبطة بالسياق، اقتراحات منظمة، ومتابعة للاستخدام.
في محرر المتجر، اقتراح المساعد بيوصل لنفس مستند التصميم اللي التاجر بيعدّله بإيده. ده يمنع ظهور طريقتين مختلفتين لبناء نفس الميزة: واحدة للواجهة وواحدة للـAI.
كمان فيه دورة لاستخدام الرصيد: حجز قبل التنفيذ وتسوية بعده، مع التعامل مع النتيجة غير المؤكدة. انقطاع stream مش كفاية عشان نقول إن مفيش تكلفة، وبداية الطلب مش كفاية عشان نقول إنه اكتمل كله.
مثال توضيحي: الاقتراح بقى قديم
المساعد اقترح تعديل قسم، والتاجر عدّله قبل تطبيق الاقتراح. تطبيق النسخة القديمة من غير مراجعة هيضيع القرار الأحدث. عشان كده مراجعة الإصدار الحالي جزء من فهم العملية نفسها، زي ما شفنا في الـautosave.
وجود الشغل ده في الكود مش معناه إننا قسنا جودة كل موديل أو زمن استجابة كل مزود أو وفّرنا نسبة محددة من وقت التاجر. القياسات دي محتاجة تقييم فعلي، ومش هنستبدلها بأرقام تسويقية.
العربي والموبايل جزء من تصميم المنتج
الترجمة مهمة، بس لو اسم المنتج العربي طويل وخرج بره الصف، التجربة لسه مش مكتملة. ولو الأرقام والـSKU اتقلب ترتيبهم جوه النص، المستخدم هيتعب حتى لو كل الكلمات مترجمة صح.
راجعنا في تصميم التجربة فكرة اتجاه الكتابة، والمحتوى المختلط، والمساحات، والتنقل، والحوارات، وعرض الحالات. لوحة التاجر فيها light وdark، لكن هوية المتجر ليها إعداداتها المستقلة. تغيير شكل لوحة التاجر مش المفروض يغير البراند اللي العميل بيشوفه.
والمحرر له تصميم Studio مستقل عن بعض إعدادات لوحة التاجر. عشان كده توثيق الصور بيذكر الشكل اللي ظهر فعلا، من غير ما نفترض إن كل شاشة ليها نفس اختيارات المظهر.
صور الدراسة مأخوذة من بيئة ديمو محلية وبيانات صناعية. كل صورة ليها اسم شاشة وحجم وموضع مقترح في المقال. ده بيساعد القارئ يفهم اللي قدامه، ويساعد فريق الموقع يستخدم الأصول من غير ما ينسب بيانات الديمو لعملاء حقيقيين.

تفاصيل محلية. مساحة مناسبة.
العربي والإنجليزي والأسعار بالجنيه جزء من تجربة المنتج. الشاشة الفعلية بتوضح الكتالوج في مساحة أصغر.
الكتالوج / موبايل · واجهة فعلية، بيانات عرض خيالية
07 / النسخة التجريبية
منتج حقيقي. وخطوة جاية واضحة.
قصة التطوير اللي الـcommits بتثبتها
التاريخ الموجود في Git بيدينا نقاط واضحة، من غير ما نخترع مواعيد سبرنتات أو حجم فريق أو مواقف حصلت في ميتنجات.
| التاريخ | المرحلة المسجلة | معناها في القصة |
|---|---|---|
| ١٧ و١٨ أغسطس ٢٠٢٦ | baseline منظم وتشغيل محلي | تأسيس نقطة شغل قابلة للتكرار |
| ٨ سبتمبر | تجميع المنصة في monorepo | تنسيق التطبيقات في مستودع واحد |
| ١٠ سبتمبر | دمج Kashier والدفع والفواتير | التكامل وصل لأكتر من شاشة وخدمة |
| ١٥ سبتمبر | تصحيح OpenNext tracing | تجهيز النشر كان محتاج فهم جذور الحزم |
| ١٦ سبتمبر | شغل الدومينات والعمال والتسعير | متابعة التشغيل والمنطق التجاري جنب الواجهة |
| بعد آخر commit | builder مشترك وresponsive groups وVarq AI | شغل موجود في الـworking tree، مش منسوب لتاريخ commit أقدم |
مشكلة الـtracing مثال على شغل مش بيبان في screenshot. التطبيق ممكن يفتح في التطوير، لكن أداة التغليف تجمع الملفات من جذر غلط. التصحيح المسجل ظبط إعدادات التطبيقات والتوثيق المرتبط بيها. ده دليل على تعديل محدد، مش شهادة إن كل مسارات النشر خلصت.
شغل الدومينات كمان بيوضح إن اسم النطاق ودرجة جاهزيته وارتباطه بالخطة التجارية مش سؤال واحد. الفصل بينهم بيخلّي الواجهة أصدق في وصف اللي ناقص بدل زرار «متصل» بيختصر حالات مختلفة.
كل ادعاء له نوع دليل مناسب
الـbuild بيقول إن الكود اتبنى. اختبار المنطق بيقول إن سلوك معين نجح في شروط معينة. اختبار متصفح بيقول إن رحلة حصلت فعلا في الواجهة. اختبار مزود بيقول إن الطرف الخارجي رد بالنتيجة المتوقعة. مش بنستخدم واحد مكان التاني.
بالنسبة للمحرر، المهم إن المستند يتحفظ ويتعرض بنفس المعنى في المعاينة والمتجر. بالنسبة للعروض، المهم إن التزامن يحترم السعة. بالنسبة للعمليات الطويلة، المهم إن الانقطاع والتكرار ليهم نتيجة مفهومة.
التقارير التاريخية فيها اختبارات محلية كتير، لكن جمع أرقامها مش هيطلع شهادة جديدة للنسخة الحالية. عدد الصفحات مش عدد الرحلات المقبولة، وصورة شاشة ناجحة مش دليل إن حالة الخطأ أو التحميل اتجربت.
في الدراسة دي بنعرض تنفيذ واسع ومترابط، ومعاه حدود الأدلة. اللي لسه محتاج قبول شامل أو اختبار مزود فعلي متسجل كخطوة جاية، مش مستخبي ورا وصف «جاهز بالكامل».
النتيجة اللي نقدر نتكلم عنها بثقة
Varqio بتجمع تصميم المنتج مع هندسة التجارة. عندنا واجهات للتاجر والعميل، وبينهم علاقات واضحة: المنتج بالشراء، المسودة بالنشر، نتيجة الدفع بالطلب، المخزون بالتجهيز، والمساعد بنفس مستند التحرير.
خصصنا التجربة في الحاجات اللي التاجر بيتعامل معاها كل يوم: تنظيم المنتجات، شكل المتجر، مراجعة التغييرات، متابعة التشغيل، والانتقال بين العربي والإنجليزي. واشتغلنا على مشاكل أقل ظهورا، زي الردود المتأخرة، الأحداث المتكررة، تعارض الإصدارات، والتغليف للنشر.
المرحلة الجاية هي استكمال أدلة التأهيل لتجربة تجار محدودة. مش محتاجين نخترع أرقام نمو عشان نحكي قصة هندسية قوية. التنفيذ والقرارات والأمثلة الواضحة بيقدموا صورة أدق عن الشغل.
لو بتبني منتج تجارة فيه التعقيد ده، Softworks تقدر تساعدك تربط رحلة المستخدم بتصميم الواجهة والخدمات والبيانات. البداية عندنا بتكون من العملية اللي لازم تنجح، وبعدها بنبني النظام اللي يخلي أجزائها متفقة.
أسئلة بتوضح نطاق المنتج
Varqio منصة تجارة ولا أداة تصميم مواقع؟
منصة تجارة جواها أداة لبناء واجهة المتجر. الكتالوج والشراء والطلبات بيمثلوا السلوك التجاري، والقالب بيعبّر عن هوية التاجر.
المعاينة بتختلف عن المتجر المنشور؟
القرار المعماري هو استخدام runtime المتجر نفسه في المعاينة، مع مستندات وإصدارات منظمة. ده بيقلل أسباب الاختلاف وبيخلي الاتفاق بينهم قابل للاختبار.
كل الميزات متفعلة لكل التجار؟
لأ. فيه فرق بين وجود تنفيذ، وتمكين الميزة، وقبول مزود خارجي، وتأهيل المنتج للإطلاق. الدراسة بتحافظ على الفروق دي.
الأمثلة دي حصلت لعملاء فعلا؟
هي مواقف توضيحية مبنية على سلوك الكود والاختبارات. مثال تنافس الخصم مرتبط بمشكلة موثقة محليا. باقي الأمثلة بتشرح القرار الهندسي من غير ادعاء حادثة إنتاج.
الصور فيها بيانات حقيقية؟
الصور المرفقة للديمو المحلي، وبياناتها صناعية. الهدف شرح الواجهة، مش عرض نشاط تجاري حقيقي.
08 / داخل المنتج
شوف التفاصيل بنفسك.
الكتالوج والمخزون، على الموبايل والديسكتوب. افتح الشاشات واستكشف التفاصيل.
أربع شاشات فعلية من بيئة محلية، ببيانات خيالية. افتح أي شاشة للتكبير.
4 شاشة
Webالكتالوج / فاتح
واجهة فعلية ببيانات Nile Atelier التجريبية. الأرقام ليست نتائج تجارية.
Webالكتالوج / داكن
واجهة فعلية ببيانات Nile Atelier التجريبية. الأرقام ليست نتائج تجارية.
Webالمخزون / داكن
واجهة فعلية ببيانات Nile Atelier التجريبية. الأرقام ليست نتائج تجارية.
موبايلالكتالوج / موبايل
واجهة فعلية ببيانات Nile Atelier التجريبية. الأرقام ليست نتائج تجارية.
