feat(resume): add PDF download FAB button with lazy-loaded html2pdf.js

- New partial fab-stack-resume.html with PDF download button
- Button shows spinner during PDF generation
- Photo converted to dataURL before rendering
- html2pdf.js loaded from CDN on first click only
- CSS for fab--pdf button and loading spinner
This commit is contained in:
Local Build committed 2026-08-13 19:54:30 +02:00
1 parent 3b706066c9
commit 1a1648c5e2
4 files changed
+2116 -3

No files matched your search

+98 -3
View File
@@ -954,6 +954,49 @@ a.fab--secondary:visited {
outline-offset: 2px;
}
/* ── PDF download FAB ── */
.fab--pdf {
position: relative;
width: 3rem;
min-width: 3rem;
min-height: 3rem;
padding: 0;
}
.fab-pdf__icon {
display: block;
width: var(--icon-fab);
height: var(--icon-fab);
transition: opacity 0.2s ease;
}
.fab-pdf__spinner {
display: none;
position: absolute;
width: 1.25rem;
height: 1.25rem;
border: 2px solid color-mix(in hsl, var(--accent) 30%, transparent);
border-top-color: var(--accent);
border-radius: 50%;
animation: fab-pdf-spin 0.6s linear infinite;
}
@keyframes fab-pdf-spin {
to { transform: rotate(360deg); }
}
.fab--pdf[data-loading="true"] .fab-pdf__icon {
opacity: 0;
}
.fab--pdf[data-loading="true"] .fab-pdf__spinner {
display: block;
}
.fab--pdf[data-loading="true"] {
pointer-events: none;
}
.theme-picker__stack {
display: flex;
flex-direction: column;
@@ -1289,7 +1332,7 @@ html[data-font="mono"] .hero__title {
.case-page__h1 {
margin: 0 0 0.5rem;
font-family: var(--font-accent);
font-size: clamp(1.35rem, 2.6vw, 1.95rem);
font-size: clamp(2rem, 3.9vw, 2.9rem);
font-weight: 700;
line-height: 1.2;
color: var(--text);
@@ -1320,7 +1363,7 @@ html[data-font="mono"] .hero__title {
.case-page__sub {
margin: 0 0 1.25rem;
font-size: clamp(1rem, 1.35vw, 1.1rem);
font-size: clamp(1.5rem, 2vw, 1.65rem);
color: var(--text-muted);
font-weight: 500;
}
@@ -2728,6 +2771,50 @@ html[data-theme="light"] .hero__portrait-shell {
color: var(--text-muted);
}
/* Scroll-reveal: плавное появление секций при скролле */
[data-reveal] {
opacity: 0;
transform: translateY(80px);
transition: opacity 0.4s ease-out, transform 0.6s ease-out;
}
[data-reveal].is-visible {
opacity: 1;
transform: translateY(0);
}
/* Stagger: заголовок появляется первым, контент — через 100ms */
[data-reveal].is-visible .section__title {
transition-delay: 0.1s;
}
[data-reveal].is-visible .section__inner > *:not(.section__title) {
transition-delay: 0.25s;
}
/* Исключаем skills и mini-projects — у них своя stagger-анимация */
#skills[data-reveal].is-visible .section__title,
#mini-projects[data-reveal].is-visible .section__title {
transition-delay: 0s;
}
#skills[data-reveal].is-visible .section__inner > *:not(.section__title),
#mini-projects[data-reveal].is-visible .section__inner > *:not(.section__title) {
transition-delay: 0s;
}
@media (prefers-reduced-motion: reduce) {
[data-reveal] {
opacity: 1;
transform: none;
transition: none;
}
[data-reveal].is-visible .section__title,
[data-reveal].is-visible .section__inner > *:not(.section__title) {
transition-delay: 0s;
}
}
.experience-grid {
list-style: none;
margin: 0;
@@ -2972,6 +3059,7 @@ html[data-theme="light"] .hero__portrait-shell {
overflow: hidden;
width: 100%;
min-height: 100%;
height: 100%;
border: 1px solid var(--line);
border-radius: var(--radius-card);
background: var(--surface);
@@ -3001,6 +3089,7 @@ html[data-theme="light"] .hero__portrait-shell {
flex-direction: column;
gap: 0.5rem;
min-width: 0;
overflow: hidden;
}
.mp-card__title {
@@ -3015,6 +3104,7 @@ html[data-theme="light"] .hero__portrait-shell {
align-items: center;
flex-wrap: wrap;
gap: 0.35rem 0.45rem;
min-width: 0;
}
.mp-card__desc {
@@ -3022,6 +3112,10 @@ html[data-theme="light"] .hero__portrait-shell {
font-size: 0.88rem;
line-height: 1.45;
color: var(--text-muted);
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
.mp-card__tags {
@@ -3054,7 +3148,7 @@ html[data-theme="light"] .hero__portrait-shell {
display: flex;
align-items: center;
justify-content: center;
overflow: visible;
overflow: hidden;
background: transparent;
box-sizing: border-box;
}
@@ -3084,6 +3178,7 @@ html[data-theme="light"] .hero__portrait-shell {
.mp-card--stack .mp-card__media {
width: 100%;
flex-shrink: 0;
padding: 1.2rem 1.35rem 0;
}
+1059
View File
File diff suppressed because it is too large. Load diff
+948
View File
@@ -0,0 +1,948 @@
<!DOCTYPE html>
<html lang="ru" data-theme="dark" data-radius="medium">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<meta
name="description"
content="Резюме Николая Мамадаева — продуктовый дизайнер с опытом более 10 лет."
/>
<title>Резюме 5 — Николай Мамадаев</title>
{{> head-links}}
<style>
.resume-doc {
max-width: 52rem;
margin: 0 auto;
background: var(--surface);
border: 1px solid var(--line);
border-radius: var(--radius-card);
padding: clamp(1.5rem, 3vw, 2.5rem);
}
.resume-header {
display: flex;
gap: 1.5rem;
align-items: flex-start;
margin-bottom: 1.5rem;
}
.resume-photo {
width: 120px;
height: 120px;
border-radius: var(--radius-sm);
object-fit: cover;
flex-shrink: 0;
order: 1;
margin-left: auto;
}
@media (max-width: 32rem) {
.resume-header {
flex-direction: column;
align-items: center;
text-align: center;
}
.resume-photo {
width: 100px;
height: 100px;
}
}
.resume-doc h2 {
margin: 2rem 0 1rem;
font-size: clamp(0.95rem, 1.35vw, 1.1rem);
font-weight: 600;
color: var(--text);
letter-spacing: 0.04em;
border-top: 1px solid var(--line);
padding-top: 1rem;
}
.resume-doc h2:first-of-type {
border-top: none;
padding-top: 0;
}
.resume-doc .section__prose + .section__prose {
margin-top: 0.75rem;
}
.resume-doc .section__prose a {
color: var(--accent);
}
#skills {
border-top: none;
padding-top: 0;
}
.resume-meta {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 0.5rem 1.5rem;
margin: 0.75rem 0 1.5rem;
font-size: 0.92rem;
color: var(--text-muted);
}
@media (max-width: 32rem) {
.resume-meta {
grid-template-columns: repeat(2, 1fr);
}
}
.resume-meta dt {
font-size: 0.8rem;
font-weight: 600;
color: var(--text);
letter-spacing: 0.03em;
margin-bottom: 0.1rem;
}
.resume-meta dd {
margin: 0;
}
.resume-meta a {
color: var(--accent);
}
.resume-exp {
margin: 1.5rem 0;
padding-bottom: 1.5rem;
border-bottom: 1px solid var(--line);
}
.resume-exp:last-child {
border-bottom: none;
padding-bottom: 0;
}
.resume-doc > .resume-exp:last-of-type {
border-bottom: none;
padding-bottom: 0;
}
.resume-exp__header {
margin-bottom: 0.5rem;
}
.resume-exp__company {
font-weight: 700;
font-size: 1.1rem;
color: var(--text);
letter-spacing: -0.01em;
}
.resume-exp__meta-row {
display: flex;
align-items: center;
gap: 0.5rem;
font-size: 0.85rem;
color: var(--text-muted);
margin-top: 0.25rem;
}
.resume-exp__meta-row a {
color: var(--accent);
text-decoration: none;
border-bottom: 1px solid var(--accent);
transition: opacity 0.2s;
}
.resume-exp__meta-row a:hover {
opacity: 0.7;
}
.resume-exp__sep {
color: var(--line);
}
.resume-exp__period {
font-size: 0.8rem;
color: var(--text-muted);
letter-spacing: 0.02em;
}
.resume-exp__desc {
color: var(--text-muted);
font-size: 0.92rem;
margin: 0.5rem 0;
line-height: 1.55;
}
.resume-exp__section {
margin: 1rem 0;
}
.resume-exp__cols {
display: grid;
grid-template-columns: 1fr 1fr auto;
gap: 0 1.5rem;
}
.resume-exp__section-title {
font-weight: 600;
font-size: 0.92rem;
color: var(--text);
margin-bottom: 0.5rem;
}
.resume-exp__label {
font-size: 0.8rem;
font-weight: 600;
color: var(--text);
letter-spacing: 0.03em;
margin: 0.75rem 0 0.35rem;
}
.resume-exp ul {
margin: 0;
padding-left: 1.25rem;
color: var(--text-muted);
font-size: 0.92rem;
line-height: 1.55;
}
.resume-exp li + li {
margin-top: 0.25rem;
}
.resume-skills {
display: flex;
flex-direction: column;
gap: 0;
margin: 1rem 0;
}
.resume-skill {
display: flex;
align-items: baseline;
gap: 0.75rem;
font-size: 0.92rem;
line-height: 1.55;
}
.resume-skill__title {
font-weight: 600;
color: var(--text);
min-width: 8rem;
flex-shrink: 0;
font-size: 0.85rem;
letter-spacing: 0.02em;
}
.resume-skill__desc {
color: var(--text-muted);
}
.resume-about {
margin: 1.5rem 0;
font-size: 0.92rem;
color: var(--text-muted);
line-height: 1.55;
}
</style>
</head>
<body>
{{> header-minimal}}
{{> fab-stack-resume}}
<main id="main" class="section section--surface section--tight">
<div class="section__inner resume-doc">
<div class="resume-header">
<img class="resume-photo" src="{{assetPrefix}}assets/index/me_static.webp" alt="Николай Мамадаев" width="120" height="120" />
<div>
<p class="hero__eyebrow">Резюме</p>
<h1 class="case-page__h1">Николай Мамадаев</h1>
<p class="section__prose"><strong>Senior UX/UI Designer, Product Designer</strong></p>
</div>
</div>
<dl class="resume-meta">
<div>
<dt>Портфолио</dt>
<dd><a href="https://mamadaevv.site" target="_blank" rel="noopener">mamadaevv.site</a></dd>
</div>
<div>
<dt>Почта</dt>
<dd><a href="mailto:nik@mamadaevv.site">nik@mamadaevv.site</a></dd>
</div>
<div>
<dt>Вилка по ЗП</dt>
<dd>250 000 – 310 000 руб.</dd>
</div>
<div>
<dt>Формат работы</dt>
<dd>удалённо</dd>
</div>
</dl>
<h2 id="experience">Опыт работы</h2>
<div class="resume-exp">
<div class="resume-exp__header">
<p class="resume-exp__company">Собственные продукты и исследование AI-инструментов</p>
<p class="resume-exp__period">Декабрь 2025 — настоящее время</p>
</div>
<p class="resume-exp__desc">Период самостоятельной практики: изучение AI-инструментов в продуктовом и дизайн-процессе, разработка собственных продуктов полного цикла — от идеи до работающего релиза.</p>
<div class="resume-exp__section">
<p class="resume-exp__section-title">AI-плагин для Figma (внутренний инструмент)</p>
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Определил сценарии автоматизации на основе аудита собственного рабочего процесса: замерил, какие операции повторяются чаще всего и съедают больше всего времени</li>
<li>Спроектировал интерфейс плагина: панель, состояния обработки, обработка ошибок, работа с выделением</li>
<li>Собрал архитектуру взаимодействия с LLM: промпт-шаблоны, валидация ответа, повторные попытки</li>
<li>Довёл до рабочей версии самостоятельно, с помощью AI-ассистированной разработки</li>
<li>Веду плагин как продукт: собираю обратную связь, приоритизирую доработки, выпускаю обновления</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Автоматизировал 7 рутинных операций дизайн-процесса: нейминг слоёв, генерация контента для макетов, приведение текстов к тону продукта, локализация</li>
<li>Сократил время на подготовку макета к передаче в разработку примерно на 40%</li>
<li>Экономлю около 5 часов в неделю на операциях, которые раньше делал руками</li>
<li>Прошёл полный цикл продукта в одиночку: проблема → решение → реализация → эксплуатация</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>Figma API</li>
<li>AI / LLM</li>
<li>Prompt engineering</li>
</ul>
</div>
</div>
</div>
<div class="resume-exp__section">
<p class="resume-exp__section-title">Автоматизации и сервисы на n8n (личные проекты)</p>
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Проектирование логики сценариев: триггеры, ветвления, обработка ошибок, повторные запуски</li>
<li>Работа с PostgreSQL как хранилищем и источником данных для процессов</li>
<li>Интеграция внешних сервисов через REST API</li>
<li>Проектирование и запуск Telegram-ботов: сценарии диалога, состояния, интерфейс сообщений</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Собрал 12 рабочих сценариев автоматизации, закрывающих личные и рабочие рутины</li>
<li>Запустил 3 Telegram-бота с собственной продуктовой логикой и базой данных</li>
<li>Свёл разрозненные сервисы в единый процесс без единой строки ручной работы</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>n8n</li>
<li>PostgreSQL</li>
<li>REST API</li>
<li>Telegram Bot API</li>
</ul>
</div>
</div>
</div>
<div class="resume-exp__section">
<p class="resume-exp__section-title">Пет-проекты на AI-ассистированной разработке</p>
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Продуктовое проектирование: формулировка проблемы, сценарии, интерфейс, приоритизация функций</li>
<li>Реализация фронтенда и логики с помощью AI-ассистентов</li>
<li>Развёртывание и поддержка работающих сервисов</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Довёл 5 идей до состояния работающего продукта, а не макета в Figma</li>
<li>Научился доводить гипотезу до проверяемого прототипа за 2–3 дня вместо нескольких недель ожидания разработки</li>
<li>Закрыл разрыв между дизайном и реализацией: теперь проверяю идеи в коде, а не только на макетах</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>Необходимо заполнить</li>
</ul>
</div>
</div>
</div>
</div>
<div class="resume-exp">
<div class="resume-exp__header">
<p class="resume-exp__company">Primo RPA</p>
<p class="resume-exp__meta-row"><span>Февраль 2023 — Ноябрь 2025 (2 года и 10 месяцев)</span><span class="resume-exp__sep">·</span><a href="https://primo-rpa.com/" target="_blank" rel="noopener noreferrer">primo-rpa.com</a></p>
</div>
<p class="resume-exp__desc">Российская RPA-платформа корпоративного уровня: линейка из desktop-среды разработки роботов и веб-сервисов управления, аналитики и ML. Работал ведущим дизайнером на всю продуктовую линейку из 6 продуктов.</p>
<div class="resume-exp__section">
<p class="resume-exp__section-title">AI Server platform (Saas)</p>
<p class="resume-exp__desc">Панель управления для обучения/запуска/тестирования и других операций с нейросетями развёрнутыми внутри контура компании.</p>
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Проектирование интерфейса управления моделями: обучение, запуск, тестирование, версионирование, мониторинг</li>
<li>Проработка сценариев работы с Smart OCR — извлечение данных из документов различных типов</li>
<li>Проектирование разметки документов и валидации результатов распознавания</li>
<li>Работа с состояниями долгих процессов: обучение модели, прогресс, ошибки, откат</li>
<li>Подготовка интерактивных прототипов и авторский надзор за реализацией</li>
<li>Проведение интервью с ML-инженерами и бизнес-пользователями для сверки моделей поведения</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Упаковал сложную ML-логику в интерфейс, понятный не только ML-инженеру, но и бизнес-аналитику без технического бэкграунда</li>
<li>Свёл работу с моделями к единому предсказуемому сценарию из 4 шагов вместо 9 разрозненных экранов</li>
<li>Сократил время настройки новой модели с 40 до 15 минут по результатам замеров на тестировании</li>
<li>Спроектировал интерфейс разметки документов, который снял 60% обращений в поддержку по этой теме</li>
<li>Провёл 8 юзабилити-сессий, по итогам переработал ключевой сценарий обучения модели</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>ML / нейросети</li>
<li>Smart OCR</li>
</ul>
</div>
</div>
</div>
<div class="resume-exp__section">
<p class="resume-exp__section-title">Robot automation studio (Windows)</p>
<p class="resume-exp__desc">Среда для разработки и отладки роботов для автоматизации бизнес-процессов.</p>
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Проектирование интерфейса профессиональной desktop-IDE: рабочая область, панели инструментов, дерево процесса, отладчик</li>
<li>Развитие библиотеки компонентов и визуального языка продукта</li>
<li>Проработка сценариев отладки: точки останова, пошаговое выполнение, просмотр переменных</li>
<li>Проектирование работы с большими деревьями активностей и вложенностью</li>
<li>Работа в паре с разработкой по реализации компонентов, авторский надзор</li>
<li>Ведение регулярных дизайн-ревью внутри команды</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Обновил визуальный язык продукта до уровня Windows 10/11 — компоненты стали на поколение современнее</li>
<li>Переработал 80+ экранов и диалогов, приведя их к единой сетке и типографике</li>
<li>Собрал библиотеку из 140 компонентов, закрывшую 90% потребностей интерфейса</li>
<li>Перевёл иконки и часть иллюстраций на векторную графику: корректное отображение при любом масштабировании и DPI</li>
<li>Сократил время сборки нового экрана командой с 2 дней до 4 часов за счёт готовых компонентов</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>Desktop IDE</li>
<li>Windows 10/11</li>
<li>Компонентная библиотека</li>
</ul>
</div>
</div>
</div>
<div class="resume-exp__section">
<p class="resume-exp__section-title">Robot automation studio (Linux)</p>
<p class="resume-exp__desc">Среда для разработки и отладки роботов для автоматизации бизнес-процессов.</p>
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Адаптация дизайна Студии под Linux-версию на фреймворке Avalonia</li>
<li>Проектирование компонентов с учётом технических ограничений фреймворка</li>
<li>Синхронизация визуального языка между Windows- и Linux-версиями продукта</li>
<li>Совместная работа с разработкой над тем, что технически реализуемо в Avalonia, а что требует обходных решений</li>
<li>Подготовка спецификаций поведения компонентов для реализации</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Собрал расширенную библиотеку из 95 компонентов для Avalonia, которой в проекте не существовало до меня</li>
<li>Обеспечил единообразие продукта на двух платформах при разных технологических стеках</li>
<li>Сократил количество визуальных расхождений между версиями с нескольких десятков до единичных случаев</li>
<li>Дал команде Linux-версии готовый набор решений вместо дизайна каждого экрана с нуля</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>Avalonia</li>
<li>.NET</li>
<li>Linux</li>
</ul>
</div>
</div>
</div>
<div class="resume-exp__section">
<p class="resume-exp__section-title">Idea Hub Dashboard (Saas)</p>
<p class="resume-exp__desc">Обеспечивает сбор и анализ предложений сотрудников, оценка эффективности и мониторинг статуса реализации автоматизаций. Аналитика по ключевым показателям эффективности и верхнеуровневый взгляд на роботизацию.</p>
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Проектирование дашбордов и аналитических представлений по KPI роботизации</li>
<li>Проработка жизненного цикла идеи: подача → оценка → приоритизация → реализация → замер эффекта</li>
<li>Информационная архитектура раздела, работа с плотными таблицами, фильтрами и массовыми операциями</li>
<li>Проектирование ролевой модели: сотрудник, аналитик, руководитель</li>
<li>Подбор типов визуализации данных под конкретные управленческие вопросы</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Свёл верхнеуровневую аналитику и работу с конкретной идеей в один непрерывный сценарий без переключения между разделами</li>
<li>Спроектировал представление данных так, что руководитель видит эффект от роботизации без ручных выгрузок в Excel</li>
<li>Сократил путь от подачи идеи до её оценки с 6 шагов до 3</li>
<li>Спроектировал 12 виджетов аналитики, покрывающих основные вопросы заказчиков о ROI роботизации</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>Аналитика / дашборды</li>
<li>KPI</li>
<li>Визуализация данных</li>
</ul>
</div>
</div>
</div>
<div class="resume-exp__section">
<p class="resume-exp__section-title">Orchestrator Automation Management Tool (Saas)</p>
<p class="resume-exp__desc">Обеспечивает слаженную работу системы и управление сотнями роботов: запуски, мониторинг и менеджмент.</p>
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Проектирование интерфейса управления парком из сотен роботов: расписания, очереди, приоритеты, мониторинг</li>
<li>Проработка состояний и обработки ошибок при массовых запусках</li>
<li>Проектирование системы уведомлений и алертов о сбоях</li>
<li>Работа со сложными таблицами: сортировка, фильтрация, массовые действия, сохранённые представления</li>
<li>Прототипирование сложных сценариев для валидации до начала разработки</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Спроектировал управление сотнями объектов так, что оператор не теряется в масштабе: от общей картины до конкретного робота за 2 клика</li>
<li>Привёл сервис к единой дизайн-системе вместе с остальными веб-продуктами линейки</li>
<li>Сократил время реакции оператора на сбой робота с 12 до 4 минут за счёт переработанной системы алертов</li>
<li>Свёл 5 разных представлений списка роботов к одному настраиваемому</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>Мониторинг</li>
<li>Расписания / очереди</li>
<li>Уведомления / алерты</li>
</ul>
</div>
</div>
</div>
<div class="resume-exp__section">
<p class="resume-exp__section-title">QnA portal (WEB)</p>
<p class="resume-exp__desc">Площадка для постинга вопросов и получения ответов от службы поддержки</p>
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Проектирование сценариев публикации вопроса, ответа и поиска по накопленной базе знаний</li>
<li>Дизайн интерфейса портала на базе общей дизайн-системы компании</li>
<li>Проработка ролевой модели: пользователь, эксперт, служба поддержки, модератор</li>
<li>Проектирование механики поиска и подсказок похожих вопросов при публикации</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Запустил портал на готовых компонентах дизайн-системы за 3 недели вместо запланированных 8</li>
<li>Снизил нагрузку на поддержку примерно на 25% за счёт переиспользования уже данных ответов</li>
<li>Механика подсказок похожих вопросов сократила количество дублей на 45%</li>
<li>Обеспечил визуальную преемственность с продуктами линейки — портал не выглядит сторонним сервисом</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>Веб-портал</li>
<li>Дизайн-система</li>
<li>База знаний</li>
</ul>
</div>
</div>
</div>
<div class="resume-exp__section">
<p class="resume-exp__section-title">Общее по компании</p>
<ul>
<li>Инициировал обновление внешнего вида всей продуктовой линейки — решение о редизайне компания приняла с моим приходом</li>
<li>Собрал и внедрил единую дизайн-систему для веб-сервисов, соединив фирменный стиль компании с новой структурой интерфейсов</li>
<li>Дизайн-систему приняли 4 продуктовые команды; она включает 210 компонентов и токены темизации</li>
<li>Сократил среднее время подготовки макетов по линейке на 35%</li>
<li>Создавал и поддерживал UI-kit для консистентности и ускорения разработки</li>
<li>Провёл более 20 пользовательских исследований и юзабилити-сессий за время работы</li>
<li>Вёл авторский надзор за реализацией, участвовал в дизайн-ревью, продуктовых обсуждениях и планировании релизов</li>
<li>Был единственным ведущим дизайнером на всю линейку из 6 продуктов и двух платформ</li>
</ul>
</div>
</div>
<div class="resume-exp">
<div class="resume-exp__header">
<p class="resume-exp__company">Lunacy (Icons8)</p>
<p class="resume-exp__meta-row"><span>Июль 2022 — Январь 2023 (7 месяцев)</span><span class="resume-exp__sep">·</span><a href="https://icons8.com/lunacy" target="_blank" rel="noopener noreferrer">icons8.com/lunacy</a></p>
</div>
<p class="resume-exp__desc">Графический редактор для работы над дизайном интерфейсов и прочих макетов. Аналог Sketch App и Figma.</p>
<div class="resume-exp__section">
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Проектирование интерфейса графического редактора: инструменты, панели свойств, работа с холстом и слоями</li>
<li>Оформление решений в виде юзерфлоу и передача разработчикам</li>
<li>Создание сложных интерактивных прототипов в Protopie для демонстрации поведения инструментов</li>
<li>Отрисовка недостающих иконок в стилистике продукта</li>
<li>Внесение предложений по улучшению функциональности редактора</li>
<li>Участие в обсуждениях продуктовых решений с командой</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Спроектировал 6 функциональных блоков редактора, включая работу с компонентами и стилями</li>
<li>Собрал 15+ прототипов в Protopie, что позволило отсечь неудачные решения до разработки</li>
<li>Часть моих предложений по функциональности вошла в релизы продукта</li>
<li>Отрисовал более 60 иконок, дополнивших системный набор редактора</li>
<li>Работал над продуктом для профессиональной аудитории дизайнеров, где требования к деталям интерфейса выше обычных</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>Protopie</li>
<li>Графический редактор</li>
<li>Иконки / иллюстрации</li>
</ul>
</div>
</div>
</div>
</div>
<div class="resume-exp">
<div class="resume-exp__header">
<p class="resume-exp__company">MANU Video Game Maker</p>
<p class="resume-exp__meta-row"><span>Январь 2019 — Декабрь 2021 (3 года)</span><span class="resume-exp__sep">·</span><a href="https://manu.co/" target="_blank" rel="noopener noreferrer">manu.co</a></p>
</div>
<p class="resume-exp__desc">Игровой движок для создания видеоигр без написания кода.</p>
<div class="resume-exp__section">
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Продуктовый дизайн движка целиком: от концепции взаимодействия до конечного UI</li>
<li>Проектирование поведения интерфейса для сложных пользовательских сценариев</li>
<li>Исследования пользователей: наблюдение, глубинные интервью, опросы</li>
<li>Составление портретов потенциальных пользователей и карт эмпатии</li>
<li>Работа с продуктовой аналитикой и метриками, завязанными на пользовательские сценарии</li>
<li>Вёрстка главной страницы сайта на Tilda, проектирование информационной архитектуры сайта вместе с командой</li>
<li>Контроль работы веб-графического дизайнера</li>
<li>Найм в продуктовый отдел: проведение собеседований и отбор специалистов</li>
<li>Руководство отделом, построение рабочих процессов всей продуктовой команды</li>
<li>Кураторство работ по созданию пользовательской документации</li>
<li>Внедрение инструментов автоматизации (Integromat, Zapier) для внутренних задач</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Провёл масштабный редизайн всей программы: заложил принципиально новую концепцию работы и стилистику</li>
<li>Спроектировал поведение интерфейса для 100+ сложных пользовательских сценариев</li>
<li>Спроектировал дизайн-систему продукта с нуля: 120 компонентов</li>
<li>Получили массу положительных, местами восторженных отзывов пользователей — в продукте стало значительно легче ориентироваться</li>
<li>Завершаемость онбординга выросла с 34% до 58% после редизайна</li>
<li>Провёл 25 глубинных интервью и 4 волны опросов, на их основе переработал 3 ключевых сценария</li>
<li>Нанял 4 специалистов в продуктовый отдел и вырос из дизайнера в тимлида команды</li>
<li>Выстроил процессы отдела: дизайн-ревью, работа с бэклогом, передача в разработку</li>
<li>Автоматизировал внутренние рутины команды, освободив время на продуктовые задачи</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>Tilda</li>
<li>Integromat / Zapier</li>
<li>Исследования пользователей</li>
</ul>
</div>
</div>
</div>
</div>
<div class="resume-exp">
<div class="resume-exp__header">
<p class="resume-exp__company">Aegees Messenger</p>
<p class="resume-exp__meta-row"><span>Октябрь 2017 — Декабрь 2018 (1 год и 3 месяца)</span><span class="resume-exp__sep">·</span><a href="https://aegees.com/" target="_blank" rel="noopener noreferrer">aegees.com</a></p>
</div>
<p class="resume-exp__desc">Кроссплатформенный мессенджер с защищенным хранилищем и аудиозвонками.</p>
<div class="resume-exp__section">
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Дизайн мессенджера сразу под пять платформ: Android, iOS, macOS, Windows, Linux</li>
<li>Проработка сценариев защищённого хранилища и аудиозвонков</li>
<li>Проектирование сценариев регистрации, шифрования и восстановления доступа</li>
<li>Адаптация единой продуктовой логики под гайдлайны каждой платформы</li>
<li>Контроль работы зарубежных иллюстраторов по подготовке графических материалов</li>
<li>Подготовка материалов для магазинов приложений</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Выстроил единый визуальный язык продукта при соблюдении гайдлайнов пяти платформ одновременно</li>
<li>Спроектировал более 90 экранов в пяти платформенных вариантах</li>
<li>Обеспечил стабильный поток графических материалов от внешних подрядчиков без потери стилистики</li>
<li>Упростил сценарий защищённого хранилища так, чтобы им пользовались люди без технической подготовки</li>
<li>Работал в чувствительной области приватности и безопасности, где ошибка в интерфейсе стоит доверия пользователя</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>Android</li>
<li>iOS</li>
<li>macOS</li>
<li>Windows</li>
<li>Linux</li>
</ul>
</div>
</div>
</div>
</div>
<div class="resume-exp">
<div class="resume-exp__header">
<p class="resume-exp__company">Orion Innovation (ex MERA)</p>
<p class="resume-exp__meta-row"><span>Июль 2016 — Октябрь 2017 (1 год и 4 месяца)</span><span class="resume-exp__sep">·</span><a href="https://www.orioninnovation.com/" target="_blank" rel="noopener noreferrer">orioninnovation.com</a></p>
</div>
<p class="resume-exp__desc">Разработка ПО для внешних заказчиков.</p>
<div class="resume-exp__section">
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Работа в дизайн-отделе численностью до 8 человек</li>
<li>Создание анкет персон и составление карты функциональности продукта в соответствии с потребностями персон</li>
<li>Вайрфреймы и отрисовка конечного UI интерфейсов</li>
<li>Проектирование юзкейсов, карт экранов, демонстрации микроанимаций</li>
<li>Подготовка мудбордов и дизайн-концепций, обсуждение их с клиентами</li>
<li>Подготовка и проведение презентаций дизайн-концепций</li>
<li>Линковка мокапов в прототипы, написание сценариев и проведение качественных юзабилити-тестирований</li>
<li>Внесение правок по результатам тестирований</li>
<li>Авторский надзор над реализацией дизайна разработчиками</li>
<li>Участие в дизайн-ревью: разбор работ коллег и защита собственных решений</li>
<li>Прямая коммуникация с зарубежными клиентами для обсуждения дизайна и получения задач</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Провёл 10 сессий юзабилити-тестирования от написания сценария до внесения правок</li>
<li>Освоил новую для себя платформу Smart TV и довёл проект до успешной публикации в магазине приложений</li>
<li>Вёл коммуникацию с зарубежными заказчиками напрямую, без посредников</li>
<li>Активно участвовал в улучшении рабочего процесса дизайн-отдела компании</li>
<li>Прошёл полный цикл продуктового дизайна на 5 клиентских проектах</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>Smart TV</li>
<li>Юзабилити-тестирование</li>
<li>Мудборды / дизайн-концепции</li>
</ul>
</div>
</div>
</div>
</div>
<div class="resume-exp">
<div class="resume-exp__header">
<p class="resume-exp__company">SpaceshipApps Studio</p>
<p class="resume-exp__meta-row"><span>Июнь 2015 — Июнь 2016 (1 год и 1 месяц)</span><span class="resume-exp__sep">·</span><a href="https://spaceshipapps.ru/" target="_blank" rel="noopener noreferrer">spaceshipapps.ru</a></p>
</div>
<p class="resume-exp__desc">Студия разработки мобильных приложений и сайтов.</p>
<div class="resume-exp__section">
<div class="resume-exp__cols">
<div>
<p class="resume-exp__label">Обязанности:</p>
<ul>
<li>Дизайн мобильных и веб-продуктов в потоковом режиме студии</li>
<li>Работа с разными доменами: соцгейминг, бьюти-услуги, доставка еды, голосовые интерфейсы, легал-сервисы, коллаборативные инструменты</li>
<li>Адаптивный веб-дизайн и дизайн административных панелей</li>
<li>Отрисовка иконок и подготовка графики для проектов</li>
<li>Подготовка макетов к передаче в разработку</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Достижения:</p>
<ul>
<li>Выпустил 6 продуктов за год: геолокационная социальная игра с квестами в реальном мире, приложение записи к бьюти-специалистам, сервис доставки еды, голосовая игра со словами, сайт и админка сервиса регистрации авторского права, мобильная «белая доска» для совместной работы</li>
<li>Научился быстро входить в новую предметную область и держать качество при высоком темпе студии</li>
<li>Закрыл весь спектр задач: мобайл, веб, админ-панели, графика</li>
<li>Заложил базу для перехода от исполнительского дизайна к продуктовому</li>
</ul>
</div>
<div>
<p class="resume-exp__label">Стэк:</p>
<ul>
<li>Мобайл</li>
<li>Веб</li>
<li>Админ-панели</li>
<li>Графика</li>
</ul>
</div>
</div>
</div>
</div>
<h2 id="skills">Навыки</h2>
<div class="resume-skills">
<div class="resume-skill">
<p class="resume-skill__title">Проектирование</p>
<p class="resume-skill__desc">UX/UI, product design, информационная архитектура, адаптивный дизайн, дизайн-системы</p>
</div>
<div class="resume-skill">
<p class="resume-skill__title">Исследования</p>
<p class="resume-skill__desc">Интервью, опросы, usability testing, JTBD, карты эмпатии, конверсия, retention, NPS</p>
</div>
<div class="resume-skill">
<p class="resume-skill__title">Инструменты</p>
<p class="resume-skill__desc">Figma, Protopie, Sketch, Adobe Creative Suite, Tilda, AI-инструменты</p>
</div>
<div class="resume-skill">
<p class="resume-skill__title">Управление</p>
<p class="resume-skill__desc">Построение команды, Agile, Kanban, авторский надзор, работа со стейкхолдерами</p>
</div>
</div>
<h2 id="about">О себе</h2>
<p class="section__prose resume-about">
В дизайне больше 10 лет, последние годы — продуктовый дизайн сложных B2B-продуктов. Работаю на стыке дизайна и продакт-менеджмента: провожу исследования, формулирую гипотезы и фичи, помогаю с приоритизацией и участвую в планировании релизов.
</p>
<p class="section__prose resume-about">
Люблю разбираться в сложном и делать его понятным — поэтому мне комфортно в продуктах вроде IDE, оркестраторов и ML-панелей, где обычному дизайнеру скучно или страшно.
</p>
<p class="section__prose resume-about">
Не жду, пока задачу сделает кто-то другой: пишу себе инструменты сам. Собрал приватный AI-плагин для Figma, автоматизирую процессы на n8n и PostgreSQL, довожу свои идеи до работающих продуктов с помощью AI-ассистированной разработки. Собственные навыки для Алисы набрали 37 000+ и 33 000+ пользователей, файл Slider Set для дизайнеров скачали больше 20 000 раз.
</p>
<p class="section__prose resume-about">
Участвую в жизни сообщества: веду Telegram-канал «Дизайн не пицца», выкладываю полезности в Figma Community, выступал на митапе Яндекса с докладом по аналитике, побеждал на хакатонах — самая приятная победа на хакатоне Яндекс.Денег в Петербурге за приложение оплаты по QR-коду.
</p>
<p class="section__prose resume-about">
Английский — B1. Работаю удалённо, спокойно веду коммуникацию с распределённой командой.
</p>
</div>
</main>
{{> footer}}
{{> cookie-notice}}
<script>
(function () {
var btn = document.querySelector('[data-resume-pdf-btn]');
if (!btn) return;
var CDN_URL = 'https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.2/html2pdf.bundle.min.js';
var loading = false;
function setLoading(state) {
loading = state;
btn.setAttribute('data-loading', state);
btn.setAttribute('aria-busy', state);
}
function loadScript(src) {
return new Promise(function (resolve, reject) {
if (document.querySelector('script[src="' + src + '"]')) { resolve(); return; }
var s = document.createElement('script');
s.src = src;
s.onload = resolve;
s.onerror = reject;
document.head.appendChild(s);
});
}
function imgToDataUrl(img) {
return new Promise(function (resolve) {
if (img.complete && img.naturalWidth > 0) {
try {
var c = document.createElement('canvas');
c.width = img.naturalWidth;
c.height = img.naturalHeight;
c.getContext('2d').drawImage(img, 0, 0);
resolve(c.toDataURL('image/webp'));
} catch (e) { resolve(null); }
} else {
img.onload = function () {
try {
var c = document.createElement('canvas');
c.width = img.naturalWidth;
c.height = img.naturalHeight;
c.getContext('2d').drawImage(img, 0, 0);
resolve(c.toDataURL('image/webp'));
} catch (e) { resolve(null); }
};
img.onerror = function () { resolve(null); };
}
});
}
btn.addEventListener('click', function () {
if (loading) return;
setLoading(true);
var el = document.querySelector('.resume-doc');
if (!el) { setLoading(false); return; }
var photo = el.querySelector('.resume-photo');
var photoOriginalSrc = photo ? photo.getAttribute('src') : null;
var photoPromises = [];
if (photo) {
photoPromises.push(
imgToDataUrl(photo).then(function (dataUrl) {
if (dataUrl) photo.setAttribute('src', dataUrl);
})
);
}
var favicons = el.querySelectorAll('link[rel="icon"], link[rel="shortcut icon"]');
Promise.all(photoPromises)
.then(function () { return document.fonts ? document.fonts.ready : Promise.resolve(); })
.then(function () { return loadScript(CDN_URL); })
.then(function () {
return html2pdf().from(el).set({
margin: [10, 10, 10, 10],
filename: 'Mamadaev_Resume.pdf',
image: { type: 'jpeg', quality: 0.95 },
html2canvas: {
scale: 2,
useCORS: true,
letterRendering: true,
backgroundColor: '#ffffff'
},
jsPDF: {
unit: 'mm',
format: 'a4',
orientation: 'portrait',
compress: true
}
});
})
.then(function () {
if (photoOriginalSrc) photo.setAttribute('src', photoOriginalSrc);
setLoading(false);
})
.catch(function (err) {
console.error('PDF generation failed:', err);
if (photoOriginalSrc) photo.setAttribute('src', photoOriginalSrc);
setLoading(false);
});
});
})();
</script>
</body>
</html>
+11
View File
@@ -0,0 +1,11 @@
<div class="fab-stack" aria-label="Быстрые действия">
<button type="button" class="fab fab--primary fab--pdf glass-neutral" data-resume-pdf-btn aria-label="Скачать резюме в PDF">
<svg class="fab-pdf__icon" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8Z" stroke="currentColor" stroke-width="1.75" stroke-linejoin="round"/>
<path d="M14 2v6h6" stroke="currentColor" stroke-width="1.75" stroke-linejoin="round"/>
<path d="M12 18v-6" stroke="currentColor" stroke-width="1.75" stroke-linecap="round"/>
<path d="M9 15l3 3 3-3" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
<span class="fab-pdf__spinner" aria-hidden="true"></span>
</button>
</div>