Strapi Content Types
The Birdhouse system uses a customized Strapi CMS with multiple interconnected content types. This page provides an overview of each content type, its purpose, and how it relates to others.
Core Content Types
Section titled “Core Content Types”questionnaire
Section titled “questionnaire”The central content type. Defines an entire questionnaire flow including questions, rules, screens, validations, and metadata.
| Aspect | Details |
|---|---|
| Questions | 30+ component types in the questions dynamic zone (inputs, screens, checkout, processing, etc.) |
| Rules | 4 rule components for conditional routing between questions |
| Metadata | Name, slug, type, regions, vertical relation, constants, variants |
| Calculated fields | Derived values computed from answers at runtime |
| Related types | Links to vertical, quote-page (via QUOTE_CUSTOM questions), option-list (via AUTOSUGGEST/DROPDOWN_SINGLE) |
See: Question Types, Rule Operators, Questionnaire Metadata
vertical
Section titled “vertical”Represents an insurance product type. Ties together branding, pricing, Stripe integration, and display content.
| Aspect | Details |
|---|---|
| Insurance types | 32 types (HOUSEHOLD, PUBLIC_HEALTH, DENTAL, LIABILITY, etc.) |
| Branding | Image, color code, human-readable name |
| Payments | Stripe production and staging product IDs |
| Content | Title, excerpt, description, label |
| Plan mapping | Internal plan names to display names |
| Policy modal | Sections and buttons for the policy detail modal |
See: Vertical Schema
quote-page
Section titled “quote-page”Defines the pricing and customization page shown during a questionnaire flow. Contains customization controls, content sections, and conditional visibility rules.
| Aspect | Details |
|---|---|
| Customizations | Switches, sliders, and toggles in the quoteOptions dynamic zone |
| Content | Addons, coverage lists, tables, info boxes, FAQ, titles in the content dynamic zone |
| Rules | Per-component visibility rules with HIDDEN/DISABLED results |
| Footer | Required CTA footer with optional conditional overrides |
| Related types | Links to table, FAQ collection |
See: Quote-Page Components, Quote-Page Rules
quote-price
Section titled “quote-price”Defines pricing calculation for a questionnaire. Determines how the premium is calculated based on the user’s answers.
| Aspect | Details |
|---|---|
| Calculation methods | json-builder (rule-based JSON pricing) or private-pengine (private pricing engine) |
| Inputs | Maps questionnaire answer keys to pricing variables |
| Outputs | Monthly/yearly premiums, plan-specific prices |
Coverage comparison tables used in quote pages. Supports multiple plans in a side-by-side layout.
| Aspect | Details |
|---|---|
| Structure | Rows of coverage items, columns for each plan |
| Localization | Supports multiple languages |
| Filtering | Can be filtered to show only available plans (via quote-page filterTableByAvailablePlans) |
| Related types | Referenced by quote-page |
option-list
Section titled “option-list”Reusable lists of options for dropdown and autosuggest questions.
| Aspect | Details |
|---|---|
| Structure | Array of value/label pairs |
| Usage | Referenced by AUTOSUGGEST and DROPDOWN_SINGLE question types via cmsList relation |
| Benefit | Share option lists across multiple questionnaires without duplication |
content-modal
Section titled “content-modal”Reusable modal content that can be referenced from multiple places.
| Aspect | Details |
|---|---|
| Structure | Slug, title, body content |
| Usage | Previewable via /preview/:previewStatus/content-modal/:slug |
| Benefit | Single source for modal content used across questionnaires and quote pages |
policy-page
Section titled “policy-page”Defines the policy details and management view shown to users after they have an active policy.
| Aspect | Details |
|---|---|
| Structure | Policy information sections, action buttons |
| Preview | Previewable via /preview/:previewStatus/policy-details/:documentId/:policyId |
policy-coverage
Section titled “policy-coverage”Maps plans to their coverage details. Defines what each plan covers and the specific limits/details.
| Aspect | Details |
|---|---|
| Structure | Plan-to-coverage mapping with section breakdowns |
| Preview | Previewable via /preview/:previewStatus/policy-coverage/:sectionId/:policyId |
document
Section titled “document”Templates for document generation (PDFs, policy documents, certificates).
| Aspect | Details |
|---|---|
| Usage | Referenced by the document-generator service |
| Content | Template structure with dynamic field placeholders |
shared-config
Section titled “shared-config”Global configuration values shared across the system.
| Aspect | Details |
|---|---|
| Structure | Key-value configuration pairs |
| Usage | System-wide settings that affect multiple questionnaires or verticals |
Content Type Relationships
Section titled “Content Type Relationships”graph TD
Q[questionnaire] -->|metadata.vertical| V[vertical]
Q -->|QUOTE_CUSTOM.cmsQuote| QP[quote-page]
Q -->|AUTOSUGGEST/DROPDOWN.cmsList| OL[option-list]
QP -->|table relation| T[table]
QP -->|faq-collection| FAQ[faq-collection]
V -->|policyModalSections| CM[content-modal]
PP[policy-page] -->|coverage sections| PC[policy-coverage]
QPR[quote-price] -->|pricing for| Q
Key Relationships Summary
Section titled “Key Relationships Summary”| From | To | Relationship |
|---|---|---|
| questionnaire | vertical | Many-to-one (metadata.vertical) |
| questionnaire (QUOTE_CUSTOM) | quote-page | Many-to-one (cmsQuote relation) |
| questionnaire (AUTOSUGGEST/DROPDOWN) | option-list | Many-to-one (cmsList relation) |
| quote-page | table | Many-to-one (table relation) |
| quote-page | faq-collection | Many-to-one |
| vertical | content-modal | Referenced in policy modal sections |
| policy-page | policy-coverage | One-to-many |
See also
Section titled “See also”- Create a Questionnaire – how to work with the questionnaire content type
- Create a Quote Page – how to work with the quote-page content type
- Architecture Overview – how Strapi connects to the sync pipeline and app