Blocks and families
Use Foundry's page-building vocabulary and select reusable block families deliberately.
- Owner
- Foundry product documentation
- Source
docs/docs/BLOCKS.md- Ref
v0.1.4- Policy
- release-bound
Component pins for v0.2.0
| Component | Role | Version |
|---|---|---|
| core | runtime | v0.1.15 |
| theme-shield | theme | v0.1.14 |
| restricted-component-1 | brand-theme | v0.1.4 |
| starter | reference | v0.1.2 |
| docs | reference | v0.1.4 |
| distribution | tooling | v0.2.0 |
LikeStyle Foundry renders page sections from front matter using a shared block registry.
Section Contract
Each page uses a sections array in front matter. Every section supports:
block: Required block key (must exist indata/foundry/block-registry.yaml).id: Optional anchor ID.content: Required data payload for the block.design: Optional display/layout hints.data: Optional data binding to pull reusable content fromsite.Data.
Example section shell:
sections:
- block: hero
id: top
content:
title: "Headline"
text: "Support text"
design:
variant: centered
Canonical Block Standard
Foundry blocks now follow a canonical template and naming convention.
- Canonical template source:
/layouts/partials/blocks/_template.htmlinlikestyle-foundry-core - BEM naming convention:
- Block root:
foundry-[block-name] - Element:
foundry-[block-name]__[element] - Modifier:
foundry-[block-name]--[modifier]
- Block root:
Example BEM structure:
<section class="foundry-hero ...">
<div class="foundry-hero__inner ...">
<h1 class="foundry-hero__title ...">...</h1>
<p class="foundry-hero__text ...">...</p>
<div class="foundry-hero__actions ...">...</div>
</div>
</section>
For block design options and accepted variants, use the registry:
/data/foundry/block-options.yaml(inlikestyle-foundry-core)- Live demo illustration:
/blocks/#showcase-canonical-standard(inlikestyle-foundry-demo)
This file is the source of truth for design fields per block and is intended
for future schema/tooling validation.
Data-Driven Sections (Reusable Content)
Foundry supports merging data files into sections.
- String path:
data: "foundry.blocks.home-hero" - Object path:
data: { source: "foundry", path: "blocks.home-hero" }
When both section values and data values exist, explicit section values win.
Registry Overview
Current registered blocks:
hero,trust-badges,features,media-textpage-list,quote,tabs,gallery,accordion,social-shareicon-grid,steps,stats-band,video-hero,before-aftercontent-sidebar-nav,timeline,map-coverage,contact-split,ctatestimonials,testimonials-carousel,logos,onboarding-timeline,stats-gridfaq-accordion,faq-cta,prose-panel,illustration-panel,case-studiescertification-badges,resource-downloads,lead-magnet,topic-chip-nav,team-gridfounder-profile,cta-image-paragraph,comparison-table,cta-button-listpricing-tiers,pricing-comparison,logo-trustcoming-soon-hero,coming-soon-cta,coming-soon-trust,coming-soon-footer
New Blocks
page-list
Description: Lists content from a Hugo section (blog, articles, etc.) in cards, list, or compact view.
content contract
title(string, optional)text(string, optional, markdown)section(string, required) — Hugo section path likebloglimit(number, optional, default6)sort(string, optional) —date,title,weight
design options
view(string, optional, defaultcards) —cards,list,compactcolumns(string, optional, default3) —2,3(used for cards grid)show_date(bool, optional, defaulttrue)show_summary(bool, optional, defaulttrue)show_image(bool, optional, defaulttrue)css_class(string, optional)
example front matter
- block: page-list
id: latest-articles
content:
title: "Latest Articles"
text: "Recent updates from the team."
section: "blog"
limit: 6
sort: "date"
design:
view: "cards"
columns: "3"
show_date: true
show_summary: true
show_image: true
quote
Description: Standalone quote/pull-quote with optional author metadata and avatar.
content contract
quote(string, required, markdown)author(string, optional)role(string, optional)image(string, optional)
design options
variant(string, optional, defaultcentered) —centered,left,largecss_class(string, optional)
example front matter
- block: quote
id: founder-quote
content:
quote: "We optimize reliability first, then scale."
author: "Alex Rivera"
role: "Founder, Northline Systems"
image: "/images/team/alex.jpg"
design:
variant: "large"
tabs
Description: Accessible tabbed content block for grouped content and side-by-side comparisons.
content contract
title(string, optional)tabs(array, required)tabs[].label(string, recommended)tabs[].icon(string, optional)tabs[].text(string, markdown)
design options
variant(string, optional, defaultunderline) —underline,pills,borderedcss_class(string, optional)
example front matter
- block: tabs
id: delivery-model-tabs
content:
title: "Delivery Options"
tabs:
- label: "Starter"
icon: "rocket-launch"
text: "Lean setup with core governance controls."
- label: "Growth"
icon: "chart-bar"
text: "Expanded automation and reporting layers."
- label: "Enterprise"
icon: "building-office"
text: "Dedicated workflows, policy controls, and SLA support."
design:
variant: "pills"
gallery
Description: Responsive image gallery with optional captions and dialog-based lightbox.
content contract
title(string, optional)text(string, optional, markdown)images(array, required)images[].src(string, required)images[].alt(string, required)images[].caption(string, optional, markdown)
design options
columns(string, optional, default3) —2,3,4gap(string, optional, defaultmd) —sm,md,lgaspect(string, optional, defaultsquare) —square,landscape,autocss_class(string, optional)
example front matter
- block: gallery
id: work-gallery
content:
title: "Recent Delivery Work"
text: "Representative snapshots from client programs."
images:
- src: "/images/gallery/session-01.jpg"
alt: "Workshop whiteboard"
caption: "Architecture sprint workshop"
- src: "/images/gallery/session-02.jpg"
alt: "Dashboard screenshot"
caption: "Governance dashboard rollout"
- src: "/images/gallery/session-03.jpg"
alt: "Team working session"
design:
columns: "3"
gap: "md"
aspect: "landscape"
accordion
Description: General-purpose accordion for grouped content beyond FAQs.
content contract
title(string, optional)text(string, optional, markdown)items(array, required)items[].title(string, required)items[].text(string, required, markdown)items[].icon(string, optional)
design options
allow_multiple(bool, optional, defaultfalse)variant(string, optional, defaultbordered) —bordered,minimal,cardscss_class(string, optional)
example front matter
- block: accordion
id: process-accordion
content:
title: "Implementation Details"
text: "Open each section to view delivery details."
items:
- title: "Discovery"
icon: "magnifying-glass"
text: "We map current process risk and ownership gaps."
- title: "Implementation"
icon: "wrench-screwdriver"
text: "We apply controls and workflow automation incrementally."
- title: "Operate"
icon: "rocket-launch"
text: "We monitor performance and refine the operating model."
design:
allow_multiple: false
variant: "cards"
social-share
Description: Page-level social sharing links with optional clipboard copy behavior.
content contract
title(string, optional)platforms(array, required)- Supported platform values:
twitter,linkedin,facebook,email,copy-link
design options
variant(string, optional, defaultbuttons) —buttons,icons,minimalcss_class(string, optional)
example front matter
- block: social-share
id: share-this-page
content:
title: "Share This Guide"
platforms:
- twitter
- linkedin
- email
- copy-link
design:
variant: "buttons"
Existing Core Block Contracts (Quick Reference)
This section keeps a compact contract list for the rest of the registry.
hero
content
title(string)text(string)primary_action(object:text,url, optionalicon)secondary_action(object:text,url, optionalicon)
design
variant:centered|leftcss_class: optional
features
content
title(string)text(string)items(array:name,description, optionalicon)
design
columns:2|3|4variant:cards|plaincss_class: optional
media-text
content
title(string)text(string)eyebrow(string, optional)image(string)image_alt(string)items(array of strings, optional)primary_action(object)secondary_action(object)
design
media_position:left|rightmedia_ratio:landscape|square|portrait|widecss_class: optional
icon-grid
content
title(string)text(string)items(array:title,text, optionalicon)
design
columns:2|3|4variant:plain|cardscss_class: optional
steps
content
title(string)subtitle(string)steps(array:title,text, optionalicon)
design
columns:2|3|4variant:cards|plaincss_class: optional
stats-band
content
title(string)subtitle(string)stats(array:value,label)
design
variant:dark|light|brandcss_class: optional
video-hero
content
title(string)text(string)eyebrow(string, optional)bullets(array, optional)video_url(string, optional)video_poster(string, optional)image(string, fallback)image_alt(string)primary_action(object)secondary_action(object)
before-after
content
title(string)subtitle(string)before(object:title,text,items[])after(object:title,text,items[])
content-sidebar-nav
content
title(string)subtitle(string)items(array:id,title,text, optionalbullets)
timeline
content
title(string)subtitle(string)events(array:title,text, optionaldate,badge)
map-coverage
content
title(string)subtitle(string)image(string)image_alt(string)stats(array)markers(array, optional)note(string, optional)
contact-split
content
title(string)subtitle(string)phone(string, optional)email(string, optional)address(string, optional)hours(string, optional)form_title(string)form_text(string, optional)form_action(string)form_method(string, optional)fields(array)submit_text(string)privacy_note(string, optional)
cta
content
title(string)text(string)primary_action(object)secondary_action(object)
design
variant:centered|leftcss_class: optional
testimonials
content
title(string)subtitle(string)testimonials(array:quote,author)
testimonials-carousel
content
title(string)subtitle(string)testimonials(array:quote,author, optionalrole,rating)
logos
content
title(string)subtitle(string)logos(array:name,image, optionaldescription)
onboarding-timeline
content
title(string)subtitle(string)steps(array:name,description, optionalicon)
stats-grid
content
title(string)subtitle(string)stats(array:value,label, optionalicon)
faq-accordion
content
title(string)subtitle(string)items(array:question,answer)
faq-cta
content
title(string)subtitle(string)items(array:question,answer)cta_title(string)cta_text(string)cta_action(object)cta_secondary_action(object)
prose-panel
content
title(string)text(markdown)
illustration-panel
content
image(string)image_alt(string)caption(string)panel_width:standard|wide|compact
case-studies
content
title(string)cases(array:client_type,title,problem,solution,results[])
certification-badges
content
title(string)subtitle(string)badges(array:name, optionaldescription, optionalicon)
resource-downloads
content
title(string)subtitle(string)form_title(string)form_action(string)submit_text(string)privacy_note(string)resources(array:title,description,thumbnail,thumbnail_alt,file)
lead-magnet
content
title(string)subtitle(string)offer_title(string)offer_text(string)download_url(string, optional)form_title(string)form_text(string, optional)form_action(string)form_method(string, optional)fields(array)submit_text(string)privacy_note(string)
topic-chip-nav
content
title(string)items(array:text,url, optionalicon)
team-grid
content
title(string)subtitle(string)members(array:name,role,bio,image,image_alt, optionallinks)
founder-profile
content
title(string)name(string)role(string)subtitle(string)image(string)image_alt(string)image_webp_srcset,image_srcset,image_sizes,image_width,image_heightparagraphs(array)highlights(array)contact_email_href,contact_email_labelcontact_phone_href,contact_phone_label
cta-image-paragraph
content
title(string)paragraph(string)image(string)image_alt(string)action(object:text,url, optionalicon)
comparison-table
content
title(string)columns(array)rows(array)
cta-button-list
content
title(string)subtitle(string)buttons(array:text,url, optionalicon)
pricing-tiers
content
title(string)tiers(array:name,price, optionalalt_price,includes,best_for)
pricing-comparison
content
title(string)subtitle(string)plans(array:name,price,description,features, optionalhighlight,highlight_label,action)
logo-trust
content
title(string)subtitle(string)logos(array:name,image)badges(array of strings)
coming-soon-* blocks
coming-soon-herocoming-soon-ctacoming-soon-trustcoming-soon-footer
See the site implementation examples for full payload shape (content/coming-soon.md in consuming sites).