Картинки прямо в тексті новини — без WYSIWYG-редактора

У формі створення й редагування новини (/admin/) з’явилась кнопка
«🖼 Вставити зображення» — тепер картинку можна додати не лише як
обкладинку, а й будь-де всередині самого тексту новини.
Як це працює
- Редактор ставить курсор у потрібне місце тексту й натискає кнопку.
- Обирає файл (
jpeg,png,webpабоgif, до 5 МБ). - Файл заливається на новий ендпоінт
POST /api/news/upload, який комітить його в GitHub через Contents API — так само, як обкладинка чи сама новина. - У відповідь Function повертає публічний шлях, і скрипт сам вставляє
рівно в позицію курсора.
Жодного окремого сховища картинок чи CDN — усе одразу лягає в
public/news/inline-<мітка часу>-<слаг файла>.<розширення> у самому
репозиторії, версіюється разом із кодом і збирається Astro як звичайний
статичний файл.
Чому не повноцінний WYSIWYG-редактор
Найпростіший спосіб дати редактору «вставити картинку де завгодно» — поставити в адмінку rich-text редактор (щось на кшталт TipTap чи Quill). Свідомо цього не робили:
- Джерело правди лишається markdown.
.md-файл у Git читається й диффиться людиною напряму, без прошарку HTML-серіалізації в обидва боки. - Нуль нових залежностей. Кнопка — це ~30 рядків клієнтського
JavaScript поверх звичайної
<textarea>, а не бібліотека редактора з власним станом, плагінами й CSS. - Той самий контракт, що й раніше. Схема новини в
content/config.tsі так вимагає markdown у полі тіла — WYSIWYG означав би або конвертувати його вихідний HTML назад у markdown (крихко), або міняти саму схему.
Мінімальний інструмент під конкретну потребу — послідовно з рештою адмінки: вона й так уже свідомо без бази даних, без окремого бекенду, без CMS-фреймворка.
Приклад
Ось так виглядає картинка, вставлена прямо в текст цим самим способом:

