Technology

This blog is a folder of markdown files

Read as markdown

There is no CMS behind this blog and no database either. Every post is a markdown file committed to the same repository as the LiteTMS code, so publishing a post works exactly like shipping a feature: a commit and a deploy.

We wanted to do this differently from most company blogs, and this post shows you the whole mechanism, including the source of the very page you are reading.

The setup everyone else uses

A typical company blog runs on a full content management system. A database, an admin panel, user accounts, plugins, and a theme that fights back when you touch it. All that machinery exists so a team of editors can publish without going near the code.

We do not have a team of editors, and we already spend the whole day in a code repository. So we skipped the machinery. Every extra system is something to patch, back up, and secure. A folder of text files is not.

What a post file looks like

Here is a trimmed copy of this post's own header, followed by the shape of the body:

---
title: This blog is a folder of markdown files
slug: why-this-blog-has-no-cms
locale: en
description: There is no CMS behind the LiteTMS blog. Every post is...
date: 2026-07-15
category: technology
tags: markdown, blog, aieo, engineering
draft: false
---

The first paragraph answers the title on its own, because that is
the part search snippets and AI assistants quote.

## A section heading

Plain markdown body. Nothing exotic.

## FAQ

### Does this sample show the FAQ convention?

Yes. Each ### line is a literal question, answered right below it.

The block at the top is a flat list of key and value pairs. Below it sits ordinary markdown, rendered by a standard markdown library. One file per language: this post exists as an .en.md file and a .pl.md file with the same name, and the Polish version is written natively rather than machine translated.

The ## FAQ section at the end of the sample is the real convention, not decoration. Each question is the kind a person would type into a search box, and the build turns those pairs into structured data that search engines can show as rich results. There is a live example at the bottom of this page.

A validator instead of an editor

Before anything ships, a build script reads every post file and checks it against the schema. The description has to land between 80 and 170 characters. The category has to be one of five allowed values. The date has to be a real calendar date, and the slug has to match the filename.

The script then writes a single index file with every post's metadata, and the site reads only that file. A listing page costs the same with five hundred posts as it does with five.

The same script runs in CI on every push. If a post is invalid, or someone forgot to regenerate the index, the build fails and nothing deploys. Broken content cannot reach production, because production never receives anything the validator did not pass.

Why markdown, honestly

Markdown won for unglamorous reasons. A markdown file is readable in any text editor, with tooling or without. It diffs line by line, so a post gets reviewed the way code does: you see exactly which sentence changed. And it is the cheapest possible format for an AI assistant to ingest, which matters a little more every month.

That last point is why every post here is served three ways. The page you are reading is the HTML version. Add .md to the address in your browser and you get the raw source file, byte for byte as committed, served as plain markdown. And each language has its own RSS feed for readers and aggregators.

There is also a machine-readable catalog of every published post at /blog/index.md, and the site's llms.txt points AI crawlers straight at it. None of this ever shows up as duplicate content, because the raw files carry a noindex header and a canonical link back to the HTML page.

What this buys you as a reader

Nothing here is a product feature. It is a decision about how we run our own publishing, and it fits the promise from the first post: no invented numbers, and text you can check at the source. The TMS itself is built on the same preference for plain, inspectable mechanics. If you want to look around, registration is free.

Questions people ask

Can I read a LiteTMS blog post as plain markdown?
Yes. Add .md to the address of any post and the site redirects you to the raw source file, served as plain markdown. The full catalog of published posts lives at /blog/index.md.
Why does the LiteTMS blog not use a CMS?
Because a CMS would be a second system to patch and secure, and the only people publishing here already work in the product repository. Markdown files with a CI validator do the same job with far less to maintain.
Does writing for AI assistants make the posts worse for people?
No. The structure assistants reward, meaning a direct opening paragraph, descriptive headings, and literal questions with short answers, is the same structure that makes an article easy to skim. The raw markdown is a separate format, so the article you read stays a normal article.

Try it yourself

Read enough. Run it on your own fleet.

Self-service signup is not open yet. Leave your address and we will invite you the moment a test slot frees up, with nothing to pay and nothing to commit to.

Get early access