Developer Page Specifications
Editorial Landing
/:lang/editorial — 8-section structure: hero · latest · industries · most-read · topics · desk · coverage · newsletter.
مكتمل
المسار: /:lang/editorial. الواجهة التحريرية المُنَسَّقة الـ premium — spotlight مميَّز + خلاصة الأحدث + شبكة الفئات + chips المواضيع + شريط جانبي most-read + التقاط النشرة. مبنية للتصفّح، ليس لحركة المرور — كل قرار تحريري (الاختيارات المميَّزة، ترتيب الأكثر-قراءة، تأكيد الفئة) مُنَسَّق-من-الطاقم، ليس خوارزمي.
أقسام الصفحة (من الأعلى للأسفل)
- A · Hero (eyebrow "Editorial Intelligence" + H1 + lede + 2 CTAs)
- B · Spotlight مميَّز (1 كبير + 2 كروت دعم)
- C · خلاصة الأحدث (8-12 مقالة، كثافات كروت مختلطة)
- D · شبكة الفئات (9 بلاطة فئة مع أعداد المقالات)
- E · صفّ chips المواضيع (taxonomy حرّة، نقرة → صفحة الموضوع)
- F · شريط جانبي most-read (أعلى 5 بعدد المشاهدات)
- G · كتلة النشرة (الاشتراك في digest تحريري)
- H · Footer (عام)
A · حقول Hero
- Eyebrow
- المصدر: PageConfig.editorialListing.eyebrow. الافتراضي: "Editorial Intelligence". mono uppercase tracking-wider. بادئة نقطة brand-orange accent.
- عنوان H1
- المصدر: PageConfig.editorialListing.title. الافتراضي: "Analysis, stories, and founder-focused perspectives." مطلوب: نعم. الـ H1 الوحيد على الصفحة.
- فقرة Lede
- المصدر: PageConfig.editorialListing.description. 1-2 جملة. Bilingual.
- CTA أساسي
- التسمية: "Read latest insights". الفعل: smooth-scroll لـ #latest-feed.
- CTA ثانوي
- التسمية: "Submit a story". الفعل: routerLink لـ /:lang/submit/story (نموذج pitch، ليس نموذج نشر — انظر عقيدة admin §10.1).
B · Spotlight مميَّز
- كرت رئيسي مميَّز (كبير)
- المصدر: 1 مقالة حيث IsFeatured=true ORDER BY publishedAt DESC LIMIT 1. معالجة hero: غلاف 16:9 + chip النوع + chip الموضوع + العنوان H2 + dek + byline المؤلِّف + pill وقت-القراءة. عرض-كامل على سطح المكتب، full-bleed على الموبايل.
- كروت مميَّزة دعم (2 متوسط)
- المصدر: المقالتان التاليتان حيث IsFeatured=true (offset 1، limit 2). متغيّر كرت متوسط: غلاف 16:9 + chip النوع + العنوان H3 + byline المؤلِّف.
- حالة لا-مميَّز
- حين توجد أقل من 3 مقالات IsFeatured=true، يَعود إلى أحدث 3 مقالات IsActive بغضّ النظر عن علم featured. القسم لا يُرسم فارغاً أبداً.
C · خلاصة الأحدث
- المصدر: ORDER BY publishedAt DESC، باستثناء الـ 3 المعروضة بالفعل في B. الافتراضي 12 كرت. ترقيم عبر scroll لانهائي.
- مزيج الكروت: 3-أعمدة سطح المكتب / 2-أعمدة تابلت / 1-عمود موبايل. كل كرت يَستخدم <app-editorial-card> القياسي.
- حقول الكرت: الغلاف (أو SVG احتياطي)، chip النوع، chip الموضوع، العنوان H3، dek (2-سطر clamp)، byline المؤلِّف (الاسم + الدور)، تاريخ النشر + وقت القراءة.
- الحالة الفارغة: حين 0 مقالات و الفلاتر نشطة، اعرض "No editorial signals match these filters. Clear filters to see the full feed." مع CTA "Clear filters".
D + E · الفئات + المواضيع
- شبكة الفئات (D)
- المصدر: SELECT * FROM EditorialCategory WHERE IsActive=true ORDER BY DisplayOrder. 3-أعمدة بلاطات سطح المكتب. كل بلاطة: إيقونة الفئة + الاسم + وصف سطر-واحد + عدد المقالات + معاينة آخر مقالة + CTA "Browse {category}".
- صفّ chips المواضيع (E)
- المصدر: SELECT * FROM EditorialTopic ORDER BY ArticleCount DESC LIMIT 20. العرض: صفّ scroll-snap أفقي من أزرار chip (لا تَقَصُّص max-width). نقرة → /:lang/editorial/topics/{topicSlug}.
F · شريط جانبي most-read
- المصدر: SELECT * FROM EditorialArticle WHERE IsActive=true ORDER BY ViewCount DESC LIMIT 5.
- العرض: قائمة مُرَتَّبة مع رقم ترتيب mono (01، 02، ...) + العنوان (2-سطر clamp) + chip الفئة + وقت القراءة. لا مؤلِّف/تاريخ — أولوية كثافة بصرية.
- sticky على سطح المكتب (العمود الأيمن حين الشبكة 2-عمود مع الخلاصة يساراً)، inline تحت الخلاصة على الموبايل.
G · كتلة النشرة
- نفس مكوّن كتلة الاشتراك في Opportunity Radar، مُدرك-للسياق: source='editorial'، يَختار مُسبَقاً tag اهتمام "Editorial signals".
- الحقول: email (مطلوب)، اللغة المفضّلة، فئات الاهتمام (تعدّد-اختيار من EditorialCategory.Slug)، صندوق الموافقة (مطلوب true)، صندوق موافقة-الشريك (اختياري).
حالات UI
- Loading: كروت skeleton في الخلاصة + بلاطات skeleton في الفئات.
- Empty (الفلاتر → 0): حالة فارغة موثَّقة مع CTA "Clear filters".
- Error (فشل API): toast + retry inline. منطقة الكروت تَحتفظ بالبيانات المُحَمَّلة.
