Modules Documentation
Data fields
Entities, fields, and types.
Complete
The `Opportunity` interface (defined in `core/models/opportunity.model.ts`) is the entity contract. Fields fall into three groups: identity (id / slug / type), eligibility (sector / stage / country), and lifecycle (publishedAt / deadlineAt / lastVerifiedAt).
Identity fields
- id · string
- Stable identifier. Format: `or-XXX` (e.g. `or-001`). 3-digit zero-padded.
- slug · string
- URL slug. Format: `{organizer-or-program}-{cycle-or-year}` (e.g. `flat6labs-cairo-cycle-22`, `mbrif-innovation-accelerator-2026`).
- typeSlug · OpportunityTypeSlug
- `accelerator` | `grant` | `pitch-competition` | `sandbox` | `incubator` | `bootcamp` | `mentorship` | `residency` | `award` | `fellowship`.
Localized content fields
- `content: { en: OpportunityContent; ar: OpportunityContent }` — bilingual content blocks: title, shortSummary, fullDescription, eligibilityNotes, benefitsNotes.
- `getOpportunityContent(o, lang)` helper resolves the locale-specific content with EN fallback.
Classification fields
- countryCode · string
- ISO-2 country (e.g. EG / SA / AE). Drives geographic filtering and cross-module country matching.
- region · OpportunityRegion
- `MENA` | `GCC` | `Levant` | `NorthAfrica` | `Global`. For multi-country opportunities the region replaces a single country.
- sectorSlugs · string[]
- Sectors the opportunity targets. Empty array = sector-agnostic. Drives cross-module sector matching.
- stageSlugs · string[]
- Eligible startup stages. Drives cross-module stage matching to founder + startup profiles.
- format · OpportunityFormat
- `Online` | `Physical` | `Hybrid`.
- cost · OpportunityCost
- `Free` | `Paid`. Paid opportunities show a cost chip.
Lifecycle fields
- deadlineAt · ISO string · optional
- Application close date. NULL = rolling (no fixed deadline). Drives status computation.
- publishedAt · ISO string
- When this opportunity entered the Radar.
- lastVerifiedAt · ISO string · optional
- When an editor last re-checked the opportunity is still active and the fields are accurate. Drives data-freshness indicators.
Editorial / commercial flags
- `isSponsored?` — paid placement. Featured strip + Sponsored chip + sort priority.
- `isVerified?` — editor-verified organizer + active program. Required for production entries.
- `fundingAvailable?` — opportunity carries cash benefit. Shows a money-star chip.
- `applicationUrl · string` — external apply destination. The Apply CTA opens this in a new tab.
Structured sub-entities
- `organizer: OpportunityOrganizer` — name, type, country, optional logo + website. Surfaces as the organizer line on cards + detail.
- `benefits: OpportunityBenefit[]` — typed benefit blocks (equity / cash / mentorship / etc).
- `eligibility: OpportunityEligibilityItem[]` — typed eligibility criteria.
- `requirements: OpportunityRequirementItem[]` — what the founder must prepare (deck / video / financials / etc).
- `timeline: OpportunityTimelineStep[]` — ordered lifecycle steps.
- `sponsors?: OpportunitySponsor[]` — partner/sponsor brands attached to the opportunity (different from the platform-level isSponsored flag).
