
Security News
/Research
Wallet-Draining npm Package Impersonates Nodemailer to Hijack Crypto Transactions
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
sanity-blog-theme
Advanced tools
Modern, editor-friendly starter that pairs Next.js (App Router) with Sanity Studio v3. It ships with a flexible Page Builder, a blog, SEO fields, and a curated Studio experience (Desk structure, grouped fields, icons, and collapsible inputs).
/studio
with a custom content structureThe easiest way to get started is using the CLI:
npx sanity-blog-theme my-blog-project
cd my-blog-project
Or using your preferred package manager:
# npm
npx sanity-blog-theme my-blog-project
# yarn
yarn create sanity-blog-theme my-blog-project
# pnpm
pnpm create sanity-blog-theme my-blog-project
or Directly clone the repository:
git clone https://github.com/multidots/sanity-blog.git
cd sanity-blog-theme
This will:
.gitignore
filepackage.json
with your project nameThe CLI will guide you through:
Sanity Project Configuration - Enter your project details:
Environment File Creation - Choose to:
.env.local
with your actual project details.env.example
template for manual setupReady to Go - Your project will be fully configured and ready to run!
sanity-blog-theme/
βββ public/ # Static assets
β βββ images/ # Image assets
βββ src/ # Source code
β βββ app/ # Next.js App Router
β β βββ (frontend)/ # Frontend route group
β β β βββ [slug]/ # Dynamic page routes
β β β βββ blog/ # Blog routes
β β β βββ [slug]/ # Individual blog post routes
β β βββ api/ # API routes
β β β βββ submit-form/ # Form submission endpoint for contact form plugin integration
β β βββ studio/ # Sanity Studio routes
β β βββ [[...tool]]/ # Studio catch-all routes
β βββ components/ # React components
β β βββ blocks/ # Page Builder block components
β βββ sanity/ # Sanity configuration and schemas
β βββ lib/ # Sanity utilities
β βββ schemaTypes/ # Content schemas
β βββ blocks/ # Block schemas for Page Builder
sanity.config.ts
src/sanity/schemaTypes/
src/sanity/structure.ts
@multidots/sanity-plugin-contact-form
integrationStudio is mounted at /studio
via the Next.js App Router integration.
Documents
page
: Title, Slug, Content (Page Builder), SEOpost
: Title, Slug, Author, Main Image, Categories, Published At, Body, SEOauthor
: Name, Slug, Image, Biocategory
: Title, Slug, DescriptionsiteSettings
(singleton): General, Header (Logo, Menu), Footer (menus, social), Blog settings, Home page referenceObjects and blocks
pageBuilder
: Array composing these blocks:
hero
: Headline/subtitle, background (image/color), alignment, colorsctaBlock
: Heading, Subheading, Button (text/link/new tab), background (image/color), text colorimageTextSection
: Title, portable description, main image (+alt/size), image position, buttonclientList
: Title, logos (image + url/new tab)services
: Title, services (title, text, background color)testimonialSlider
: Title, testimonials (quote, author)team
: Title, team (name, role, image, bg color)address
: Title, address, phone, emailblockContent
: Portable Text with basic marks, images, CTAs, etc.seo
: Title override, description, image, noindexIcons
@sanity/icons
for a clearer insert menu and arrays.
hero
(TextIcon), ctaBlock
(BlockContentIcon), team
(UsersIcon), address
(PinIcon)src/sanity/schemaTypes/blocks/*Type.ts
.Defined in src/sanity/structure.ts
:
src/components/PageBuilder.tsx
_type
in the pageBuilder
array to a React component in src/components/blocks/*
next-sanity
for a smoother authoring workflow@multidots/sanity-plugin-contact-form
v1.0.5Queries live in src/sanity/lib/queries.ts
and cover header/footer, sitemap, pages, posts, and settings.
PAGE_QUERY
loads page content + SEOPOSTS_QUERY
, POSTS_COUNT_QUERY
, SINGLE_POST_QUERY
power the blogSITE_SETTINGS_QUERY
, HEADER_QUERY
, FOOTER_QUERY
load global UI configSITEMAP_QUERY
returns URLs and update dates for pages and postsPage
document in StudioContent
groupThe project includes @multidots/sanity-plugin-contact-form
for dynamic form creation and management. For detailed setup and usage instructions, visit the plugin documentation.
Content modeling
post
documents reference author
and category
seo
embedded per postFrontend
src/app/(frontend)/blog
POSTS_QUERY
+ POSTS_COUNT_QUERY
siteSettings.blogPostsPerPage
Singleton: siteSettings
(enforced via Desk structure and restricted actions in sanity.config.ts
).
Key fields
siteTitle
logo
, menuItems
(title, url, openInNewTab)footerTitle
, footerDescription
, footermenuItems
, copyrightText
, socialLinks
homePage
reference (used as the siteβs homepage source)blogPostsPerPage
, blogPageCTA
Each page
and post
has an seo
object. Queries coalesce page/post title/description when SEO fields are left empty. noIndex
can be toggled per document.
src/sanity/schemaTypes/blocks/YourBlockType.ts
src/sanity/schemaTypes/index.ts
of
list in src/sanity/schemaTypes/pageBuilderType.ts
src/components/blocks/YourBlock.tsx
src/components/PageBuilder.tsx
to render your component when _type === 'yourBlock'
/public/block-previews/yourBlock.png
to visualize the block in the Studio insert gridCurrent Available Blocks: hero
, ctaBlock
, imageTextSection
, clientList
, services
, testimonialSlider
, team
, address
Common commands
npm run dev # Start Next.js app + Studio (mounted at /studio)
npm run build # Production build
npm run start # Start production server
Sanity configuration
src/sanity/env.ts
NEXT_PUBLIC_SANITY_PROJECT_ID
or NEXT_PUBLIC_SANITY_DATASET
is missingsrc/sanity/schemaTypes/index.ts
MIT β feel free to use, modify, and distribute. Attribution is appreciated.
FAQs
Sanity Blog Theme by Multidots
We found that sanity-blog-theme demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socketβs AI scanner detected the supply chain attack and flagged the malware.