Blog List
Created on August 17, 2026 — updated on August 18, 2026
Overview
Renders every post under docs/post/ as a card (thumbnail, author avatar, title, date, category, description, "Read more" link), sorted by date descending. Requires the simple-blog-posts plugin — it scans front matter and builds the collection this component reads.
How to activate?
- Default: false
Configuration
plugins:
- search
- simple-blog-posts
theme:
name: simple-blog
components:
blog_list: true
Front matter contract
Only files under docs/post/ with both title and date are collected. Everything else in docs/post/ is skipped — a post missing date, or a non-post file that happens to live in that directory, is not an error.
---
title: Yes Hello!
date: 2023-12-17
category: Geral
tags: [pessoal]
author: Fernando Celmer
github: FernandoCelmer
description: Why saying a simple 'hi' still matters.
image: assets/yes-hello-cover.png
---
title,date— requiredcategory— optional, also generates a category listing pagetags— optional list, each tag also generates a listing pageauthor— optional, shown in the card's meta linegithub— optional GitHub username; when set, the card shows the author's GitHub avatar (https://github.com/{username}.png) next to the title. No API call, no token needed — GitHub serves that path directly for any username.avatar— optional direct image URL, for any provider that isn't GitHub (GitLab, Bitbucket, Gravatar, a custom CDN, ...). GitLab and Bitbucket don't have a stable "avatar by username" URL the way GitHub does, so there's no equivalent shortcut field for them — paste the direct URL instead. Takes priority overgithubwhen both are set.description— optional excerpt shown below the meta line. This is the same field already used for the page's SEO<meta name="description">(see Page Metadata) — one field, two uses.image— optional thumbnail, path relative todocs/(e.g.assets/cover.png). Also reused as the page'sog:image/twitter:imageif set (see Page Metadata).
Author and avatar resolution order
None of these fields are required. If a post doesn't set them, the plugin fills them in, in this order:
- The post's own front matter (
author,github,avatar) theme.blog.author/theme.blog.github/theme.blog.avatar(site-wide default)- The file's last git commit — author name, and an avatar built from the commit email if it matches a GitHub or Bitbucket no-reply address (no API call). GitLab has no stable by-username avatar URL, so a GitLab no-reply email resolves the author name but not an avatar — set
avatarin front matter for that. Disable the whole git fallback withtheme.blog.git_author: false.
So a single-author blog can skip author/github on every post entirely and still get a correct byline and avatar, as long as the theme.blog default is set or posts are committed under the author's own git identity.
Where it renders
blog_list renders inside modules/content.html, after the page body — so index.md can still have its own intro text above the auto-generated card list.
theme.blog config
All blog-wide settings live under one theme.blog block instead of separate top-level keys:
theme:
blog:
layout: featured # or: compact -- default: featured
author: Fernando Celmer # site-wide default author
github: FernandoCelmer # site-wide default GitHub username
avatar: "" # site-wide default avatar URL (any provider)
cta_label: Continue Reading
git_author: true # fall back to git history when a post sets none of the above
layout—featuredis a WordPress-style card: centered title, centered "Published on DATE — in CATEGORY — by AUTHOR" meta line, large centered thumbnail (700×320), left-aligned description, full-width black CTA button.compactis a dense row: small 200×130 thumbnail beside the content, avatar next to the title, one-line meta, inline CTA button — better when a page lists many posts. Both read the exact same post data; switching doesn't require touching front matter.author/github/avatar— used for any post whose own front matter doesn't set the matching field. A post's own front matter always wins when present, so a guest post can still override the site default. See resolution order above.cta_label— text on the "Read more" button (defaults differ per layout: "Continue Reading" forfeatured, "Read more" forcompact).git_author— set tofalseto turn off the git-history fallback entirely (a post with noauthorthen just shows no byline, instead of the commit author's name).
Category and tag pages
Every distinct category and tag value gets its own generated listing page — e.g. category/python/, tag/django/ — that renders only the posts carrying that value, using this same blog_list component. Nothing needs to be written by hand: the pages are created during the build from whatever categories/tags already exist in front matter, and the Blog Sidebar's Categories/Tags widgets link straight to them.
Configuration
- Default:
categoryandtag
plugins:
- simple-blog-posts:
category_dir: category
tag_dir: tag
Change these if category/ or tag/ collides with an existing top-level page or directory in docs/.
Custom posts directory
- Default:
post
plugins:
- simple-blog-posts:
posts_dir: articles
Scans docs/articles/**/*.md instead of docs/post/**/*.md.