Developer Page Specifications
Details Page
/:lang/founders/{slug} — 10-section profile with 4 reverse-lookup rails.
المسار: /:lang/founders/{slug}. يَرسم مؤسّس واحد كاملاً — bio، شركات، تاريخ التحدّث، ملفات مُؤلَّفة، فرص طُبِّق إليها (حين الموافقة)، إشارات تغطية، مقالات تحريرية مُؤلَّفة. سطح entity "الأكثر-اتّصالاً" على المنصّة: كل قسم هو reverse-lookup من EcosystemEntityLinks. ملفات founder-led تُضيف وسائل تحرير Founder Account حين المستخدم الزائر يَملك الملف.
ترتيب الأقسام
- A · Breadcrumb (Home → Founders → {الاسم})
- B · Hero (avatar 160×160 + الاسم H1 + headline + pills role/country/verified + CTA share)
- C · Bio (فقرة bio كاملة + صفّ روابط LinkedIn/Twitter/الموقع الشخصي)
- D · Startups (كروت كل شركة هذا المؤسّس مرتبط بها)
- E · تاريخ التحدّث (reverse-lookup لـ CalendarEvent.relatedFounderIds)
- F · مذكور في التغطية (reverse-lookup لـ CoverageArticle.mentionedFounderIds)
- G · الملفات المُؤلَّفة (reverse-lookup لـ FounderFile.authorIds)
- H · المقالات التحريرية المُؤلَّفة (reverse-lookup لـ EditorialArticle.authorIds عند الانطباق)
- I · المؤسّسون ذوو الصلة (نفس الدولة / نفس القطاع / نفس دفعة المسرّع)
- J · Footer (عام)
B · Hero — الحقول
- avatar
- المصدر: Founder.AvatarUrl. 160×160 سطح المكتب، 96×96 موبايل. SVG احتياطي كما موثَّق في الكرت.
- الاسم (H1)
- المصدر: FounderLang.DisplayName. الـ H1 الوحيد على الصفحة.
- headline
- المصدر: FounderLang.Headline.
- pill الدور
- المصدر: Founder.PrimaryRole.
- pill الدولة
- علم + Country.NameLang.
- pill verified
- اعرض فقط حين Founder.IsVerified=true.
- pill flavor
- اعرض فقط حين flavor='founder-led'.
- CTA تحرير الملف
- مرئي فقط حين viewer.userId === Founder.OwnerUserId (ملكية founder-led). يُوَجِّه لـ /:lang/founder-account/profile/edit.
- صفّ share + LinkedIn + Twitter
- المصادر: Founder.LinkedInUrl، Founder.TwitterUrl، Founder.PersonalSiteUrl. كل واحد يَفتح tab جديد مع rel=noopener.
C · قسم Bio — الحقول
- فقرة Bio — المصدر: FounderLang.Bio. الحد الأقصى ~600 كلمة، يُرسم كـ HTML مُعَقَّم (markdown مُحَوَّل وقت التحرير). مطلوب: نعم.
- chips المهارات/الخبرة — المصدر: join FounderSkills. اعرض صفّ chips صغيرة. اختياري.
- اللغات المنطوقة — المصدر: join FounderLanguages. اعرض كـ pills صغيرة.
D · قسم Startups
المصدر: join ثنائي-الاتجاه FounderStartup (FounderId ↔ StartupId، Role، StartedYear، EndedYear?). اعرض كل شركة كـ <app-startup-card variant="inline"> مع دور المؤسّس في تلك الشركة مُتراكب كـ chip صغير ("Co-founder · 2018-present" / "CTO · 2015-2020"). الفرز: الحالي أولاً (EndedYear=null)، ثم بـ StartedYear DESC.
E · قسم تاريخ التحدّث
- المصدر: SELECT * FROM CalendarEvent WHERE Founder.Id = ANY(relatedFounderIds) ORDER BY startDate DESC. reverse-lookup من CalendarEvent.relatedFounderIds.
- العرض: قائمة <app-event-card variant="inline"> مع دور المؤسّس في تلك الفعالية ("Speaker" / "Judge" / "Panelist") لو متوفّر عبر join FounderEventRole.
- حتى 6 معروضة inline + رابط "See all {N} events →" حين N > 6.
- أخفِ القسم تماماً حين reverse-lookup يُرجع 0 فعاليات.
F · مذكور في التغطية
- المصدر: SELECT * FROM CoverageArticle WHERE Founder.Id = ANY(mentionedFounderIds) ORDER BY publishedAt DESC.
- العرض: <app-coverage-card variant="inline"> مع الاحتفاظ بشريحة الفعالية الأم.
- أخفِ القسم حين 0 إشارات.
G · الملفات المُؤلَّفة
المصدر: SELECT * FROM FounderFile WHERE Founder.Id = ANY(authorIds) ORDER BY publishedAt DESC. العرض: 3:4 portrait <app-founder-file-card variant="compact">. عنوان القسم: "{First name} authored {N} {file/files}". أخفِ حين 0 ملفات.
H · المقالات التحريرية المُؤلَّفة
المصدر: SELECT * FROM EditorialArticle WHERE Founder.Id = ANY(authorIds) ORDER BY publishedAt DESC. العرض: <app-editorial-card variant="inline">. أخفِ حين 0 مقالات.
I · المؤسّسون ذوو الصلة
- حتى 6 كروت. أولوية المصدر: (1) روابط يدوية عبر جدول FounderRelatedFounder؛ (2) نفس الدولة + نفس قطاع الشركة + Founder.IsActive=true.
- استثنِ النفس. افرز اليدوي أولاً، ثم بـ most-mentioned DESC.
