Разработчик · продукты и веб

Андрей Ермолаев

Портфолио Fullstack Wordpress разработчика

Избранное
19
Участие
50
Андрей Ермолаев
Андрей Ермолаев Developer

Skills

Навыки

Fullstack WordPress: ядро, кастомные темы и плагины, Gutenberg, данные и интеграции. Плюс фронтенд, производительность, безопасность и то, что нужно, чтобы продукт жил после релиза.

  • WordPress Senior Иерархия шаблонов, block theme и classic, WP_Query с pre_get_posts, rewrite rules, cron, роли и capabilities. Кастом держу в теме и своих плагинах, ядро не правлю: обновление core не затирает логику, выкладка идёт через Git и WP-CLI.
  • Shopify Senior Online Store 2.0: JSON-шаблоны, секции со schema, metafields и metaobjects, app blocks и theme app extensions. Checkout Extensibility, Shopify Functions, Storefront API и webhooks для каталога, остатков и заказов на боевом ассортименте.
  • Liquid Senior Секции, snippets и layout на объектах product, collection, cart и customer: filters, paginate, form и section settings. Разметку не дублирую, циклы по каталогу не оставляю в одном шаблоне, данные беру из metafields.
  • PHP Senior PHP 8: типы, readonly, enums, исключения и PSR-4. Интеграции через HTTP-клиент, идемпотентные обработчики и явные границы ошибок. Сервисы отдельно от шаблонов, без логики в глобалах и в хуках, которые нельзя снять.
  • JavaScript Senior Состояние экрана, делегирование событий и fetch к REST с отменой устаревшего ответа. Модули без фреймворка там, где хватает DOM. Фокус, клавиатура и гонки запросов, когда пользователь быстрее сервера.
  • HTML / CSS Senior Семантика, custom properties, grid и container queries. Компоненты темы, а не одноразовые страницы. Сетка держит длинные слова, пустые поля и несколько языков, без фиксированных высот под макет.
  • MySQL Senior Индексы под выборки WordPress и отчёты, EXPLAIN на тяжёлых запросах, отказ от meta_query там, где нужна отдельная таблица. Транзакции на заказ и импорт, чтобы каталог и админка не садились на объёме.
  • Custom Themes Senior Тема с нуля: template hierarchy, template parts, theme.json или своя сборка, код разложен по зонам. Хуки вместо копипасты, пустые состояния заложены в шаблон, следующий разработчик видит, куда класть новый экран.
  • Custom Plugins Senior Свой префикс, activation и uninstall, таблицы через dbDelta, Settings API и экраны админки. Публичные функции и REST как контракт. Обновление не трогает чужой код и не оставляет данные после удаления.
  • Gutenberg Senior block.json, attributes, InnerBlocks, block patterns и dynamic render через render.php. InspectorControls и useBlockProps. Страница собирается в редакторе, шаблон не правят под каждый новый блок.
  • ACF Senior Field groups как схема: relationship, repeater, flexible content, options. JSON полей в Git, get_field только на границе шаблона. Связи между записями вместо россыпи meta, блоки повторяют модель продукта.
  • WooCommerce Senior Каталог, вариации, корзина и checkout через хуки и шаблоны темы, не через правки плагина. Оплата, склад, налог, доставка и webhooks заказов. Обновление Woo не ломает витрину, потому что кастом сидит снаружи ядра.
  • REST API Senior register_rest_route, JSON Schema, permission_callback, sanitize и validate. Свои эндпоинты и клиенты к чужим API: пагинация, коды ошибок, идемпотентность и ретраи. Контракт ответа стабилен для фронта.
  • WP-CLI Senior Команды на миграции, импорт, search-replace и cron. Пакетная обработка с dry-run и прогрессом, чтобы не гонять тысячи записей из админки. Обслуживание уходит в скрипт, который можно повторить.
  • Hooks API Senior add_action и add_filter с явным приоритетом и числом аргументов. Хуки снимаются на деактивации, без анонимных замыканий. Расширение чужого поведения остаётся контрактом, побочные эффекты не прячутся внутри фильтра.
  • Multisite Senior Общие пользователи и разные витрины: domain mapping, site options, switch_to_blog только на коротком участке. Общие плагины и отдельные темы, без копии кодовой базы на каждый домен.
  • React Senior Компоненты со состоянием, эффектами и границей ошибок там, где статичной вёрстки мало. Сборка в тему или админку, данные с REST или GraphQL. React не тащу в шаблон, которому хватает разметки.
  • Sass Senior Переменные, миксины и partials по компонентам, один собранный CSS с контролируемой специфичностью. Токены цвета и отступов в одном месте, тема не растёт одним длинным файлом.
  • Git Senior Ветка на задачу, коммиты с причиной изменения и ревью до мержа. По истории видно, что откатить и почему это появилось. Конфликты в теме и плагинах разбираю по смыслу кода.
  • Composer Senior PSR-4, lock-файл и отделение пакетов проекта от ядра WordPress. Версии фиксируются, обновление зависимости видно в diff и не тянет несовместимый PHP.
  • Docker Senior Compose с PHP, MySQL и Nginx тех же мажорных версий, что на сервере. Volume для темы и дамп базы: окружение поднимается одной командой и совпадает с выкладкой.
  • Linux Senior Права и владельцы, php-fpm, логи nginx и PHP, диск и память. Диагностика и выкладка из консоли, когда панель хостинга не показывает, почему воркер завис.
  • Nginx Senior server, root, try_files на index.php, статика, gzip и заголовки кэша. FastCGI к PHP, лимит тела запроса для медиа, служебные файлы наружу не отдаются.
  • Performance Senior TTFB, критический путь, вес изображений и число запросов на боевой странице. Object cache, трансиенты и разбор медленного SQL. Ускоряю то, что видно на реальных данных, а не на пустом стенде.
  • SEO Senior ЧПУ, canonical, sitemap, robots и шаблоны title. Schema.org там, где она совпадает со структурой страницы. Пагинация и hreflang не разъезжаются при смене контента.
  • Security Senior nonce, current_user_can, sanitize на входе и escape на выводе. Подготовленные запросы, закрытые служебные пути, секреты вне репозитория и вне ответа API.
  • Accessibility Senior Семантика, видимый фокус, контраст и доступные имена. Клавиатура проходит меню, формы и модальные окна. Интерфейс остаётся рабочим без мыши и со скринридером.
  • Caching Senior Object cache для тяжёлых выборок, page cache для анонимов, сброс на save_post и смене заказа. Трансиенты с ключом и сроком, персональные данные в общий кэш не попадают.
  • GraphQL Senior Типы, резолверы и срез полей под экран. Один запрос вместо цепочки REST, права на поле и ограничение глубины. Клиент получает контракт без лишних сущностей.
  • TypeScript Senior Типы на границе компонентов и ответов API, узкие union вместо any. Сломанный контракт ловится на сборке. Общие типы живут рядом с эндпоинтом, а не расходятся копиями по файлам.

Featured

Лучшие работы

Крупные Fintech продукты, Edtech, Lifestyle, Crypto, Media порталы и интернет-магазины

Collaborations

Collaborations

Фонды, лагеря, образование, travel и корпоративные сайты. Каждый — с превью и прямой ссылкой.

About

Архитектура успеха

Я разрабатываю сайты и цифровые продукты: от инфраструктурных сервисов и SaaS до медиа, фондов и аккуратных корпоративных витрин. Успех здесь начинается с правильной архитектуры и точечной кастомизации: когда каркас заложен под продукт, его проще развивать, а технический долг не копится с каждым следующим релизом.

По стеку я fullstack WordPress-разработчик: PHP, кастомные темы и плагины, Gutenberg, ACF, WooCommerce, REST API. На клиенте — HTML, CSS, JavaScript и React; рядом — MySQL, кэш, безопасность, доступность и производительность. Кастомизацию строю так, чтобы ядро оставалось чистым, а продукт можно было провести от архитектуры до релиза и поддержки без лишнего долга в будущем.

В команде работаю в общем контуре с дизайнерами, менеджерами и другими разработчиками: уточняю задачу, не теряю продуктовую логику, пишу код так, чтобы его было понятно ревьюить и развивать.