A Self-maintaining filesystem for static blogs

2026-07-01

A Self-maintaining filesystem for static blogs

I've just finished revamping the folder structure of this blog's content to include the date in the file name as in yyyy-mm-dd-post-title.md

This finally made opening the posts folder manageable as scanning the ever-growing list of titles, was causing me to dreading opening it at all.

Recently, my guiding principle has been to remove any friction from the projects I would like to work on more.

The file structure

The typical Eleventy setup has a flat-files setup.

    blog
    ├── post-title.md
  	└── another-post-title.md

But in my quest for documenting and portability, I ended up setting up this folder structure instead.

    blog
    └── yyyy-mm-dd-post-title
      	├── yyyy-mm-dd-post-title.md
      	└── image.png

This has a few advantages:

  • Co-location of a post's assets, images, snippets, etc.
  • Holding meta information such as title and date in the file name itself, rather than a generic index.md
  • Relative links in markdown easily map to their html links counterpart, once the site it's built.

Automating the boring parts

Enter Claude Code, and adapting 11ty Buildawesome to my needs is just a matter of asking AI to write some scripts that integrate with the internal 11ty Dev Server watcher.

  1. Updating either the Frontmatter property date or title now triggers a name change of both the file name and the folder name.
  2. If the folder and filename change affected a live post, eg. with the Frontmatter property draft: false, a script will update all internal links that reference the updated path, and create a redirect, by adding an entry to redirects.json
[
  {
    "from": "/posts/2023-02-21-how-build-minimalist-markdown-blog-eleventy/",
    "to": "/posts/2023-02-21-build-minimalist-markdown-blog-eleventy/"
  }
]
  1. If I upload an image file into a post folder, it will automatically compress it to a sensible size. No need to worry anymore about git-tracking 5MB pictures straight out of my camera roll.
  2. A simple npm run new post title command, creates an empty document with the yyyy-mm-dd-post-title.md title slug, folder, today's date, set to draft and a scaffolded empty post.
---
date: 2026-07-01
title: "Post title"
project:
repository:
tags: []
selected: false
draft: true
description: ""
url:
---

2026-07-01

# Post title

### Resources

Resources

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论