IDG Capital — корпоративный сайт венчурного фонда
Венчурный фонд (международный VC), корпоративный сайт · Венчурный капитал / финансовые услуги
- PHP
- WordPress
- SCF
- ACF
- MySQL
- JavaScript
- HTML
- CSS/SCSS
- Swiper.js
- Canvas/WebGL
- nginx
- PHP-FPM
- Polylang
- Rank Math
- 198
- 47
- ~60
- 3
- 12 Critical / 22 Medium / 15 Low + 50+
- 72%
- 130 файлов, +15083/−5690
Контекст и задача
IDG Capital — корпоративный сайт венчурной фирмы с двухслойной архитектурой. Исходник — статический single-page сайт (html/: чистый HTML5, BEM-CSS без препроцессоров, vanilla JS без бандлера, 8 секций, Swiper.js, Canvas/WebGL-анимации, кастомная SVG-карта мира; git-репо karagulow/IDG-Capital, 102 коммита). Задача — превратить эту вёрстку в полноценный управляемый из админки WordPress-сайт: контент через SCF Options Pages и Custom Post Types, мультиязычность EN/CN/KR, SEO, корректная безопасность и готовый к продакшену деплой. На старте production-аудит оценивал готовность темы в 72% с пятью критическими блокерами (docs/production-audit-report.md).
Что я сделал
Честно о роли (engagement: mixed — миграция + greenfield-тема + аудит + i18n + devops):
- Миграция вёрстки → WordPress. С нуля собрал кастомную тему
idg-capital(без page-builder):functions.phpгрузит 11 include-ов (theme-setup, security, enqueue, helpers, post-types, taxonomies, scf-fields, geocoding, menu-filters, i18n, contact-form), template-parts 1:1 повторяют секции статики. Масштаб адаптации: 130 файлов, +15083/−5690 строк (ADAPTATION-PLAN.md). - Редактируемость из админки. ~60 SCF/ACF-полей за 10 фаз (8 field-групп в
inc/scf-fields.php); 3 CPT —portfolio(публичный),location(admin-only),inquiry(заявки формы, без wp_mail) — и таксономииsector/region. - Контент-миграция. One-time WP-CLI скрипты: 47 портфельных компаний (
migrate-portfolio-companies.php), legal-страницы, координаты карты. - Мультиязычность EN/CN/KR. Polylang: переводы для всех 198 постов, регистрация UI-строк через
pll_register_string()(inc/i18n.php), CJK-шрифты Noto Sans/Serif SC/KR, верифицированный аудит переводов. - Аудиты и исправления. Security/production/SCF/multilang-аудиты; пофикшены XSS (экранирование
wp_localize_script-данных), rate-limit AJAX-формы, nonce, WP-hardening (AUDIT-REPORT.md, git-коммит2891362). - Деплой-пакет. Полный архив под VPS: nginx/php-fpm/wp-config шаблоны, скрипты deploy/backup/restore/health-check/search-replace-urls, дамп БД (~198 постов), документация (README/DEPLOYMENT/MAINTENANCE/ARCHITECTURE/CHANGELOG).
Решение и подход
Архитектура данных: WP Admin (SCF Options / CPT) → inc/helpers.php → wp_localize_script (idgHero, idgLocations) → vanilla JS с захардкоженным fallback. Это сохранило исходный фронтенд почти без изменений и сделало его управляемым из админки. Нетривиальные места: автогеокодирование офисов через Nominatim API при сохранении Location (тиерный fallback, кэш 90 дней) с конвертацией координат в позиции на SVG-карте; кэш списка офисов в футере (transient 1 час, ключ по локали); защита AJAX-формы (nonce + transient-rate-limit по IP, заявки сохраняются в CPT inquiry с метабоксом и кастомными колонками админки). Сохранены улучшения a11y (aria, focus, Escape) и устойчивость JS (typeof gsap, null-проверки) поверх исходной вёрстки.
Результат
Подтверждено артефактами: деплой-архив от 19.03.2026 с актуальной сборкой (тема v1.2.8, WP 6.9.4, 8 плагинов), 198 постов контента в трёх языках (66×3), 47 импортированных компаний, ~60 SCF-полей. Аудиты зафиксировали и закрыли находки безопасности/вёрстки (12 Critical / 22 Medium / 15 Low + 50+ расхождений). Production-готовность поднята с исходных 72%. Боевой запуск на домене idgcapital.com артефактами не подтверждён (есть деплой-таргет в deploy.sh и тестовый сервер).
Стек и обоснование
WordPress 6.9 + PHP 8.x — CMS-управление контентом для не-технического заказчика. SCF (Secure Custom Fields, форк ACF) — программные поля в коде (версионируемость). Polylang — мультиязычность EN/CN/KR со String Translations. Rank Math — SEO/sitemap/OG. Safe SVG — загрузка SVG-логотипов; Performance Lab — WebP/lazy-load; Post Types/Taxonomy Order — ручная сортировка. Фронтенд намеренно без сборки (vanilla JS, plain CSS/BEM, px, Swiper с CDN, Canvas/WebGL) — сохранение исходной вёрстки. Локальная среда — Local by Flywheel (nginx + PHP-FPM + MySQL).
Роль ИИ в проекте
Образцовый AI-augmented, doc-driven процесс (полностью прослеживается по артефактам):
- Оркестраторы: Claude Code (
CLAUDE.md,.claude/) и OpenCode (.opencode/oh-my-opencode.json— кастомные агенты sisyphus/prometheus/oracle/metis/hephaestus/atlas и др. на Claude Opus 4.6 / Sonnet 4.6);AGENTS.md(формат Codex/agents) в корне и в теме. - MCP-серверы: Novamira (WordPress MCP — чтение/запись постов, ACF, CPT, Polylang на тестовом сервере) и Playwright (скриншоты, проверка DOM EN/CN/KR на брейкпоинтах). Конфиг
.mcp.json. - Кастомные субагенты:
wp-reviewer(Sonnet — ревью PHP/CSS/JS по чеклисту),html-wp-comparator(Haiku — диф статики и template-parts). - Слэш-команды (skills):
/wp-debug,/wp-cli,/sync-check,/validate-scf(fork-агент Explore). - Хуки:
check-debug-log.sh(PostToolUse — авто-проверка debug.log),check-escaping.sh(PreToolUse — контрольesc_*). Правила:.claude/rules/{wordpress-php,css-conventions,security}.md. Плагины: php-lsp (Intelephense), claude-wordpress-skills. - Цикл research→plan→audit→verify→implement: отдельным промптом проведено веб-исследование оптимального workflow (
claude-code-workflow-prompt.md→workflow-research.md, ~92 КБ), затем gated-настройка через AskUserQuestion (workflow-setup.md); аудиты перепроверялись кросс-инструментально (Playwright + Novamira + Figma) вmultilang-audit-verified.md; промпты архивировались (PROMPT-ARCHIVE-2026-03-19.md,prompts/).
Инженерные вызовы
- Паритет статики и WordPress при нулевой сборке: енквью с цепочками зависимостей вместо
@import-каскадов, сохранение iframe Canvas-компонентов и инлайн-WebGL без рефактора в модули. - Безопасность вывода: данные ACF попадали в JS через
innerHTML— устранены XSS (серверноеesc_*+.textContent/createElement), добавлен rate-limit на публичный AJAX-endpoint. - Мультиязычность: перевод не только постов, но и захардкоженных UI-строк (регистрация в Polylang), привязка меню/таксономий к языкам, типографика CJK (двойное тире
——как норма для CN) — часть пунктов осталась на уточнение дизайнеру. - Геокодирование и карта: надёжный тиерный запрос к Nominatim с кэшем и переводом гео-координат в координаты SVG-карты.
- Воспроизводимый деплой Local→VPS: search-replace доменов, права, health-check, бэкап/restore.
Услуги в проекте
- разработка
- миграция
- аудит
- мультиязычность (i18n)
- SEO
- деплой
- контент-миграция
- документация