Modules Documentation
Data fields
Entities, fields, and types.
The `FounderFile` interface (defined in `core/models/founder-file.model.ts`) is the entity contract. Files carry editorial content, structured sub-entities (categories, topics, sponsors), per-language content blocks (EN + AR + optional FR), and lead-capture fields.
Identity + classification
- id · string
- Stable identifier. Format: `ff-NN` (e.g. `ff-01`, `ff-02`). 2-digit zero-padded.
- slug · string
- URL slug. Descriptive (e.g. `before-you-ask-for-funding`).
- fileNumber · number
- 1, 2, 3, ... Drives the visible `#01` / `#02` brand-eyebrow on covers.
- category · FounderFileCategorySlug
- `funding` | `pitching` | `growth` | `leadership` | `legal` | `operations` | `glossary` | `market-expansion`. Drives the `.chip-primary` category chip.
- topics · string[]
- Up to ~6 micro-topics for cross-module taxonomy matching (e.g. ["pitch-deck", "pre-seed", "investor-psychology"]).
- availableLanguages · SupportedLanguage[]
- Which language versions exist: `["en", "ar"]` for most; `["en", "ar", "fr"]` for tri-language files. Renders the language chip strip.
Per-language content blocks
A FounderFile carries a `lang: { en?: FounderFileLanguageContent; ar?: FounderFileLanguageContent; fr?: FounderFileLanguageContent }` object. Each language version has its own `title`, `shortDescription`, `bodyHtml`, `tocSections[]`, `learningPoints[]`. The `getLanguageContent(file, locale)` helper resolves the active language with EN fallback.
TOC + learning points structure
- tocSections · FounderFileTocSection[]
- Each section: `{ anchor: string; titleEn: string; titleAr: string; orderIndex: number }`. Drives the reader sidebar + active-section highlight.
- learningPoints · FounderFileLearningPoint[]
- Each point: `{ titleEn; titleAr; descriptionEn; descriptionAr; iconKey? }`. Renders as numbered list on details page.
Sponsorship + commercial fields
- `sponsorId?` — links to FounderFileSponsor entry. When set, sponsor mini-row + Sponsored chip render.
- `FounderFileSponsor` shape: `{ id; name; tier: SponsorTier; logoUrl?; websiteUrl? }`. Tiers: `premier` | `featured` | `supporter`.
- `isFeatured?` — surfaces the file in the listing’s `.card-editorial--spotlight` block.
Reading metadata
- `readingTimeMinutes · number` — editor-set. Drives the `{m} min read` strip.
- `coverImageUrl?` — optional cover. Falls back to file-specific SVG (FF#01-FF#04 each have a unique pattern).
- `publishedAt` / `updatedAt` — drives sort order on listing.
Lead capture (download flow)
When a user submits the download modal, a `DownloadLead` entity is created: `{ fileId; leadRole: LeadRole; leadCountry; leadEmail; leadInterest: LeadInterest[]; consentMarketing: boolean; consentPartners: boolean; submittedAt }`. LeadRole = founder | investor | accelerator | partner | other. LeadInterest = funding | growth | leadership | etc.
