IDG Capital — корпоративный сайт венчурного фонда
Венчурный фонд (международный VC), корпоративный сайт · Венчурный капитал / финансовые услуги
Сайт венчурного фонда был статичным: добавить компанию в портфель или офис на карту мог только разработчик. Сделал всё редактируемым, не тронув вид страницы.
- PHP
- WordPress
- SCF
- ACF
- MySQL
- JavaScript
- HTML
- CSS/SCSS
- Swiper.js
- Canvas/WebGL
- nginx
- PHP-FPM
- Polylang
- Rank Math
В цифрах
- 198
- постов контента после мультиязычности (66×3: 18 страниц, 144 portfolio, 36 locations)
- 47
- портфельных компаний создано one-time скриптом миграции
- ~60
- SCF/ACF-полей за 10 фаз кастомизации админки
- 3
- языка EN/CN/KR (Polylang), 33 термина таксономий, 7 нав-меню переведено
- 12 Critical / 22 Medium / 15 Low + 50+
- находок аудита кода + расхождений с вёрсткой (05.03.2026)
- 72%
- production-readiness на старте, 5 критических блокеров (05.02.2026)
- 130 файлов, +15083/−5690
- масштаб адаптации статики под WordPress
Ключевое
- Собрал около 60 полей в админке за десять заходов: тексты, цифры, изображения, состав портфеля, адреса офисов — всё правится без разработчика.
- Три языка, включая китайский и корейский: переведены и материалы, и подписи интерфейса, зашитые в код; подключены шрифты для иероглифов.
- Карта мира строится сама: при сохранении офиса адрес превращается в координаты через внешний сервис, результат хранится три месяца.
- Стартовый аудит оценивал готовность к запуску в 72% и называл пять критических препятствий — закрыты все пять.
- Собрал пакет для установки на сервер: конфигурации, скрипты установки и восстановления из копии, проверка работоспособности, документация.
Задача
Венчурному фонду нужен был корпоративный сайт. Вёрстка к началу работ существовала — одностраничная, с анимациями и картой мира, — но полностью статичная: добавить компанию в портфель, поменять цифру или завести новый офис мог только разработчик, правкой кода.
Требовалось три языка, включая китайский и корейский, редактирование всего содержимого силами заказчика и состояние, в котором сайт можно отдать на боевой сервер. Стартовый аудит оценивал готовность к запуску в 72% и называл пять критических препятствий.
Что сделано
- Перенёс готовую вёрстку в управляемый сайт, не тронув ни её внешний вид, ни структуру классов: разделы страницы стали шаблонами, а их содержимое — полями в админке.
- Собрал около 60 полей за десять заходов, чтобы редактор мог менять всё: тексты, цифры, изображения, состав портфеля, адреса офисов. Поля описаны кодом, а не мышкой в интерфейсе, — иначе их не перенести на другой сервер и не сравнить между версиями.
- Перенёс данные скриптами, а не руками: 47 портфельных компаний, юридические страницы, координаты офисов на карте.
- Сделал три языка — английский, китайский и корейский. Перевода потребовали не только материалы, но и подписи интерфейса, зашитые в код; для иероглифов подключены отдельные шрифты.
- Провёл аудиты безопасности и соответствия исходной вёрстке и закрыл находки: данные попадали в скрипты страницы без экранирования, у формы не было ограничения частоты отправки и защиты от подделки запроса.
- Собрал пакет для установки на сервер: конфигурации, скрипты установки, резервного копирования, восстановления и проверки работоспособности, дамп базы и документация.
Итог
Сайт собран, наполнен и передан заказчику готовым к запуску пакетом: сборка темы, дамп базы со 198 материалами на трёх языках, конфигурация сервера и скрипты, которыми установку можно повторить и откатить.
Стартовый аудит оценивал готовность к запуску в 72% и называл пять критических препятствий — закрыты все пять, вместе с находками аудитов безопасности и соответствия вёрстке. Содержимое сайта — включая состав портфеля, адреса офисов и цифры на главной — редактируется из админки на всех трёх языках.
Технические детали
Решение и подход
Архитектура данных: 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-проверки) поверх исходной вёрстки.
Стек и обоснование
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).
Инженерные вызовы
- Паритет статики и 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
- деплой
- контент-миграция
- документация