منتج مدفوع يتحقق من مبلغ كل دفعة قبل منح الوصول
لا يصبح منتج SaaS قابلاً للبيع إلا حين يمر المال فيه بشكل صحيح. JobVerdict يقيّم الوصف الوظيفي مقابل سيرتك الذاتية الفعلية، ويكيّف الطلب دون أن يختلق خبرة لا تملكها. ويقيس الاستهلاك، ويطبق الحصص، ويحصّل الرسوم دون خصم مزدوج ودون أن تتسرب ميزات مدفوعة إلى الخطة المجانية. بنيت كل ذلك.
منتج شخصي · دبي · من يوليو إلى أغسطس 2026 · صممته وأدرت بناءه وأطلقته، 71 إيداعاً (commit)
السياق
كل أداة للتقديم على الوظائف جربتها وقعت في الخطأ نفسه: اطلب منها تكييف السيرة الذاتية فتختلق خبرة بهدوء لتطابق الكلمات المفتاحية. هذا الخطأ يكشف المرشح في المقابلة، ولهذا لم أثق بأي منها بما يكفي لأستخدمه.
النسخة الصادقة من المنتج أصعب في البناء، لأن القيد يجب أن يعيش داخل كل مسار لتوليد النص، والوعد في النص التسويقي لا يكفي. فبنيتها.
ما الذي فعلته
- أطلقت تطبيقاً متعدد المستأجرين بـ Next.js 16 (App Router وReact 19 وTypeScript وPrisma وTailwind)، نحو 19,000 سطر في 125 ملفاً مصدرياً، صممته وأدرت بناءه وأطلقته في خمسة أسابيع.
- جعلت قاعدة منع الاختلاق جزءاً ملزماً من بنية المنتج. عبارة تُعاد صياغة الكلمات المفتاحية ولا تُختلق أبداً مدمجة في كل موجّه توليد (prompt)، وتفرضها مجموعات اختبار مخصصة للأدلة وللسيرة الذاتية، فأي تراجع يُفشل البناء قبل أن يصل إلى مستخدم.
- بنيت النصف الذي لا يلفت النظر كما يجب: مصادقة بـ bcrypt مع رموز جلسة معتمة تُحفظ على الخادم، وحراسة على كل مسار محمي، وحارس للوحة الإدارة، وتنقية للمدخلات، وغلاف جلب آمن من SSRF لكل ما يقدمه المستخدم.
- قست الجزء المكلف. كل استدعاء للذكاء الاصطناعي يمر عبر وحدة واحدة تختار نموذجاً رخيصاً أو ذكياً حسب المهمة، وتسجل استهلاك كل مستخدم، وتطبق حصص الخطط: سقف دائم للخطة المجانية، واستخدام عادل لخطة Pro على مدى 30 يوماً متحركة. تكلفة الذكاء الاصطناعي لكل مستخدم رقم أراه قبل أن تصل الفاتورة.
- استلمت مالاً حقيقياً، بحذر. الدفع مرة واحدة مقابل وصول لمدة 30 يوماً عبر Ziina، وهي شركة معالجة مدفوعات إماراتية. منح الوصول على الخادم لا يتكرر أثره مهما تكرر الطلب (idempotent)، ويتحقق من مبلغ نية الدفع (payment intent) وعملتها قبل فتح أي شيء. لا أثق أبداً بما يرسله جانب العميل. وعملية خلفية دورية تطابق أي دفعة ضاعت إعادة التوجيه التي تؤكدها.
- كتبت أكثر من 20 مجموعة اختبارات تغطي الحصص والمدفوعات وحراسة المصادقة والجدولة وتنقية المدخلات ومزامنة المخطط، ووضعاً وهمياً للذكاء الاصطناعي (mock) يتيح تجربة المنتج كله من أوله إلى آخره دون مفتاح API ودون إنفاق سنت واحد.
- أبقيته جاهزاً للنشر: SQLite محلياً وPostgres في الإنتاج، مع أمر واحد للتبديل بينهما وحارس يبقي المخططين متزامنين.
صممته وأدرت بناءه وأطلقته في خمسة أسابيع، بمصادقة وقياس للحصص ومدفوعات حية وأكثر من 20 مجموعة اختبارات آلية، دون أي خلفية رسمية في البرمجة.
أكثر قرار أنا راضٍ عنه
المنتج يخلو عمداً من أي أتمتة لـ LinkedIn، مع أن المحرك الذي نشأ منه يملكها، وكانت ستكون أسهل ميزة نمو يمكن إطلاقها. أتمتة تواصل المرشح على منصة تمنع شروطها ذلك تضع الخطر على حساب العميل نفسه. كتبت هذا المنطق في خطة العمل، حتى يصمد القرار في المرة القادمة التي يغري فيها هذا الاختصار أحداً، وأنا منهم.
ما سأقوله لك في مقابلة
المشكلة جاءت قبل البرمجة: كانت عندي مشكلة تشغيلية، فبدأت أبني، والبرمجة كانت ثمن حلها. ما ينتقل معي إلى أي عمل هو أنني حددت نطاق منتج وأطلقته وقست استهلاكه وحصّلت ثمنه دون فريق، وأن الأجزاء التي رفضت التخلي عنها كانت المصادقة والحصص والضابط، وهي بالضبط القائمة التي تحذفها معظم المشاريع الجانبية أولاً.
أين ينفع هذا
ما يعنيه هذا لصاحب العمل: أفهم سلامة المدفوعات والتسعير حسب الاستخدام وضبط الحصص من الداخل، وأطلقها مع الاختبارات التي تثبت صمودها. كل شركة تضع نموذجاً لغوياً أمام عملائها تواجه هذه المشكلة: العرض التجريبي يُبنى في عطلة نهاية أسبوع، وما يجعله منتجاً هو التسعون في المئة الباقية: عزل كل مستأجر، وقياس الاستهلاك، وضبط التكلفة، وضابط تثبته الاختبارات، ومسار فوترة لا يمكن تزويره من جانب العميل. بنيت هذه التسعين في المئة مرة واحدة، بمالي الخاص، وهذا شيء مختلف تماماً عن القراءة عنها.