دراسة حالة · Nurtiverse / She Is My Nutritionist

Nurtiverse — هندسة منصة SaaS لتدريب التغذية بأسلوب الألعاب مع تدرج المستويات وتتبع السعرات/المغذيات الكبرى ومكتبة وصفات ولوحة تفاعل المدرب (Next.js + Node.js + Python + MongoDB)

كيف حوّلت UnlockLive ممارسة إرشاد تعتمد على Zoom وملفات PDF إلى منصة SaaS إنتاجية للإرشاد الغذائي القائم على التحفيز (gamification) — تطبيق عملاء بـ Next.js مع تتبع السعرات والمغذيات الكبرى، ومحرك وصفات ودروس مدعوم بـ Python، ونظام نقاط وشارات ومستويات يقفل المحتوى ويفتحه، ولوحة للمدرب تُظهر من هو نشط ومن يتراجع وما الذي يجب إرساله تالياً. النتيجة: زيادة بمقدار 2.5 ضعف في الاحتفاظ بالعملاء في الأسبوع الرابع وانضمام آلاف العملاء منذ الإطلاق.

  • القطاعالرعاية الصحية / SaaS للتدريب على العافية
  • السنة2024
  • البلدالولايات المتحدة
  • المدة5 أشهر
Nurtiverse — Engineering a Gamified Nutrition Coaching SaaS with Tiered Progression, Calorie/Macro Tracking, Recipe Library and a Coach Engagement Console (Next.js + Node.js + Python + MongoDB) hero screenshot

النتائج في لمحة

  • 2.5xتحسّن في الاحتفاظ بالمستخدمين في الأسبوع الرابع مقارنةً بخط الأساس Zoom + PDF
  • 60%من العملاء يسجلون وجباتهم أسبوعياً داخل التطبيق
  • الآلافمن العملاء انضموا منذ الإطلاق
  • <300msمتوسط زمن تسجيل الوجبة في تطبيق العميل (يُلمس كأنه فوري)

التحدي

كان لدى She Is My Nutritionist آلاف العملاء المدفوعين يتلقون محتوى الإرشاد عبر مكالمات Zoom وخطط وجبات بصيغة PDF ومجموعة Facebook خاصة. وكان التسرب حاداً: فمعظم العملاء يختفون بهدوء بعد الأسبوع الثاني لأنه لم يكن هناك نظام يكافئهم على الالتزام بالخطة، ولا مكان داخل التطبيق لتسجيل الوجبات، ولا عرض تلقائي لـ «ما يجب فعله تالياً»، ولا إشارة للمدرب بأن عميلاً على وشك الانقطاع. الإرشاد مشكلة عادات لا مشكلة محتوى — وكانت الأدوات الحالية تحل المشكلة الخاطئة.

كان المطلوب واضحاً: بناء منصة SaaS حقيقية يمكن للممارسة وضع العملاء المدفوعين عليها، بحيث يدفع المنتج نفسه المشاركة اليومية والأسبوعية، ويحصل المدرب على إشارة حية بمن هو نشط ومن هو معرّض للانقطاع، ويُقفل المحتوى (الوصفات والدروس) ويُفتح بناءً على التقدم الفعلي بدلاً من إغراق العميل به دفعة واحدة.

حلّنا

بنينا Nurtiverse — منصة SaaS بـ Next.js + Node.js + Python + MongoDB تكون فيها طبقة التحفيز (gamification) هي المنتج نفسه، لا مجرد ملصق فوقه.

تطبيق العملاء بـ Next.js هو الواجهة اليومية التي يراها كل مستخدم مدفوع: سجّل وجبة، وامسح وصفة، وأكمل درس اليوم، وتحقق من مستواك. تتبع السعرات والمغذيات الكبرى ميزتان أساسيتان: كل إدخال طعام يصل إلى واجهة Node.js API التي تكتب مستند `MealLog` مهيكلاً وتطلق حساب النقاط. حافظ على سلسلة يومية، أو أنهِ درساً، أو أكمل هدفاً أسبوعياً — وتتراكم النقاط في مستوى (برونزي → فضي → ذهبي → بلاتيني) يفتح وصفات ودروساً وشارات جديدة. والمحتوى المقفل مرئي لكنه ضبابي مع تلميح «يُفتح عند المستوى الفضي» — فيكون التقدم طموحاً لا عقابياً.

محرك الوصفات والدروس بـ Python هو موضع الملكية الفكرية للإرشاد. فهو يقيّم الوصفات بحسب المغذيات الكبرى لدى العميل وحساسياته وما لا يفضله ومستواه؛ وينشئ تلقائياً قائمة مشتريات من أي خطة وجبات مختارة؛ ويقرر أي درس يُعرض تالياً بناءً على سجل الإكمال ومسار المدرب الموصوف. وتأتي الوصفات مع فيديوهات طهي تُسلَّم عبر CDN مع تتبع تقدم لكل ثانية، وتقفل الدروس الوحدة التالية على إكمال الفيديو فعلياً (وليس مجرد خانة «تم»).

لوحة المدرب هي المنتج الثاني داخل المنتج. يرى المدربون كل عميل بنظرة واحدة: المستوى الحالي وآخر وجبة مسجلة وآخر درس مكتمل واتجاه المشاركة أسبوعاً بعد أسبوع، وعلامة على كل من لم يسجل وجبة منذ 5 أيام أو أكثر. ومن اللوحة نفسها يمكنهم إرسال تذكير جاهز أو وصف وصفة أو تقديم درس خارج الترتيب أو جدولة متابعة — فيعمل المدرب بناءً على إشارات لا على ذاكرة مكالمات Zoom.

وتحت كل ذلك: اشتراكات Stripe للفوترة، وAuth0 + JWT للوصول المقيّد بالأدوار، وMongoDB Atlas مع مخططات Mongoose / Pydantic التي تُبقي خدمتي Node وPython على عقد بيانات واحد، وSentry + Datadog حتى لا يقتل استعلام بحث وصفات بطيء الاحتفاظ بالعملاء بصمت.

  • تتبع السعرات + المغذيات الكبرى مع تسجيل وجبات في أقل من 300 مللي ثانية ومستندات `MealLog` مهيكلة
  • تقدم بمستويات (برونزي → فضي → ذهبي → بلاتيني) — تتراكم النقاط في مستوى يفتح الوصفات والدروس والشارات
  • محتوى مقفل مع تلميحات طموحة «افتح عند المستوى التالي» بدلاً من جدران دفع عقابية
  • مطابقة وصفات بـ Python بحسب المغذيات الكبرى والحساسيات وما لا يُفضَّل والمستوى — مع قوائم مشتريات تُنشأ تلقائياً من أي خطة وجبات
  • مشغّل دروس مع تتبع تقدم الفيديو لكل ثانية — يُفتح الدرس التالي عند الإكمال الفعلي فقط، لا بخانة اختيار
  • لوحة مدرب بالمستوى الحالي وآخر تسجيل واتجاه المشاركة أسبوعاً بعد أسبوع وعلامة خمول تُطلَق عند صمت 5 أيام أو أكثر
  • إجراءات المدرب بنقرة واحدة: إرسال تذكير ووصف وصفة وتقديم درس وجدولة متابعة — كلها من الشاشة نفسها
  • اشتراكات تديرها Stripe مع تقسيم حصة الإيرادات للمدرب، ومراقبة Sentry + Datadog، وMongoDB Atlas، ووصول JWT مقيّد بالأدوار

كيف بنيناه

  1. 01

    الاستكشاف، ونموذج تهديدات الاحتفاظ بالمستخدمين، وتصميم التلعيب (gamification)

    بدأنا بإجراء مقابلات مع 20 عميلاً منقطعاً و5 مدرّبين نشطين، ثم أعددنا نموذج تهديدات للاحتفاظ بالعملاء حول اللحظات الأربع التي كانت الممارسة تفقد فيها الناس فعلياً: في اليوم الثالث "لا أعرف ماذا آكل"، وفي الأسبوع الثاني "لا أرى تقدماً"، وفي الأسبوع الرابع "لم ينتبه أحد لتوقفي"، وأخيراً "لا أعرف ماذا أفعل بعد ذلك" الدائم. ومن ذلك خرجت مواصفات التلعيب: تدرّج في المستويات، وسلاسل يومية متتالية، وتنبيهات للمحتوى المقفل، ولوحة تحكم للمدرّب تُطلق إشعاراً عند الخمول، وليست مجرد إضافة شارات عامة.

  2. 02

    تطبيق عميل بـ Next.js + واجهة API للتفاعل بـ Node.js

    أطلقنا تطبيق العميل المبني على Next.js أولاً لأن الواجهة اليومية هي الموضع الذي يُكسب فيه الاحتفاظ بالمستخدمين أو يُخسر. تسجيل السعرات والعناصر الغذائية الكبرى، وتصفح الوصفات، ومشغّل الدروس، وهدف اليوم، والمستوى الحالي، كلها على شاشة واحدة وبزمن استجابة أقل من 300 مللي ثانية. تكتب واجهة Node.js / Express API مستندات منظمة من نوع `MealLog` و`LessonProgress` و`Streak` وتُشغّل حساب النقاط عند كل تفاعل، فتتحدث واجهة المستويات في الاستجابة نفسها لا عبر مهمة cron متأخرة.

  3. 03

    محرك وصفات ودروس بـ Python، وCDN للفيديو، ومحتوى مقفل

    بنينا محرك الوصفات والدروس بلغة Python لأن منطق المطابقة، أي تقييم الوصفة وفق العناصر الغذائية الكبرى والحساسية والأطعمة غير المفضلة والمستوى الحالي ومسار المدرّب الموصوف، يحتاج إلى مكتبات عددية حقيقية. ويولّد المحرك نفسه قوائم التسوق من الخطط المختارة ويختار الدرس التالي. وتُسلَّم الوصفات والدروس مع فيديو تعليمي وطهي تفاعلي عبر CDN مع تتبع التقدم لكل ثانية، فلا يُفتح الدرس التالي إلا بعد مشاهدة السابق فعليًا، لا بمجرد «وضع علامة منجز».

  4. 04

    وحدة تحكم المدرّب، واشتراكات Stripe، وقابلية الرصد، والتسليم

    تمنح لوحة المدرّب المدربين مؤشرًا حيًا لتفاعل كل عميل، يشمل المستوى الحالي وآخر سجل واتجاه الأسبوع مقابل الأسبوع ومؤشر عدم النشاط، إضافة إلى مجموعة إجراءات بنقرة واحدة (تذكير، وصف وصفة، دفع درس، جدولة متابعة). وتتولى Stripe Subscriptions الفوترة مع تقاسم إيرادات المدرّب. وتغطي Sentry + Datadog كلًا من تطبيق العميل ومحرك الوصفات حتى لا يُضعف استعلام بطيء الاحتفاظ بالعملاء دون أن يلاحظه أحد. وحصلت الجهة على دليل تشغيل لتأليف المحتوى وضبط المستويات وتأهيل المدربين.

حزمة التقنيات

  • Next.js (React)
  • Node.js + Express
  • Python (محرك الوصفات والدروس)
  • MongoDB (Atlas)
  • مخططات Mongoose / Pydantic
  • تسليم فيديو عبر Mux / CDN مع تتبع التقدم
  • Stripe Subscriptions
  • وصول قائم على الأدوار عبر Auth0 / JWT
  • Sentry + Datadog (المراقبة)
  • Docker
  • تطوير تطبيقات الويب
  • هندسة SaaS
  • تصميم التحفيز (Gamification)
  • منصة المحتوى
  • تكامل اشتراكات Stripe
  • DevOps والمراقبة
“أرقام الاحتفاظ لدينا تروي القصة كاملة. أدركت UnlockLive أن التدريب مشكلة عادة وليس مشكلة محتوى، وبنت طبقة التلعيب (gamification) التي جعلت الاستمرار أخيرًا ممكنًا.”
Sofia Abdelkafi · استشاري الصحة والعافية

الأسئلة الشائعة

كيف تحرّكون الاحتفاظ بالمستخدمين فعلًا بالتلعيب — بدلًا من إضافة شارات تجميلية فقط؟

ثلاث قواعد. (1) كافئ الإجراء الذي تريده فعلًا (تسجيل وجبة، إنهاء درس، تحقيق هدف أسبوعي) وليس الإجراءات الشكلية مثل «فتح التطبيق». (2) اجعل التدرج في المستويات محفّزًا بعرض المحتوى المقفل بشكل ضبابي مع تلميح «يُفتح في المستوى التالي»، ليرى المستخدمون ما يعملون من أجله. (3) أغلق الحلقة مع المدرّب: ينطلق تنبيه الخمول بعد 5 أيام أو أكثر من الصمت، ويُظهر في لوحة المدرّب إجراء «إرسال تذكير» بنقرة واحدة، فيتلقى العميل المتعثر لمسة بشرية خلال 24 ساعة. هذا المزيج، وليس أي عنصر منفرد، هو ما حقق زيادة بمقدار 2.5 ضعف في الاحتفاظ بالمستخدمين في الأسبوع الرابع.

لماذا يُقسَّم الجزء الخلفي بين Node.js وPython؟

يتولى Node.js واجهة API عالية التكرار للتفاعل — كتابة سجلات الوجبات، وحساب النقاط، وتحديث المستويات، وحساب الاستمرارية — حيث تكون بيئة التشغيل الواحدة لكل طلب وميزانية استجابة أقل من 300 مللي ثانية أهم ما يكون. أما Python فيشغّل محرك الوصفات والدروس، حيث يُعدّ تقييم الوصفات وفق العناصر الغذائية الكبرى لدى العميل وحساسياته وما لا يحبه ومستواه عملًا رقميًا بحتًا يستفيد من منظومة بيانات Python. وتتشارك الخدمتان مخطط MongoDB واحدًا تفرضه Mongoose في جانب Node وPydantic في جانب Python، فلا يحدث بينهما أي انحراف.

كيف يُفتح المحتوى المقفل فعلياً، وما الذي يمنع المستخدمين من تخطي المراحل؟

تُفتح الدروس عند إتمام مشاهدة الفيديو فعليًا، وليس بمربع «تم الإنجاز». نتتبع تقدم الفيديو لكل ثانية عبر مشغّل CDN، ويفرض الدرس التالي من جانب الخادم حدًا أدنى للمشاهدة بنسبة 90% للدرس السابق. ويُفتح المحتوى المتدرج (الوصفات والدروس والشارات) عند بلوغ حدود النقاط، ولا تُمنح النقاط إلا على الإجراءات التي نريد تحفيزها — تسجيل وجبة، أو تحقيق هدف أسبوعي، أو إتمام درس. ولا توجد أي وسيلة تجاوز من جانب العميل يقبلها الخادم.

هل يمكن تغيير هوية المنصة لممارسة تدريب أخرى أو علامة عافية أخرى؟

نعم، فالمحرك نفسه بُني عمدًا ليكون مستقلًا عن العلامة التجارية. السمة والنصوص ومكتبة المحتوى وأسماء المستويات وقواعد النقاط وتقاسم إيرادات Stripe كلها قابلة للضبط. ويمكن إطلاق ممارسة تدريب ثانية على المحرك نفسه بمحتواها ولوحة مدربيها الخاصة دون تفريع (fork) قاعدة الكود.

ما الحزمة التقنية التي تشغّل Nurtiverse وكيف يُسلَّم المحتوى؟

تطبيق عميل Next.js (React)، وواجهة API للتفاعل بـ Node.js + Express، ومحرك وصفات ودروس بـ Python، وMongoDB Atlas كمخزن رئيسي، وStripe Subscriptions للفوترة، وAuth0 + JWT للوصول المقيّد بالأدوار، وفيديو يُسلَّم عبر CDN مع تتبع التقدم لكل ثانية، وSentry + Datadog للمراقبة، وكل ذلك في حاويات Docker ومنشور على بنية سحابية تحتية.

هل تريد نتيجة كهذه؟

تحدّث إلى الفريق نفسه الذي بنى Nurtiverse — هندسة منصة SaaS لتدريب التغذية بأسلوب الألعاب مع تدرج المستويات وتتبع السعرات/المغذيات الكبرى ومكتبة وصفات ولوحة تفاعل المدرب (Next.js + Node.js + Python + MongoDB). سنحدد نطاق مشروعك، ونقدّم لك عرضًا بسعر ثابت، ونُريك أقرب مثال من أعمالنا.

احجز مكالمة استراتيجية