Skip to main content

Developer Page Specifications

Listing Page

/:lang/founders — search, filters, sort, founder card grid.

Complete

Route: /:lang/founders. Grid of all published founder cards with search, filters (country, sector, role, verified flag, claimed/founder-led flag), and a sort dropdown. Most-connected entity-type on the platform — every card surfaces a thumbnail of the founder’s startups + speaking history badge counts.

Page sections (top → bottom)

  1. A · Hero (eyebrow + H1 + lede + 2 CTAs)
  2. B · Stat strip (total founders, verified count, founder-led count)
  3. C · Search + filter rail (country, sector, role, verified, founder-led)
  4. D · Sort dropdown (most-relevant, newest, alphabetical, most-mentioned)
  5. E · Founder cards grid (canonical <app-founder-card>)
  6. F · Claim-your-profile CTA banner (for unauthenticated)
  7. G · Cross-module rail (Founder Files / Calendar speakers / Editorial profile spotlight)
  8. H · Global footer

C · Filter contract

q (search)
Debounced 300ms · matches across: FounderLang.DisplayName, FounderLang.Bio, FounderLang.Headline, Country.Name, Startup.Name (joined). Min 2 chars.
country (multi-select)
Source: Founder.CountryCode. Filter value: ISO 3166-1 alpha-2. Query param: country=eg,sa.
sector (multi-select)
Source: aggregated from Founder.relatedStartupIds → Startup.industries[]. A founder with startups across multiple sectors appears under any selected sector.
role (multi-select)
Source: Founder.PrimaryRole. Values: ceo, cto, cofounder, founder, operator. Driven by Founder.PrimaryRole lookup table.
verified (bool)
Source: Founder.IsVerified. Single checkbox. When true, only Founder.IsVerified=true rows.
flavor (single-select)
Values: all | editorial | founder-led. Source: Founder.Flavor. Editorial = staff-authored, never self-claimed; founder-led = self-claimed via account.
sort (single-select)
Values: most-relevant (default with q) | newest (Founder.PublishedAt DESC) | alphabetical (DisplayName ASC, locale-aware collation) | most-mentioned (count of cross-module mention references DESC).

E · Founder card fields

avatarUrl
Source: Founder.AvatarUrl. Square 96×96 (2x = 192×192). Fallback: generated SVG initial-on-tinted-bg. Required: yes (visual).
displayName
Source: FounderLang.DisplayName. Bilingual. Required: yes.
headline
Source: FounderLang.Headline. Single-line 80 chars max. "CEO at Paymob" / "Co-founder, Climatech Africa". Required: yes.
role chip
Source: Founder.PrimaryRole (lookup → label). Display: small uppercase chip.
country chip
Flag emoji + Country.NameLang. Source: Founder.CountryCode + Country.NameLang.
verified badge
Source: Founder.IsVerified. Small green ✓ icon. Tooltip: "Editorially verified".
flavor badge
Source: Founder.Flavor. "Editorial" pill (purple) or "Founder-led" pill (blue). Hidden when flavor=editorial AND IsVerified=true (default state, no badge needed).
startup thumbnails (up to 3)
Source: Founder.relatedStartupIds → Startup.LogoUrl[0..2]. Stacked horizontally with negative margin overlap. "+N" overflow when ≥4 startups.
mention count chip
Source: COUNT(EcosystemEntityLinks WHERE RelatedEntityType='founder' AND RelatedEntityId=Founder.Id). Display: "Mentioned in {N}" when N ≥ 1. Hide otherwise.
CTA — View Profile
routerLink: /:lang/founders/{Founder.Slug}. Fires founder_card_click.

UI states

  • Loading: 12 skeleton cards (matches default page size).
  • Empty: documented empty state with "Clear filters" CTA + link to /:lang/founders.
  • Error: toast + retry CTA, preserves loaded cards.
  • Pagination: infinite scroll via IntersectionObserver. 24 cards/batch.