Developer Page Specifications
Listing Pages
Landing + 8 scoped listings. CalendarLandingPage rails + EventListingPage with filter rail.
مكتمل
المسارات: /:lang/calendar (الهبوط — شرائط، ليس استعلام)، /:lang/calendar/events (قائمة كاملة، كل الفلاتر)، /:lang/calendar/events/countries/{countrySlug}، /:lang/calendar/events/categories/{categorySlug}، /:lang/calendar/events/audiences/{audienceSlug}، /:lang/calendar/events/stages/{stageSlug}، /:lang/calendar/this-week، /:lang/calendar/closing-soon. 8 مسارات، 2 مكوّنات: CalendarLandingPage (شرائط) + EventListingPage (فلتر+شبكة، مُعاد استخدامه عبر route.data.scope).
أقسام صفحة الهبوط (/:lang/calendar)
- A · Hero (eyebrow + H1 + lede سطر-واحد + 2 CTAs: "Submit an event" + "View all events")
- B · شريط This-week (scroll أفقي، فعاليات ضمن ±7 أيام من NOW)
- C · شريط Closing-soon (مواعيد ضمن 7 أيام، شرائح موعد warning-tinted)
- D · شبكة By-country (16 بلاطة علم، كل واحدة تَربط لـ /calendar/events/countries/{slug} مع عدد فعاليات حيّ)
- E · شبكة By-category (17 بلاطة فئة)
- F · Spotlight (على الأكثر فعالية واحدة editorialPriority=spotlight، banner عرض-كامل)
- G · كتلة CTA submit-an-event (pitch سطر-واحد → routerLink لـ /:lang/calendar/submit)
- H · Footer
أقسام صفحة القائمة (/:lang/calendar/events*)
- A · Hero (عنوان مَحصور — "All events" / "Events in Egypt" / "Demo days" — + عدد النتائج + شرائح فلتر نشطة)
- B · شريط الفلتر (يسار desktop sticky، drawer-أسفل موبايل): country / category / audience / stage / status / mode (physical/online/hybrid)
- C · الشبكة (3 أعمدة سطح المكتب، 2 تابلت، 1 موبايل)
- D · عَدَّاد في الأسفل ("Showing X of Y events")
- E · لا ترقيم — scroll لانهائي، 24 كرت/دفعة
حقول كرت الفعالية (<app-event-card> القياسي)
- chip التاريخ
- العنصر اللا-يَنطوي أبداً. مُهيمن في هرمية الكرت. الصيغة: D-{N} للقادم، "LIVE NOW" لـ status=live، "+{N}d" للمُكتمل، تاريخ كامل مُهيَّأ لـ ≥30 يوم.
- chip علم + دولة
- المصدر: Event.CountryCode + Country.NameLang. العرض: علم emoji + اسم دولة مُختصر حين الكرت ضيّق.
- إيقونة + تسمية الفئة
- المصدر: Event.Category. اعثر على الإيقونة من CATEGORY_ICONS (مثلاً demo-day → إيقونة presentation، hackathon → إيقونة terminal).
- شارة الحالة
- محتسبة من الأوقات. الصبغات: upcoming=neutral / open=primary / closing-soon=warning / live=accent pulse / completed=muted / postponed=amber / cancelled=destructive.
- العنوان + المنظِّم
- المصدر: EventLang.Title + Event.OrganizerName. العنوان H3، المنظِّم t-meta أسفل.
- chip الوضع
- المصدر: Event.Mode (physical | online | hybrid). chip صغير في قدم الكرت.
- CTAs
- الأساسي: routerLink لـ /:lang/calendar/events/{slug}. الثانوي (حين registrationUrl أو applyUrl): خارجي لذلك الـ URL مع target=_blank.
