Wesh Maklti
تطبيق ثنائي اللغة لتخطيط الوجبات — خطط مخصصة وأهداف سعرات واشتراكات، مع تطبيق جوال ولوحة إدارة.
- دَوري
- مطور Full Stack
- الفترة
- فبراير 2024 — أغسطس 2026
- الحالة
- مُنجز

«وِش ماكلتي» (Wesh Maklti) خدمة لتخطيط الوجبات موجّهة لجمهور يتحدث العربية والفرنسية: يحصل كل مشترك على خطط وجبات وأهداف سعرات حرارية تناسب حالته، بينما يتوزّع الوصول على باقتي اشتراك هما Balanced وPremium. يشمل المنتج تطبيق ويب وتطبيقًا للهاتف ولوحة تحكّم إدارية لتشغيل الخدمة.
يقوم كل ذلك على خادم خلفي واحد مبني بـ Express وTypeORM يخدم جميع الواجهات — تطبيق الهاتف المبني بـ React Native (Expo) وواجهة الويب — فيما بُنيت لوحة التحكّم الإدارية على مكوّنات shadcn. تعمل الخدمة في بيئة الإنتاج منذ مطلع 2024، وقد اجتازت خلال ذلك انتقالًا كاملًا إلى خادم جديد على DigitalOcean مع خط نشر CI/CD.
المشكلة المطلوب حلّها
لم تكن الصعوبة الحقيقية في ميزة بعينها بقدر ما كانت في الاستمرارية: الحفاظ على منتج ثنائي اللغة متماسك بالعربية والفرنسية، على الويب والهاتف معًا، مع تشغيله في الإنتاج دون انقطاع منذ مطلع 2024. لم يبدأ أي عمل على البنية التحتية من صفحة بيضاء؛ فالانتقال الكامل إلى خادم جديد وإرساء خط النشر CI/CD جرى كلاهما على خدمة حيّة قيد التشغيل لا في بيئة تجارب.
كيف بُني
يعرض خادم خلفي واحد مبني بـ Express وTypeORM واجهة API واحدة لجميع العملاء: تطبيق الهاتف المبني بـ React Native عبر Expo، وواجهة الويب، ولوحة تحكّم إدارية قائمة على shadcn لتشغيل الخدمة. أما الوصول بالاشتراك فمقسوم إلى باقتين، Balanced وPremium، تحدّدان ما يتاح لكل حساب.
وعلى مستوى التشغيل، نُقل النشر بالكامل إلى خادم جديد على DigitalOcean ووُضع خلف خط CI/CD، والتطبيق مستمر في الإنتاج منذ مطلع 2024 دون إعادة كتابة.
ماذا يفعل
خطط وجبات مخصّصة
يحصل كل مستخدم على خطط وجبات وأهداف سعرات حرارية تناسبه، على الويب والهاتف على حدّ سواء.
ثنائي اللغة بالكامل
المنتج ثنائي اللغة من طرف إلى طرف؛ العربية والفرنسية حاضرتان فيه بالدرجة نفسها.
باقتا Balanced وPremium
ينقسم الوصول بالاشتراك إلى باقتين تحدّدان ما يمكن لكل حساب استخدامه.
لوحة تحكّم بـ shadcn
لوحة إدارة مبنية على مكوّنات shadcn للتشغيل اليومي للخدمة.
تطبيق هاتف بـ Expo
تطبيق React Native مبني عبر Expo يتخاطب مع واجهة Express API نفسها التي تخدم الويب.
نشر عبر CI/CD
يمرّ النشر عبر خط CI/CD إلى خادم على DigitalOcean — بنية اجتازت انتقالًا كاملًا من خادم إلى آخر والخدمة قيد الإنتاج.
بُني باستخدام
الواجهة الأمامية
كيانات TypeORM المبنية على الـ decorators مصمّمة أصلًا لـ TypeScript، ومشاركة لغة واحدة ذات أنواع بين الـ API وعميل React Native تحفظ عقود الطلبات والاستجابات من الانحراف.
الهاتف
يتيح React Native بناء تطبيق الهاتف من قاعدة كود JavaScript واحدة تتصل بواجهة Express API نفسها، بدل صيانة تطبيقات أصلية منفصلة إلى جانب واجهة الويب.
يتكفّل Expo بسلسلة البناء والإصدار الخاصة بـ React Native، فيمكن تطوير تطبيق الهاتف دون صيانة مشاريع أصلية يدويًا.
الخلفية
يبقي Express الخادم الخلفي طبقة HTTP خفيفة فوق TypeORM — واجهة REST واحدة تستهلكها واجهة الويب وتطبيق الهاتف المبني بـ Expo معًا.
البيانات
المستخدمون وخطط الوجبات وباقات الاشتراك بيانات علائقية بطبيعتها، وPostgres يوفّر التكامل المعاملاتي والقيود العلائقية التي يبني عليها TypeORM نموذج كياناته.