Период охватывает массивную работу по 7 репозиториям, 227 коммитов суммарно. Три крупные рабочие сессии в Claude Code.
1. CI/CD пайплайн и деплой smeta-admin (backend + frontend)
— Настроен полный CI/CD: GitHub Actions, deploy-скрипты, systemd-сервисы, nginx-конфиги
— Продакшн-деплой на admin.smeta.net.ru: application-prod.properties, server-setup скрипт, HTTPS
— Исправления деплоя: поддержка SSH-порта, увеличение healthcheck timeout до 60с, LF line endings
— Добавлен CLAUDE.md в оба репозитория
— Технологии: GitHub Actions, systemd, nginx, Spring Boot, React
2. CI/CD пайплайн и деплой smeta-user (backend + frontend)
— Полный CI/CD с нуля: GitHub Actions, deploy.sh, nginx, systemd
— HTTPS через Let’s Encrypt с автообновлением (certbot —nginx)
— Домен smeta-user-test.softlancer.ru
— Оптимизация под сервер 1 CPU / 2 GB RAM (JVM heap 256MB на приложение)
— GitHub Release с версионными архивами для продакшна
— Пересборка тестового сервера после переустановки ОС (nginx, systemd, firewall)
— Технологии: GitHub Actions, Let’s Encrypt, systemd, nginx, sshpass
3. Excel-экспорт смет (smeta-user-backend)
— Реализован экспорт смет в Excel через множество итераций (10+ коммитов)
— Обогащённые DTO с ВМ-ресурсами и корректными ценами
— Все расчётные колонки, абстрактные ресурсы, имена групп + работ
— Только первые НР и СП, строка ФОТ (человеко-часы в колонке 6 «Всего»)
— Улучшена стилизация, подсветка абстрактных ресурсов
— Анализ приложения 3 Приказа 421 для сверки формы экспорта
— Технологии: Apache POI, Spring Boot
4. Выбор материалов и единицы измерения (smeta-user)
— Backend: выбор материала для ВМ-ресурсов (новая сущность, эндпоинты, автоподбор)
— Backend: пересчёт единиц измерения для ВМ
— Frontend: модальное окно MaterialPicker, подсказки с исходными единицами/количеством
— Admin backend: справочник единиц измерения (unit_conversion) с CRUD и сидами
— Admin frontend: UI управления справочником единиц измерения
— Технологии: Spring Boot, React, TypeScript
5. Восстановление пароля (smeta-user)
— Backend: forgot-password/reset-password эндпоинты, 6-значные коды по email
— Настройка SMTP через smtp.mail.ru, verbose логирование
— Frontend: полный UI-флоу (ввод email, код, новый пароль, cooldown повторной отправки)
— Включена регистрация (потом отключена через config.json)
— Технологии: Spring Boot Mail, SMTP, React
6. Переписан XML-импорт с DOM на StAX (smeta-user-backend)
— Файл GESN.xml (80 МБ) вызывал OOM при DOM-парсинге на 350 МБ heap
— Полностью переписан XmlParserService на StAX streaming
— Пакетное сохранение по 500 сущностей за batch
— Память снижена до 256 МБ на приложение
— Технологии: Java StAX API, Spring Data JPA batch insert
7. Обработка количества «П» (из проекта) в FSNB
— Анализ GESN.xml из архива ФСНБ
— Добавлен флаг pr_qnt в ресурсы и абстрактные ресурсы
— Backend: новая колонка, миграция, обработка NULL
— Frontend admin: бейдж «П» для ресурсов с количеством из проекта
— Технологии: Spring Boot, PostgreSQL, React
8. Редактирование ФСНБ и рефакторинг UI
— Admin backend: PATCH-эндпоинт редактирования имени, даты, номера приказа ФСНБ
— Admin frontend: модальное окно редактирования ФСНБ
— Переименование «Сплит Форма» в «Индексы цен» во всех 4 проектах
— Frontend user: переключение вида таблица/грид + 18 Playwright E2E-тестов
9. Миграция softlancer.ru с PayloadCMS на WordPress
— Полная миграция: удалён PayloadCMS (Node.js/Next.js), установлен WordPress
— Кастомная тема softlancer: CPT для услуг/кейсов/лидов
— Шаблоны страниц: главная, услуги, блог, кейсы, о нас, контакты, enterprise, vibe-coding
— AJAX-форма обратной связи с email-уведомлениями
— Перенесено: 31 услуга, 7 статей, 2 кейса
— Настройка MariaDB на отдельном сервере db.softlancer.ru (188.120.233.88)
— SMTP через smtp.mail.ru, SPF/DMARC
— Деплой на прод softlancer.ru (91.107.127.119)
— Технологии: WordPress, PHP 8.1, MariaDB, nginx, PHP-FPM
10. Автопубликация через n8n (smeta-n8n-workflow)
— Развёрнут n8n на n8n.softlancer.ru (docker-compose + Caddy + PostgreSQL)
— Воркфлоу «AI News» (Пн/Ср/Пт 17:00): Tavily Search -> Yandex GPT -> WordPress -> Telegram
— Воркфлоу «Дайджест» (Вс 03:00): git history -> Claude Code -> Yandex GPT -> WordPress -> Telegram
— Генерация изображений через Yandex ART
— Интеграция с Telegram-каналом @softlancer_channel
— RSS-фид для автопубликации в Яндекс.Дзен (yandex:full-text, enclosure)
— Технологии: n8n, Docker, Caddy, PostgreSQL, Tavily API, Yandex GPT, Yandex ART, Telegram Bot API
Сводная статистика по коду:
Проект | Добавлено | Удалено | Коммитов
————————|————|———|———
smeta_admin_backend | 2 390 | 310 | 53
smeta_admin_frontend | 3 930 | 260 | 32
smeta-user-backend | 4 100 | 1 170 | 105
smeta_user_frontend | 1 500*| 400*| 31
softlancer | 1 563 | 0 | 1
softlancer-src | 1 606 | 0 | 2
smeta-n8n-workflow | 711 | 6 | 3
————————|————|———|———
Итого | ~15 800 | ~2 150 | 227
* smeta_user_frontend: реальные изменения кода ~1500/400 строк (raw-цифры 171K/171K из-за удаления node_modules из git)
Оценка трудозатрат:
Задача | ~Часы
—————————————————-|——
CI/CD и деплой smeta-admin (2 репо) | 6
CI/CD и деплой smeta-user (2 репо) + сервер | 10
Excel-экспорт смет | 8
Выбор материалов и единицы измерения (4 репо) | 6
Восстановление пароля (backend + frontend) | 4
Переписывание XML-импорта DOM -> StAX | 3
Обработка количества «П» из проекта | 3
Редактирование ФСНБ + рефакторинг UI + E2E-тесты | 5
Миграция softlancer на WordPress + прод-деплой | 10
Автопубликация n8n + Telegram + Дзен | 8
—————————————————-|——
Итого | ~63 часа