Skip to content

Blog NextJS

The Blog NextJS starter template is a production-ready blog built with Next.js 15 (App Router) and Jambo as the headless CMS backend. It includes a homepage with hero and feature sections, post listing with pagination, individual post pages, category and tag filtering, a comments system, and newsletter subscription.

What’s included

  • Next.js 15 with App Router and React Server Components
  • Tailwind CSS + Syne / DM Sans / JetBrains Mono — Jambo brand typography
  • Jambo color palette — emerald primary, dark/light themes
  • Dark mode via next-themes
  • Comments system — readers can post comments on articles
  • Newsletter — email subscription form
  • Hero section and feature cards — fully CMS-driven homepage
  • About page — author profile with social links
  • Static CMS pages — legal, privacy, etc.

Getting started

1. Clone the template

Terminal window
git clone https://github.com/jambostack/jambo-blog-nextjs
cd jambo-blog-nextjs
npm install

2. Import the schema into Jambo

The fastest way to set up all 11 collections is to import the provided schema file directly into your Jambo admin.

Download: jambo-blog-nextjs-schema.zip (included in the data/ folder of the template)

Steps:

  1. Log in to your Jambo admin panel
  2. On the Dashboard (projects list), click the Import button (↑ icon, top right)
  3. Upload jambo-blog-nextjs-schema.zip
  4. Choose Create new project, give it a name (e.g. My Blog)
  5. Click Import — all 11 collections are created instantly

3. Connect the template to your project

Copy .env.local.example to .env.local and fill in your project details:

# Jambo CMS
JAMBOAPI_URL=https://your-jambo-domain.com/api/your-project-uuid
JAMBOAPI_API_KEY=your-read-api-token
JAMBOAPI_CREATE_KEY=your-write-api-token
JAMBOAPI_PROJECT_ID=your-project-uuid
JAMBOAPI_IMAGE_HOST=your-jambo-domain.com
# Site
NEXT_PUBLIC_SITE_URL=https://your-blog.com
NEXT_PUBLIC_GA_ID=G-XXXXXXXXXX # optional

Find your project UUID and API tokens in Project Settings → API Access.

4. Run locally

Terminal window
npm run dev

Open http://localhost:3000. The homepage will be empty until you add content — start with settings (site title), then hero-section, then your first posts.

5. Deploy

Terminal window
# Vercel (recommended)
vercel deploy
# Any Node.js host
npm run build && npm start

Collections schema

The template uses 11 collections. Below is the complete reference for manual setup or inspection.

settings — Site configuration (singleton)

FieldSlugType
Titletitletext (required)
Descriptiondescriptionlongtext
Faviconfav-icontext
X (Twitter)xtext
Facebookfacebooktext
GitHubgithubtext
LinkedInlinkedintext
Instagraminstagramtext
Google Analyticsgoogle-analyticstext

hero-section — Homepage hero (singleton)

FieldSlugType
Titletitletext (required)
Sub Textsub-textlongtext
Read Articles buttonread-articlesboolean
Browse buttonbrowse-buttonboolean

blog-features — Homepage feature cards

FieldSlugType
Titletitletext (required)
Sub Textsub-textlongtext
Icon Nameicon-nametext
Orderordernumber

authors

FieldSlugType
Namenametext (required)
Bioaboutlongtext
Avatar Seedavatar-seedtext

categories and tags

Both follow the same structure:

FieldSlugType
Titletitletext (required)
Slugslugslug (required)

posts

FieldSlugType
Titletitletext (required)
URLurlslug (required)
Excerptexcerptlongtext
Contentcontentrichtext
Featuredfeaturedboolean
Cover Imagecover-imagemedia
Authorauthorrelation → authors
Categoriescategoriesrelation (multiple) → categories
Tagstagsrelation (multiple) → tags

comments

FieldSlugType
Namenametext (required)
Emailemailtext (required)
Commentcommentlongtext (required)
Postpostrelation → posts

about — About page (singleton)

FieldSlugType
Namenametext (required)
Short Bioshort-biolongtext
About Sectionabout-sectionrichtext
Imageimagemedia
X (Twitter)xtext
Facebookfacebooktext
GitHubgithubtext
LinkedInlinkedintext
Emailemailtext

pages — Static CMS pages

FieldSlugType
Page Titlepage-titletext (required)
URLurlslug (required)
Contentcontentrichtext

newsletter — Subscribers

FieldSlugType
Emailemailtext (required)

Revalidation webhook

Set up a Jambo webhook to automatically revalidate pages when content changes:

  1. In Project Settings → Webhooks, create a new webhook
  2. URL: https://your-blog.com/api/revalidate?secret=YOUR_SECRET
  3. Events: entry.published, entry.updated, entry.deleted

Add REVALIDATE_SECRET=YOUR_SECRET to your .env.local.

Source code

github.com/jambostack/jambo-blog-nextjs