Developer Page Specifications
Data Model
12 tables — Founder core, FounderLang, FounderStartup join with role+dates, FounderEventRole, etc.
مكتمل
جداول قاعدة البيانات لـ Founder Profiles. أكبر سطح cross-module — يَحتاج reverse-lookups سريعة من EcosystemEntityLinks. 12 جدول: Founder أساسي + FounderLang (i18n) + 4 lookups + 4 جداول تفاصيل فرعية + 2 cross-module joins.
الجدول 1 · Founder (أساسي)
- Id
- مفتاح أساسي مستقر.
- Slug
- مُعَرِّف URL. kebab-case. مثل "ahmed-hassan".
- Flavor
- القيم: editorial | founder-led. يَقود قواعد الملكية + وسائل التحرير.
- OwnerUserId
- مضبوط فقط حين Flavor=founder-led. يَقود مرئية CTA "Edit profile" على صفحة التفاصيل.
- CountryCode
- ISO 3166-1 alpha-2. دولة الارتساء (المؤسّس قد يَكون نشطاً عبر MENA لكنه مُرتسخ في دولة وطن واحدة).
- PrimaryRole
- القيم: ceo | cto | cofounder | founder | operator. مدعومة بجدول lookup.
- AvatarUrl
- صورة مربعة، ≥400×400، jpeg/webp/avif. تَعود لـ SVG مُتولَّد حين null.
- الشبكات الاجتماعية
- URLs ملفات اجتماعية خارجية. مطلوب لبوّابات IsVerified=true.
- IsVerified
- علم التحقّق التحريري (صورة حقيقية + ≥1 شركة منشورة + LinkedIn مؤكَّد). يَقود ✓ الأخضر.
- IsActive
- soft-delete. IsActive=false يُخفي من الاستعلامات العامة، يَحفظ السجل + إشارات cross-module.
- IsFeatured
- علم spotlight تحريري. يَبرز على شريط الصفحة الرئيسية + يَرفع في الفرز الافتراضي.
- PublishedAt
- يَقود فرز Newest + datePublished لـ JSON-LD.
- CreatedAt، UpdatedAt
- أعمدة تدقيق.
الجدول 2 · FounderLang (i18n)
- PK مُرَكَّب: (FounderId، Lang). Lang ∈ {'en', 'ar'}.
- الحقول: DisplayName (varchar(120)، مطلوب)، Headline (varchar(160)، مطلوب)، Bio (text، مطلوب)، MetaTitle (varchar(80)، nullable)، MetaDescription (varchar(200)، nullable).
- كل من صف EN و AR يجب أن يَوجدا مع DisplayName + Headline + Bio معبَّأين قبل أن يُصبح IsActive true.
جداول التفاصيل الفرعية
- FounderSkills
- SkillCode هو taxonomy تحريرية حرّة (مثل fundraising، growth، product، b2b-sales، ops).
- FounderLanguages
- رموز ISO 639-1. اعرض في قسم bio.
- FounderStartup (join ثنائي-الاتجاه)
- FounderId ↔ StartupId، Role (varchar(60))، StartedYear (int)، EndedYear (int، nullable). صف واحد لكل ارتباط مؤسّس-شركة.
- FounderEventRole
- قيم Role: speaker | judge | panelist | mentor | attendee. join اختياري — حين موجود، يَقود chip الدور على قسم تاريخ التحدّث. حين غائب، يَعرض كرت الفعالية فقط بدون تَراكب الدور.
- FounderRelatedFounder (related يدوي)
- FounderId ↔ RelatedFounderId، DisplayOrder. علاقات منَسَّقة-من-المحرّر.
