Vertical Ecosystem
A vertical is the central entity in Birdhouse. It represents an insurance product type — Household, Liability, Dental, Private Health, and so on. Nearly everything else in the system points back to a vertical.
What a Vertical Contains
Section titled “What a Vertical Contains”A vertical definition in Strapi includes:
| Field | Purpose | Example |
|---|---|---|
| name | URL-friendly slug | household, liability, dental |
| humanReadableName | Display name | “Household Insurance” |
| insuranceType | Enum value used in code | HOUSEHOLD, LIABILITY, DENTAL |
| regions | Which countries/regions this product is available in | ['DE'] |
| Stripe IDs | References to Stripe products/prices for billing | Stripe product IDs |
| image | Product icon/illustration | Used in cards, headers, navigation |
| colorCode | Brand color for this vertical | Used for progress bars, accents |
| content | Marketing text: title, excerpt, description, label | Shown on product cards, landing pages |
| planMapping | Maps internal plan codes to display names | { BASIC: 'Basic', PREMIUM: 'Premium' } |
| addonMapping | Maps internal add-on codes to display names | { GLASS: 'Glass Coverage' } |
| policyModalSections | What sections to show in the policy details modal | Coverage details, documents, contact |
| policyModalButtons | Action buttons in the policy modal | “Download policy”, “File a claim” |
How Everything Connects
Section titled “How Everything Connects”flowchart TD
V["<b>Vertical</b><br/>e.g., HOUSEHOLD"]
Q["<b>Questionnaire</b><br/>Signup flow"]
QP["<b>Quote-Price</b><br/>Pricing engine"]
PP["<b>Policy-Page</b><br/>Policy details page"]
PC["<b>Policy-Coverage</b><br/>Coverage summary"]
D["<b>Documents</b><br/>Policy documents,<br/>terms & conditions"]
QPage["<b>Quote-Page</b><br/>Pricing UI"]
Q -->|"metadata.vertical"| V
QP -->|"metadata.vertical"| V
PP -->|"vertical link"| V
PC -->|"vertical link"| V
D -->|"vertical link"| V
Q -->|"quote question"| QPage
A fully configured vertical typically has:
| Component | Required? | Purpose |
|---|---|---|
| Vertical | Yes | The product definition itself |
| Questionnaire | Yes | The signup/purchase flow |
| Quote-Price | Yes | How to calculate premiums |
| Quote-Page | Recommended | UI for the pricing screen (can use defaults) |
| Policy-Page | Recommended | What users see after purchasing |
| Policy-Coverage | Optional | Detailed coverage breakdown |
| Documents | Optional | Downloadable terms, policy documents |
What Happens When You Sync a Vertical
Section titled “What Happens When You Sync a Vertical”The vertical sync script generates TypeScript lookup maps that the app uses at runtime. These include:
| Generated mapping | What it provides |
|---|---|
| InsuranceTypes enum | Type-safe enum of all vertical codes (HOUSEHOLD, DENTAL, etc.) |
| Title mappings | insuranceType → display title |
| Excerpt mappings | insuranceType → short description |
| Description mappings | insuranceType → full description |
| Banner color mappings | insuranceType → hex color |
| Image mappings | insuranceType → image asset reference |
| Plan mappings | insuranceType → { planCode: displayName } |
These generated files ensure the app always has consistent, up-to-date product information without runtime API calls.
Creating a New Vertical
Section titled “Creating a New Vertical”When launching a new insurance product, you need to create several entities in Strapi and then sync them. The minimum set is:
- Create the Vertical in Strapi with all required fields (name, insuranceType, regions, Stripe IDs, content, plan/addon mappings)
- Create a Questionnaire linked to the vertical — define the questions, rules, and flow
- Create a Quote-Price linked to the vertical — define the pricing calculations
- Optionally create a Quote-Page — customize the pricing screen UI
- Optionally create Policy-Page and documents — configure what users see after purchasing
- Run vertical sync to generate the TypeScript lookup maps
- Run questionnaire sync to generate the questionnaire TypeScript file
- Add app-level wiring — route configuration, feature flags, any custom components
Why Verticals Are Central
Section titled “Why Verticals Are Central”The vertical is the organizing principle of the entire system:
- Navigation: The app’s product listing, recommendation flows, and deep links all key off verticals
- Pricing: Quote-Price entities are found by matching vertical, so the right pricing engine loads automatically
- Branding: Colors, images, and labels come from the vertical, ensuring consistent visual identity
- Policy management: After purchase, the policy details screen knows what to show based on the vertical
- Analytics: Events and tracking are segmented by vertical
If you think of Birdhouse as a factory, the vertical is the product specification — everything else (the questionnaire, pricing, quote page, policies) is the machinery configured to build that specific product.
See also
Section titled “See also”- Vertical Schema Reference – complete field specification for the Vertical content type
- Create a Vertical – how to create a vertical in Strapi
- Add New Vertical (End-to-End) – full walkthrough for launching a new product