Next.jsHugoJekyllReactPortfolioBlogStarter

tailwind-nextjs-starter-blog — Next.js Portfolio Template

By fu4303

A static blog and portfolio starter template built on Next.js and Tailwind CSS, using MDX for writing, with built-in tag pages, project pages, RSS, and sitemap, as an alternative to Jekyll or Hugo personal blogs.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

3 previews
Desktop homepage1 / 3
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 3

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-13View source

What stands out

A quick read of the recorded project description.

01

Write with MDX, embedding JSX and custom React components directly in Markdown documents

02

Frontmatter follows Hugo field conventions, supporting title, date, tags, lastmod, draft, summary, and images

03

Each tag automatically generates a separate page, with built-in project showcase page, RSS feed, and sitemap

04

Integrates KaTeX math rendering and rehype-prism server-side code highlighting

05

Site configuration, navigation links, project data, and theme styles are centralized in the data and css directories for easy replacement

06

Provides scripts/compose.js to generate an article skeleton with prefilled frontmatter

Template Details

This is a blog starter template aimed at technical writers; the repository is forked by fu4303 from timlrx's tailwind-nextjs-starter-blog. It combines Next.js static generation with the Tailwind CSS styling system. Content is written as MDX or Markdown files stored in the data/blog directory, with frontmatter following Hugo's field conventions and supporting seven fields: title, date, tags, lastmod, draft, summary, and images. The template includes tag pages (each tag generates a separate page), a project showcase page, RSS feed, and sitemap, and integrates KaTeX math rendering, rehype-prism server-side code highlighting, and next/image image optimization.

Site information is centralized in data/siteMetadata.json, navigation links in data/headerNavLinks.js, project card data in data/projectsData.js, and the overall appearance can be adjusted via css/tailwind.css. components/MDXComponents.js allows custom JSX or React components to be called directly in Markdown, and components/social-icons supports extending social icons with Simple Icons SVGs. scripts/compose.js can generate an article skeleton with prefilled frontmatter.

For deployment, the README uses Vercel as the primary path; if switching to static hosting such as Netlify, GitHub Pages, or Firebase, because the template uses next/image, you need to configure an additional image optimization service (such as Imgix, Cloudinary, or Akamai) or replace next/image with a regular img tag. The repository is under the MIT license, free to use, modify, and distribute, but third-party assets such as demo images, fonts, and icons, as well as the quotas and charges of external services like Firebase, must be verified separately.

Next.jsHugoJekyllPortfolioBlogStarter

Is it right for your project?

Use Cases

  • Migrating an existing Jekyll or Hugo personal blog to the Next.js stack
  • Building a static blog with Markdown/MDX as the content source for technical writing
  • Adding a project showcase page alongside the blog for use as a personal portfolio
  • Writing technical tutorial articles that include math formulas or code blocks

Suitable For

  • Developers accustomed to writing in Markdown or MDX who want content managed as files
  • Personal site authors who need basic blog structure such as tag archives, RSS, and sitemap
  • Users willing to configure an image optimization service themselves or adjust how next/image is used
  • Teams that accept Vercel as the primary deployment path or can handle other static hosting configurations themselves

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    The README's quick start uses npx degit to pull the repository, then modify siteMetadata.json, projectsData.js, headerNavLinks.js in order and add articles

  2. 2

    Run npm start or npm run dev for local development, previewing at localhost:3000 by default

  3. 3

    Articles go in the data/blog directory; use node ./scripts/compose.js "article-name" .md to generate a skeleton with prefilled frontmatter

  4. 4

    When deploying to Netlify, GitHub Pages, or Firebase, configure an alternative image optimization service for next/image or switch to a regular img tag

  5. 5

    The repository is MIT licensed; retain the copyright and license notice when distributing; third-party assets and external services require separate verification of licensing and fees

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version under the MIT license in the public repository; the free scope is the code of this version and does not mean external services or third-party assets are free.

Must comply with when using

  • Free use, modification, commercial use, and distribution of this version's code are permitted.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full 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

  • The README mentions Firebase integration; before enabling related dynamic features, you must configure it yourself and verify Firebase's quotas and charges.
  • Demo images, fonts, icons, and other third-party assets must be verified under their respective licenses; they cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur separate charges.
  • When deploying to non-Vercel static hosting such as Netlify, GitHub Pages, or Firebase, because the template uses next/image, you must additionally configure an image optimization service (such as Imgix, Cloudinary, or Akamai) or replace next/image with a regular img tag; otherwise, direct deployment is not possible.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

As the template uses `next/image` for image optimization, additional configurations has to be made to deploy on other popular static hosting websites like [Netlify](https://www.netlify.com/) or [Github Pages](https://pages.github.com/). An alternative image optimization provider such as Imgix, Cloudinary or Akamai has to be used. Alternatively, replace the `next/image` component with a standard `<img>` tag.

Original README
https://github.com/fu4303/tailwind-nextjs-starter-blog/blob/master/LICENSEhttps://github.com/fu4303/tailwind-nextjs-starter-blog/blob/master/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-13. 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
Partly documented · 70 / 100
Technologies
Next.js · Hugo · Jekyll · 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
2021-04-26
Screenshot last checked
2026-10-13

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: [email protected] · 2026-10-13

Inspect the recorded source material

SHA-256: 84e80d295ef07f14f7be59afa29d51c130017bea8c03e51acc83c62e29944ee7

2026-10-13T07:43:59.012Z

Source file / repository
![tailwind-nextjs-banner](/public/static/images/twitter-card.png)

# Tailwind Nextjs Starter Blog

[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https://github.com/timlrx/tailwind-nextjs-starter-blog)

This is a [Next.js](https://nextjs.org/), [Tailwind CSS](https://tailwindcss.com/) blogging starter template. Comes out of the box configured with the latest technologies to make technical writing a breeze. Easily configurable and customizable. Perfect as a replacement to existing Jekyll and Hugo individual blogs.

## Examples

- [Demo Blog](https://tailwind-nextjs-starter-blog.vercel.app/) - this repo
- [My personal blog](https://www.timlrx.com) - modified to auto-generate blog posts with dates

Using the template? Happy to accept any PR with modifications made e.g. sub-paths, localization or multiple authors

## Motivation

I wanted to port my existing blog to Nextjs and Tailwind CSS but there was no easy out of the box template to use so I decided to create one.

It is inspired by [Lee Robinson's blog](https://github.com/leerob/leerob.io), but focuses only on static site generation. Design is adapted from [Tailwindlabs blog](https://github.com/tailwindlabs/blog.tailwindcss.com).

I wanted it to be nearly as feature-rich as popular blogging templates like [beautiful-jekyll](https://github.com/daattali/beautiful-jekyll) and [Hugo Academic](https://github.com/wowchemy/wowchemy-hugo-modules) but with the best of React's ecosystem and current web development's best practices.

## Features

- Easy styling customization with [Tailwind 2.0](https://blog.tailwindcss.com/tailwindcss-v2)
- Near perfect lighthouse score - [Lighthouse report](https://www.webpagetest.org/result/210111_DiC1_08f3670c3430bf4a9b76fc3b927716c5/)
- Lightweight, 43kB first load JS, uses Preact in production build
- Mobile-friendly view
- Light and dark theme
- [MDX - write JSX in markdown documents!](https://mdxjs.com/)
- Server-side syntax highlighting with [rehype-prism](https://github.com/mapbox/rehype-prism)
- Math display supported via [KaTeX](https://katex.org/)
- Automatic image optimization via [next/image](https://nextjs.org/docs/basic-features/image-optimization)
- Flexible data retrieval with [next-mdx-remote](https://github.com/hashicorp/next-mdx-remote)
- Support for tags - each unique tag will be its own page
- Projects page
- SEO friendly with RSS feed, sitemaps and more!

## Sample posts

- [A markdown guide](https://tailwind-nextjs-starter-blog.vercel.app/blog/github-markdown-guide)
- [Learn more about images in Next.js](https://tailwind-nextjs-starter-blog.vercel.app/blog/guide-to-using-images-in-nextjs)
- [A tour of math typesetting](https://tailwind-nextjs-starter-blog.vercel.app/blog/deriving-ols-estimator)
- [Simple MDX image grid](https://tailwind-nextjs-starter-blog.vercel.app/blog/pictures-of-canada)
- [Example of long prose](https://tailwind-nextjs-starter-blog.vercel.app/blog/the-time-machine)

## Quick Start Guide

1. `npx degit https://github.com/timlrx/tailwind-nextjs-starter-blog.git`
2. Personalize `siteMetadata.json`
3. Modify `projectsData.js`
4. Modify `headerNavLinks.js` to customize navigation links
5. Add blog posts
6. Deploy on Vercel

## Development

First, run the development server:

```bash
npm start
# or
npm run dev
```

Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.

You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.

## Extend / Customize

`data/siteMetadata.json` - contains most of the site related information which should be modified for a user's need.

`data/projectsData.js` - data used to generate styled card in projects page.

`data/headerNavLinks.js` - navigation links.

`data/logo.svg` - replace with your own logo.

`data/blog` - replace with your own blog posts.

`public/static` - store assets such as images and favicons.

`css/tailwind.css` - contains the tailwind stylesheet which can be modified to change the overall look and feel of the site.

`components/social-icons` - to add other icons, simply copy an svg file from [Simple Icons](https://simpleicons.org/) and map them in `index.js`. Other icons uses [heroicons](https://heroicons.com/).

`components/MDXComponents.js` - pass your own JSX code or React component by specifying it over here. You can then call them directly in the `.mdx` or `.md` file. By default, a custom link and image component is passed.

`layouts` - main templates used in pages.

`pages` - pages to route to. Read the [Next.js documentation](https://nextjs.org/docs) for more information

## Post

### Frontmatter

Frontmatter follows [Hugo's standards](https://gohugo.io/content-management/front-matter/).

Currently 7 fields are supported.

```
title (required)
date (required)
tags (required, can be empty array)
lastmod (optional)
draft (optional)
summary (optional)
images (optional, if none provided defaults to socialBanner in siteMetadata config)
```

Here's an example of a post's frontmatter:

```
---
title: 'Introducing Tailwind Nexjs Starter Blog'
date: '2021-01-12'
lastmod: '2021-01-18'
tags: ['next-js', 'tailwind', 'guide']
draft: false
summary: 'Looking for a performant, out of the box template, with all the best in web technology to support your blogging needs? Checkout the Tailwind Nextjs Starter Blog template.'
images: ['/static/images/canada/mountains.jpg', '/static/images/canada/toronto.jpg']
---
```

### Compose

`scripts/compose.js` can be used to easily generate a post with pre-filled front matter.

The first argument is the name of the post and the second optional argument is the extension (default to .mdx)

Example code to generate the post called "My First Post" in markdown format

```
node ./scripts/compose.js "My First Post" .md
```

This will generate `./data/blog/my-first-post.md` with pre-filled front matter.

## Deploy

**Vercel**  
The easiest way to deploy the template is to use the [Vercel Platform](https://vercel.com) from the creators of Next.js. Check out the [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.

**Netlify / Github Pages / Firebase etc.**  
As the template uses `next/image` for image optimization, additional configurations has to be made to deploy on other popular static hosting websites like [Netlify](https://www.netlify.com/) or [Github Pages](https://pages.github.com/). An alternative image optimization provider such as Imgix, Cloudinary or Akamai has to be used. Alternatively, replace the `next/image` component with a standard `<img>` tag. See [`next/image` documentation](https://nextjs.org/docs/basic-features/image-optimization) for more details.
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.