Про меня
Меня зовут Кирилл Голованов. Я full-stack разработчик из Екатеринбурга. Делаю коммерческие веб-сервисы: от интерфейса до оплаты и серверной логики. В том числе B2B-продукты с ИИ, где данные и платежи нельзя смешивать с моделью. Классическую вёрстку и адаптивные интерфейсы на React совмещаю с запуском продуктов в продакшене.
-
Навыки:
- Frontend: React, TypeScript, Vite, JavaScript, Tailwind CSS, SCSS (BEM);
- Backend & Infrastructure: Node.js, Express, PostgreSQL, S3 storage, ЮKassa;
- AI-продукты: клиентское обезличивание, OpenAI / Anthropic, контур ФЗ-152;
- Инструменты: Git, Figma, Яндекс Метрика, Cursor.
Текущие Проекты
-
B2B LegalTech SaaS (React, Vite, Node.js/Express, OpenAI + Anthropic, ЮKassa)
Коммерческий сервис contract-audit.ru: бизнес загружает договор и за пару минут получает структурированный разбор правовых рисков. Три режима анализа (базовый / экспертный / глубокий) и оплата кредитами через ЮKassa.
Privacy by architecture: текст договора обезличивается в браузере до сети — на ИИ уходит каркас обязательств, не исходные ФИО, компании и счета. Почта и платежи живут в российском контуре; зарубежный бэкенд работает с хешем email, без plaintext.
Продукт целиком: кабинет, щит масок, два бэкенда, биллинг, оферта и согласия ФЗ-152. Это не учебный чат с моделью и не лендинг: живой SaaS с регистрацией, триалом и оплатой. -
Fullstack E-commerce Platform (Next.js, Node.js, React/Vite, Tailwind 4)
Коммерческая витрина m-golovanova.ru уже на хостинге: SEO настроено, ЮKassa подключена, заказы изделий и профиль магазина работают. На том же домене рядом — отдельный продукт онлайн-курсов (карточка ниже): не в корзине рамок и не в
/order/success. Актуальный каталог товаров к боевой базе ещё не подключён (на витрине тестовые позиции). Стек: Next.js (App Router), Node.js/Express (REST API) и Vite (CRM-панель). Покрыт автотестами (Vitest, Supertest, Playwright, MSW).
Frontend & UX: Интерфейс на Tailwind CSS 4 и Shadcn UI. Реализована гибридная стратегия кэширования и **On-Demand Revalidation**: публичные статичные хабы (главная страница) кэшируются на уровне сервера (ISR), а критически важные для бизнеса страницы (каталог и карточки товаров) переведены в режим реального времени (force-dynamic) для обеспечения 100% точности остатков. При покупке или изменении товаров в CRM бэкенд мгновенно отправляет защищенный сигнал на адресную инвалидацию данных по тегам кэша (revalidateTag) и маршрутам (revalidatePath). Дополнительно решена проблема клиентского кэширования истории переходов Next.js за счет принудительного обновленияrouter.refresh()на этапе checkout, что полностью устранило рассинхрон витрины без лишней нагрузки на бэкенд. На странице успешного оформления заказа (/order/success) реализован перехват параметров платежа из URL возврата (paid=1иorderId) для мгновенного триггера фронтенд-синхронизации.
Backend, Данные & Безопасность: PostgreSQL + Prisma с оптимизацией запросов через GIN-индексы. Внедрена 100% защита от гонки запросов (Race Condition) за счет пессимистической блокировки данных (SELECT FOR UPDATE) прямо в момент создания заказа, независимо от шлюза оплаты. Дополнительно устранена гонка условий асинхронного вебхука, при которой уведомление от платежной системы могло прийти в API до завершения транзакции создания заказа (что приводило к неотслеживаемым ответам 202/404). Безопасность межсерверных запросов ревалидации гарантирована проверкой секретных токенов окружения (.env). Для защиты вебхуков добавлена валидация пула IP-адресов шлюза (YOOKASSA_ALLOWED_IPS). Ролевой доступ (JWT) и S3-медиахранилище.
Бизнес-логика & Нотификации: Кастомная сплит-архитектура заказов («из наличия» vs «авторский повтор») со сквознымcheckoutGroupId. Интегрирована подсистема кастомных заявок (индивидуальное обсуждение, кастомизация, запись на очные занятия). Полная интеграция ЮKassa с идемпотентной обработкой вебхуков и логикой автовозврата остатков на витрину при отменах сессий. Разработан и внедрен отказоустойчивый **Fallback-механизм принудительной синхронизации (endpoint/api/orders/:id/sync-payment)**, который запрашивает актуальный статус напрямую у API ЮKassa в момент возврата пользователя на сайт, гарантируя перевод заказа в статус PAID даже при сетевых сбоях, блокировках или задержках фоновых вебхуков. Предусмотрен «умный» поиск последнего активного неоплаченного заказа, если в URL возврата отсутствует явный ID. Реализован отказоустойчивый параллельный сервис уведомлений (Telegram Bot API + SMTP-транспорт Nodemailer через доменную почтуno-reply@) с изолированной обработкой ошибок. -
Digital courses (Next.js, PostgreSQL/Prisma, ЮKassa, S3 HLS)
Отдельный продукт на том же домене m-golovanova.ru/masterclasses: витрина коротких уроков, оплата картой и просмотр в кабинете. Курс нельзя положить в корзину рамок: своя сущность, свой платёж ЮKassa, возврат на
/cabinet, не на/order/success. Тот же аккаунт, что у магазина; профиль/profileпо-прежнему только про заказы изделий.
Доступ и видео: право смотреть урок появляется после подтверждённой оплаты (entitlement), не ссылкой на файл. Полный урок — HLS: API отдаёт переписанный плейлист, куски.tsидут с приватного S3 по подписи. Тизер до покупки — короткий публичный 16:9. В кабинете полка обложек и один живой плеер, свой поиск по купленным.
Зачем так: рабочий чекаут и склад магазина не ломаются. Один вебхук ЮKassa развивается на заказ изделия или курс. Оферта и политика отдельно описывают цифровой доступ, не посылку. Это не вкладка «видео» в карточке товара и не клон GetCourse: свой контур на домене клиента. -
Interactive Travel Gallery App (React 19, TypeScript, Vite, S3 Cloud, Swiper)
SPA-приложение (28 медиа-альбомов) на React 19 и Vite, построенное на data-driven архитектуре (JSON). Скорость отклика достигнута через Code Splitting (React.lazy) и Lazy Mounting секций на базе IntersectionObserver.
Оптимизация контента: Проект полностью развернут на S3 Storage. Реализована система WebP-превью, разделение трафика (thumbnails/full-size) и отложенная инициализация видео.
UX & Performance: Ручное управление чанками Swiper, использование React Portals для модальных окон и глубокая оптимизация рендеринга обеспечивают мгновенный старт страницы. Интегрирована Яндекс.Метрика с информером.
Прототипы и тесты (R&D)
Учебные работы (Skillbox)
Практические работы курса. Не коммерческие продукты — отобранные проекты, которые закрывают React, ванильный JS, вёрстку и бэкенд.
-
React Movie Streaming App (React, TypeScript, Vite, React Router)
Практическая работа в рамках обучения Skillbox
Одностраничное веб-приложение для просмотра и управления медиа-контентом, разработанное на React с использованием React Router для маршрутизации. Для централизованного управления состоянием применены Context Providers: AuthProvider для аутентификации и MovieProvider для данных фильмов. Приложение взаимодействует с внешним API для получения информации о фильмах и жанрах. Используется ленивая загрузка компонентов (React.lazy и Suspense) для улучшения производительности и скорости загрузки. Интерфейс адаптивен для различных устройств. Основной функционал включает просмотр популярных фильмов, фильтрацию по жанрам, просмотр деталей фильма с трейлерами, управление списком избранного и авторизацией.
-
Vanilla JS E-commerce Catalog Component (ES6 Modules, JSON Data)
Практическая работа в рамках обучения Skillbox
Фронтенд-компонент каталога, построенный на модульной структуре JavaScript с интеграцией сторонних библиотек, таких как swiper.js, just-validate.js, popperjs.min.js и tippy.min.js. Проект использует чистый JavaScript, разделённый на модули для создания переиспользуемых и изолированных компонентов интерфейса. Он включает ES6 модули с импорт/экспорт, а также асинхронную загрузку и инициализацию компонентов. Для автономной работы без бэкенда применяется локальный JSON-файл (data/data.json) для динамического хранения и загрузки данных о продуктах.
-
Landing Page Optimization (HTML5, CSS3, SCSS, BEM, Figma, Lighthouse)
Практическая работа в рамках обучения Skillbox
Вёрстка по макету Figma с проверкой по Pixel Perfect. Вёрстка прошла проверку на валидность (HTML-валидатор, БЭМ-валидатор). Текст прошёл обработку типографом. Вёрстка проверена на переполнение контентом. Применена «резиновая» вёрстка для корректного отображения страницы на любой ширине от 360 до 4000 пикселей и адаптирована под все разрешения, указанные в макете. Растровые изображения подготовлены для экранов с плотностью пикселей 2x. Изображения подключены с учётом их адаптации. Векторные изображения добавлены в спрайт. Стилизация выполнена с помощью препроцессора Sass. Семейства шрифтов и цвета записаны в SCSS-переменных. На странице имеется favicon. Верстка проверена в Lighthouse.
-
Secure Notes Backend Service (Node.js, Express.js, PostgreSQL, Crypto)
Практическая работа в рамках обучения Skillbox
Проект разработан на платформе Node.js с использованием веб-фреймворка Express.js. Все пользовательские данные и контент заметок надежно структурированы и хранятся в удаленной реляционной базе данных PostgreSQL. Безопасность системы гарантирована криптографическим хешированием паролей на уровне бэкенда. Проект развернут в изолированном серверном окружении с поддержкой протокола шифрования HTTPS и привязкой уникального доменного имени.
Сервис реализует полный цикл управления контентом (CRUD) для авторизованных сессий. Каждая сущность содержит автоматические метаданные времени создания (Timestamp). Ключевой функционал подсистемы пользователей включает: безопасную регистрацию, аутентификацию, сессионный вход и выход. Подсистема бизнес-логики обеспечивает: создание, чтение, модификацию, архивацию, перманентное удаление и восстановление данных, а также фильтрацию контента по динамическим диапазонам дат.