MDX blog system: each post is stored in its own folder with page.mdx, using frontmatter to manage title, description, date, tags, and images
nextjs-mui-blog-starter — Next.js Portfolio Template
By muhimasri
A blog and portfolio template based on Next.js App Router, Material UI, and MDX, with built-in tag filtering, table of contents, code highlighting, and light/dark themes. The README explains the directory structure and theme token usage.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Supports tag filtering, featured images, recommended posts, and a table of contents automatically generated from headings
Code syntax highlighting via rehype-pretty-code and Shiki
Light/dark modes based on MUI theme tokens, with theme values convertible to CSS variables for external style references
Includes a homepage, About page, dynamic routing, and Open Graph metadata
Uses TypeScript and provides ESLint and Prettier scripts
Template Details
This template is used to build blog or technical portfolio sites. The README states that it includes a homepage, an About page, a blog system based on MDX and frontmatter, dynamic routing, tag filtering, featured images and recommended posts, an automatically generated table of contents, code highlighting implemented via rehype-pretty-code and Shiki, light/dark modes based on MUI theme tokens, Open Graph metadata, and responsive layout. Content is organized under content/ with one folder per post containing page.mdx, images are placed in public/images/, and headings are included in the table of contents.
On the technical stack side, the README lists Next.js App Router, Material UI, MDX, rehype-pretty-code, TypeScript, ESLint, and Prettier, and explains that MDX is compiled via next-mdx-remote, rehype-pretty-code, and gray-matter. The styling system is centralized in src/styles/tokens.ts, theme.ts, and global.tsx. The theme is generated from design tokens, and MUI converts theme values into CSS variables for reference in external stylesheets.
The README's Roadmap lists accessibility improvements, RSS, Sitemap, GitHub comments, social sharing, PWA, Newsletter integration, and custom syntax highlighting themes as to-dos, indicating that these capabilities are not currently described in the README as implemented features. The README does not provide deployment platform, environment variable, or hosting step instructions, nor does it describe content scale, build artifact size, or performance data beyond the Lighthouse badge.
Is it right for your project?
Use Cases
- Building a personal technical blog and writing articles with code examples in MDX
- Creating a developer portfolio site to showcase projects and article lists
- Content sites that need tag categorization, article table of contents, and light/dark theme switching
- Projects that want to centrally manage style variables such as colors, spacing, and fonts with design tokens
Suitable For
- Developers familiar with Next.js App Router and React
- Individuals or teams willing to use Material UI and MDX to write content
- Blog or portfolio projects that need customizable theme tokens
- Authors who want to manage articles as folders plus MDX files
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Commands provided by the README: npm install, npm run dev, npm run build, npm start, npm run lint, npm run format
- 2
Posts are placed under content/ with one folder per post, the file name is page.mdx, images are placed in public/images/ and referenced via /images/...
- 3
Themes and design tokens are located in src/styles/tokens.ts, theme.ts, and global.tsx, and can be modified as needed
- 4
The README does not provide deployment platform, environment variable, or hosting step instructions
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license in a public repository; the free scope is the code of this version and does not mean that external services or third-party assets are free.
Must comply with when using
- Allows free use, modification, commercial use, and distribution of this version's code.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the complete MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional charges.
View Original Text Basis
https://github.com/muhimasri/nextjs-mui-blog-starter/blob/main/LICENSEhttps://github.com/muhimasri/nextjs-mui-blog-starter/blob/main/README.mdPermission is hereby granted, free of charge
Original License Text
Compiled by DeepSeek based on repository license and README ·2026-10-14. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 88 / 100
- Technologies
- Next.js · React
- Website type
- Portfolio · Blog · Starter
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2025-12-11
- Screenshot last checked
- 2026-10-14
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: codex-user-requested-batch-review-20261015 · 2026-10-15
Inspect the recorded source material
SHA-256: 9dff40220b630f3cec55ded8fd8889ef28774c057b03c7432119fec21ba6e922
2026-10-14T03:35:22.115Z
Source file / repository# nextjs-mui-blog-starter






A fast, modern, and SEO-friendly blog and portfolio template built with **Next.js 14**, **Material UI (MUI 6)**, and **MDX**. Ideal for developers who want to launch a customizable blog or technical portfolio site with built-in support for dark mode, code highlighting, design tokens, and accessibility.
🔗 Live Demo - [nextjs-mui-blog.muhimasri.com](https://nextjs-mui-blog.muhimasri.com/)
<p align="center">
<img src="./public/images/demo-1.png" width="45%" style="margin: 10px;" />
<img src="./public/images/demo-5.png" width="45%" style="margin: 10px;" />
<br />
<img src="./public/images/demo-2.png" width="45%" style="margin: 10px;" />
<img src="./public/images/demo-3.png" width="45%" style="margin: 10px;" />
</p>
---
## 📚 Table of Contents
- [Features](#-features)
- [Why Use This Template?](#-why-use-this-template)
- [Technologies and Tools](#-technologies-and-tools)
- [Running the Project](#-running-the-project)
- [Roadmap](#-roadmap)
- [Developer Guide](#-developer-guide)
---
## 🚀 Features
- Home & About Pages
- MDX Blog System with Frontmatter
- Dynamic Routing
- Tag Filtering
- Featured Images & Suggested Articles
- Table of Contents (TOC)
- Code Highlighting with Shiki (via rehype-pretty-code)
- Dark/Light Mode (MUI v6 Theme Tokens)
- SEO Metadata with Open Graph
- Accessibility Features
- Fully Responsive and Mobile Friendly
- 85-95% Lighthouse Scores
- Developer-Friendly Architecture
---
## 💡 Why Use This Template?
- ✅ Built with the latest Next.js App Router (14+)
- 🧩 Write MDX content with embedded React components
- 🎨 Custom theming and design tokens using Material UI
- 🧱 Responsive layout and component-based structure
- 🧠 Automatically generated Table of Contents
- 🌐 SEO-friendly with dynamic meta & Open Graph tags
- 🔒 Accessibility and performance best practices
---
## 🛠 Technologies and Tools
- **Next.js 14** – App Router architecture
- **Material UI v6** – Responsive components and design system
- **MDX** – Write JSX inside Markdown files
- **rehype-pretty-code** – Syntax highlighting with Shiki
- **TypeScript** – Safer, more maintainable code
- **ESLint + Prettier** – Code quality and formatting
---
## 🧪 Running the Project
```bash
# Clone the repository
$ git clone <repository-url>
$ cd nextjs-mui-blog-starter
# Install dependencies
$ npm install
# Run the development server
$ npm run dev
# Build for production
$ npm run build
# Start the production server
$ npm start
# Lint and format
$ npm run lint
$ npm run format
```
---
## 🗺 Roadmap
- [ ] Accessibility Improvements
- [ ] RSS Feed
- [ ] Sitemap.xml
- [ ] GitHub-based Commenting System
- [ ] Social Sharing Buttons
- [ ] PWA Support
- [ ] Newsletter Integration
- [ ] Custom sytax highlighting theme with light and dark mode support
---
## 📁 Developer Guide
This guide provides a full breakdown of the directory structure, blog system, styling tokens, and theming implementation for MUI.
### Project Structure Overview
```
content/ # MDX blog post folders
public/ # Static assets like images
src/ # Application source code
├── app/ # Pages and routes (App Router)
├── components/ # Shared UI components
├── styles/ # Global styles and MUI theme setup
```
### Blog Content Directory (content/)
- Each blog post lives in its own folder with a `page.mdx` file.
- Use frontmatter for metadata like title, description, date, tags, and images.
```
content/
react-hooks-guide/
page.mdx
styled-components-vs-mui/
page.mdx
```
### Public Directory (public/)
- Store images and assets accessible via `/images/...`
```
public/
images/
react-hooks-cover.jpg
styled-vs-mui-cover.jpg
```
### App Directory (src/app/)
- `about/` – About page and its layout
- `blogs/` – Blog listing, tag filtering, and dynamic `[slug]/` post rendering
### Component Directory (src/components/)
- `Header.tsx`, `Footer/`, `Tag.tsx`, `PostCard.tsx`, `TableOfContents.tsx`
### Styling System (src/styles/)
- `tokens.ts` – Centralized design tokens: spacing, colors, radii, typography
- `theme.ts` – MUI theme that uses tokens for light/dark mode
- `global.tsx` – Global reset styles and scrollbar customization
### MDX Setup
- MDX files are compiled using `next-mdx-remote` with `rehype-pretty-code` and `gray-matter`
- Supports frontmatter metadata and React components inside content
---
### Creating a Blog Post
1. Create a new folder under `content/your-blog-title/`
2. Add `page.mdx` with the frontmatter and Markdown content.
3. Reference images using `/images/your-image.jpg` from `public/images/`
4. Headings like `##` will automatically populate the Table of Contents.
5. Run the dev server and preview at `/blogs/[slug]`
---
### Styling with Tokens and Theme
- Theme is created from `tokens.ts` with design primitives tokenized to support quick and centralized custom theming:
- `colors`
- `font`
- `spacing`
- `shadows`
- `borderRadius`
- `letterSpacing`
- `lineHeight`
- Tokens are used in `theme.ts` as values for the theme palette, supporting light/dark mode via MUI’s color scheme.
```tsx
const theme = createTheme({
cssVariables: {
colorSchemeSelector: "class",
},
colorSchemes: {
light: {
palette: {
primary: {
main: colors.primary[500],
...
},
secondary: {
main: colors.secondary[500],
...
},
common: {
onBackground: colors.grey[900],
...
},
text: {
primary: colors.grey[800],
...
},
},
},
dark: {
palette: {
primary: {
main: colors.primary[600],
...
},
secondary: {
main: colors.secondary[900],
...
},
text: {
primary: colors.grey[100],
...
},
},
},
},
});
```
- Theme palettes are also extended to define custom variables for specific sections like blog, about, and subscribe pages:
```ts
blog: {
headerBgColor: "white",
h1Color: colors.secondary[500],
},
subscribe: {
headerColor: colors.grey[800],
},
about: {
headerTitle: colors.grey[800],
}
```
- MUI 6 converts all theme values into CSS variables automatically. This enables use of tokens in external stylesheets or with Tailwind:
```ts
about: {
headerTitle: colors.grey[800], // var(--mui-palette-about-headerTitle)
headerText: colors.grey[700], // var(--mui-palette-about-headerText)
}
```
- Components are styled using the sx prop or direct props, supporting shorthand token references for consistency and dark mode support:
```tsx
<Typography color="primary.500">
Mareli Ramos
</Typography>
<Typography
sx={{
fontSize: "6",
color: "text.primary",
}}
>
Mareli Ramos
</Typography>
```
- Responsive styles are defined using MUI’s sx breakpoints:
```tsx
<Box
sx={{
display: { xs: "block", md: "flex" },
fontSize: { xs: "3", lg: "4" },
padding: { xs: 2, md: 4 },
}}
>
Responsive Box
</Box>
```
---
## 📣 Contributing
Contributions and suggestions are welcome! Feel free to fork the repo and submit a pull request.
---
> Made with ❤️ by [Muhi Masri](https://muhimasri.com/)
Explore similar templates
Compare previews and descriptions within the same stack and category.

Next.js SaaS Starter
The official Next.js SaaS starter template, integrating email/password authentication, Stripe Checkout subscriptions, a dashboard with user/team CRUD, basic Owner/Member RBAC, and activity logging.
Next.js · SaaS

Next.js Commerce
Vercel's officially maintained Next.js App Router ecommerce starter with deep Shopify integration, offering a complete product catalog, cart, and checkout flow. Core logic is modular for swapping backends, and community provider versions exist for BigCommerce, Medusa, and Saleor.
Next.js · E-commerce

Next-js-Boilerplate
A developer-first Next.js 16 starter with Tailwind CSS 4 and TypeScript, supporting both App Router and Page Router.
Next.js · Starter

tailwind-nextjs-starter-blog
A Next.js and Tailwind CSS blog starter template using Contentlayer for Markdown/MDX, with built-in SEO, code highlighting, and tags. It targets personal technical blogs and migration from Jekyll/Hugo to React, and supports one-click Vercel deployment.
Next.js · Blog

next-forge
next-forge is a Turborepo-based Next.js template maintained by Vercel, positioned as a starting point for SaaS products.
Next.js · Starter

SaaS-Boilerplate
SaaS-Boilerplate is an open-source SaaS starter template built with Next.js App Router, React 19, TypeScript, Tailwind CSS, and Shadcn UI.
Next.js · SaaS
