Skip to main content

Developer Page Specifications

Listing Page

/:lang/founder-files (+ category + topic scopes). 3:4 cards, featured banner, category tabs, topic chips.

Complete

Routes: /:lang/founder-files (all), /:lang/founder-files/categories/{categorySlug} (category-scoped), /:lang/founder-files/topics/{topicSlug} (topic-scoped). All three share the same component with different filters applied — single FounderFilesListingPage component reused via route data.

Page sections

  1. A · Hero (eyebrow + H1 + lede + sub-line "{N} practical guides for working founders")
  2. B · Featured file banner (large 3:4 cover + Best For chip + Download CTA) — when at least one IsFeatured=true file exists
  3. C · Category tabs (All / Strategy / Operations / Fundraising / Product / Sales / Leadership / Hiring)
  4. D · Topic chips row (free taxonomy — e.g. b2b, marketplaces, GTM, term-sheets, hiring-execs)
  5. E · Files grid (3:4 portrait cards via <app-founder-file-card>)
  6. F · Subscribe block ("Get notified when new files drop")
  7. G · Cross-module rail (Founder Profiles → file authors / MENA Calendar → events the files reference)
  8. H · Footer

C/D · Filter contract

category (single from route)
Source: route segment :categorySlug when present. Values: strategy | operations | fundraising | product | sales | leadership | hiring. Maps to FounderFile.Category column.
topic (single from route)
Source: route segment :topicSlug when present. Free editorial taxonomy from FounderFileTopic join.
sort (query param)
Values: newest (default — PublishedAt DESC) | featured-first (IsFeatured DESC, PublishedAt DESC) | most-downloaded (FounderFile.DownloadCount DESC). The downloadcount is a denormalised counter — incremented atomically on each consent-gated submit.

E · Founder file card — fields

cover (3:4 portrait)
Source: FounderFile.CoverImageUrl. Aspect ratio strictly 3:4. Fallback: generated SVG with file number (FF#01..FF#NN) + generative geometric pattern keyed by file ID — see §9.5.
file number chip
Source: FounderFile.Number (auto-assigned at create, e.g. "FF#04"). Top-left overlay on cover. Mono font.
title
Source: FounderFileLang.Title. Required: yes.
best-for tagline
Source: FounderFileLang.BestForTagline. 1-2 line summary of who this file is for. Example: "Pre-seed founders writing their first investor deck". Required: yes.
reading time
Source: FounderFile.ReadingTimeMinutes (8-30 typical range). Display: "{N} min read".
category chip
Source: FounderFile.Category.
sponsor mini-row
Conditional: only when FounderFile.SponsorId IS NOT NULL. Shows "Sponsored by {Sponsor.Name}" + small sponsor logo. Distinct visual tint per §9.5.
CTA — Read
routerLink: /:lang/founder-files/{slug}. Click fires founder_file_card_click.