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

Поэтому Telegram фактически стал интерфейсом публикации.

Я создал канал и бота. Бот добавлен в канал администратором с правом публикации, а новые сообщения из канала Telegram отправляет на мой сервер через webhook.

На сервере работает небольшое приложение на FastAPI. Оно принимает webhook, проверяет секретный токен, получает текст публикации и разделяет его на две части.

Первая строка становится заголовком.

Всё остальное становится содержанием заметки.

После этого создаётся каталог публикации с post.json и content.md. Затем запускается генератор сайта, который пересобирает HTML страницы, главную страницу и sitemap.xml.

Но на этом появилась другая небольшая задача.

Если сайт уже открыт в браузере, хотелось видеть новую публикацию сразу. Простая перезагрузка страницы это решает, но выглядит грубо и для самой страницы в этом нет необходимости.

Поэтому для главной страницы я добавил SSE — Server-Sent Events.

Открытая страница устанавливает соединение с /events. Когда Telegram-публикация успешно обработана и сайт пересобран, сервер отправляет событие браузеру.

Браузер получает событие, запрашивает свежую главную страницу и заменяет только список заметок.

Сама страница при этом не перезагружается.

В итоге получилась довольно простая цепочка:

Telegram → webhook → FastAPI → файлы публикации → генератор → HTML → SSE → браузер.

Без базы данных, без отдельной CMS и без JavaScript-фреймворка.

Для небольшого личного технического сайта этого оказалось вполне достаточно.

  • работает публикация
  • редактирование
  • удаление

и всё это через телеграм.