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:
1 parent
3b706066c9
commit
1a1648c5e2
4 files changed
+2116
-3
No files matched your search
+98
-3
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -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>
|
||||
@@ -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>
|
||||
Reference in new issue
Block a user