Photographer.ru переехал. Десять недель, одна ночь и архив форума
В ночь на 5 октября я закрыл форум Photographer.ru. Он жил с 17 мая 2000 года — в этот день там появилось первое сообщение. Удалять ничего не стал: форум теперь называется «Архив форума 2000–2026», его можно читать, но писать в нём больше нельзя. Обсуждения статей переехали под сами статьи.
Со стороны это выглядит как одна бурная ночь. На деле это финал переезда, который занял десять недель.
Десять недель до одной ночи
Работа началась 28 июля. Я сразу решил: сначала разобраться, что у нас есть и каким должен стать журнал, и только потом переносить данные.
- Конец июля — рубрики. За годы рубрикатор разросся так, что одна статья могла одновременно числиться в разделе, теме и подтеме, противоречивших друг другу. 29 июля я утвердил новую модель: шесть независимых признаков вместо одного перегруженного дерева.
- С 31 июля — дизайн-система. Самый трудоёмкий этап. Вместо готовой темы WordPress мы собрали собственную систему: единый источник цветов, шрифтов и отступов, библиотеку компонентов, шаблоны страниц. Шрифты лежат на нашем сервере — сайт не обращается к Google Fonts и внешним CDN. 26 августа система заработала как интерактивная витрина в браузере, которую можно было тестировать.
- Параллельно в начале августа — ревизия архива. Нужны ли разделы «Тема» и «История» в «Культпросвете»? Ответ искали в базе данных и журналах посещаемости, а не в умозрительных гипотезах.
- С 8 августа — поиск. Решили, что поиск по журналу должен быть не просто строкой в шапке, а полноценным маршрутом по архиву: через авторов, фотографов, локации и годы.
- С 27 августа — тема WordPress. Дизайн-система превратилась в код. Ни одного стороннего плагина. Статья в панели редактирования выглядит ровно так же, как на сайте.
- С 30 августа — перенос данных. Для миграции написали конвертер: он переносит статьи, выставки галереи, авторов, метки и подписки. Его можно запускать повторно без риска создать дубли, а любой шаг — откатить. Месяц ушёл на прогоны, сверку и правки: старые адреса должны были корректно открываться, иллюстрации — встать на свои места, а системные письма — доходить до читателей.
- 4 октября — переключение. За день до финала доделали навигацию по разделам и событийную афишу по городам и датам. В 22:58 журнал на www.photographer.ru стал отдаваться с WordPress.
- Ночь на 5 октября — форум и доступ редакции.
Что изменилось в последнюю ночь
- 25 381 сообщение из форума переехало под 2 662 материала журнала. У всех комментариев сохранились авторство, дата публикации и исходная ветка ответов.
- 11 961 старая ссылка на темы форума теперь ведёт прямо к дискуссии под соответствующей статьёй. Ссылки, годами расходившиеся по сети, остались рабочими.
- Обсуждение начинается сразу под текстом статьи, а счётчик отзывов вынесен к заголовку.
- Авторизованный на старом сайте пользователь видит в шапке нового своё имя и может комментировать публикации. Учётные записи, пароли и профили остались на прежнем месте — переносить их не потребовалось.
- Редакция входит в систему один раз и сразу попадает в консоль WordPress. Второго пароля нет.
Nonstop, сайты-портфолио, сквозной вход и регистрация пока работают на прежнем движке. Два сайта сосуществуют на одном домене, и для читателя этот стык незаметен.
Как это было устроено
Я не программист. Код писали ИИ-агенты: сначала Claude в Cowork, затем Claude Code в терминале. Правила игры задавал я, и они оказались важнее самого кода.
Главный принцип: у агента был доступ к боевому серверу только на чтение. Любые изменения вносились исключительно моими руками: агент формировал одну готовую команду, а рядом — команду для немедленного отката. Читать рабочую базу данных он мог только после прямого подтверждения в чате.
За десять недель сменились десятки рабочих сессий. Каждая заканчивалась сводкой для следующей: что сделано, что протестировано, что требует моего решения. Задачи, которые были намечены, но отложены, заносились в общий реестр открытых вопросов. В начале и в конце каждой сессии скрипт выявлял «хвосты» — невыполненные обещания модели без номера задачи. Сейчас в этом списке 98 пунктов, из которых открыты 15. Ни одно решение не потерялось при смене контекста.
Где ошибались
Без сбоев не обошлось — и именно на них связка с ИИ показала себя нагляднее всего.
В финальную ночь агент сам обратил внимание, что старый движок не сможет прочесть файл с секретным ключом, связывающим обе системы: у файла оказался не тот владелец. Он обнаружил это при плановой проверке прав системных процессов — до того, как кто-то столкнулся с ошибкой на проде.
Вторую ошибку поймал уже я. Вхожу — панель WordPress на месте. Выхожу, авторизуюсь снова — панель исчезла. Агент поднял логи сервера и по шагам восстановил цепочку действий. Выяснилось, что кнопка выхода в самой панели закрывала только одну из двух сессий. Исправление развернули на сайте через пятнадцать минут.
Была и ложная тревога. Автопроверка после включения 301-х редиректов вернула статус 200. Агент не бросился переписывать конфиги, а проверил отдачу из внешней сети: 30 случайных URL из 30 отработали штатно. Логика проверки просто опередила перезапуск веб-сервера.
Что делал я
Принимал архитектурные и продуктовые решения. Какие рубрики оставить, как журнал должен выглядеть на смартфоне, где разместить баннеры, как переименовать архив форума. Мои указания часто укладывались в одну строку: «закрываем форум», «комментарии начинаются сразу под текстом», «имя автора должно быть ссылкой на профиль». Реализацию, тестирование и подготовку путей отката брали на себя агенты.
Кажется, это и есть продуктивное разделение труда: человек определяет замысел и критерии качества, а машина берет на себя рутину реализации и страхует от поломок по дороге.
Форум закрыт, но разговор продолжается — теперь прямо под статьями на photographer.ru. Заходите.
