منتج مملوك بالكامل لـ Softworksالزيارة كلها.
شغالة مع بعض.
من صورة العميل اللي حافظها، لجدول الفريق والقرارات عند مكتب الاستقبال. صممنا وبنينا Salony عشان يربط تفاصيل الزيارة في منتج واحد.
جوه الحكاية17 دقيقة


- العلاقة
- منتج Softworks
- لمن
- العميل وفريق الصالون
- الواجهات
- موبايل، ويب، وتشغيل
- السياق
- مصر · عربي وإنجليزي
الزيارة الكويسة بتبدأ قبل الكرسي.
العميل بيختار شكل. الصالون بيدير يوم. نفس الزيارة بتجمع الاتنين.

من فريق Softworks، بالمصري، ومعانا شوية إفيهات على قد الشغل.
فيه جملة بتتبان سهلة جدًا: «نعمل أبليكيشن يحجز عند الحلاق».
تمام. العميل يختار يوم وساعة، يضغط زرار، ونروح نشرب حاجة.
بعدها تكتشف إن الخدمة دي محتاجة متخصص معين، والمتخصص إجازة، والكرسي عليه عميل، والعميل الجديد معاه صورة، والدفع لسه بيتراجع، والواجهة العربي قررت توسع الصفحة سنة ناحية اليمين.
أهلًا بيك في تطوير تطبيق حجز صالونات بجد. دي حكاية Salony: إزاي ربطنا اكتشاف الصالونات والحجز والإلهام بتشغيل المكان، وإزاي حاولنا نخلي اللي بيحصل ورا الشاشة مفهوم للي قدامها.
دي واجهة التطبيق فعلًا من لقطة موجودة بتستخدم بيانات ديمو. النجوم والأسعار اللي في الصورة مش أرقام نجاح بنبيعها في دراسة الحالة.
اتفاق صغير قبل الحكاية: المواقف اللي فيها عملاء ومواعيد أمثلة توضيحية مبنية على الكود، مش محاضر أحداث حصلت لعملاء حقيقيين. الأعطال الموثقة هنسميها كده. الميم تعليق على الموقف؛ المعلومة التقنية تحته تفضل دقيقة. ولو القراءة رسمية النهارده، النسخة المهنية جاهزة.
الأول، إحنا بنبني إيه؟
Salony فيه تطبيق عميل، وموقع عام، ولوحة للصالون، وإدارة للمنصة. العميل بيشوف المكان والخدمات والمواعيد والصور، والصالون بينظم اليوم اللي هيستقبل فيه العميل ده.
الشغل الحقيقي في التوصيلة بينهم. اللي العميل اختاره لازم يوصل كطلب مفهوم. واللي الصالون يقدر ينفذه لازم يبقى هو اللي بنعرضه. مينفعش الشاشة تبقى متحمسة أكتر من الجدول.
الموقع بيقدم المنتج وبيساعد الناس تكتشف الصالونات وأفكار اللوك. الحجز والدفع للعميل مكملين في التطبيق. ولوحة الويب بتخدم الفريق اللي عنده شغل استقبال وخدمات ومواعيد وأعمال ينشرها.
التجربة بالعربي والإنجليزي، وفيها وضع داكن وفاتح. سياق التشغيل الحالي مصر، بالجنيه المصري وتوقيت القاهرة. ده سياق المنتج اللي راجعناه، مش إعلان إن عندنا فروع حقيقية في كل منطقة بتظهر في الديمو.
العميل داخل بصورة، مش داخل يمتحن في الـ database
سيناريو توضيحي: عميلة عندها مناسبة، حافظت صورة، وعايزة نفس الاتجاه بس بطول مختلف. فتحت Salony، اختارت صالون وخدمة ومتخصصة ومعاد، وكتبت ملاحظة.
هي مش مطالبة تعرف الصورة جاية منين في النظام، ولا بيانات الفرع متخزنة إزاي. المطلوب إنها تفهم اختياراتها، والصالون يستقبل المعلومات اللي تساعده يجهز.
فرتبنا الرحلة حوالين قرارها: تتفرج، تختار، تراجع الإتاحة، تضيف المرجع لو حابة، تبعت الطلب، وتعرف هو واقف عند إيه.
الصورة هنا بتقول «ده الاتجاه اللي في دماغي». مش بتقول «دي خدمة اسمها نفس الصورة وسعرها معروف ونتيجتها مضمونة». الفرق ده لو ضاع من الكلام، هيظهر في أول محادثة جوه الصالون.
من شغلنا كمهندسين إننا نخلي التفاصيل تبان في اللحظة المناسبة. مش كل حاجة تتحط في أول شاشة، ومش كل حاجة تتدفن لحد ما المستخدم يتفاجئ بيها.
منتج واحد. كذا وجهة نظر.
واجهة المنتج وخدمات المجال
الجدولة ودورة الزيارة ونسخ المراجع ونشر الأعمال ومسارات الدفع والتواصل.
Cloudflare Workers + OpenNext: استضافة النسخة الحالية، مع MongoDB كقاعدة بيانات.
الواجهات
حجز من التطبيق. تشغيل من الويب.
القواعد المشتركة
عقود واضحة. مدخلات متحقق منها.
السياق المحفوظ
سجلات الزيارة. معالجة الصور.
طبقة التشغيل
Cloudflare Workers + OpenNext. Vitest + Playwright.
الوسائط والإلهامAWS S3 Pexelsملفات الصالون وصور المصدر في مسارين منفصلين.
طب افتح الكبوت: الـ stack عامل إزاي؟
عندنا مستودع واحد فيه الموبايل والويب. الموبايل Expo وReact Native، والويب Next.js. قواعد المنتج موجودة في خدمات على السيرفر، والبيانات في MongoDB مع Mongoose.
| الحاجة | الموجود في الكود وقت المراجعة |
|---|---|
| الموبايل | Expo ~57.0.30، React Native 0.86.3 |
| الواجهة | React 19.2.3 |
| التنقل | React Navigation 6 |
| الويب | Next.js 16.3.8 |
| اللغة | TypeScript |
| البيانات | MongoDB وMongoose |
| الصور | AWS S3 وSharp وPexels للإلهام |
| الستايل والنماذج | Tailwind وCSS modules وReact Hook Form وZod |
| العربي | i18next/react-i18next للموبايل، ومحتوى ويب ثنائي اللغة |
| الاستضافة | Cloudflare Workers مع OpenNext |
| الاختبارات | Vitest وPlaywright وفحوص TypeScript |
في الاستضافة، سيرفر Next شغال جوه Durable Object علشان سياق اتصال Mongoose يفضل متسق. بيانات المنتج فضلت في MongoDB. اختيار المنصة السحابية ما عملش قاعدة البيانات نوع تاني بالسحر.
دي أسماء تقنيات ليها أدوار، مش زينة تحت صورة اللابتوب. ومش معنى إن التقنية موجودة إن أي ادعاء عن الأداء أو الحجم بقى مثبت. القدرة الفعلية محتاجة قياس مناسب.
الموعد الفاضي قرار نظام كامل.
ميعاد الصالون يقدر يقدمه فعلًا.
الخدمة والمتخصص والكرسي متاحين طول الفترة. وعند الإرسال بنتحقق من الحالة الحالية كمان.
المشهد الأول: الصالون فاتح، والموعد عامل نفسه مش موجود
سيناريو توضيحي: الساعة عشرة، والمكان فاتح. العميل اختار خدمة مدتها طويلة، والمتخصص اللي بيعملها بيبدأ حداشر. وفيه كرسي مناسب واحد مشغول لحد عشرة ونص.
لو الحساب عندنا «فاتح = احجز»، يبقى إحنا حجزنا على النية.
الإتاحة عندنا بتراجع الخدمات ومدتها، والمتخصص وجدوله، والاستثناءات، والأوقات المحجوبة، والحجوزات الحالية، والموارد المتاحة. فيه كمان فاصل قريب من الوقت الحالي علشان الميعاد اللي بعد دقيقتين ما يبقاش وعد غريب.
مدة الخدمة ممكن تختلف حسب المتخصص. ومجموعة خدمات ورا بعض بتاخد مساحة أكبر في الجدول. فالمعاد اللي ينفع لقص الشعر مش بالضرورة ينفع لنفس العميل لو ضاف خدمة تانية.
العلامة اللي بتظهر في الاكتشاف جاية من حساب المواعيد. ولو الحساب ما قدرش يجيب إجابة موثوقة، بنعرض إن الإتاحة غير معروفة. «مش عارفين دلوقتي» أدق من ضوء أخضر واثق زيادة عن اللزوم.
التوقيت نفسه له أساس واحد: القاهرة. بنستخدم Africa/Cairo بدل فرق ساعات ثابت، علشان حساب اليوم والساعة يبقى مفهوم. دعم العالم كله بتوقيت مختلف لكل فرع مش جملة هنرميها وخلاص.
الخلاصة الهندسية للمشهد: لازم الخدمة والمتخصص والوقت والمورد يركبوا على بعض. بقاء الكرسي فاضي جزء من المعاد، حتى لو الكرسي نفسه ما عندوش حساب على التطبيق.
المشهد التاني: ومعانا طلب جديد لنفس الساعة
في «مرجان أحمد مرجان» فيه الإفيه المعروف: «ومعانا الأخ مرجان». هنا بنستعير روح التقديم بس: معانا طلب تاني داخل على نفس المعاد. مصدر الإفيه وسياقه.
سيناريو توضيحي: اتنين شافوا العشرة فاضية. واحد ضغط تأكيد، والتاني ضغط بعده بثانية. الاتنين مقتنعين إن الشاشة قالت تمام.
الشاشة قالت إن الوقت كان متاح لما اتعرض. لحظة إنشاء الحجز ليها حساب تاني. بنراجع الإتاحة وقت الطلب، وبنستخدم سجلات لحجز الفترة المطلوبة. لو فيه عملية سبقت، الطلب التاني يقدر ياخد رد واضح إن الوقت مبقاش متاح.
المشكلة بتزيد لما حد يغير معاده. مش هنسيب الوقت القديم، وبعدين نجرب الجديد، وبعدين نقول له «هو الاتنين راحوا». مسار النقل بيحافظ على القديم وهو بيحاول يجهز الجديد، وبيتعامل مع الوقت المتداخل قبل ما يكمل العملية.
ده نوع التفاصيل اللي ما بتظهرش في فيديو الإعلان، لكن بتظهر جدًا لما مستخدم يعمل نفس الحاجة مرتين والنت متردد. ضغط الزر مش هو النتيجة؛ النتيجة هي اللي العملية أثبتتها.
كل حالة لازم يكون ليها معنى.
إرسال مرجع التحويل بيوفر بيانات للمراجعة. مش معناه إن الدفع اتقبل أو الفرع وافق.
المشهد التالت: صفحة الدفع رجعت، محدش يزغرد لسه
سيناريو توضيحي: العميل خلّص خطوة عند مزود الدفع، أو بعت مرجع تحويل. هل كده الزيارة اتأكدت؟ حسب الحالة اللي النظام وصل لها فعلًا.
عندنا فرق بين الدفع والحجز. ممكن الدفع لسه بيتراجع، والفرع لسه محتاج يوافق. وبعد التأكيد فيه وصول وبدء خدمة واكتمال. كل مرحلة محتاجة كلام يناسبها.
دي منطقة مينفعش فيها زرار أخضر يختصر القصة كلها. لو العميل مستني مراجعة، لازم يعرف إنه مستني مراجعة. ولو الطلب وصل للفرع، ده له معنى غير اكتمال الدفع أو اكتمال الخدمة.
صورة رد فعل لعادل إمام كما نشرها المصري اليوم. بنستخدمها كتعليق عام؛ مش بننسبها لمشهد مرجان أو لفيلم محدد.
في الكود تكامل للبطاقة ومسارات لمراجعة التحويلات. وجودها مش شهادة إن كل مزود وكل جهاز وكل وسيلة دفع اتجربوا في ظروف حقيقية كاملة. دليل الاختبار لازم يقول هو جرب إيه بالضبط.
ونفس الاحترام للحقيقة مطلوب في الفلوس. سعر الخدمة حاجة، ورسوم المنصة حاجة، والتعامل مع الخصم أو النقاط حاجة تالتة. في النسخة اللي راجعناها، حساب عمولة Salony والرسوم الإضافية لمعالجة الدفع صفر. صفحة بتشرح خطة أسعار مستقبلية مش هي اللي بتشغل التحصيل.
علشان كده شيلنا من مجموعة الصور المختارة لقطات ديمو قديمة فيها رسوم مختلفة. الميم مسموح له يبالغ في رد الفعل؛ جدول الأسعار لأ.
السياق يفضل، حتى لما حاجات تتغير.
الإلهام
الصورة والمصدر ونسبة العمل لصاحبه.
السياق المحفوظ
نسخة المرجع مرتبطة بالزيارة.
- الصورة والمصدر
- محفوظين
- ملاحظة العميل
- احتفظ بالشكل والطول.
تعديل الملاحظة بيحتفظ بالصورة والمصدر المحفوظين، من غير الرجوع لمزوّد الصور. الحذف اختيار صريح ومنفصل.
المشهد الرابع: المرجع اتغير في الكتالوج، العميل ما غيّرش رأيه
سيناريو توضيحي: العميل أضاف صورة، وبعدها دخل يكتب «سيب الطول أطول شوية». في اللحظة دي، مصدر الصور قرر ياخد بريك.
مش منطقي تعديل سطر يتوقف لأننا لازم نجيب نفس الصورة من أول وجديد. احتفظنا ببيانات المرجع وقت اختياره: صورته، وعنوانه، وتصنيفه، والمصدر المتاح، والملاحظة.
المسار الحالي بيسمح لحد تلات صور، ولكل واحدة ملاحظة محدودة. عند تعديل مرجع موجود، بنستخدم النسخة المحفوظة. المرجع الجديد اللي مبقاش متاح له رد واضح وخيار إزالة أو استبدال.
لقطة ديمو موجودة من 13 أكتوبر. اسم المصور موجود، وملاحظة العميل جزء من سياق الزيارة.
فيه تفصيلة تانية صغيرة في الشكل وكبيرة في الأثر: لو الطلب ما قالش أي حاجة عن الصور، ده مش معناه «امسح الصور». الإزالة لازم تبقى مقصودة. كده تعديل الملاحظة ما يعملش مفاجأة للعميل ولا للصالون.
باللغة التقنية، إحنا بنحافظ على snapshot للسياق. بالمصري، بنحافظ على «إحنا كنا متفقين على إيه» حتى لو الكتالوج كمل حياته واتغير.
// Illustrative contract, not extracted production source.
type ReferenceSnapshot = {
imageId: string;
imageUrl: string;
title: string;
credit?: string;
note: string;
};
type ReferenceEdit =
| { kind: "keep" }
| { kind: "remove-all" }
| { kind: "update-note"; imageId: string; note: string };
function applyReferenceEdit(
saved: ReferenceSnapshot[],
edit: ReferenceEdit,
): ReferenceSnapshot[] {
if (edit.kind === "keep") return saved;
if (edit.kind === "remove-all") return [];
// Editing a note preserves the original image and credit.
return saved.map(reference =>
reference.imageId === edit.imageId
? { ...reference, note: edit.note }
: reference,
);
}مثال تعليمي يوضح الفرق بين عدم التغيير والحذف وتعديل الملاحظة؛ مش كود من مصدر المنتج.
الصورة الصح. في سياقها الصح.
المشهد الخامس: الصورة التانية بقت الأولى، والاسم راح فين؟
سيناريو توضيحي: صاحب الصالون رفع تلات صور، خفى واحدة، ونسب واحدة لمتخصص، وبعدها بدّل ترتيبهم.
لو الإعدادات مربوطة بمكان الصورة، أول ما الترتيب يتغير هتلاقي الإخفاء بقى عند صورة تانية. واسم المتخصص ممكن يظهر تحت شغل مش المقصود. القائمة اتجمّلت، والبيانات اتلخبطت.
ربطنا إعدادات كل صورة بعنوانها في النموذج الحالي. ترتيب الصور يتغير، والإعدادات تتحرك معاها. واللوك كله ممكن يختفي من العرض مع الاحتفاظ بإعدادات صوره.
التمثيل اللي بيظهر للعميل بيستبعد الصور المخفية والأعمال غير المنشورة. لو كل الصور مخفية، مفيش داعي لكارت فاضي عامل نفسه معرض. واسم المتخصص اختياري وبيتغير مع الصورة اللي المستخدم واقف عليها.
محتوى اختبار لشرح النشر ونسبة الصور، مش أعمال حقيقية منسوبة للصالون.
حافظنا كمان على قائمة الصور القديمة علشان العملاء الأقدم يفضلوا فاهمين البيانات. المعلومات الجديدة اتضافت بشكل يسمح بالتطور من غير حفلة «يا جماعة لازم كله يحدث دلوقتي وإلا الدنيا تقف».
المشهد السادس: صورة جميلة، بس ما تعرفش اسم الشامبو
صورة الشعر ممكن تلهمك. لكنها ما تقدرش لوحدها تقول نوع المنتج، ولا مدة التنفيذ، ولا سعر الخدمة، ولا إن اللوك مناسب لكل شخص.
خلينا صور الإلهام واضحة كمصدر إلهام، ومعرض شغل الصالون واضح كمعرض شغل. المصدر والمصور ليهم مكان، والمعلومة اللي مش موجودة ما نخترعهاش علشان الصفحة تبان مليانة.
البحث فيه تصنيفات وكلمات مناسبة، وفلاتر، وصفحات نتايج، وإزالة للتكرار. الرابط يحتفظ بحالة الفلتر، والرجوع في المتصفح يسترجعها. المستخدم مش المفروض يعمل نفس الاختيارات تاني كل ما يفتح صورة ويرجع.
على الموبايل، تغيير الفلاتر جوه القائمة بيكون مسودة لحد التطبيق. قفل القائمة معناه إلغاء المسودة، مش تشغيل طلبات جديدة على كل حركة صباع.
وراء الكواليس، فيه cache محدود للردود الناجحة، ومدته الحالية ست ساعات داخل النسخة التشغيلية. الطلبات المتطابقة اللي شغالة بالفعل تقدر تشترك في نفس النتيجة المنتظرة. لو المصدر رجع خطأ، ما بنحتفظش بالخطأ باعتباره المحتوى الطبيعي الجديد.
حافظنا كمان على صيغة الصور الأصلية. صورة PNG ما تستاهلش تتكسر لأننا قررنا كل الصور تبقى JPEG من دماغنا. الصور لها مقاسات مناسبة للكروت والتفاصيل، ومصدرها يفضل واضح.
صور إلهام من مزود خارجي. الكود بيتعامل مع الموجود في البيانات؛ ما بيحوّلش الصورة لوصفة تنفيذ من عنده.
متصمم عشان يتقري في الاتجاهين.
شاشات فعلية متطابقة من نفس مجموعة اللقطات. جرّب اللغة والمظهر؛ الصور الأصلية بتفضل زي ما هي.
لقطات 17 أكتوبر 2026 · بيانات تجريبيةالمشهد السابع: العربي مش الإنجليزي بس واقف الناحية التانية
في «كده رضا» عندنا السؤال المختصر «ليه يا عصام؟». وده مناسب كتعبير عن لحظة اكتشاف إن صفحة العربي بقت أعرض من الموبايل. مرجع الإفيه.
وده مش مجرد سيناريو متخيل: تقرير الستايلات سجل مشكلة overflow في معرض أفقي مع بيانات نسب صور مخفية في RTL. العنصر ممكن ما يبانش، لكنه لسه يأثر على العرض. اتصلح التخطيط واتراجع بعد التصحيح.
العربي محتاج ترتيب قراءة ومحاذاة ومساحة للنص، ومعاملة مناسبة للأرقام والكلمات الإنجليزية. استخدمنا Cairo للعربي وManrope للإنجليزي داخل نفس عيلة التصميم.
الوضع الداكن والفاتح ليهم ألوان وأدوار واضحة. وتبديلهم مش سبب إن نموذج المستخدم يبدأ من الصفر. لو حد كتب بيانات طلب انضمام وبعدين غير الثيم، اللي كتبه يفضل معاه.
نسختين من نفس واجهة الديمو. الثيم اتغير؛ المطلوب من المستخدم ما اتغيرش.
وفيه تفاصيل تفاعل بتفرق: قفل قائمة يرجع التركيز لمكانه، وفتح صورة يبقى له خروج واضح، والنص الطويل ما يتحولش لحروف أصغر علشان ننجو من المشكلة. تقرير المتصفح يثبت اللي اتجرب في المتصفح؛ اختبار جهاز وتقنيات إتاحة حقيقية يفضل نوع تاني من الدليل.
مبني على الشغل اللي ورا النتيجة.
الحتة اللي اتفصلت على شغل الصالون
التخصيص عندنا في القواعد قبل الألوان. الفرع له خدمات وجدول، والمتخصص له مدة تنفيذ، والكراسي والموارد ليها أثر على الإتاحة. موظف الاستقبال محتاج يتعامل مع اليوم كله، مش كل حجز كأنه أول حجز في التاريخ.
فيه كمان طلبات الزيارة، وصور مرجعية، وتحكم في نشر أعمال الصالون، وبيانات هوية النشاط، وتقارير وواجهات تشغيل. كل واحدة بتخدم قرار واضح عند صاحبها.
واجهة فعلية ببيانات ديمو. مجرد إن الجدول فيه أرقام مش معناه إن دي إيرادات المشروع.
أما نقطة البيع الكاملة، والأجهزة، وNFC، والولاء الممول من التاجر، فدي اتجاهات مرحلة جاية. لو كتبناهم كلهم تحت «اتعمل»، يبقى اللي محتاج يتراجع هو دراسة الحالة نفسها.
التخطيط الحلو لازم يستحمل التنفيذ
من «غبي منه فيه» بنستعير «شكلك فاهم يا نصه» كتذكرة خفيفة إن الخطة لازم تتراجع على اللي هيحصل فعلًا. مصدر الصورة والسياق.
الإشارة للفيلم سياق ثقافي فقط؛ التعليق الهندسي من كتابة Softworks ولا يعني تأييد الفنانين للمنتج.
بالنسبة لنا، الخطة تشمل حالة النجاح وحالة إن الطلب ما كملش. تشمل المستخدم اللي رجع خطوة، والصورة اللي مصدرها اتغير، والثيم اللي اتبدل، والمعاد اللي اتحجز في الناحية التانية.
لما التفاصيل دي تبقى جزء من التصميم من بدري، الواجهة تقدر تفضل هادية. مش محتاجة تشرح كل اللي وراها، لكن محتاجة تقول الحقيقة لما حاجة تتغير.
إيه اللي شغال. وإيه اللي جاي.
Git عنده ذاكرة، بس مش بيحكي اللي ما اتسجلش
راجعنا التاريخ المتاح على كل الفروع. في مايو فيه commits مفصلة لشغل نماذج المدفوعات، ورحلة دفع العميل، وأدوات الصالون، والتسوية، واستكمال العمليات.
مثلًا 86ed6ae بيوثق شغل رحلة الدفع، وc18ae4c أدوات الصالون المالية، و92a38a6 شغل الاستكمال. وفي يونيو، c8b24de بيوثق تطوير الواجهة الداكنة والكروت وخصائص ويب.
تحديثات أكتوبر الأحدث موجودة في ملفات العمل وتقاريرها. مش هنلصقها بتاريخ يونيو علشان الجدول يبقى شكله مرتب. وكمان مش كل ملف في commit تاريخي معناه إنه لسه نفس المسار النشط دلوقتي.
ده خلانا نكتب الحكاية من مستويين: تاريخ يوضح التطور، وكود حالي يوضح السلوك الموجود. ما اخترعناش sprint، ولا مكالمة عميل، ولا ليلة إطلاق درامية محتاجة موسيقى تصويرية.
مشكلتين موثقتين يستاهلوا يتحكوا
الصورة كانت شغالة، والصفحة رافضة تصدق. تقرير الصور سجل إن الأصل بيرجع بنجاح، لكن مسار معالجة الصور في الموقع وجزء تجهيز بيانات الصفحة مش متفقين على مصدره. توحيد التعامل بين المسارين وتصحيحهم خلّى الصور تظهر واتراجعت في الصفحات. الدرس: لما الصورة مش باينة، بص على الطريق كله، مش الملف بس.
الإصدار اترفع، واللي ظاهر لسه قديم. دليل نشر الموقع سجل تأخر ظهور سلوك السيرفر الجديد بعد رفع النسخة. استمر التحقق لحد ما الصفحة والملفات المتوقعة ظهرت فعلًا. زرار النشر خلص شغله، لكن شغل التأكد لسه مستني.
المشكلتين دول موثقين في تقارير التنفيذ. سيناريوهات العملاء اللي فوق وسيلة نشرح بيها القواعد، مش ادعاءات عن أعطال إنتاج حصلت لهم.
الاختبارات: الدراما تكون في الميم، مش في رقم النتيجة
الإفيه من «الناظر» بيقول «كله ضرب ضرب مفيش شتيمة». في سياقنا، ضغط الاختبارات مقصود علشان نعرف السلوك في الحالات المختلفة، مش علشان نطلع رقم كبير وخلاص. مرجع الإفيه.
في تقرير 17 أكتوبر لمعرض الأعمال، فيه 59 اختبار ويب مركز في تسع ملفات، وفحوص TypeScript للويب، وفحوص واجهة محلية ومنشورة. تقرير الموبايل لنفس الشغل سجل 218 اختبار في 43 ملف وتصديرات، ومعاهم تثبيت وفتح Android build 6 على محاكي.
تقرير الستايلات له 51 اختبار مركز و19 فحص متصفح محلي و19 على النسخة المنشورة. فيه تداخل بين النطاقات، فمش هنجمعهم ونكتب رقم أضخم كأنه عدد اختبارات مستقلة.
في شغل دراسة الحالة نفسها، سبع ملفات اختبارات موجودة اتشغلت ونجح 44 اختبار. ما شغلناش التطبيق للتصوير، وما عملناش ديمو جديد، وما بعثناش عمليات لمزودين. الصور كلها كانت موجودة واتراجعت واتجمعت.
اختبار متصفح مش اختبار كل جهاز في السوق. تثبيت Android على محاكي مش نشر iOS في المتجر. ونجاح وحدة حسابية مش شهادة أداء لمليون مستخدم. كل نتيجة ليها عنوان وحدود، وده بيخليها مفيدة.
نقدر نقول إيه عن النتيجة؟
نقدر نقول إن Salony عنده تنفيذ متصل للاكتشاف والحجز وتشغيل الصالون. فيه حالات واضحة، ومراجع للزيارة، ومعرض أعمال بتحكم أدق، وتجربة عربي وإنجليزي، وصور وتوثيق لإصدارات محددة.
نقدر كمان نشاور على أثر هندسي مباشر: ترتيب الصور ما يبدلش إعداداتها، وتعديل الملاحظة ما يضيعش المرجع، والإتاحة تتعامل مع قيود المكان، والصورة ما تتحولش لمعلومة مهنية متخيلة.
أما «قللنا عدم الحضور بنسبة كذا» و«رفعنا الإيرادات أضعاف»، فدي محتاجة بيانات قبل وبعد. مش هنجيب النسبة من عندنا علشان تعمل عنوان حلو.
القياس اللي له معنى بعد كده هو إكمال الحجز، والتوقف في كل خطوة، ونجاح طلبات تغيير المعاد، ووقت المهام المتكررة عند فريق الصالون. دي حاجات نقدر نبني عليها تطوير يفيد الناس فعلًا.
آخر سؤالين قبل ما تكمل يومك
هو التطبيق كله نازل في المتاجر؟
المادة اللي راجعناها بتعرض روابط المتاجر كـ Coming soon، ومعانا أدلة لإصدار Android تجريبي. ما بنحولش ده لوعد بنشر عام على كل المنصات.
والـ AI وPremium؟
فيه شغل وخدمات وشاشات في المصدر، لكن Premium مش متسجل في تنقل V1 الحالي. نذكره كجزء منفصل من الاتجاه المستقبلي حسب حالته، مش ميزة هنعلن إنها متاحة لمجرد إن ملفها موجود.
والصور دي ينفع أنقلها مع دراسة الحالة؟
صور المنتج المختارة موجودة جوه نفس المجلد، وروابطها نسبية. ملفات المصادر بتوضح اللغة والثيم والمقاس وتاريخ الدليل. صور الأفلام متعلمة كمراجع لطرف تالت؛ تفاصيلها ومراجعة إعادة استخدامها موجودة في دليل الميمز.
لو عندك فكرة باينة بسيطة، تعال نفك تفاصيلها
أصعب جزء في Salony كان توصيل القرارات: العميل عايز إيه، والصالون متاح له إيه، والطلب واقف فين، وإيه اللي يحصل لو حاجة اتغيرت في النص.
ده النوع اللي بنحب نشتغل عليه في Softworks: نفهم الشغل اللي ورا المنتج، ونبني تجربة الناس تقدر تستخدمها من غير ما تشيل هم التعقيد كله.
احكي لنا عن منتجك · شوف Salony
الحقائق متراجعة في 18 أكتوبر 2026. المواقف التوضيحية والتعليقات الساخرة من كتابة Softworks. المصادر · النسخة المهنية · English.
الشغل، على الشاشة.
٢٩ لقطة موثقة من تجربة العميل والتشغيل والموقع. افحص اللغة والمظهر، وافتح التفاصيل بالحجم الكامل.
لقطات فعلية موجودة مسبقًا ببيانات عرض وصور منسوبة لمصدرها.
29 شاشة
موبايلالرئيسية للعميل · الإنجليزي
الرئيسية للعميل — الإنجليزي. شاشة من المنتج ببيانات عرض أو صور مصدرها موضح، وليست نتائج أعمال. سياق الالتقاط: 2026-10-17.
موبايلالرئيسية للعميل · الإنجليزي
الرئيسية للعميل — الإنجليزي. شاشة من المنتج ببيانات عرض أو صور مصدرها موضح، وليست نتائج أعمال. سياق الالتقاط: 2026-10-17.
موبايلالرئيسية للعميل · العربي
الرئيسية للعميل — العربي. شاشة من المنتج ببيانات عرض أو صور مصدرها موضح، وليست نتائج أعمال. سياق الالتقاط: 2026-10-17.
موبايلالرئيسية للعميل · العربي
الرئيسية للعميل — العربي. شاشة من المنتج ببيانات عرض أو صور مصدرها موضح، وليست نتائج أعمال. سياق الالتقاط: 2026-10-17.
Webالموقع العام · الإنجليزي
الموقع العام — الإنجليزي. شاشة من المنتج ببيانات عرض أو صور مصدرها موضح، وليست نتائج أعمال. سياق الالتقاط: 2026-10-17.
Webمكتبة الإلهام · الإنجليزي
مكتبة الإلهام — الإنجليزي. شاشة من المنتج ببيانات عرض أو صور مصدرها موضح، وليست نتائج أعمال. سياق الالتقاط: 2026-10-17.








