Frontend-разработчик (Vue 3, Middle+/Senior)

Frontend-разработчик (Vue 3, Middle+/Senior)

Санкт-Петербург, Лиговский проспект, 232

Метро: Обводный Канал

Описание вакансии

Обязанности:
  • Разработка и развитие интерфейсов админки и кабинета продавца на Vue 3
  • Развитие публичной витрины: вёрстка, клиентская логика на vanilla JS, работа с серверными шаблонами
  • Оптимизация публичной части: скорость загрузки, Core Web Vitals, размер бандла и стилей
  • Выделение общих компонентов админок в переиспользуемую библиотеку, снижение дублирования между приложениями
  • Работа со сложными таблицами, формами и валидацией, загрузкой файлов (прайсы XLSX/CSV), дашбордами и графиками
  • Интеграция с REST API: работа с состоянием (Pinia), обработка ошибок и состояний загрузки, согласование контрактов с backend-командой
  • Адаптивная вёрстка: корректная работа на мобильных, планшетах и десктопе
  • Работа с авторизацией и ролевой моделью на клиенте
  • Написание и поддержка тестов (Vitest, Vue Test Utils)
  • Участие в код-ревью, планировании задач и выработке архитектурных решений по frontend
  • Совместная работа с backend-разработчиками, дизайнером и QA
Требования:
  • Опыт коммерческой frontend-разработки от 3 лет
  • Уверенное знание JavaScript (ES2020+): асинхронность, замыкания, event loop, модули, работа с DOM без фреймворка
  • Опыт коммерческой разработки на Vue 3: Composition API, реактивность, жизненный цикл, композаблы (в проекте есть и Options API — легаси-компоненты)
  • Опыт работы с экосистемой Vue: Vue Router, Pinia
  • Опыт работы с UI-библиотеками — в проекте Ant Design Vue: кастомизация, темизация через Less-переменные, сложные таблицы и формы
  • Сильная вёрстка: Tailwind CSS, препроцессоры (Less, Sass), flexbox/grid, адаптивность, кроссбраузерность
  • Опыт интеграции с REST API: axios/fetch, обработка ошибок, работа с авторизацией
  • Опыт работы с формами и валидацией (Yup или аналоги)
  • Понимание производительности frontend: code splitting, lazy loading, работа с большими списками, оптимизация критического пути рендеринга
  • Опыт работы с Vite: конфигурация, режимы, переменные окружения, алиасы
  • Знание Git, npm/yarn
  • Умение декомпозировать интерфейс на переиспользуемые компоненты и поддерживать их в порядке
  • Способность разбираться в чужом коде и дорабатывать существующие приложения
  • Умение самостоятельно разбираться в сложных задачах и аргументировать выбранный подход

Плюсом будет

  • Опыт разработки e-commerce, каталогов, агрегаторов или маркетплейсов
  • Опыт работы над дизайн-системой или UI-kit, поддержка нескольких приложений на общей библиотеке компонентов
  • Опыт работы с серверным рендерингом и серверными шаблонизаторами, понимание прогрессивного улучшения
  • Понимание SEO на стороне клиента: микроразметка (schema.org), Core Web Vitals, оптимизация изображений и шрифтов
  • Опыт работы с TypeScript — в проекте пока чистый JS, но мы рассматриваем поэтапный переход
  • Опыт написания тестов (Vitest, Vue Test Utils, Playwright/Cypress)
  • Опыт работы с графиками и визуализацией данных (ApexCharts или аналоги)
  • Опыт интеграции WYSIWYG-редакторов (CKEditor 5, TinyMCE) и карт (2GIS MapGL, Яндекс.Карты)
  • Опыт настройки CI/CD для frontend-приложений (GitHub Actions)
  • Внимание к деталям UI/UX: типографика, состояния интерфейса, доступность (a11y)

О проекте

Costo.ru — агрегатор интернет-магазинов и маркетплейсов России: каталог товаров, сравнение цен от десятков магазинов, характеристики, рейтинги и отзывы.


Проект состоит из трёх частей, и frontend в них устроен по-разному:

  • costo.ru публичная витрина. Рендерится на сервере (PHP + шаблоны), клиентская часть — вёрстка и vanilla JS: Tailwind, Swiper, собственные слайдеры и компоненты. Здесь решают скорость загрузки и SEO.
  • admin.costo.ru административная панель. Vue 3 SPA на Ant Design Vue: управление товарами, категориями, атрибутами, магазинами, контентом, модерация.
  • seller.costo.ru кабинет продавца. Vue 3 SPA: управление товарами и прайсами, аналитика, документы, биллинг.

Ищем человека, которому интересны обе стороны: и вылизанная быстрая витрина, и сложные рабочие интерфейсы.

Чем интересна задача

Витрина — это SEO и скорость. Публичная часть рендерится на сервере, а значит каждый килобайт CSS и каждая лишняя перерисовка видны в Core Web Vitals и в позициях. Это редкий сейчас формат работы: не «накидать компонентов», а думать о том, что реально доедет до пользователя.


Админки — это сложные интерфейсы. Каталог с тысячами атрибутов, таблицы на большие объёмы данных, формы с нетривиальной валидацией, загрузка и разбор прайсов, дашборды с графиками, карты, WYSIWYG- редакторы.


Есть большая понятная задача. Admin и seller — два отдельных приложения с почти одинаковыми зависимостями и конфигами, выросшие копированием. Общей библиотеки компонентов нет, код между ними дублируется. Привести это в порядок — выделить общий UI-kit, избавиться от дублирования — работа для человека, который любит наводить порядок и видеть результат.

Честно о проекте

Мы не будем делать вид, что у нас всё идеально.


Три части — три разных подхода. Витрина на серверных шаблонах и vanilla JS, две админки на Vue 3. Придётся переключаться между контекстами.


Общей библиотеки компонентов нет. Admin и seller разошлись копированием: одинаковые зависимости, одинаковые конфиги, дублирующийся код. Это не «поддерживать существующий UI-kit», а создать его — задача
на реальный вклад в проект.


Версии частично отстали. Ant Design Vue 3.x, Vite 3.x, TypeScript отсутствует. Планы по обновлению есть, и новый человек может на них повлиять.


При этом инфраструктура рабочая. ESLint и Prettier настроены, Vitest с jsdom и @pinia/testing подключены, темизация через плагин препроцессора, автоимпорт компонентов, GitHub Actions с раздельными пайплайнами под production, staging и test. Есть mock-сервер по OpenAPI-спецификации — можно разрабатывать интерфейс, не
дожидаясь готовности backend.

Для нас особенно важно

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


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


Мы нормально относимся к использованию AI-инструментов как к вспомогательным. Но нам принципиально важно, чтобы разработчик обладал сильной собственной экспертизой: мог самостоятельно спроектировать интерфейс, сверстать его, разобраться в баге и объяснить свои решения. Подход «код сгенерирован без понимания и проверки, без учёта архитектуры проекта и договорённостей внутри команды» нам не подойдёт.

Наш стек

  • Основа: JavaScript (ES2020+), Vue 3 (Composition API + Options API в легаси), Vue Router, Pinia, vue-request
  • UI: Ant Design Vue, Tailwind CSS, Less, Sass, FontAwesome
  • Витрина: серверные PHP-шаблоны, vanilla JS, Tailwind, Swiper, Toastify
  • Сборка: Vite, yarn
  • Данные и формы: axios, Yup, Papaparse, dayjs
  • Компоненты: ApexCharts, CKEditor 5, TinyMCE, 2GIS MapGL, SortableJS
  • Качество кода: ESLint, Prettier, Vitest, Vue Test Utils
  • Инфраструктура: Selectel, GitHub Actions, раздельные контуры, mock-сервер по OpenAPI
  • Backend (для контекста): PHP 8.3, собственный фреймворк, MySQL, Redis, REST API

Формат работы

Мы работаем в офисе по понедельникам и пятницам, ориентировочно с 10:00 до 17:30. Офис находится в собственности компании — это не арендное пространство. Мы постарались сделать его максимально комфортным и уютным: скорее он напоминает небольшой бутик, чем классический офис.

Для кандидатов, которые привыкли к удалённой работе, хотим сразу обозначить важный момент. Мы понимаем желание брать несколько проектов одновременно, но также хорошо представляем объём задач в нашем продукте. Совмещать полноценную работу у нас с другими проектами, скорее всего, будет непросто.

Поэтому просим трезво оценивать свою загрузку и возможность уделять проекту достаточно внимания. Мы ищем человека, который сможет глубоко погрузиться в продукт и быть вовлечённым в его развитие.

Навыки
  • VueJS
  • JavaScript
Посмотреть контакты работодателя

Адрес

Похожие вакансии

СКСР Холдинг
  • Санкт-Петербург

  • Не указана

Рекомендуем
Beget
  • Санкт-Петербург

  • Не указана

Рекомендуем
Грузовичкоф
  • Санкт-Петербург

  • Не указана

Рекомендуем
585, Холдинг

Frontend разработчик

585, Холдинг

  • Санкт-Петербург

  • Не указана

Аеза Групп
  • Санкт-Петербург

  • до 300000 RUR

Бизнес Технологии

Middle frontend-разработчик

Бизнес Технологии

  • Санкт-Петербург

  • до 200000 RUR

  • Санкт-Петербург

  • от 230000 RUR

Бизнес Технологии

Senior frontend-разработчик

Бизнес Технологии

  • Санкт-Петербург

  • до 300000 RUR

КЕЙС ПЛЭЙС

Главный бухгалтер

КЕЙС ПЛЭЙС

  • Санкт-Петербург

  • от 200000 RUR

iFuture
  • Санкт-Петербург

  • от 200000 RUR

Selectel
  • Санкт-Петербург

  • от 200000 RUR

Грузовичкоф
  • Санкт-Петербург

  • от 200000 RUR

Karuna
  • Санкт-Петербург

  • от 150000 RUR

Леста Игры

Senior User Acquisition Manager

Леста Игры

  • Санкт-Петербург

  • от 150000 RUR

Таймвэб.Клауд

Senior System Administrator Cloud DBaaS

Таймвэб.Клауд

  • Санкт-Петербург

  • от 150000 RUR

585, Холдинг
  • Санкт-Петербург

  • от 150000 RUR

Karuna
  • Санкт-Петербург

  • от 229000 RUR

Хотите оставить вакансию?

Заполните форму и найдите сотрудника всего за несколько минут.
Оставить вакансию