
Как понять, что число ещё живое?
На панели мониторинга числа стоят тихо. Обновляются они или экран завис — понять было невозможно.
Привет, я
Frontend-разработчик
Целеустремлённый Frontend-разработчик с почти 2 годами профессионального опыта создания веб-приложений для государственного сектора. Специализируюсь на React, Redux и интерактивной визуализации данных (ГИС-карты, графики, дашборды). Умею работать в кросс-функциональных командах и создавать производительные, доступные и адаптивные интерфейсы.
Что я знаю
Мои работы

Самая крупная из моих систем: внутренний портал, охватывающий весь жизненный цикл сотрудника в большой организации. Посещаемость собирается с турникетов Hikvision через отдельный процесс подключения, затем агрегируется в мониторинг по сотрудникам и отделам. Кроме учёта — справочник сотрудников, управление оргструктурой, workflow обращений с многоступенчатым согласованием, внутренние новости и сообщения, управление OAuth-клиентами для интеграции смежных систем, журнал аудита и аналитика на Highcharts. Около 30 страниц, у каждой свои правила доступа по ролям. ONNX Runtime выполняет инференс прямо в браузере.

Большая административная панель на Vue 2 для управления статистическими классификаторами и данными реестра. Многоуровневые иерархии классификаторов с полным CRUD на каждом уровне, система внутренних сообщений с созданием/редактированием/просмотром и просмотрщик логов интеграции для отслеживания обмена данными с внешними системами. Rich-text через Quill, графики на Chart.js, клиентское шифрование crypto-js, полная локализация.
Полнофункциональная обучающая платформа, где Claude выступает репетитором. Курсы делятся на модули и темы; у каждой темы — материал урока, практические задания с проверкой моделью и отдельная ветка чата, сохраняющая контекст темы. Прогресс отслеживается по пользователю и теме. Есть админ-панель с управлением доступом к курсам и просмотром прогресса. Next.js App Router, NextAuth (пароль + Google), Prisma поверх SQLite, деплой в Docker за Caddy.

Система мониторинга полевых обследований на основе интерактивных карт. Охват сельхозучастков и объектов социальной сферы отображается на картах Leaflet с инструментами рисования Geoman — полигоны можно рисовать и править прямо в браузере. Поиск по районам с отдельным модальным окном и состояниями загрузки данных по махаллям, несколько карт для разных туров обследования, дашборд со сводкой по выполнению.

Аналитика потребительских цен по Узбекистану. Цены в разрезе рынков, регионов и товаров, отдельное представление для сравнения нескольких товаров или регионов, страница прогноза и раздел инфляционных ожиданий. Геометрия регионов рендерится из GeoJSON по каждой области — картограмма уровней цен. У каждого товара свой маршрут с историческим рядом. Страница методологии описывает происхождение цифр. Next.js App Router, Recharts, полноэкранный режим графиков, светлая и тёмная темы.

GIS-дашборд, отслеживающий охват регистрации вплоть до махалли по областям Узбекистана. Карты на MapLibre GL через react-map-gl, polygon-clipping вычисляет пересечения и объединяет административные границы на лету. Представление махалли углубляется от области к району и к кварталу с живыми счётчиками, QR-коды ведут полевых сотрудников прямо к записи.

Единственный проект, где я вёл все три уровня. Бэкенд на NestJS: API с JWT-авторизацией, TypeORM поверх PostgreSQL, планировщик задач, WebSockets для живых обновлений броней и Telegram-бот уведомлений. Клиент на React Native (Expo) разделяет роли барбера и клиента. Авторизация через OTP, Telegram-логин и выбор роли, API устройства и геолокации для поиска барберов рядом. Админка на React: барберы, брони, услуги, отзывы, пользователи, карта Leaflet и дашборды на Recharts.
Telegram-бот, выдающий фильмы по подписке, вместе с отдельным admin-PWA. Пользователь выбирает тариф, оплачивает, администратор подтверждает платёж, и дальше фильмы приходят по числовому коду прямо из закрытого канала. Админская часть — самостоятельное устанавливаемое веб-приложение с web push уведомлениями, поэтому ожидающий платёж доходит до телефона без открытия Telegram. Цены тарифов и реквизиты карты хранятся в базе и правятся из админки, а не зашиты в код. Работает в Docker за общим reverse proxy Caddy с автоматическим HTTPS.
Дашборд реального времени для VPS, на котором размещены все эти проекты. Десять экранов: CPU, память, диск и сеть, каталоги проектов с размерами и состоянием git, контейнеры Docker, сервисы и таймеры systemd, попытки атак из auth.log вместе с состоянием fail2ban и файрвола, HTTP-трафик из логов Caddy, живые логи и развёртывание. Измерения приходят каждые две секунды через Server-Sent Events, причём на сервере работает один общий таймер — десять открытых вкладок стоят одного измерения. Развёртывание запускается вебхуком GitHub, подпись которого проверяется по сырому телу запроса. Панель намеренно только читает.
Карьерный путь
Разрабатывал и поддерживал ГИС-веб-приложения для визуализации региональной статистики Узбекистана. Создавал интерактивные карты на Leaflet и GeoJSON для отображения демографических, экономических и социальных показателей. Реализовывал динамические графики и дашборды (столбчатые, кольцевые, линейные, пирамида населения). Рефакторил компоненты на React, Redux, MUI и Styled Components. Интегрировал REST API и работал с большими датасетами.
Руководил разработкой и поддержкой внутренних статистических веб-систем для государственных аналитиков. Проектировал и реализовывал фронтенд-архитектуру на React, Redux и современных UI-библиотеках. Разрабатывал интерактивные модули визуализации данных (графики, таблицы, дашборды) для региональной и национальной статистики. Работал с ГИС-данными и картами для визуализации статистических показателей.
Академическое образование
Бакалавр · Программная инженерия
Tashkent, Uzbekistan
Изучал основы информатики, программную инженерию, алгоритмы, структуры данных и современные технологии веб-разработки. Активно участвовал в университетских проектах и соревнованиях по программированию.
Мысли вслух

На панели мониторинга числа стоят тихо. Обновляются они или экран завис — понять было невозможно.

За день исправил около десяти ошибок. Одна была серьёзной опасностью, и заметил я её случайно.

Сделал каталог материалов для студентов. Если его не найти поиском, вся работа теряет смысл.

Чем больше становилось экранов, тем меньше они были похожи друг на друга. Причина — я оформлял каждый отдельно.

Для публикации материала курса нужен был инструмент. На сервере его не было, и ставить его было неправильно.

Написать форму легко, сделать её надёжной — нет. Подумав, я убрал её совсем.
Связаться
Я всегда открыт для новых возможностей и интересных проектов. Смело пишите!
Телефон
+998 99 579 8545Город
Tashkent, Uzbekistan
Обычно отвечаю в течение нескольких часов.
Нет Telegram? Напишите на email.