Перейти к содержимому
Эльдар Шахвалиев
Обсудить проект
← Все проекты
202601.2026 — 02.2026В работеполный цикл

ЮрКлик (YurClick) — LegalTech-портал

LegalTech-платформа (онлайн юридические услуги) · LegalTech / юридические услуги

Fullstack/Backend WordPress-разработчик (аудит, рефакторинг, SCF-архитектура, деплой), AI-augmented

  • PHP
  • WordPress
  • ACF
  • SCF
  • CMB2
  • MySQL
  • JavaScript
  • jQuery
  • CSS/SCSS
  • Swiper
  • Fancybox
  • IMask
  • Webpack
  • Composer
  • WP-CLI
  • PHPStan
  • Bitrix24
  • Nginx
  • VPS
  • REST API

Ссылки и доступ — по запросу.

75 находок (12 крит. / 41 средн. / 22 низк.), оценка 6.5/10
Технический код-аудит темы
~466 находок хардкода, из них 145 «чистого» хардкода
Аудит захардкоженного контента
106 текстов + 29 ссылок/кнопок выведены в админку; 24 задачи remediation выполнены
Аудит и доведение управляемости из админ-панели
удалено ~640 легаси options_* + 560 легаси-мета CPT + ~147 сиротских acf-field; 332→344 поля, 12→13 JSON-групп
Очистка и миграция SCF/ACF-полей
31 секция, 6 попапов, 4 компонента, 5 CPT
Объём кастомной темы
7 коммитов за 18.02.2026
Интенсивный рефакторинг-спринт (git-история темы yurclick)

Контекст и задача

ЮрКлик — корпоративный LegalTech-портал (каталог юридических услуг, блог, формы заявок, страницы команды и партнёрства) на кастомной теме WordPress (PHP 8.0+, WP 6.0+, Gutenberg полностью отключён). Согласно refactoring-prompt.md, тема прошла первый этап адаптации вёрстки на WordPress, который был оценён как некачественный: много захардкоженного контента, плоская структура полей без repeater-ов, неполный контроль контента через админ-панель, пропущенные UX-элементы; заказчик прислал детальную обратную связь. Задача — привести проект в управляемое, поддерживаемое и развёртываемое состояние. Кто выполнял самый первый этап адаптации — по артефактам однозначно не определяется.

Что я сделал

Документированный и прослеживаемый вклад — это работа второго этапа (не «с нуля»):

  • Технический аудит в три уровня с отдельными отчётами на русском: общий код-аудит (AUDIT-REPORT.md, 75 находок, оценка 6.5/10), аудит возможностей админ-панели (ADMIN-AUDIT-REPORT.md), глубокий аудит SCF/ACF-полей с тройной сверкой PHP↔JSON↔БД (FIELD-AUDIT-REPORT.md) и отдельный отчёт по хардкоду (HARDCODE-REPORT.md, ~466 находок).
  • Рефакторинг под полную управляемость из админки (commit «Complete admin audit remediation: all 24 tasks done»): 106 текстовых строк и 29 ссылок/кнопок выведены в SCF-поля; реализован порядок секций через Flexible Content и переключатели видимости {prefix}_{slug}_visible (yurclick_render_sections); удаление захардкоженных fallback-ов из шаблонов с восстановлением fallback-ов в попап-формах (HEAD-коммит).
  • Миграция системы полей ACF → SCF (Secure Custom Fields как drop-in без платной лицензии), перенос настроек на SCF Options Pages, WP-CLI-миграции (плоские поля → repeater; post_meta → wp_options) и масштабная очистка БД от легаси (~640 options_*, ~560 мета CPT, ~147 сиротских записей).
  • Качество кода: настройка и прогон PHPCS+WPCS и PHPStan (level 5), правки под стандарты (commit «WPCS fixes»); как security-находка аудита — устранение захардкоженного CRM API-URL с токеном.
  • Функционал блога: замена постраничной пагинации на AJAX-кнопку «Загрузить ещё» с фильтрацией по категориям и тегам (PLAN-blog-pagination.md).
  • Деплой: набор bash-скриптов развёртывания на VPS (подготовка, настройка сервера, деплой, обновление темы, синхронизация медиа).
  • Редизайн-итерация: вторая тема new-yurclick как эволюция старой (обновлённые functions.php, helpers.php, custom-post-types.php, menus.php, секции услуг, все группы полей acf-json, CSS/JS).

Решение и подход

Архитектура — «section-based page builder»: каждая страница собирается из переиспользуемых template-part-секций (31 секция, 6 попапов, 4 карточных компонента) через get_template_part(). Ключевые инженерные решения зафиксированы в TECHNICAL_HANDOVER_YURCLICK_FULL.md и CLAUDE.md:

  • Полное отключение Gutenberg ради жёсткого контроля вёрстки контент-менеджером.
  • Эволюция управления контентом: исходно ACF + CMB2 (CMB2 — repeater для FAQ без ACF Pro) и хранение глобальных настроек на скрытой странице site-settings; в ходе рефакторинга — переход на SCF, SCF Options Pages и Flexible Content-порядок секций с переключателями видимости.
  • 5 CPT (service, team_member, case, callback_request, partnership_request); лиды сохраняются в CPT и дублируются на e-mail (wp_mail) — защита от потери заявок при сбое почты.
  • Безопасность: все AJAX-обработчики через check_ajax_referer('yurclick_nonce'), санитизация ввода и экранирование вывода; интеграция с Bitrix24 (плагины flamix-bitrix24-and-contact-forms-7-integrations, bitrix_integration).
  • Кастомный BEM-Walker меню, inline SVG-спрайт, предзагрузка шрифтов, WebP с fallback.

Результат

Подтверждённые артефактами эффекты (см. metrics): три аудиторских отчёта с количественными сводками; устранены все 24 задачи admin-audit remediation; БД очищена от ~1300+ легаси-записей; код приведён к WPCS/PHPStan level 5; блог переведён на AJAX-подгрузку; подготовлена автоматизация деплоя. Бизнес-метрики (трафик, конверсия, нагрузка) и факт/дата продакшн-запуска по артефактам не зафиксированы (уточнить) — домен yurclick.ru сконфигурирован для деплоя, но live-доступность при проверке не подтверждена.

Стек и обоснование

WordPress + кастомная тема (PHP 8.0+/WP 6.0+) — требование заказчика к самостоятельному управлению контентом. SCF вместо ACF Pro — repeater и Pro-возможности без платной лицензии при сохранении API (get_field()) и JSON-синхронизации. CMB2 — исторический repeater для FAQ (в редизайне выводится из эксплуатации). Frontend: jQuery + вендоренные Swiper 11, Fancybox 5, IMask 7.6.1; app.js — Webpack-бандл (исходники в репозитории отсутствуют). Качество: Composer (PHPCS 3.13 + WPCS 3.3, PHPCompatibility, PHPStan 2 + phpstan-wordpress, acf-pro-stubs), WP-CLI, Intelephense LSP. Деплой: Ubuntu 22.04, Nginx, PHP 8.2, MySQL, Certbot. Локальная среда — Local by Flywheel (yurclick.local).

Роль ИИ в проекте

Проект — выраженный пример AI-augmented разработки с несколькими инструментами:

  • Claude CodeCLAUDE.md (правила работы по репозиторию: архитектура, ограничения, команды).
  • OpenCode + oh-my-opencode — мультиагентная конфигурация (.opencode/opencode.json, .opencode/oh-my-opencode.json) с именованными субагентами (sisyphus, oracle, prometheus, metis, momus, hephaestus, atlas, explore, librarian, plan, document-writer и др.) на моделях Claude Opus 4.6 / Sonnet 4.6, с LSP Intelephense и стабами WordPress.
  • AGENTS.md — гайдлайны для ИИ-агентов (стиль PHP/CSS/JS, WPCS, ACF/SCF-паттерны, hard-constraints).
  • Промпт-инжиниринг / doc-driven dev — самодостаточные промпты под конкретные задачи: audit-prompt.md, admin-audit-prompt.md, field-audit-prompt.md, refactoring-prompt.md. Прослеживается цикл research/audit → отчёт → remediation (аудит-отчёты → выполнение 24 задач → WPCS-фиксы → снятие хардкода).
  • dev-browser skill — QA-скриншоты адаптива/меню/хлебных крошек (артефакты в корне источника).

Инженерные вызовы

  • Двойная/мигрирующая система полей (ACF + CMB2 + закомментированный PHP-реестр acf-fields.php + JSON-sync): риск дублирования и конфликтов ключей — решено переходом на SCF JSON-sync и удалением мёртвого кода/легаси через WP-CLI с предварительным бэкапом (backup-before-phase3.sql).
  • Тотальный хардкод текстов/URL (~466 находок): систематизирован по типам (чистый хардкод / SCF-фолбэк / i18n / админка) и вынесен в управляемые SCF-поля без потери дефолтов в формах.
  • Отсутствие build-системы и исходников JS (app.js — бандл без src/): правки вносились в скомпилированные файлы; добавление сборки запрещено без явного запроса (hard-constraint).
  • Поддержка задачи новым разработчиком: подготовлены два подробных technical-handover-документа и CLAUDE.md/AGENTS.md.
  • Эволюция старая→новая тема: ведение двух кодовых баз (yurclick под git с аудит-отчётами и new-yurclick — более новая редизайн-итерация вне git).
  • аудит
  • доработка legacy
  • рефакторинг
  • миграция
  • разработка
  • редизайн
  • деплой