IPFS Editor
I’m building a CMS focused on IndieWeb federated and decentralized personal websites, blogs and microblogs.
This project is still in the code painting phase. I’m trying out different stuff to see what works. This site is built, managed and hosted using a deployed work in progress.
Watch the IPFS Editor category for updates.
Target Audience
IndieWeb and Fediverse enthusiasts who want to publish a website with minimal technical overhead.
Tech Stack
Here’s what I’ve got so far:
- Docker Compose orchestrates the services required.
- MariaDB stores the user database.
- Hugo generates the site into static files using a customized Hugo Bear Blog theme.
- Kubo provides IPFS decentralized, tamper-proof hosting.
- A customized Tiny File Manager provides an initial UI for managing static site files - I haven’t decided yet whether to extend this and build off it, which I’ve already begun, or replace it with a custom web UI. TFM works, but ultimately I’ll want content management to be abstracted from the file system.
- Custom Python + Flask app provides an internal API wrapper around the Kubo instance.
Hugo Theme Conventions
Content Types
The initial goal for the theme is to easily and seamlessly support 3 types of content:
- General page with subnavigation for nested pages
- Long form blog posts
- Microblog posts
If a post doesn’t have a title
defined in frontmatter, it’s displayed as a microblog entry.
Top level folders are either pages/leafs or lists/sections. A list has an _index.md
file and lists the other files/folders in its folder. A page has an index.md
file and does not list siblings.
Nested pages can be linked to in content. I may implement some kind of submenu navigation, but doesn’t feel absolutely necessary right now.
The theme is admittedly very basic at this point, but is flexible enough to support a decent variety of content structures.
Optional Date Display
A Boolean show_date
param is set in a cascade on the home page and controls whether pages/posts are rendered with the page’s date value, if there is one.
This allows posts to be displayed in date order with or without display of post dates. It also allows one section to show dates and another to not show dates.
The goal is to allow users to display dates on content that is chronological and not on content that is meant to be evergreen. Structuring ad hoc hierarchical page
content with internal links instead of navigation is underrated.
Breadcrumbs
Breadcrumbs are displayed if the breadcrumbs
page param is true
. The default is false
.
Ordering Posts
The order of posts listed in a section using an _index.md
file is:
weight
ascendingdate
descending- file name ascending
title
ascending
Examples of these optional properties in a page’s frontmatter:
1---
2title: Title
3date: 2025-07-04
4weight: 1
5---
Images
Images can be uploaded anywhere in the content folder and displayed in post content using relative links: 
A page banner is displayed above the content, if specified as follows:
1---
2params:
3 banner: images/banner.jpg
4---
And a thumbnail for display on list pages is specified as follows. This image is cropped to a square.
1params:
2 thumb: thumb.jpg