История изменений

Что обновлено на сайте, начиная с версии 0.01.

v0.02

Подвал, логотип Karsim & Szerszen, страница истории изменений, сохранение светлой темы.

Подвал и бренд

  • Логотип brand/logo.png в шапке; в подвале — кликабельный лого и строка копирайта из настроек (без дублирования названия).
  • Подвал: страницы, язык, соцсети; внизу только v0.02 со ссылкой на /changelog.
  • В админке внизу: версия, дата/время МСК и краткая заметка о релизе.
  • В тёмной теме цветной PNG не инвертируется (.karsim-logo).

Тема оформления

  • Исправлено: тема не сбрасывается при переходе между страницами.
  • Единый глобальный state (createGlobalState), cookie colorMode — без localStorage VueUse.
  • useHead с темой только на SSR; после каждого route — syncTheme из cookie.
  • Удалён конфликтующий localStorage vueuse-color-scheme при загрузке.

Исправления

  • Убран плагин scope-override: ошибка 500 «Cannot redefine property: $scope» при переходе из админки в черновик поста.
  • hasScope по-прежнему из Orbita через alias в nuxt.config.

Страница /changelog

  • Публичная страница читает frontend/brand/changelog.json.
  • Полная история версий с датами, описаниями и списками изменений.
  • i18n: pages.changelog.title и subtitle (ru, en, de).
v0.01

Первый отслеживаемый деплой: бренд Karsim, загрузка фото, права комментариев, инфраструктура деплоя.

Брендинг и внешний вид

  • Единый стиль Karsim: токены цветов, типографика, UI-компоненты.
  • Тёмная тема по умолчанию на Orbita, тёплая светлая палитра.
  • Общие ресурсы в frontend/brand/ — используются и Orbita, и Owncast.
  • Owncast (live.karsim.su): свои custom CSS и JS в админке — шапка, соцсети, оформление страницы эфира.
  • Блок социальных ссылок на /live и в виджете автора.
  • Ссылка YouTube ведёт на @szerzen.

Загрузка файлов в постах

  • Исправлена ошибка загрузки фото: убран двойной путь /api//api/ при возобновлении tus-аплоада.
  • Backend отдаёт относительный Location в ответах загрузки.
  • Frontend нормализует tus-URL и чистит сломанные fingerprints в localStorage.
  • Скрипт fix-upload-permissions.sh для прав на каталог upload/.

Комментарии и роли

  • Расширены scope ролей в БД (Administrator, Moderator, User) через SeedUserRoles.
  • Админам и модераторам разрешено комментировать без отдельного scope comments/put (по scope comments/roles).
  • Pinia-store auth унифицирован, scope из API нормализуется (массив / JSON-строка).
  • В тексте кнопок и проверках вместо $scope используется hasScope (один и тот же источник правды).
  • Backend Comments.php учитывает админский scope.
  • Скрипты audit-user-roles.sh и fix-user-roles.sh для проверки и починки ролей на VPS.

Авторизация

  • Модуль orbita-auth: Secure-cookie для HTTPS karsim.su.
  • SSR ходит во внутренний API через API_SSR_URL (без выхода наружу).
  • Переопределены useAuth, hasScope, getApiUrl поверх @vesp/frontend.

Деплой и инфраструктура

  • Скрипты sync-to-vps.sh, rebuild-frontend.sh, deploy-vps.sh.
  • Вспомогательные fix-upload-permissions.sh, fix-user-roles.sh, audit-user-roles.sh.
  • Конфиги nginx для karsim.su и live.karsim.su.
  • Документация стека Orbita + Owncast: docs/stack-orbita-owncast.md.

Админка

  • Версия деплоя внизу /admin: номер, дата/время МСК, краткая заметка.
  • Источник: frontend/brand/deploy-version.json.
  • Перед каждым деплоем версия растёт на 0.01.