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