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
git clone https://github.com/jambostack/jambo-blog-nextjscd jambo-blog-nextjsnpm install2. 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:
- Log in to your Jambo admin panel
- On the Dashboard (projects list), click the Import button (↑ icon, top right)
- Upload
jambo-blog-nextjs-schema.zip - Choose Create new project, give it a name (e.g.
My Blog) - 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 CMSJAMBOAPI_URL=https://your-jambo-domain.com/api/your-project-uuidJAMBOAPI_API_KEY=your-read-api-tokenJAMBOAPI_CREATE_KEY=your-write-api-tokenJAMBOAPI_PROJECT_ID=your-project-uuidJAMBOAPI_IMAGE_HOST=your-jambo-domain.com
# SiteNEXT_PUBLIC_SITE_URL=https://your-blog.comNEXT_PUBLIC_GA_ID=G-XXXXXXXXXX # optionalFind your project UUID and API tokens in Project Settings → API Access.
4. Run locally
npm run devOpen 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
# Vercel (recommended)vercel deploy
# Any Node.js hostnpm run build && npm startCollections schema
The template uses 11 collections. Below is the complete reference for manual setup or inspection.
settings — Site configuration (singleton)
| Field | Slug | Type |
|---|---|---|
| Title | title | text (required) |
| Description | description | longtext |
| Favicon | fav-icon | text |
| X (Twitter) | x | text |
facebook | text | |
| GitHub | github | text |
linkedin | text | |
instagram | text | |
| Google Analytics | google-analytics | text |
hero-section — Homepage hero (singleton)
| Field | Slug | Type |
|---|---|---|
| Title | title | text (required) |
| Sub Text | sub-text | longtext |
| Read Articles button | read-articles | boolean |
| Browse button | browse-button | boolean |
blog-features — Homepage feature cards
| Field | Slug | Type |
|---|---|---|
| Title | title | text (required) |
| Sub Text | sub-text | longtext |
| Icon Name | icon-name | text |
| Order | order | number |
authors
| Field | Slug | Type |
|---|---|---|
| Name | name | text (required) |
| Bio | about | longtext |
| Avatar Seed | avatar-seed | text |
categories and tags
Both follow the same structure:
| Field | Slug | Type |
|---|---|---|
| Title | title | text (required) |
| Slug | slug | slug (required) |
posts
| Field | Slug | Type |
|---|---|---|
| Title | title | text (required) |
| URL | url | slug (required) |
| Excerpt | excerpt | longtext |
| Content | content | richtext |
| Featured | featured | boolean |
| Cover Image | cover-image | media |
| Author | author | relation → authors |
| Categories | categories | relation (multiple) → categories |
| Tags | tags | relation (multiple) → tags |
comments
| Field | Slug | Type |
|---|---|---|
| Name | name | text (required) |
email | text (required) | |
| Comment | comment | longtext (required) |
| Post | post | relation → posts |
about — About page (singleton)
| Field | Slug | Type |
|---|---|---|
| Name | name | text (required) |
| Short Bio | short-bio | longtext |
| About Section | about-section | richtext |
| Image | image | media |
| X (Twitter) | x | text |
facebook | text | |
| GitHub | github | text |
linkedin | text | |
email | text |
pages — Static CMS pages
| Field | Slug | Type |
|---|---|---|
| Page Title | page-title | text (required) |
| URL | url | slug (required) |
| Content | content | richtext |
newsletter — Subscribers
| Field | Slug | Type |
|---|---|---|
email | text (required) |
Revalidation webhook
Set up a Jambo webhook to automatically revalidate pages when content changes:
- In Project Settings → Webhooks, create a new webhook
- URL:
https://your-blog.com/api/revalidate?secret=YOUR_SECRET - Events:
entry.published,entry.updated,entry.deleted
Add REVALIDATE_SECRET=YOUR_SECRET to your .env.local.