Skip to main content

Developer Page Specifications

Details Page

/:lang/founders/{slug} — 10-section profile with 4 reverse-lookup rails.

Complete

Route: /:lang/founders/{slug}. Renders one founder in full — bio, startups, speaking history, files authored, opportunities applied to (when consented), coverage mentions, editorial articles authored. The "most-connected" entity surface on the platform: every section is a reverse-lookup from EcosystemEntityLinks. founder-led profiles add Founder Account edit affordances when the viewing user owns the profile.

Section order

  1. A · Breadcrumb (Home → Founders → {name})
  2. B · Hero (avatar 160×160 + name H1 + headline + role/country/verified pills + share CTA)
  3. C · Bio (full bio paragraph + LinkedIn/Twitter/personal-site link row)
  4. D · Startups (cards of every startup this founder is associated with)
  5. E · Speaking history (reverse-lookup of CalendarEvent.relatedFounderIds)
  6. F · Mentioned in Coverage (reverse-lookup of CoverageArticle.mentionedFounderIds)
  7. G · Files authored (reverse-lookup of FounderFile.authorIds)
  8. H · Editorial articles authored (reverse-lookup of EditorialArticle.authorIds when applicable)
  9. I · Related Founders (same country / same sector / same accelerator cohort)
  10. J · Footer (global)

B · Hero — fields

avatar
Source: Founder.AvatarUrl. 160×160 desktop, 96×96 mobile. SVG fallback as documented in card.
name (H1)
Source: FounderLang.DisplayName. Only H1 on the page.
headline
Source: FounderLang.Headline.
role pill
Source: Founder.PrimaryRole.
country pill
Flag + Country.NameLang.
verified pill
Show only when Founder.IsVerified=true.
flavor pill
Show only when flavor='founder-led'.
edit profile CTA
Visible ONLY when viewer.userId === Founder.OwnerUserId (founder-led ownership). Routes to /:lang/founder-account/profile/edit.
share + LinkedIn + Twitter row
Sources: Founder.LinkedInUrl, Founder.TwitterUrl, Founder.PersonalSiteUrl. Each opens new tab with rel=noopener.

C · Bio section — fields

  • Bio paragraph — Source: FounderLang.Bio. Max ~600 words, rendered as sanitised HTML (markdown converted at edit time). Required: yes.
  • Skills/expertise chips — Source: FounderSkills join. Display row of small chips. Optional.
  • Languages spoken — Source: FounderLanguages join. Display as small pills.

D · Startups section

Source: bidirectional join FounderStartup (FounderId ↔ StartupId, Role, StartedYear, EndedYear?). Display each startup as a <app-startup-card variant="inline"> with the founder’s role at that startup overlaid as a small chip ("Co-founder · 2018-present" / "CTO · 2015-2020"). Sort: current first (EndedYear=null), then by StartedYear DESC.

E · Speaking history section

  • Source: SELECT * FROM CalendarEvent WHERE Founder.Id = ANY(relatedFounderIds) ORDER BY startDate DESC. Reverse-lookup from CalendarEvent.relatedFounderIds.
  • Display: list of <app-event-card variant="inline"> with the founder’s role at that event ("Speaker" / "Judge" / "Panelist") if available via FounderEventRole join.
  • Up to 6 displayed inline + "See all {N} events →" link when N > 6.
  • Hide section entirely when reverse-lookup returns 0 events.

F · Mentioned in Coverage

  • Source: SELECT * FROM CoverageArticle WHERE Founder.Id = ANY(mentionedFounderIds) ORDER BY publishedAt DESC.
  • Display: <app-coverage-card variant="inline"> with parent event chip retained.
  • Hide section when 0 mentions.

G · Files authored

Source: SELECT * FROM FounderFile WHERE Founder.Id = ANY(authorIds) ORDER BY publishedAt DESC. Display: 3:4 portrait <app-founder-file-card variant="compact">. Section header: "{First name} authored {N} {file/files}". Hide when 0 files.

H · Editorial articles authored

Source: SELECT * FROM EditorialArticle WHERE Founder.Id = ANY(authorIds) ORDER BY publishedAt DESC. Display: <app-editorial-card variant="inline">. Hide when 0 articles.

I · Related Founders

  • Up to 6 cards. Sourcing priority: (1) manual links via FounderRelatedFounder table; (2) same country + same startup sector + Founder.IsActive=true.
  • Exclude self. Sort manual first, then by most-mentioned DESC.