Александр Бызов — Разработка веб-приложений | Аутсорс или в штат

    Александр Бызов — +7 (902) 301-90-52

    Разработка веб‑приложений — аутсорс или в штат

    Быстро, без менеджерских накруток, с полным техническим контролем от архитектуры до деплоя

    Технологии и навыки

    Backend

    ООП, DDD, чистая архитектура, паттерны проектирования, PHP 8+, Yii2, MySQL, PostgreSQL, REST API

    Frontend

    Vue.js, JavaScript, CSS, вёрстка,JWT авторизация, WebGL/ThreeJS

    Инфраструктура

    Docker, Linux/FreeBSD, Bash, CI, деплой; on‑prem: домашний сервер 2×Xeon 2689, 128 GB RAM, 2 TB NVMe

    Безопасность и сети

    Обеспечение/проверки ИБ, ViPNet, КриптоПро, ЭП, TCP/IP

    Нейросети

    Интеграция LLM по API, локальные нейросети для распознавания лиц и номеров автомобилей

    Нейросети

    Автогенерация кода, ИИ-агенты, Cursor IDE

    Портфолио

    int.bxb.delivery

    Вёрстка по макету figma, интерактивный калькулятор на Vue.js

    Vue.js
    Yii2

    my.bxb.delivery

    Личный кабинет (Yii2, Twig)

    Yii2
    Twig

    car.applicode.ru

    Трекинг интервалов обслуживания

    Vue.js
    Yii2

    caster.applicode.ru

    Калькулятор угла установки колёс

    CSS/JS

    nnovpereezd.ru

    Лендинг (адаптивная вёрстка)

    CSS/JS

    Инжиниринговая компания

    Генерация чертежей, расчёты, КП и спецификации

    WebGL/ThreeJS
    Bootstrap 5
    Yii2

    Мои компетенции

    В первую очередь я пишу веб приложения на стеке Yii2, VueJS. Разработка системы стилей, компонентов для построения интерфейса, продумывание структуры БД, выстраивание архитектуры, реализация бэкэнда на основе JSON REST-API.

    Есть опыт работы с ThreeJS - построение 3d графики в браузере. Позволяет строить схемы, чертежи, модели по расчётным характеристикам. В результате получаем автоматическую генерацию документов - коммерческое предложение, спецификация, счёт, акт, чертежи с размерами, 3d виды модели, просмотр, редактирование модели в 3d.

    Есть опыт внедрения LLM по API. Позволяет распознавать текстовые команды, выполнять поиск по вашей базе знаний (RAG), выполнять запросы к вашему приложению. Например, пользователь пишет запрос в виде диалога, LLM генерирует команду к приложению, выполняет её и даёт результат пользователю. («Забронируй переговорную комнату на завтра с 14:00 до 16:00»,«Какие условия для удаленной работы в нашей компании?»)

    Локальные нейросети: распознавание лиц и номеров автомобилей (on‑prem)

    Типичные проблемы и решения

    Отсутствие тестов в проекте

    Проблема: Отсутствие тестов делает рефакторинг рискованным

    Решение: Написание тестов позволяет глубже понять как работает приложение во всех режимах. Обеспечивает проверку после рефакторинга или правок, и это отличная задача для нейросети.

    Генерация кода нейросетями

    Проблема: Автогенерация без контроля приводит к усложнению кода, багам и уязвимостям.

    Решение: Использовать нейросети для рутинных задач (формы, миграции, прототипы, тесты), но обязательно автоматические проверки и ручное code‑review. В результате получаем огромное ускорение и экономию бюджета.

    Пример: Генерация форм и миграций по модели данных, верстка из figma, генерация AR моделей, рефакторинг кода, прототипирование, написание тестов.

    Legacy код

    Проблема: Часто проект разрастается из небольшого прототипа, и в результате имеем огромное количество запутанного кода, отсутствие диалога с бизнесом приводит к точечным решениям текущих задач (костыли) всё это приводит к огромным контроллерам, стилям на десятки тысяч строк, бездумный нейминг, изменение имени переменной в жизненном цикле, валидация в контроллере. И как результат - сложное и дорогое изменение, расширение логики, низкое качество итогового продукта.

    Решение: Выстраивание системы, применение паттернов проектирования, продумывание архитектуры, планирование возможных расширений. В части JS это реактивные фреймворки - vueJS. Разделение логики по компонентам, переиспользование компонентов, выстраивание системы компонентов.

    Пример: Поэтапный калькулятор цены паттерн цепочка обязанностей обеспечивает прозрачность расчета, легкое добавление новых этапов, хорошая изоляция логики. Правила промокода. Объявление интерфейса «Правило». Каждое правило это отдельный класс, который отвечает только за свою часть. Сохранение в JSON в единой таблице. В результате легкое добавление любых новых правил.

    Самописные решения

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

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

    Пример: Yii2, валидация в модели, совпадение имен полей на фронте и бэке. Стандартный жизненный цикл: load() -> validate() -> save(). Тонкие контроллеры. Использование сценариев для ограничения атрибутов, доступных к редактированию в данный момент. Логирование стандартным логером фреймворка, оставляя возможность изменить target и другие настройки логера. Использование Yii2 Queue.

    Непродуманная структура БД

    Проблема: Часто в структуре БД отсутствуют внешние ключи, присутствуют циклы, неоднозначность данных.

    Решение: Продуманные таблицы, наличие внешних ключей, гарантирование целостности данных на уровне БД. Однозначность данных, отсутствие циклов.

    Пример: Хранение в БД стоимости товара, количество и сумма. Сумму нужно рассчитывать, перемножив, её не нужно хранить. Что если сумма не равно перемножению, это неоднозначность данных. Я продумываю структуру БД исключая возможность таких ошибок в корне. Еще пример хранение баланса в поле БД. Его нужно вычислять суммируя доход-расход.

    Сохранение в БД непроверенных данных

    Проблема: Например регистрация пользователя, в БД сохраняется номер тел и код подтверждения.

    Решение: Сохранение кода в кэше, и запись в БД только после подтверждения, когда все данные валидны.

    Кейс с промокодами

    Рефакторинг от if-else в контроллере к правилам-объектам с собственной логикой

    Как было

    // БД
    promocodes (id, user_id, end_date,...)
    // Контроллер
    if (!empty($pc->end_date) && $pc->end_date < $currentDate)
    return ['success' => false];
    if (!empty($pc->user_id) && $order->user_id != $pc->user_id)
    return ['success' => false];
    // ... ещё 10+ условий

    • Жёсткая логика в контроллере

    • Сложно добавлять и отлаживать правила

    • Дублирование кода

    Как стало

    // БД
    promocodes (id, title, max_discount)
    rules (id, pc_id, class, attributes)
    // Контроллер
    $order->load(); (инстанцирует объекты-правила)
    $order->validate();
    $pc->validate()
    $rule->check($pc)

    • Автоматическое инстанцирование правил и запуск логики в них

    • Отдельные формы для каждого правила на фронте

    • Стандартный контроллер load() save()

    Результат

    -90%

    Тонкий контроллер, стандартный жизненный цикл

    +∞

    Гибкость правил

    100%

    Высокая связность кода в классе правила

    Почему выгодно работать со мной

    Работаю на себя

    Ниже цена и прямая связь — без менеджерских накруток

    Полный технический контроль

    Архитектура, код, деплой, тесты — всё под контролем

    Опыт в информационной безопасности

    Проекты по ViPNet, админ-серверы

    Использую LLM для ускорения

    Прототипирование и разработка — экономия времени и бюджета

    Просмотр изображения