Building Websites with Modules That Convert

Building Websites with Modules That Convert

Mitchell Christ
By Mitchell Christ
9 min read
On this page
  1. What Is a Module?
  2. Content Modules
  3. Hero (split)
  4. Card List
  5. Callout
  6. Prose
  7. Accordion List
  8. Stat List
  9. Step List
  10. Quote List
  11. Logo List
  12. Person List
  13. Utility Modules
  14. Breadcrumbs
  15. Custom HTML
  16. Form Module
  17. Search Module
  18. Blog Modules
  19. Blog Index
  20. Blog Post List
  21. Blog Post Content
  22. Building a High-Converting Landing Page
  23. The Prompt
  24. What's Next
layered brand storytelling collage of hip product merchandise (hoodies, baseball caps, stickers, keyboard, mice, nintendo switch, backpack, tech gear, etc) with the logo "SanityPress", white on black color scheme

If you've ever set up a Next.js + Sanity integration from scratch, you know it's not hard—until it is. Connecting the CMS, setting up schemas, writing GROQ queries, wiring up TypeScript types, building page rendering logic… it adds up fast. That's exactly the problem SanityPress solves.

This is exactly the problem SanityPress solves.

SanityPress is an open-source Next.js 16 + Sanity CMS starter template built and maintained by a Senior Developer at a digital marketing agency in California. Over the past three-plus years—with roots going back to 2021—it's been the engine behind 30+ shipped projects across industries: ecommerce, corporate, SaaS, and beyond. Multi-page sites with 10+ pages and full blog setups, shipped in days and weeks at agency pace.

The core idea is simple: stop reinventing the foundation. SanityPress handles the boilerplate—TypeScript, TypeGen, Visual Editing, App Router, page rendering—so you can focus on building for your client.

At the heart of that foundation is the module system.

What Is a Module?#

In SanityPress, a module is a page section. A page is just a stack of modules. That’s it.

Every module is two things at once: a Sanity schema object (what editors see in the Studio) and a React component (what renders on the frontend). Add a module to a page in the Studio, save, and it appears on the site. No code changes required.

This model is deceptively powerful. It keeps the codebase organized, makes pages easy for non-technical editors to manage, and scales naturally as sites grow. It's also increasingly well-suited for AI-assisted content generation. You can describe a page in plain language, and an agent can create or populate it using the Sanity MCP.

SanityPress ships with 17 production-tested modules across three groups.

Content Modules#

These are the workhorses. They handle the majority of what you see on any given page.

Hero (split)#

Hero (split) module

The hero.split module is your page's first impression. As the name suggests, it splits the viewport—copy on one side, an image or graphic on the other. The emphasis is deliberately on the asset: this is the right module when you have a strong screenshot, product render, or video to pair with your headline.

One pattern that works especially well: stack two or three hero modules vertically on the same page, each with a different theme to create visual contrast between sections. It’s an efficient way to showcase multiple product features without building a carousel or writing custom layout code.

Card List#

Card list module

card-list is one of the most versatile modules in the system. At its most common, it's the go-to for unique value propositions (UVPs)—use icons paired with short copy to communicate your brand's differentiators at a glance.

But it goes further. Give each card an image and it becomes a resource grid for white papers, case studies, or editorial content. Add a touch of CSS (grid-column: span 2) and individual cards expand into a bento box layout—great for feature-heavy marketing pages that need visual hierarchy.

Callout#

Callout module

callout is the conversion module. It belongs at the bottom of almost every page, with the CTA front and center. Think of it as the "so what do you want me to do next?" moment for your visitor.

It's also useful mid-page on long scrollers—place a callout between other modules and wire its CTA as a jump link down to a form at the bottom of the page. A field worth adding to your own implementation: bgImage, for a background image or pattern that helps this section visually pop against the surrounding content.

Prose#

Prose module

Got long copy? Use prose. This is the rich-text module, built on Sanity's Portable Text, and it includes a few extras that make it particularly useful for content-heavy pages.

The standout feature is an optional table of contents with automatic heading detection—toggle it on and it floats left or right of the content. Pair that with inline images, code blocks, and custom HTML support, and prose becomes the right module for documentation pages, terms and privacy pages, or any page where the writing is the product.

Accordion List#

Accordion list module

FAQ sections are accordion-list's home turf, but it works anywhere you want to progressively reveal content. The exclusive option ensures only one item can be open at a time—useful for focused reading flows.

The most valuable under-the-hood feature: a toggle for schema.org FAQ markup. When Google parses that markup, your questions can appear directly in search results as expandable rich snippets—a meaningful SEO win for landing pages.

Stat List#

Stat list module

Numbers build trust faster than words. stat-list puts key metrics front and center—years in business, sites shipped, customers served, whatever tells your story best.

The structure is simple: a value, an optional suffix, and a short label. Stack three or four stats in a row and you have a trust signal that works at a glance. Real data resonates. Users want to see the numbers.

Step List#

Step list modue

Sequential flows—onboarding steps, "how it works" sections, setup guides—belong in step-list. The "easy as 1-2-3" pattern is one of the most reliable conversion elements on any landing page.

Like accordion-list, it comes with a schema.org markup toggle—this time for How-To structured data. When enabled, your step-by-step instructions can surface in Google's rich results, increasing visibility in search.

Quote List#

Quote list module

Social proof is one of the strongest forces in marketing. quote-list renders testimonials with attribution—a face, a name, a quote. That combination of a real person endorsing your product resonates with visitors in a way that feature lists never quite do.

Testimonials are stored as a shared document type, reusable across multiple pages without duplicating content. Update a testimonial once, and it updates everywhere it appears.

Logo List#

Logo list module

"Trusted by," "As seen on," "Our clients"—logo-list handles all of these patterns. A row of recognizable brand logos communicates credibility in under a second.

When you have a large number of logos to show, turn on autoScroll for a continuously scrolling marquee effect. It keeps the section visually dynamic and ensures every logo gets equal screen time.

Person List#

Person list module

The team page module. person-list renders a grid of people with name, title, and photo by default—enough for most "About" or "Leadership" pages. The schema is easy to extend: add a bio field, social links, or a department grouping as your client's needs dictate.

Utility Modules#

These four modules aren't the stars of the page, but they punch above their weight in functionality and SEO value.

Breadcrumbs module

The breadcrumbs module renders a navigation trail for the current page—especially useful for nested routes like /blog/category/post-title. It ships with Breadcrumb schema.org markup by default.

What makes this module smart is the structuredDataOnly toggle: enable it and the breadcrumbs render their schema markup without displaying the visual UI element. You get Google's rich result breadcrumbs in search without affecting your page layout.

Custom HTML#

Custom HTML module

The creator's personal favorite—and for good reason. custom-html is the escape hatch that gives developers superpowers.

Need to add a third-party tracking script? Drop it in. Have a YouTube or Vimeo embed code from a client? Done. Want to apply a specific CSS tweak to one module on one page without touching the global stylesheet? The optional css field handles it, scoped cleanly to that page.

This module threads a needle that most CMS systems get wrong: it gives technical teams the flexibility they need without exposing raw code editing to non-technical editors who shouldn't have it.

Form Module#

Form module

Contact forms drive leads, and form-module makes them first-class citizens in the page builder. The module references a separate form document—build and configure a form once, then drop it onto any page.

The integration layer is intentionally flexible: wire it up to HubSpot, FormSpree, a custom API endpoint, or whatever your client is using. The module handles the UI; the backend is up to you.

Search Module#

Search module

Built-in site search with a scope parameter editors can control—search across all content, or restrict it to just pages or just blog posts. Under the hood it uses GROQ's content-lake search, so you're querying actual Sanity data without needing a third-party search index.

It's a feature that takes weeks to build properly from scratch. Here, it's a module you add in seconds.

Blog Modules#

SanityPress ships with a complete blogging system. These three modules cover the full publishing surface.

Blog Index#

Blog index module

The blog-index module is the blog's homepage. It automatically pulls the most recent post as a featured article at the top, then renders the rest in a paginated grid with category filters built in. Set postsPerPage to control how many posts appear per page.

Drop this module on a page and point the slug at /blog—that's all it takes to have a full, filter-navigable blog homepage.

Blog Post List#

Blog post list module

A reusable widget for surfacing recent posts anywhere on the site. Use it on the homepage to drive traffic to the blog. Use it on individual blog post pages as a "Read More" section—it automatically filters out the post currently being viewed, so there's no awkward self-reference.

Control how many posts appear with the limit field.

Blog Post Content#

Blog post content module

The article renderer. It handles the full blog.post document with rich text, embedded images, code blocks, and custom HTML. The standout option: a table of contents that floats left or right of the article body; useful for long-form technical content where readers benefit from navigation landmarks.

Building a High-Converting Landing Page#

Here's what this system looks like in practice. Below is an 8-module stack for a high-converting product or service landing page—assembled entirely from SanityPress modules, no custom code required.

  • hero.split 👉 Headline + subheadline + product image + primary CTA
  • logo-list 👉 Social proof logos with autoScroll
  • stat-list 👉 Key metrics
  • card-list 👉 4-6 UVPs with icons
  • step-list 👉 "How it works" 3 steps with How-To schema
  • quote-list 👉 2-4 testimonials with name, role, photo
  • accordion-list 👉 FAQs with schema.org markup
  • callout 👉 Final CTA

This exact layout has been created as a sample page here.

The Prompt#

Using Claude with the Sanity MCP, you can generate a page like this with a single prompt. Here's the one we used:

  • Claude Code
  • Create a high-converting landing page in Sanity using SanityPress modules.
    Use this module stack in order:
    
    1. hero.split — Strong headline + 1-sentence subheadline + product image/screenshot + one primary CTA button
    2. logo-list — "Trusted by" or "As seen on" section, autoScroll enabled for 6+ logos
    3. stat-list — 3-4 key metrics with short descriptors (e.g. "30+ Sites Shipped", "3 Years Active")
    4. card-list — 4-6 unique value props, each with an icon and 2-3 sentence description
    5. step-list — 3-step "How it works" flow, How-To schema enabled
    6. quote-list — 2-4 customer or developer testimonials with name, role, and photo
    7. accordion-list — 5-7 FAQs, FAQ schema enabled for SEO
    8. callout — Final conversion section: compelling headline + 1 strong CTA button
    
    Keep copy concise and benefit-focused. Every section should answer: "Why does this matter to me?"

    Run that prompt with your product details swapped in, and an agent can scaffold the entire page—content and all—directly into your Sanity dataset in minutes.

    What's Next#

    SanityPress is actively maintained and continuing to evolve, especially as AI tooling like the Sanity MCP makes content generation and page scaffolding faster than ever.

    Stop Scaffolding. Start Shipping.

    Clone SanityPress and have your first page live today.