Blocks catalog β
Blocks are the building units of a page. You drag them from the palette on the left of the Puck editor onto the canvas, set their props on the right, and the public site renders them. Every block is church-aware β it pulls live data from the rest of your GCM account where it makes sense, so you don't double-enter content.

The palette is grouped into four sections: Layout, Church, Media, and Content feeds. Below is the working catalog with a one-line "when to use it" for each.
Layout blocks β
These are the structural primitives β they don't care about your data, they just hold things in place.
- Hero banner β the big top-of-page block with a headline, subhead, background image or video, and one or two CTA buttons. Drop this at the top of every landing-type page. If you only put one block on the page, make it this one.
- Rich text β a TipTap-powered prose block. Headings, lists, links, blockquotes, inline images. Use it for about pages, statement of faith, mission, anywhere you'd write paragraphs.
- Image / video β single asset with a caption. The video variant supports YouTube, Vimeo, and uploaded MP4. For a slideshow, use Image slider under Media instead.
- Columns β splits the row into 2, 3, or 4 columns. Useful for "three pillars" sections, side-by-side images and text.
- Grid β denser layout primitive (4-12 cells, configurable gap). Reach for this when Columns isn't enough.
- Section β a wrapper with its own background colour, padding, and optional divider shape at the top/bottom. Use it to break the page into visually distinct bands.
- Spacer / divider β vertical whitespace or a horizontal rule. Small but indispensable for breathing room.
- Custom HTML β raw HTML/CSS escape hatch. Only use it if no other block does what you need. Custom HTML is not sanitised on render, so don't paste anything you didn't write.
Church blocks β
These pull live data from the rest of your GCM account.
- Service times β renders the meeting schedule from your Calendar module. No re-entry β when you change a recurring service time, the website updates.
- Giving button β links to your hosted
/givepage. Use this anywhere you want a CTA. For a full donation form on the page, use Native giving form. - Native giving form β embeds the donation form directly into the page. Visitors give without leaving.
- Visitor form embed / Native visitor form β embed the visitor connect card. Embed loads it in an iframe (lighter); native renders inline (better UX). See Visitor form for what fields appear.
- Event list β upcoming events from the Calendar module, configurable count and category filter.
- Events calendar β a full month-view calendar. Heavier; use it on a dedicated
/eventspage, not on a homepage. - Contact form β sends submissions to a configured email address. For more control (custom fields, routing), use Form block below with a form built in the Forms module.
- Form block β embeds any form from the Forms module. Pick the form from a dropdown β the block does the rest.
- Staff directory β members tagged with role
stafforpastor. Includes name, role, photo, optional contact link. - Ministry showcase / Groups showcase β cards driven by your Ministries / Groups modules.
- Location map β Leaflet map with a pin at an address you type. Geocoding runs on save.
- Sermon player β embed a single sermon (audio or video) with TipTap notes. Pick the sermon from a dropdown. For a list of sermons, use Sermon feed below.
- Birthday celebrations β this week's member birthdays. Most churches use this on a members-only page.
Media blocks β
- Photo gallery β masonry or grid layout, lightbox on click.
- Image slider β horizontal carousel, autoplay optional.
- Testimonials β quote cards with author name and photo.
- Social links β row of icon buttons (Facebook, Instagram, YouTube, X, TikTok, WhatsApp). Pulls URLs from Settings.
- Newsletter signup β single-field email capture. Submissions land in your CRM as visitor records tagged
newsletter.
Content feeds β
These are list/grid blocks driven by data you publish in the Content tab.
- Blog feed β your published blog posts in grid, magazine, or list layout. Configurable per-page count, optional category filter.
- Sermon feed β your published sermons, same three layouts. This is what most homepages use to surface the latest message.
- FAQ β accordion of question/answer pairs. Configure the items inline; no separate content type.
- CTA banner β full-width promotional band with a headline and one button. Lighter than a Hero.
- Scripture quote β formatted Bible reference with the verse text and an attribution line.
- Stats counter β animated counters ("450 members served", "12 ministries"). The counts can be hardcoded or pulled live from your account.
- Feature grid β icon + title + description cards. Useful for "what we believe" or "what we offer" sections.
- Countdown timer β counts down to an event date.
- Timeline β vertical timeline of milestones.
- Video embed β paste a YouTube or Vimeo URL.
Floating widgets β
These aren't in the block palette β they're configured under Settings β Floating widgets and appear on every page automatically.
- WhatsApp button β green floating bubble that opens WhatsApp with a pre-filled message. Configure the phone number and default text.
- Language switcher β small EN / ES toggle in the corner. Only useful if your site has translations.
Choosing a block β quick rules β
- "I need a big top-of-page intro" β Hero banner.
- "I need to write paragraphs" β Rich text.
- "I want visitors to see upcoming events" β Event list.
- "I want them to give without leaving the page" β Native giving form.
- "I want them to hear last Sunday's message" β Sermon feed (or Sermon player for a specific one).
- "I want a contact form that does just one thing" β Contact form. Anything more β Form block.
- "I want a list of posts/articles" β Blog feed.
When in doubt, drag a block onto the canvas and see what it renders β every block ships with sane defaults, and the right-hand panel shows you which props matter.
Where blocks come from β
Every block is a React component in src/features/website-builder/blocks/ registered in puck-config.tsx. New blocks get added regularly. If something here doesn't show up in your palette, your build may be behind β refresh the page or check with support.
See also: Creating a page, Branding, Publishing + drafts.