Вливает в main всю работу от 5–6 августа: закрытый клуб, вход через Яндекс ID, адаптер единого бота флота и полировку оформления.
Зачем это нужно сейчас
main отстал на 4 коммита, а .gitea/workflows/deploy.yml разворачивает именно main. То есть при запуске автодеплоя на прод уехал бы каркас без клуба и без авторизации — вся вечерняя работа осталась бы за бортом, причём молча.
Ветка feat/nika-polish содержит всё из feat/bot-adapter плюс один свой коммит, поэтому вливается одна, а не три подряд.
Что входит
Коммит
Что
8291d0f
backend закрытого клуба + вход через Яндекс ID
a355188
frontend закрытого клуба + страница входа
3f1c5db
адаптер единого бота флота, смена домена на 1nika.ru
c6b26a9
design-tokens, SEO-метаданные, favicon
Проверено перед PR
Домен 1nika.ru сейчас не обслуживает приложение: резолвится в 45.130.41.48 и отдаёт заглушку хостинга «Домен не прилинкован ни к одной из директорий на сервере!» (nginx-reuseport). То есть слияние ничего не ломает на проде — прода пока нет.
Что остаётся после слияния
Слияние не разворачивает сайт. По docs/DEPLOY.md живой пролив — решение владельца, и для него нужно:
выбрать ноду под бэкенд (Docker + PostgreSQL, порты 80/443);
перенастроить DNS 1nika.ru и www с общего хостинга на эту ноду;
прописать в .env: пароль БД, ключи JWT, YANDEX_CLIENT_ID/SECRET (на Я.Диске), BOT_API_TOKEN;
выпустить сертификат certbot и применить миграции club_access.sql и bot_adapter.sql;
назначить Нике роль owner;
перевести сайт в реестре бота из soon в live;
завести секреты раннера DEPLOY_HOST и DEPLOY_KEY, иначе CI не отработает.
Осторожно с автодеплоем: после слияния push в main попытается запустить workflow. Если раннер и секреты не настроены, он просто не выполнится — но стоит убедиться, что он не раскатает что-то на неподготовленную ноду.
Отдельно
Задачи #1–#15 из README и заметок vault не заведены в трекере — открытых issues в репозитории ноль. По плану без задач работать неудобно; если нужно, заведу их отдельно.
Вливает в `main` всю работу от 5–6 августа: закрытый клуб, вход через Яндекс ID, адаптер единого бота флота и полировку оформления.
## Зачем это нужно сейчас
`main` отстал на 4 коммита, а `.gitea/workflows/deploy.yml` разворачивает именно `main`. То есть при запуске автодеплоя на прод уехал бы **каркас без клуба и без авторизации** — вся вечерняя работа осталась бы за бортом, причём молча.
Ветка `feat/nika-polish` содержит всё из `feat/bot-adapter` плюс один свой коммит, поэтому вливается одна, а не три подряд.
## Что входит
| Коммит | Что |
|---|---|
| `8291d0f` | backend закрытого клуба + вход через Яндекс ID |
| `a355188` | frontend закрытого клуба + страница входа |
| `3f1c5db` | адаптер единого бота флота, смена домена на `1nika.ru` |
| `c6b26a9` | design-tokens, SEO-метаданные, favicon |
## Проверено перед PR
Домен **`1nika.ru` сейчас не обслуживает приложение**: резолвится в `45.130.41.48` и отдаёт заглушку хостинга «Домен не прилинкован ни к одной из директорий на сервере!» (nginx-reuseport). То есть слияние ничего не ломает на проде — прода пока нет.
## Что остаётся после слияния
Слияние **не разворачивает сайт**. По `docs/DEPLOY.md` живой пролив — решение владельца, и для него нужно:
1. выбрать ноду под бэкенд (Docker + PostgreSQL, порты 80/443);
2. перенастроить DNS `1nika.ru` и `www` с общего хостинга на эту ноду;
3. прописать в `.env`: пароль БД, ключи JWT, `YANDEX_CLIENT_ID`/`SECRET` (на Я.Диске), `BOT_API_TOKEN`;
4. выпустить сертификат certbot и применить миграции `club_access.sql` и `bot_adapter.sql`;
5. назначить Нике роль `owner`;
6. перевести сайт в реестре бота из `soon` в `live`;
7. завести секреты раннера `DEPLOY_HOST` и `DEPLOY_KEY`, иначе CI не отработает.
**Осторожно с автодеплоем:** после слияния push в `main` попытается запустить workflow. Если раннер и секреты не настроены, он просто не выполнится — но стоит убедиться, что он не раскатает что-то на неподготовленную ноду.
## Отдельно
Задачи #1–#15 из README и заметок vault **не заведены в трекере** — открытых issues в репозитории ноль. По плану без задач работать неудобно; если нужно, заведу их отдельно.
Реализован контракт /api/bot/* из servaki-webhub-bot/SPEC.md:
- GET /api/bot/health (публичный) -> {ok, site}
- GET /api/bot/publications?status=&limit= -> список works
- POST /api/bot/publications {title,body,media[]} -> черновик works -> {id}
- POST /api/bot/publications/:id/publish -> published -> {id,url}
- DELETE /api/bot/publications/:id -> удаление (media cascade)
- POST /api/bot/materials (multipart file) -> media -> {id,url}
Аутентификация Authorization: Bearer <BOT_API_TOKEN> (middleware/botAuth,
сравнение постоянного времени; 503 без токена в env, 401 при несовпадении).
Маппинг: публикация<->works, материал<->media. Миграция bot_adapter.sql
разрешает media.type='file'. multer 2.x.
Фикс Яндекс-redirect и домена: nika-gallery.ru -> 1nika.ru в .env.example
(YANDEX_REDIRECT_URI, FRONTEND_URL, SITE_URL, NEXT_PUBLIC_*, SMTP_USER) и
nginx server_name. Секреты не в git (client_id/secret - на Я.Диске).
Добавлен docs/DEPLOY.md (VPS runbook: DNS, .env, SSL, миграции, бот).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Вливает в
mainвсю работу от 5–6 августа: закрытый клуб, вход через Яндекс ID, адаптер единого бота флота и полировку оформления.Зачем это нужно сейчас
mainотстал на 4 коммита, а.gitea/workflows/deploy.ymlразворачивает именноmain. То есть при запуске автодеплоя на прод уехал бы каркас без клуба и без авторизации — вся вечерняя работа осталась бы за бортом, причём молча.Ветка
feat/nika-polishсодержит всё изfeat/bot-adapterплюс один свой коммит, поэтому вливается одна, а не три подряд.Что входит
8291d0fa3551883f1c5db1nika.ruc6b26a9Проверено перед PR
Домен
1nika.ruсейчас не обслуживает приложение: резолвится в45.130.41.48и отдаёт заглушку хостинга «Домен не прилинкован ни к одной из директорий на сервере!» (nginx-reuseport). То есть слияние ничего не ломает на проде — прода пока нет.Что остаётся после слияния
Слияние не разворачивает сайт. По
docs/DEPLOY.mdживой пролив — решение владельца, и для него нужно:1nika.ruиwwwс общего хостинга на эту ноду;.env: пароль БД, ключи JWT,YANDEX_CLIENT_ID/SECRET(на Я.Диске),BOT_API_TOKEN;club_access.sqlиbot_adapter.sql;owner;soonвlive;DEPLOY_HOSTиDEPLOY_KEY, иначе CI не отработает.Осторожно с автодеплоем: после слияния push в
mainпопытается запустить workflow. Если раннер и секреты не настроены, он просто не выполнится — но стоит убедиться, что он не раскатает что-то на неподготовленную ноду.Отдельно
Задачи #1–#15 из README и заметок vault не заведены в трекере — открытых issues в репозитории ноль. По плану без задач работать неудобно; если нужно, заведу их отдельно.
Реализован контракт /api/bot/* из servaki-webhub-bot/SPEC.md: - GET /api/bot/health (публичный) -> {ok, site} - GET /api/bot/publications?status=&limit= -> список works - POST /api/bot/publications {title,body,media[]} -> черновик works -> {id} - POST /api/bot/publications/:id/publish -> published -> {id,url} - DELETE /api/bot/publications/:id -> удаление (media cascade) - POST /api/bot/materials (multipart file) -> media -> {id,url} Аутентификация Authorization: Bearer <BOT_API_TOKEN> (middleware/botAuth, сравнение постоянного времени; 503 без токена в env, 401 при несовпадении). Маппинг: публикация<->works, материал<->media. Миграция bot_adapter.sql разрешает media.type='file'. multer 2.x. Фикс Яндекс-redirect и домена: nika-gallery.ru -> 1nika.ru в .env.example (YANDEX_REDIRECT_URI, FRONTEND_URL, SITE_URL, NEXT_PUBLIC_*, SMTP_USER) и nginx server_name. Секреты не в git (client_id/secret - на Я.Диске). Добавлен docs/DEPLOY.md (VPS runbook: DNS, .env, SSL, миграции, бот). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>