العودة إلى الرئيسية
دراسة حالة

بنينا منصة SaaS في الإنتاج. وهذه طريقة عملها

Clasify منتجنا نحن: منصة بعلامة بيضاء تدير عليها الأكاديميات تدريسها. وهي أيضًا الإجابة الصادقة على سؤال «ماذا بنيتم؟» — نظام حيّ متعدد المستأجرين تستطيع التسجيل فيه وفحصه، بدل شعار على حائط.

لماذا معرض الأعمال مشروع واحد

كان بإمكاننا حشو هذا القسم. معظم مواقع الشركات تفعل — شبكة شعارات، وعدد مشاريع مُسلَّمة، ونسبة رضا لا يدقّقها أحد. نفضّل أن نعرض نظامًا واحدًا بعمق يكفي لتحكم أنت على الهندسة بنفسك.

Clasify تدير أكاديميات حقيقية بطلاب حقيقيين في دروس فيديو مباشرة، وتستقبل مدفوعات حقيقية، وتحتفظ ببياناتهم تحت هويتهم البصرية ونطاقاتهم. كل مشكلة تشغيلية في هذه الجملة اضطررنا لحلّها كما ينبغي، لأننا نحن من يُوقَظ حين تنكسر.

ما يلي هو ما يعمل فعلًا. والموقع العام الذي تقرأه جزء من قاعدة الكود نفسها.

للقارئ التقني، الحزمة التقنية: React وVite مع TypeScript في الواجهة؛ وExpress وPrisma فوق PostgreSQL خلفها؛ وSocket.IO للحضور وحالة الفصل المباشر، مع Redis يحمل الحالة المشتركة بين العمليات؛ وWebRTC للوسائط نفسها، مُرحَّلة عبر خادم coturn نستضيفه؛ وتخزين كائني متوافق مع S3 للتسجيلات؛ وCaddy ينهي TLS ويصدر شهادات نطاقات العملاء؛ ومقاييس Prometheus في كل مكان؛ وVitest وPlaywright في خط البناء. اختيرت لتكون سهلة التوظيف عليها، لا لتكون مثيرة.

ما الذي يعمل في الإنتاج

كل بند هنا شيء بنيناه وما زلنا نشغّله بأنفسنا — لا خدمة قرأنا عنها فقط.

عزل متعدد المستأجرين

كل أكاديمية مستأجر له نطاقه الفرعي أو نطاقه الخاص الموثّق. وصفحات المزوّد وأصول علامته وملف robots.txt كلها محجوبة عن نطاقات المستأجرين، فلا يوجد على صفحة الأكاديمية بنطاقها الخاص أي شيء يدلّ على مزوّد.

فصول مباشرة عبر WebRTC

دروس فيديو داخل المتصفح مع خادم ترحيل TURN مستضاف ذاتيًا، فيتصل الطالب خلف الشبكات المقيّدة بدل أن يفشل الانضمام بصمت.

تسجيل الجلسات

الدروس تُسجَّل وتُبثّ مباشرة إلى تخزين كائني، مع تشغيل مقصور على المسؤولين وآلة حالات تنجو من جلسة منقطعة.

مدفوعات مرة واحدة بالضبط

فوترة اشتراكات عبر بوابة دفع بمفاتيح عدم تكرار وحجز قبل الخصم، فلا يستطيع ردّ مفقود أن يخصم مرتين — خلل وجدناه وأغلقناه قبل أن يقابله عميل.

نطاقات خاصة، تلقائيًا

العملاء يوجّهون نطاقاتهم إلى المنصة فتُصدَر الشهادة دون أن يلمس أحد خادمًا، مع صفحات المزوّد التسويقية تردّ بخطأ 404 على ذلك النطاق بالتصميم.

اثنتا عشرة لغة، واتجاه كامل من اليمين لليسار

فهرس نصوص مُنمَّط يجعل نطاقًا غير مسجَّل خطأ في البناء بدل شاشة مفاتيح خام، مع قواعد الجمع العربية وروابط تحمل لغتها بوسوم hreflang متبادلة.

مراقبة ونسخ احتياطية

مقاييس، ونقاط فحص للصحة والجاهزية، وتنبيهات، ونسخ احتياطية مشفّرة خارج الخادم جرى استعادتها والتحقق منها لا مجرد جدولتها.

نشر غير قابل للتغيير

بناء مثبّت على بصمة صورة مع تراجع بأمر واحد، وترحيلات المخطط تُطبَّق في خطوة منفصلة قبل تبديل الصورة الجديدة — فيُجهض الترحيل الفاشل الإصدارَ بدل أن يُسقط التطبيق العامل معه.

ما الذي علّمنا إياه

الترتيب نفسه في كل مشروع، أيًّا كانت التقنية المستخدمة.

1

الأساسات لا تنتظر

تعدد المستأجرين والفوترة والصلاحيات تُحسم أولًا. كل واحدة من الثلاث مكلفة بقسوة بعد أن يعتمد العملاء على سلوكها.

2

صمّم للعطل لا للعرض

ردود مفقودة، وإشعارات مكررة، وتسجيلات منقطعة، واتصالات ساقطة. المسار السعيد هو العُشر السهل؛ وما تبقّى هو حيث تُحاكَم المنتجات فعلًا.

3

تشغيله يغيّر طريقة بنائه

أن تشغّل منتجك يعني أن كل اختصار يعود إليك شخصيًا. وهو أسرع تعليم متاح في معرفة ما يستحق أن يُعمل كما ينبغي.

إجابات مباشرة

الأسئلة التي تُطرح فعلًا في أول مكالمة.

تريد بناء شيء كهذا؟

إن كان منتجك يحتاج مستأجرين أو اشتراكات أو وسائط مباشرة أو مسار دفع لا يحتمل الخطأ، فهذا هو عملنا. احكِ لنا ما في بالك.

كل مشروع يبدأ بمكالمة لتحديد النطاق ثم تقدير مكتوب، قبل كتابة أي سطر برمجي. ولا نطلب عقدًا مسبقًا لمجرد الحديث.