Skip to main content

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).