Есть старая идея, что лучшее письмо — невидимое. Читатель не должен замечать прозу — он должен замечать только мысль. Простоты трудно достичь, потому что она требует знать, что убрать.

Совершенство достигается не тогда, когда нечего добавить, а тогда, когда нечего убрать.

Этот шаблон — эксперимент в этом направлении. Один HTML-файл. Никаких зависимостей. Открываешь, меняешь текст — и у тебя есть блог.

Зачем начинать с нуля?

Каждый фреймворк, который вы добавляете — это решение, которое вы заимствуете у кого-то другого. Иногда это правильный выбор — не нужно переписывать роутер или сборщик. Но для личного блога налог на сложность реален. Вы тратите больше времени на настройку инструментов, чем на написание текстов.

Альтернатива — радикальная простота. HTML для структуры. CSS для стиля. Markdown-файлы для контента. Небольшой скрипт, чтобы всё склеить. Вот и всё.

Что действительно нужно

Блогу нужны три вещи:

  1. Список постов — заголовки, даты, может быть короткое описание
  2. Страницы отдельных постов — собственно контент, читабельный и хорошо свёрстанный
  3. Навигация — способ перемещаться между списком и постами

Всё остальное опционально. Теги, поиск, комментарии, аналитика, переключатели тёмной темы — это приятно, но это не блог. Блог — это текст.

Этап сборки

Если вы пишете в Markdown (а вам стоит — он не мешает), нужно что-то для конвертации .md-файлов в HTML. Это может быть простой скрипт на 50 строк:

прочитать markdown-файлы → разобрать метаданные → конвертировать в HTML → обернуть в шаблон → записать на диск

Никакой горячей замены модулей. Никакого виртуального DOM. Никакого tree shaking. Просто файлы на входе, файлы на выходе.

Вот ядро этого скрипта на Python:

from pathlib import Path
from markdown import markdown

for path in sorted(Path("posts").glob("*.md")):
    html = markdown(path.read_text(), extensions=["fenced_code"])
    out = Path("dist/posts") / path.stem / "index.html"
    out.parent.mkdir(parents=True, exist_ok=True)
    out.write_text(html)

Прочитать markdown, конвертировать, записать. Всё остальное — шаблоны, CSS, маршрутизация — просто конкатенация строк.

Результат

Вы получаете сайт, который загружается мгновенно, работает без JavaScript, хорошо выглядит на любом устройстве и ничего не стоит в хостинге. Всё помещается в одну директорию, которую можно понять, просто прочитав её.

Это не ограничение. В этом и суть.