М

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

Молинет
Санкт-Петербург
≈ от 2,4 тыс. $ · от 2,1 тыс. €
от 190 000 ₽
🏢 Офис
Middle
Полная занятость
Россия
Описание вакансии
Обязанности
Разработка и развитие интерфейсов админки и кабинета продавца на 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. Офис находится в собственности компании — это не арендное пространство. Мы постарались сделать его максимально комфортным и уютным: скорее он напоминает небольшой бутик, чем классический офис.

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

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

Технологии и навыки
AI-помощник
ИсточникСкрыто
Опубликовано8 ч назад
Выше рынка на 27%
вакансия190 000
в среднем по рынку150 000
Настоящий работодатель никогда не попросит перевести деньги, продиктовать код из SMS, войти под чужим аккаунтом или поставить непонятное приложение. Столкнулся с таким при отклике — прекращай переписку и расскажи нам в чате с основателем или через форму обратной связи.