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
bca61d2f60b4722d484f8baf2b1aa7ff027cedb9- Policy
- release-bound
Component pins for v0.2.6
| Component | Role | Version |
|---|---|---|
| core | runtime | v0.1.24 |
| theme-shield | theme | v0.1.15 |
| starter | reference | v0.1.3 |
| docs | reference | v0.1.4 |
| distribution | tooling | v0.3.4 |
| restricted-component-1 | consumer-reference | v0.1.22 |
| restricted-component-2 | consumer-reference | v1.1.21 |
LikeStyle Foundry renders page sections from front matter using a shared block registry.
Terminology
Foundry uses a layered composition model:
block- the technical framework primitive
section- a placed page instance of a block or composition
composition- a reusable named structure, currently backed by the
brickscompatibility model
- a reusable named structure, currently backed by the
blueprint- the public/editor term for a governed page creation path backed by a page type contract
In public/editor language, users build pages from sections and may reuse compositions. In technical framework language, blocks remain the stable render primitives.
For long-term family, variant, and preset governance, see FOUNDRY-BLOCK-ARCHITECTURE.md.
For the first concrete family-level example, see FOUNDRY-HERO-FAMILY-SPEC.md.
For cross-layer ownership, see FOUNDRY-FEATURE-PLACEMENT-MATRIX.md.
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
In most pages, sections are the primary assembly format. When reusable named
structures are needed, compositions may be used through the current bricks
compatibility layer.
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.
Blocks should remain the smallest stable shared framework unit. Reusable multi-part structures belong in the composition layer, not in increasingly overloaded individual blocks.
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.
This is complementary to compositions:
- data bindings are for reusable content payloads
- compositions are for reusable named structures
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).