Frontend-разработчик
Pavel
Возраст
26 лет (12 Мая 1998)
Город
Гродно
Возможен переезд в другой город
Гражданство
Белоруссия
Полная занятость
11 месяцев
Автобизнес / Автосервис
Проект: База данных электромобилей с каталогом, фильтрацией и возможностью сравнения моделей.
Основные обязанности и решения:
Разработка логики фильтрации и каталога:
- Реализовал фильтрацию каталога электромобилей, которая включала сортировку по различным параметрам (цена, мощность, дальность поездки и т.д). Для хранения состояний фильтров и сортировки применял Redux с Redux Toolkit (RTK), что упростило создание и управление глобальным состоянием. Для асинхронной загрузки данных с сервера разработал сервис с использованием Redux Thunk и REST API с запросами через axios.
- Улучшил UX через индикаторы загрузки, которые представляют собой уведомления для отслеживания состояний асинхронных операций. Таким образом обеспечил более точную обратную связь с пользователем.
- Работа с большими объёмами данных привела к снижению производительности при фильтрации и сортировке. Поэтому для оптимизации фильтрации применил кеширование данных на уровне клиента с помощью localStorage и механизмы мемоизации через reselect, что ускорило работу фильтров при повторных запросах.
Создание компонентов интерфейса:
- Разработал интерактивные UI-компоненты для каталога электромобилей, списка сравнения и детализированных страниц с описанием моделей. Для создания типизированных компонентов на основе React применял TypeScript. Для адаптивности вёрстки использовал CCS Grid, Flexbox. Для стилизации использовал SCSS, что позволило легко поддерживать переменные, вложенность, повысило удобство разработки.
- Обеспечил построение одинаково удобного интерфейса на разных устройствах и разрешениях экрана, включая мобильные устройства до 320px. Для этого разработал адаптивную систему компонентов с использованием медиазапросов. Также интегрировал макеты из Figma, следуя гайдлайнам дизайн-системы и UI-kit.
- Разработка велась на TypeScript для повышения надежности и предсказуемости кода, что способствовало снижению количества ошибок и повышению читаемости кода.
Функционал сравнения автомобилей:
- Разработал окно, в котором отображались выбранные к сравнению авто. Чтобы обеспечить сохранение результатов выбора даже после перезагрузки страницы, использовал комбинацию работы Redux с LocalStorage (с использованием middleware). Это привело к улучшению пользовательского опыта при работе со списком сравнения.
- Из окна можно перейти на страницу сравнения авто, где из стора подгружались добавленные к сравнению электромобили. Так же из окна можно очистить список, но после удаления появляется tooltip, который позволяет вернуть состояние списка к последнему. Реализовал это с помощью отдельного значения в сторе и хука, который управлял этой функциональностью и очисткой временного списка после отсчёта времени.
Страница сравнения автомобилей:
- Реализовал механизм для сравнения нескольких автомобилей одновременно (5 максимум, т.к. аналитика показала, что больше не сравнивают), добавил функциональность менять авто местами в сравнении и удалять их из сравнения. Для управления список использовал Redux RTK.
- Обновление данных о характеристиках происходило динамически без перезагрузки страницы через запросы. Данные были представлены в виде таблицы, где выделялся лучший результат.
- При разработке возникла сложность с частыми перерендерами при изменении списка сравнения, ухудшилась производительность приложения. При проведении рефакторинга, я применил мемоизацию компонентов через HOC React.memo, использовал useCallback для сохранения ссылок на функции (как пропсы) при перерендерах и useMemo для мемоизации результатов вычислений на клиенте, что оптимизировало состояние и предотвратило ненужные перерендеры, улучшилась производительность.
Участвовал в код-ревью и процессе рефакторинга компонентов, логики приложения.
Стек технологий:
JavaScript, TypeScript, React, Redux, RTK, REST API, Webpack, HTML, CSS, SASS, Git, Figma
Достижения:
- Оптимизировал работу фильтров, сократив время отклика и улучшив пользовательский опыт.
- Обеспечил полную адаптивность интерфейса для корректного отображения на мобильных и десктопных устройствах.
- Реализовал систему сравнения с динамическим обновлением данных и минимальными задержками.
Высшее
Гродно, 2015 — 2019 гг.
Frontend-разработчик с опытом более 1 года. Разрабатываю поддерживаемые и переиспользуемые компоненты, провожу рефакторинг и кросс-ревью. Следую принципам DRY, KISS, SOLID и современным стандартам разработки.
Работал над созданием интерфейсов, интеграцией API, обеспечением тестируемости и улучшением пользовательского опыта.
Ранее 2 года работал UX/UI-дизайнером в продуктовой команде, что позволяет мне лучше понимать потребности пользователей и создавать удобные интерфейсы.
- Разработал дизайн систему с использованием Figma, обеспечив стандартизацию компонентов (цвета, типографика, иконки) для корпоративных сайта и продукта.
- Разработал наборы UI-компонентов в Figma для интерфейсов. Использовал принципы модульности.
- Проводил конкурентный анализ и поиск визуальных референсов, ориентируясь на тенденции в индустрии и потребности пользователей.
- Проводил UX исследования (User Flow, JTBD, A/B тесты) для оценки эффективности. Использовал Google Analytics.
- Адаптировал дизайн для различных устройств.
- Работал с графикой и фото в Illustrator, Photoshop, InDesign, After Effects.
В свободное время делаю пет-проекты для развития навыков в разработке.
1) E-commerce (онлайн-магазин).
Деплой https://pvpkiselev.github.io/catalog/
Код на GitHub https://github.com/pvpkiselev/catalog/tree/master/e-commerce
Приложение интернет-магазина с каталогом, фильтрацией,
поиском товаров и корзиной.
API — https://fakeapi.platzi.com/
- Разработка и построение модульной архитектуры приложения с нуля на React, TypeScript.
- Настройка сборки, конфига Vite. Для удобства доступа к модулям в приложении применил @aliases.
- Настроил ESLint с помощью flat-конфигурации, обеспечил совместимость линтера с React, TypeScript и Prettier, чтобы обеспечить единообразие стиля кода и автоматическое форматирование. Для устранения конфликтов Prettier и ESLint установил плагин eslint-config-prettier, который отключает конфликтующие правила ESLint.
- Спроектировал переиспользуемые адаптивные UI-компоненты с использованием React и Material UI. Для стилизации использовал возможности MUI и CSS-in-JS подхода. Настроил тему MUI.
- Реализовал сервис для асинхронных запросов к API с использованием Axios для получения данных с сервера, организовал обработку ошибок. Вынес всю логику запросов в сервисы и хуки.
- Реализовал централизованное управление состоянием с помощью Redux Toolkit (RTK) и Redux Thunks для асинхронных действий. Организовал стор для разных модулей приложения (авторизация, корзина и т.д). При больших объёмах данных возникала проблема с ререндером компонентов, поэтому использовал мемоизированные селекторы (reselect). Для отделения логики от компонентов и для работы с авторизацией и корзиной создал хуки.
- Настроил маршрутизацию с помощью React Router для создания страниц и маршрутов в приложении.
- Реализовал авторизацию через API с использованием JWT-токенов и хранения токенов в cookies для автологина (при загрузке приложения). Обрабатывал состояние аутентификации в сторе и проверял с помощью хука состояние авторизации (некоторые модули были недоступны без авторизации).
- Организовал функционал корзины с возможностью добавления, удаления товаров и сохранения состояния корзины в localStorage для сохранения данных при перезагрузке страницы. Это сделано для улучшения пользовательского опыта, чтобы данные корзины сохранялись даже при перезагрузке страницы.
- Перенёс в код адаптивную вёрстку из Figma, соблюдая требования дизайна под разные размеры экранов.
Стек технологий: HTML, CSS, SASS, JavaScript, TypeScript, React, Redux, RTK,
REST API, Vite, Material UI, Git, npm, Axios, js-cookie, ESLint, Prettier, Figma.
Вы сможете найти другие проекты на моём GitHub https://github.com/pvpkiselev.
Telegram @p_kiselev
https://t.me/p_kiselev
31 марта, 2017
20 000 руб
31 мая, 2022
1 000 руб
24 мая, 2024
200 руб
Мария
Город
Гродно
Возраст
21 год (12 мая 2003)
Опыт работы:
Без опыта
Резюме размещено в отрасли