Developer Page Specifications
QC Checklist
Per-page gates + 4 legal-critical lead-capture integrity tests (consent enforcement, never hard-delete).
مكتمل
بوّابات القبول لكل صفحة. الخطورة لكل §11.1.
القائمة
- FF-LIST-001 · blocker · /en/founder-files + /ar/founder-files تُرجع 200. متغيّرات محصورة-بالفئة + محصورة-بالموضوع تُرجع 200 أيضاً.
- FF-LIST-002 · blocker · الكروت تَحفظ نسبة 3:4 عند كل breakpoint. لا انجراف ارتفاع CSS.
- FF-LIST-003 · critical · banner مميَّز (B) يَرسم فقط حين ≥1 ملف IsFeatured=true بكل الحقول المطلوبة.
- FF-LIST-004 · critical · tabs الفئات (C) + chips المواضيع (D) تُفلتر صحيحاً. الفلاتر المُجمَّعة تُحَدِّث URL.
- FF-LIST-005 · critical · صفّ الراعي المصغّر يَظهر فقط حين SponsorId !== null و ContractExpiry > NOW(). الرعايات المنتهية مخفية تلقائياً.
- FF-LIST-006 · blocker · تكافؤ موبايل / RTL.
التفاصيل + القارئ
- FF-DTL-001 · blocker · /en/founder-files/{slug} يُرجع 200 لكل ملف IsActive=true. slug مجهول → 404.
- FF-DTL-002 · blocker · غلاف Hero يَرسم 3:4 portrait. SVG احتياطي حين CoverImageUrl null — رقم الملف + نمط توليدي.
- FF-DTL-003 · critical · كتلة Best For (C) + Learning Points (E) + What you’ll get (F) تَرسم قوائمها بـ displayOrder ASC.
- FF-DTL-004 · blocker · CTA التحميل (H) يَفتح modal الموافقة. Submit مُعطَّل حتى صلاحية البريد + تأشير consentPlatform. Submit يُرسل POST لـ /api/founder-files/{id}/leads.
- FF-DTL-005 · critical · تحميل ناجح → حالة نجاح modal + بريد مُدرَج + DownloadCount مُزاد.
- FF-DTL-006 · blocker · صفحة القارئ /read تَرسم ReaderBodyHtml صحيحاً. TOC مُتولَّد تلقائياً من <h2>. شريط تقدّم القراءة يُحَدَّث عند الـ scroll.
- FF-DTL-007 · critical · أول وصول للقارئ (محصور-بالجلسة) يُحَفِّز modal الموافقة مع source='reader'. نفس التقاط العميل كـ Download.
- FF-DTL-008 · blocker · canonical صفحة القارئ يُشير عودة لـ /details (ليس /read). يَتجَنَّب انقسام محتوى-مُكَرَّر.
- FF-DTL-009 · blocker · تكافؤ موبايل / RTL.
سلامة التقاط العميل (حرج-قانونياً)
- FF-LEAD-001 · blocker · consentPlatform=false يَرفض الـ submit عند الخادم. لا صف في FounderFileLead.
- FF-LEAD-002 · blocker · كل صف lead عنده IP + UserAgent + CreatedAt مُلتقَط.
- FF-LEAD-003 · blocker · consentPartners=true يُحَفِّز webhook sponsor-CRM فقط حين SponsorId !== null و Sponsor.ConsentPartnersWebhookUrl !== null.
- FF-LEAD-004 · blocker · لا حذف-بشدّة على FounderFileLead. UI "Delete user" admin يجب أبداً ألا يَتسلسل لهذا الجدول.
