How to Set Up a Blog
A comprehensive guide to setting up a blog on your Flowershow site, including creating a blog section, configuring the List component, and adding navigation

This guide will walk you through the process of adding a blog to your Flowershow site. You'll learn how to create a dedicated blog section, set up a landing page that lists all your blog posts, attribute content to its authors, and keep some of your blog posts unpublished.
Before you begin, make sure you have a Flowershow site set up.
Step 1: Create a Blog Directory
While you can name and place your blog content anywhere in your site's structure, this guide uses a /blog
directory in the root folder as an example. The key is to keep your blog posts organized in a dedicated location.
- Choose a location for your blog content. Common options include:
/blog
,/posts
or/articles
.
This folder will contain:
- Individual blog post files (e.g.,
my-first-post.md
) - A landing page (
README.md
orindex.md
) - Optional subdirectories for organization
You can use subdirectories to organize your posts by:
- Categories (e.g.,
/blog/tutorials
,/blog/news
) - Status (e.g.,
/blog/drafts
,/blog/archive
) - Date (e.g.,
/blog/2025/06
for June 2025 posts)
The List component will automatically include posts from all subdirectories.
Step 2: Add Your First Blog Post
-
Create a new markdown file in the chosen blog directory, for example:
/blog/my-first-blog-post.md
. -
Add frontmatter at the top of the file. The frontmatter sets structured metadata of the page, and controls how your post appears in the List component (see next steps) and page headers:
---
title: My First Blog Post
description: A brief description of your post
date: 2025-06-24
image: /path/to/optional/featured-image.jpg
---
Your blog post content goes here...
The frontmatter fields explained:
title
: The post's titledescription
: A brief summarydate
: Publication date in YYYY-MM-DD format (used for sorting)image
: Featured image path (relative to site root) or URL
You don't have to use title
frontmatter field to set the page title. To learn about other options, see Three Ways to Set a Page Title.
Step 3: Create the Blog Landing Page
The landing page serves as the main entry point for your blog section. You can create it using either README.md
or index.md
in your blog directory.
-
Inside your blog directory, create the landing page file:
- Option 1:
README.md
(recommended) - Option 2:
index.md
- Option 1:
-
Add the following content to create a landing page that lists all blog posts:
---
title: Blog
description: A collection of blog posts
---
<List dir="/blog" fields={["title", "description", "date", "image"]}/>
The List
component will automatically display all markdown files in the directory specified in dir
property (in our case it's /blog
). The fields
prop specifies which frontmatter fields to display for each post:
title
: The post's titledescription
: The post's descriptiondate
: Publication dateimage
: Featured image
List
Component OptionsLearn how to customize the List component in the List Component Docs.
The List component will:
- Sort posts by date (newest first) if available, otherwise by title
- Paginate posts (10 per page by default)
- Include files from subdirectories (useful for organizing posts by year/month)
- Ignore README.md and index.md files
Step 4: Set Up Author Pages
Author pages allow you to create dedicated profiles for your content creators and attribute blog posts to their authors. While this guide uses a /team
directory in the root folder, you can store author profiles anywhere in your site's structure. (What matters is that file names need to match authors listed in the authors
frontmatter field, as described below.)
To attribute blog posts to authors:
- Add an
authors
field to your blog post frontmatter with an array of author names that exactly match their profile page filenames (without the .md extension):
---
title: My First Blog Post
description: A brief description of your post
date: 2025-06-24
authors:
- jane-smith
---
-
Choose a location for author profiles. For example:
/team
,/authors
or/people
. -
Create profile pages for your authors. For example, if using the
team
directory:team/ ├── jane-smith.md └── README.md # Optional index page listing all authors
-
Create an author profile, e.g.,
team/jane-smith.md
:
---
title: Jane Elizabeth Smith
description: Technical writer and open-source enthusiast
avatar: /assets/jane-avatar.jpg
---
Jane is a passionate technical writer with over 5 years of experience...
The author pages support:
title
: Author's full name (displayed in page headers)description
: Brief bio or roleavatar
: Profile picture displayed in page headers (local path or external URL)
When an author page exists, the author's name in blog posts will automatically link to their profile page and display its content.
Use simple, URL-friendly names for author page files (e.g., jane-smith.md
) and set the full name in the title
field. Then use the simple name in blog post frontmatter (e.g., authors: [jane-smith]
).
For more details about author pages, profile customization, and avatars, see How to Show Authors of Your Content in Page Headers.
Step 5: Add Blog to Navigation
- Open or create
config.json
in your site's root directory - Add a blog link to the navigation:
{
"nav": {
"links": [
{
"href": "/blog",
"name": "Blog"
}
]
}
}
For more details about customizing your navigation bar, including adding logos and social links, see How to Configure the Navigation Bar.
Step 6: Control What Gets Published
You can control which blog posts get published using either site-wide settings or page-level control:
Using site-wide settings
Add contentExclude
to your config.json
to exclude entire directories:
{
"contentExclude": [
"/blog/drafts",
"/blog/archive"
]
}
Using page-level control
Add publish: false
to a post's frontmatter to prevent it from being published:
---
title: Draft Post
description: Work in progress
publish: false
---
This is useful for:
- Keeping draft posts private
- Archiving old content
- Managing work-in-progress posts
For more details about controlling which files get published, including advanced configuration options, see How to Exclude Files from Publishing.