Loading
Loading
All page builder blocks and shared components available in the VAN website. Each block is a Sanity CMS schema that maps to a React component on the front end. Use this as a reference when building new pages.
These blocks are available in the Sanity page builder. Each page document has a sections[] array field where editors can add any combination of these blocks to compose a page layout.
heroSectiondark/lightLarge banner with headline, subtext, and up to two CTAs. Supports centered, left-aligned, or split layouts with optional background image.
| Field | Type | Notes |
|---|---|---|
heading* | string | |
subhead | text | |
background_image | image | |
cta_text | string | |
cta_url | url | |
secondary_cta_text | string | |
secondary_cta_url | url | |
layout | string | centered | left | split |
textSectiondark/lightRich text content block with optional inline images. Configurable alignment and max width.
| Field | Type | Notes |
|---|---|---|
label | string | |
heading | string | |
body* | array (block + image) | |
alignment | string | left | center | right |
max_width | string | narrow | medium | wide | full |
featureGriddark/lightGrid of feature cards with icon, title, description, and optional link. Configurable columns (2-4).
| Field | Type | Notes |
|---|---|---|
heading | string | |
subhead | text | |
items[]* | object array | icon, title, description, link |
columns | number | 2 | 3 | 4 |
statsBarHorizontal display of key metrics/KPIs. Each stat has a value, label, and optional context line.
| Field | Type | Notes |
|---|---|---|
items[]* | object array | value, label, context |
testimonialSectionDisplay client testimonials with quote text, attribution, company, and optional headshot/logo.
| Field | Type | Notes |
|---|---|---|
heading | string | |
testimonials[]* | object array | quote, name, title, company, logo, headshot |
logoBardark/lightDisplay partner/client logos in a static grid or infinite-scroll marquee.
| Field | Type | Notes |
|---|---|---|
label | string | |
heading | string | |
description | text | |
logos[]* | image array | |
style | string | grid | scroll |
ctaSectiondark/lightCall-to-action block. Button variant links to a page; form variant embeds a HubSpot form. Optional background image and brand logos.
| Field | Type | Notes |
|---|---|---|
heading* | string | |
body | array (block) | |
variant | string | button | form |
cta_text | string | |
cta_url | url | |
hubspot_form_id | string | |
background_image | image | |
show_brand_logos | boolean |
contentCarouseldark/lightCarousel of blog posts, case studies, or podcast episodes. Can be manually curated or auto-filtered by tag.
| Field | Type | Notes |
|---|---|---|
heading | string | |
content_type* | string | blog | case_study | podcast |
items[] | reference array | |
filter_tag | reference (tag) |
teamGriddark/lightDisplay team members filtered by leadership status or manual selection.
| Field | Type | Notes |
|---|---|---|
heading | string | |
filter* | string | leadership | all | custom |
members[] | reference array (teamMember) |
embedSectiondark/lightRaw HTML embed for third-party widgets (HubSpot forms, Calendly, etc.).
| Field | Type | Notes |
|---|---|---|
heading | string | |
embed_code* | text |
twoColumndark/lightSplit layout with independent rich text and image content in each column.
| Field | Type | Notes |
|---|---|---|
left_content* | array (block + image) | |
right_content* | array (block + image) |
videoSectiondark/lightEmbedded video player (YouTube/Vimeo) with heading, description, and optional thumbnail.
| Field | Type | Notes |
|---|---|---|
heading | string | |
body | array (block) | |
video_url* | url | |
thumbnail | image |
faqSectiondark/lightExpandable accordion for frequently asked questions. Each item has a question and rich text answer.
| Field | Type | Notes |
|---|---|---|
heading | string | |
items[]* | object array | question (string), answer (block[]) |
spacerVisual spacing element. Three sizes available for controlling vertical rhythm between sections.
| Field | Type | Notes |
|---|---|---|
size* | string | small | medium | large |
capabilitiesSectiondark/lightBranded capability cards (1-6) with title, tagline, description, link, and agency tags.
| Field | Type | Notes |
|---|---|---|
label | string | |
heading* | string | |
capabilities[]* | object array | title, tagline, description, link_text, link_url, agencies[] |
differentiatorSectiondark/lightCompetitive differentiator cards with optional badge and supporting stats.
| Field | Type | Notes |
|---|---|---|
heading* | string | |
cards[]* | object array (1-4) | title, badge, description, stats[] |
networkSectiondark/lightDisplay agency network brands with name, description, and optional CTA.
| Field | Type | Notes |
|---|---|---|
heading* | string | |
subheading | text | |
agencies[]* | object array | name, description, link_url, cta_text, cta_url |
audienceSectiondark/lightTarget audience persona cards with Lucide icons, description, and CTAs. 1-4 personas.
| Field | Type | Notes |
|---|---|---|
heading* | string | |
subheading | text | |
personas[]* | object array (1-4) | title, icon (Lucide name), description, cta_text, cta_url |
Reusable React components used across multiple pages. These are not Sanity schemas but front-end components imported directly in page files.