
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)#

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 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 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#

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#

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#

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#

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#

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#

"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#

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#

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#

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#

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#

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#

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#

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#

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 CTAlogo-list👉 Social proof logos withautoScrollstat-list👉 Key metricscard-list👉 4-6 UVPs with iconsstep-list👉 "How it works" 3 steps with How-To schemaquote-list👉 2-4 testimonials with name, role, photoaccordion-list👉 FAQs with schema.org markupcallout👉 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:
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.
- See how easy it is to make edits in the Studio: no-code content management at its best
- Star SanityPress on GitHub: stay up to date on the changelog and show your support
- View all modules: browse every module with live examples
- Start building: clone the repo and ship your next website today

