التكليف#
كتب إلينا بالفرنسية مؤسسٌ في اقتصاد صنّاع المحتوى. كان قد وجد ثغرات في أرجاء الأدوات التي يمنحها OnlyFans لصنّاع المحتوى عليه. وأراد إضافة Chrome تسدّ تلك الثغرات داخل صفحات الموقع نفسه، وتبدو كأنها جزء منه: نظام CRM في واقع الأمر، أي سجل لكل عميل. فبجانب كل محادثة، تعرض لوحة ما أنفقه ذلك المعجب، مع ملاحظات ووسوم. وإلى جانبها نصوص محفوظة، وتذكيرات، وشريط للرموز التعبيرية. وبدأت الخطة بصانع محتوى واحد، وكانت تتجه لاحقاً إلى الوكالات.
لم يكن يتكلم إلا الفرنسية. فجرت المكالمات بمساعدة Google Translate على شاشة مشتركة: الإنجليزية تُكتب في جانب، والفرنسية تظهر في الآخر، وردوده تصل عبر WhatsApp فتُلصق في الاتجاه المعاكس. وأقصر مكالمة استمرت ساعة. وكان هو سبب نجاح الأمر. فقد بقي متفائلاً، مستعداً لتجربة نهج مختلف، وراضياً بأن يأخذ البحث وقته. لم يكن مطوّراً، لكنه كان يبني أشياء، والروابط التي كان يرسلها كانت عن المشكلة المطروحة بالضبط.
الجزء الصعب: موقع بلا واجهة برمجة#
أمران جعلا هذا المنتج صعباً. فكل ميزة تقوم فوق واجهة شركة أخرى، فصار كل تغيير تطلقه تلك الشركة تغييراً علينا أن نلحق به. ولم يكن الموقع يوفر أي واجهة برمجة (API)، لا رسمية ولا من طرف ثالث. بحث Saif Pasha في GitHub وGitLab وما وراءهما، فوجد خيطاً واحداً: مستودع Python عمره أربع سنوات، كان قد أجرى يوماً هندسة عكسية لواجهة برمجة الموقع. ولم يعد يعمل.
الطريق إلى الداخل#
دلّت شيفرة ذلك المستودع الميت على الطريق. درس Saif استدعاءات الشبكة التي يجريها الموقع في متصفحه هو، ورأى أن رمز جلسة مسجّلة الدخول يستطيع بلوغ نقاط نهاية لم يعرضها الموقع قط. واختار ألا يحاول فهم كيف يوقّع الموقع طلباته. فالموقع كان يوقّعها بنفسه. التقطت الإضافة الطلب الذي تجريه الصفحة نفسها للمستخدم المسجّل دخوله، ونسخت ترويساته، وأطلقته من جديد. وذهب العمل الأثقل إلى الخادم، حيث يفتح متصفح بلا واجهة رسومية جلسة صانع المحتوى نفسه، ويلتقط البيانات بينما يحمّلها الموقع. ومن هناك، رسم Saif خريطة الواجهة الخلفية.
ما بنيناه حوله#
وفوق ذلك المدخل، بنى فريقنا الإضافة، وتطبيق ويب فيه تسجيل دخول وباقات اشتراك عبر Stripe، والمزامنة التي غذّتهما معاً.
كانت المزامنة الأولى تُطلق متصفحاً بلا واجهة رسومية لكل معجب ظاهر على الشاشة، كلها دفعة واحدة، فكان صنّاع المحتوى الكبار ينتظرون دقائق حتى تصل بياناتهم. فنقلنا المزامنة إلى خادم خاص بها على EC2، ووجّهنا الإضافة إلى بيانات مخزّنة مسبقاً، فصارت تُحمَّل فوراً. وجاء العطل التالي حين سجّل صنّاع محتوى جدد في وقت واحد، فكان متصفح واحد لكل منهم كافياً لإسقاط الخادم. وكان الإصلاح طابوراً بنظام الداخل أولاً يخرج أولاً يأخذ صنّاع المحتوى بالدور، ثلاثة في كل مرة، ويحدّث بيانات كل منهم كل ست ساعات.
النتيجة#
نُشرت الإضافة على Chrome Web Store، وتولّى Stripe مدفوعات تطبيق الويب، وأرسل المؤسس هذه الرسالة:
Everything seems to be working perfectly
صار لدى المؤسس منتج يعمل، على منصة لا مدخل إليها، بُني دون لغة مشتركة. ثم باعه لاحقاً بربح جيد. ومنذ ذلك الحين خاض هو وSaif مشاريع كثيرة أخرى معاً.