
When I set out to build the original and new SanityPress starter templates, I wanted more than just a Next.js + Sanity boilerplate. I wanted a foundation that developers could understand, extend, and rely on for production-ready websites that developers could use as a foundation for client and enterprise projects, or portfolio sites and personal blogs.
At its core, this approach relies on modular architecture—schemas and data types that are structured for clarity, flexibility, and reusability.
Core Document Types#
The architecture starts with a few main document types that form the backbone of the site:
- Site: stores global data like header/footer menus, social links, and the site logo.
- Page: each site route is a page, composed of modular “sections” that can be reordered and customized.
- Navigation: a reusable collection of links, perfect for menus, dropdowns, and megamenus.
This separation ensures clean data management while keeping content editors focused on meaningful building blocks.
Primitive Data Types#
Next, I define primitive data types to keep content consistent across the site. These act like reusable building blocks:
- Metadata: title, description, slug, and a
noindex
boolean for SEO control. - Link: a reference to page documents, ensuring routes stay consistent even if slugs change.
- CTA (Call-to-action): either an internal link reference or an external URL, with styling options for buttons or text links.
By standardizing these types, developers reduce redundancy and enforce consistency, while giving editors a familiar content structure.
Additional Data Types#
Beyond the essentials, I introduce additional document and object types that enhance site flexibility:
- Link list: A list of link objects, mainly used in the navigation data type (e.g. for dropdowns or megamenus).
- Blog post: Functions like a page, but dedicated to the
/blog/
route. - Blog category: Categories that can be assigned to blog posts for improved organization and filtering.
- Redirect: Handles page-to-page or external redirects.
- Miscellaneous Objects: Site-specific data and content such as:
- Testimonial: client quotes and success stories, etc.
- Person: for employee listings and blog authors, etc.
- Logo: for the site logo or a logo list module, etc.
This structure gives each project a flexible set of schemas while still being extendable for unique business needs.
Why Modular Architecture Matters#
For developers, this architecture solves several pain points:
1. Scalability Without Chaos
As a site grows, schema definitions can quickly become unmanageable. By breaking the system into core documents, primitives, and extensions, each piece stays focused. You don’t end up with a single bloated page
schema that tries to do everything.
2. Editor Empowerment
Content editors can manage global settings, reorder page modules, and update navigation without needing a developer. This leads to fewer support tickets and more independence for non-technical users.
3. Reuse and Consistency
Primitive types like metadata
, link
, and cta
guarantee that SEO, routing, and CTAs behave consistently everywhere. Developers avoid “reinventing the wheel,” and editors see the same patterns across different contexts.
4. Extensibility for Unique Needs
The architecture is opinionated but not restrictive. Need a testimonial
type? Add it. Want a custom case study page? Extend page
model as a page.case-study
document. The structure anticipates change rather than resisting it.
5. Reduced Technical Debt
A clear modular architecture makes onboarding new developers smoother and ensures that projects remain maintainable months—or years—later.

Wrapping Up#
TDLR; a solid schema design upfront leads to efficient development, happier editors, and maintainable & scalable codebases.
Good schema design isn’t just about storing data—it’s about creating a sustainable system that developers and editors can both thrive in. With SanityPress, I’ve distilled my approach into a starter template that balances flexibility with clarity.
👉 Ready to see this approach in action? Explore SanityPress and start building with the template today.