Томск, Россия · готов к переезду

Дмитрий СкопинцевFrontend-разработчик

Избранные проекты

Нет разрешения показывать скриншоты

Структура модулей
  • Survey/
  • surveys-page · survey-page · survey-summary-card
  • survey-question-page · survey-question-breadcrumbs
  • survey-dialog · question-actions · survey-layout
  • survey-question.logic.ts
  • controls/
  • RadioQuestionControl
  • TextQuestionControl
  • RangeQuestionControl
  • DistributionQuestionControl
  • SurveyApi/
  • api.ts — RTK Query: surveys, question, save, autosave
  • api-mocks.ts — MSW handlers
  • fingerprint.ts · types.ts

Личный кабинет грантовой программы: модуль опросов

Закрытый личный кабинет грантовой программы. Участники проходят многошаговые экспертные опросы, ответы сохраняются по ходу заполнения.

Моя роль: Сделал с нуля модуль опросов в React-приложении команды: страницы, контролы вопросов, слой API и моки; плюс доработки дашборда и мероприятий.

  • React
  • TypeScript
  • MUI
  • RTK Query
  • TanStack Router
  • MSW
  • FingerprintJS
  • Четыре типа вопросов как переиспользуемые контролы: выбор варианта, текст, шкала-слайдер с подсказками и распределение баллов с живым счётчиком «осталось баллов»
  • Список опросов, страница опроса с карточками-итогами, страница вопроса с хлебными крошками, навигацией по шагам и диалогом — логика вынесена в отдельный survey-question.logic.ts
  • API на RTK Query (createApi) с сохранением и автосохранением ответа; MSW-моки для всех эндпоинтов, чтобы интерфейс делался до готовности бэкенда
  • Доступ без авторизации по отпечатку браузера (FingerprintJS с ленивой загрузкой и запасным UUID); запрет копирования и вставки в ответах
  • Дашборд: карточка соцсетей, вкладки навигации по мероприятиям
Центр: слайдер на главной
Центр: слайдер на главной
Центр: интерактивная 404
Центр: интерактивная 404
Центр: направления и стеклянный CTA
Центр: направления и стеклянный CTA
Программа: первый экран с партнёрами
Программа: первый экран с партнёрами
Программа: аккордеон модулей
Программа: аккордеон модулей
Центр: блог с вкладками категорий
Центр: блог с вкладками категорий

Центр технологического лидерства

Корпоративный сайт Центра и лендинг его международной образовательной программы по биоэкономике.

Моя роль: Сделал оба сайта с нуля: вёрстка из Figma точно по макету, адаптив от мобильных до широких экранов, все анимации и интерактивные страницы.

  • Figma
  • GSAP
  • ScrollTrigger
  • SplitText
  • Lenis
  • Swiper
  • HTMX
  • Glassmorphism-интерфейс, полноэкранный слайдер, анимации на скролле и раскрытие текста (GSAP, ScrollTrigger, SplitText)
  • Интерактивная 404: свет следует за курсором по 592 стеклянным плиткам на чистом CSS, стабильные 60 fps
  • Лендинг программы: плавная прокрутка (Lenis), аккордеон модулей, таймлайн пути участника
  • Блог с вкладками категорий, проекты, поиск по сайту
Главная: поиск билетов и виджет станции
Главная: поиск билетов и виджет станции
Карта станций с маршрутами и фильтром
Карта станций с маршрутами и фильтром
Карта туризма с карточками мест
Карта туризма с карточками мест
Поиск билетов с фильтрами
Поиск билетов с фильтрами
Тарифный калькулятор
Тарифный калькулятор

Модернизация сайта МТППК

Сайт пригородной пассажирской компании (группа РЖД): поиск билетов, карты станций и туризма, личный кабинет пассажира и B2B-кабинет, интернет-магазин.

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

  • Pug
  • SCSS
  • JavaScript
  • Mapbox GL
  • pdf.js
  • htmx
  • Webpack
  • Карта станций: новые карточки мест, диалоги станции и маршрута, смена языка карты, мобильная версия
  • Поиск билетов: новый функционал поиска, виджет выбора станции и блок на главной, правки выбора даты
  • Личный кабинет: профиль, журнал обращений с ответами и вложениями, смена email
  • Просмотр PDF на pdf.js с решением проблемы воркера на продакшене, новые типы таблиц с мобильным аккордеоном и полноэкранным режимом, выгрузка в Excel
  • Переключатель языка на десктопе и мобилке, контрастные логотипы, правки страниц станций, новостей, организации и 404

Нет разрешения показывать скриншоты

Структура модулей
  • api/
  • axiosInstance.ts
  • methods/ admin · adminInterests · adminUserProfile
  • documents · image
  • store/ authSlice.ts — Redux Toolkit
  • ProtectedRoute.tsx · routes.tsx
  • pages/
  • Login · Home · Profile · AdminTools
  • Files · UploadDocument · DownloadDocument
  • UpdateDocumentDescription · Images · NotFound
  • components/
  • TelegramAuth · Sidebar · Header
  • ImageUpload · ImagesList · AdminUserProfile
  • ui/ — shadcn: dialog, sheet, sidebar, tooltip…

Админ-панель ИИ-ассистента

Внутренняя админка Telegram-ассистента на базе ИИ: управление пользователями и их профилями, интересами, документами и изображениями, с которыми работает ассистент.

Моя роль: Создал проект с нуля и сделал всю админ-панель: архитектура, авторизация, слой API и страницы.

  • React
  • TypeScript
  • Vite
  • Redux Toolkit
  • React Router
  • Axios
  • Tailwind
  • shadcn/ui
  • Проект на Vite + React + TypeScript с ESLint, Prettier и набором компонентов shadcn/ui на Tailwind
  • Вход через Telegram, разбор JWT, состояние авторизации в слайсе Redux Toolkit, защищённые маршруты на React Router
  • Типизированный слой API: один экземпляр Axios и 20+ модулей методов — пользователи, роль админа, сообщения, интересы, профили, документы, изображения
  • Страницы: загрузка, скачивание и описание документов, галерея изображений с загрузкой, профиль пользователя, инструменты админа, 404
  • Адаптивный интерфейс со сворачиваемым сайдбаром и мобильным меню
Главная страница
Главная страница
Панель доступности: текст, контраст, озвучивание
Панель доступности: текст, контраст, озвучивание
Карточки ценностей на главной
Карточки ценностей на главной
Страница «Доступная среда»
Страница «Доступная среда»
Блок об инклюзии и слайдер баннеров
Блок об инклюзии и слайдер баннеров

Российский государственный университет социальных технологий

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

Моя роль: Основной frontend-разработчик с первого коммита: дизайн-система, большинство страниц и модулей и вся работа по доступности — около 190 из 240 коммитов.

  • Pug
  • SCSS
  • JavaScript
  • GSAP
  • Lenis
  • Swiper
  • focus-trap
  • htmx
  • Навигация с клавиатуры по всему сайту, скрытые заголовки для экранных дикторов, доступные меню, диалоги, пагинация и футер с удержанием фокуса
  • Подключил панель доступности со своей кнопкой: размер текста, шрифт, контрастные темы, размер курсора, озвучивание страницы
  • Страницы «Разнообразие и инклюзивность», инклюзивный видео-слайдер, stacking cards, параллакс и анимация футера (GSAP, Lenis)
  • Десятки страниц: университет, образование, аспирантура, библиотека, новости, общежитие, филиалы; смена языка, cookies, сборка zip для продакшена
Главный баннер с видео
Главный баннер с видео
Блок «Портфель разработок»
Блок «Портфель разработок»
Раздел «Документы и лицензии»
Раздел «Документы и лицензии»
Главная медиапортала
Главная медиапортала
Медиапортал: мероприятия и проекты
Медиапортал: мероприятия и проекты

Сайт и медиапортал Томского НИМЦ

Сайт Томского национального исследовательского медицинского центра и его медиапортал с новостями, мероприятиями и проектами.

Моя роль: Frontend-разработчик в команде из двух человек: свои блоки и разделы на основном сайте, затем доработки и новый функционал на медиапортале.

  • Pug
  • SCSS
  • JavaScript
  • GSAP
  • Swiper
  • htmx
  • Поиск по сайту: попап поиска, страница результатов и карточка «ничего не найдено»
  • Блок «Портфель разработок»: анимация раскрытия, sticky-изображение, слайдер запускается только при появлении в зоне видимости
  • Раздел «Документы и лицензии»: страницы приказов, лицензий и бланков, вкладки и карточки документов
  • Видео на главном баннере, формы поздравления и заявки, доступные диалоги
  • Медиапортал: слайдер карточек партнёров, баннер cookies, бургер-меню, несколько тегов в карточках новостей, правки от клиента, детальная страница мероприятия
Чат-бот на главной
Чат-бот на главной
Диалог с вариантами ответов
Диалог с вариантами ответов
Главная сайта абитуриентов
Главная сайта абитуриентов

Тюменский ГМУ: чат-бот для абитуриентов

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

Моя роль: Сделал чат-бот для абитуриентов на React поверх заготовки от тимлида; позже добавлял на сайт попапы и блоки. Остальной сайт делали коллеги.

  • React
  • JavaScript
  • SCSS
  • Axios
  • Webpack
  • Чат-бот на React: пошаговый диалог с вариантами ответов, анимации сообщений, кастомный скроллбар и лоадер
  • Мок-API для разработки — виджет работал до готовности бэкенда
  • Попапы с формами заявки и обратной связи, теги для новых направлений, блоки минимальных баллов и контактов
  • Правки вёрстки конструктора карьерных траекторий
Главная страница
Главная страница
Направления подготовки с вкладками и поиском
Направления подготовки с вкладками и поиском
Карусель студенческой жизни
Карусель студенческой жизни
Анимированная статистика
Анимированная статистика

Портал абитуриента ВолгГМУ

Сайт приёмной кампании медицинского университета: всё, что нужно поступающему, в одном месте.

Моя роль: Мой проект от начала до релиза; для ускорения отдельные блоки отдавал коллегам.

  • HTML
  • SCSS
  • JavaScript
  • Swiper
  • Доступность
  • Mobile-first и доступная вёрстка точно по макету
  • Каталог направлений подготовки с вкладками уровней и поиском
  • Карусель студенческой жизни и анимированная статистика
Главная с поиском программ
Главная с поиском программ
Каталог программ с фильтрами
Каталог программ с фильтрами
Страница программы
Страница программы
Блок «Почему мы»
Блок «Почему мы»

Портал ДПО Приамурского университета им. Шолом-Алейхема

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

Моя роль: Единственный frontend-разработчик: адаптировал шаблон образовательной платформы компании под университет, сделал страницы и экраны личного кабинета.

  • HTML
  • SCSS
  • JavaScript
  • GSAP
  • IMask
  • UI-кит, главная с поиском программ, каталог с фильтрами, промо-страницы программ с якорной навигацией и плавающей кнопкой
  • Экраны личного кабинета для физлиц и организаций: профиль с валидацией, заказы, тесты, видеокурс, диалог по завершении курса
  • Страницы успешной и неуспешной оплаты с диалогами статусов, модальные окна отзывов и обратной связи, страница 404
  • Встраивание видео с Rutube и VK Видео, расширенный аккордеон, адаптивная вёрстка
«Терминал» подбора профессии
«Терминал» подбора профессии
Профессии меняются при движении ползунков
Профессии меняются при движении ползунков
Основной сайт: организационная структура
Основной сайт: организационная структура
Основной сайт: контакты со стилизованной картой
Основной сайт: контакты со стилизованной картой
Главная сайта абитуриентов
Главная сайта абитуриентов

МИЭТ: сайт абитуриентов и основной сайт

Сайт абитуриентов и основной сайт технического университета. Блок подбора профессии — ретро-«терминал»: абитуриент двигает ползунки по интересам и получает подходящие инженерные профессии.

Моя роль: На сайте абитуриентов сделал с нуля интерактивный блок подбора профессии, на основном сайте — первые версии страниц оргструктуры и контактов. Остальное делали коллеги.

  • Pug
  • SCSS
  • JavaScript
  • Impetus
  • Typewriter
  • Пять перетаскиваемых ползунков с инерцией (Impetus), индикаторные лампочки плавно загораются при выборе
  • Список профессий запрашивается из API с debounce и печатается на экране (эффект Typewriter)
  • Адаптив от 375 px до широких экранов, подсказки на детальной странице профессии, попап с примером встраивания
  • Основной сайт: оргструктура с вложенными аккордеонами, страница контактов с вкладками и стилизованной картой
Главный баннер с круглыми обложками
Главный баннер с круглыми обложками
Быстрые ссылки и карточка виртуальной приёмной
Быстрые ссылки и карточка виртуальной приёмной
Параллакс-блок за курсором
Параллакс-блок за курсором

Челябинский государственный университет

Основной сайт классического университета с насыщенной анимированной главной.

Моя роль: Собрал главную страницу и сделал несколько её блоков; остальной сайт делали коллеги.

  • Pug
  • SCSS
  • JavaScript
  • GSAP
  • ScrollTrigger
  • Swiper
  • Параллакс-блок «ЧелГУ — это люди»: фотографии смещаются вслед за курсором
  • Доработки главного баннера, слайдер быстрых ссылок, видео-карточка виртуальной приёмной
  • Компонент ExpandMap, колбэки ScrollTrigger и корректное удаление триггеров, увеличение изображений при наведении
  • Блоки отзывов и соцсетей для английской версии, диалог с формой обратной связи в шапке страницы

Опыт работы

  1. Frontend-разработчик · Паравеб

    Апрель 2024 — настоящее время

    • Разрабатываю компоненты и модули для внутренней библиотеки переиспользуемых модулей на Astro, React 19, TypeScript и SCSS Modules
    • Серверные, клиентские и гибридные компоненты для контроля объёма JS на странице; Storybook с Vitest и Playwright как документация и среда тестирования
    • Веб-приложения, админ-панели и конструкторы сайтов на React 18 и Next.js; Redux Toolkit, RTK Query, MobX, React Hook Form + Zod
    • Небольшие задачи на React: валидация полей и компонент квестов в личном кабинете, карточка Metric и модуль Scale для аналитического дашборда
    • Участвовал в разработке приложения на React Native; код-ревью и менторинг младших разработчиков

Навыки

Основной стек

  • TypeScript
  • JavaScript
  • React
  • Next.js
  • Astro
  • HTML
  • CSS / SCSS

Состояние и данные

  • Redux Toolkit
  • RTK Query
  • MobX
  • React Hook Form
  • Zod

Анимации и 3D

  • GSAP
  • ScrollTrigger
  • Three.js
  • react-three-fiber

Инструменты

  • Vite
  • Webpack
  • Storybook
  • Vitest
  • Playwright
  • Git
  • Figma

Давайте работать вместе

Рассматриваю frontend-позиции — удалённо, гибрид или с релокацией. Быстрее всего отвечаю в Telegram.