init
This commit is contained in:
commit
d295c7f139
1527 files changed
+270726
No files matched your search
Whitespace-only changes.
@@ -0,0 +1,393 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a {
|
||||
color: #555;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.contact-row .separator {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text {
|
||||
font-size: 11px;
|
||||
line-height: 1.7;
|
||||
color: #2f2f2f;
|
||||
}
|
||||
|
||||
a { white-space: nowrap; }
|
||||
|
||||
.competencies-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.competency-tag {
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job { margin-bottom: 14px; }
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company {
|
||||
font-size: 12.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.job-period {
|
||||
font-size: 10.5px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.job-role {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.job-location {
|
||||
font-size: 10px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.job ul {
|
||||
padding-left: 18px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.job li {
|
||||
font-size: 10.5px;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job li strong { font-weight: 600; }
|
||||
|
||||
.project { margin-bottom: 12px; }
|
||||
|
||||
.project-title {
|
||||
font-size: 11.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.project-desc {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
margin-top: 3px;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.project-tech {
|
||||
font-size: 9.5px;
|
||||
color: #888;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.edu-item { margin-bottom: 8px; }
|
||||
|
||||
.edu-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.edu-title { font-weight: 600; font-size: 11px; color: #333; }
|
||||
.edu-org { color: hsl(270, 70%, 45%); font-weight: 500; }
|
||||
.edu-year { font-size: 10px; color: #777; white-space: nowrap; }
|
||||
.edu-desc { font-size: 10px; color: #666; margin-top: 2px; line-height: 1.5; }
|
||||
|
||||
.cert-table { display: table; width: 100%; }
|
||||
.cert-item { display: table-row; }
|
||||
.cert-item > * { display: table-cell; vertical-align: baseline; padding-bottom: 6px; }
|
||||
.cert-title { font-size: 10.5px; font-weight: 500; color: #333; }
|
||||
.cert-org { color: hsl(270, 70%, 45%); white-space: nowrap; }
|
||||
.cert-year { font-size: 10px; color: #777; white-space: nowrap; text-align: right; width: 44px; }
|
||||
|
||||
.skills-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px 14px;
|
||||
}
|
||||
|
||||
.skill-item { font-size: 10.5px; color: #444; }
|
||||
.skill-category { font-weight: 600; color: #333; font-size: 10.5px; }
|
||||
|
||||
@media print {
|
||||
body {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
.page {
|
||||
padding: 0 0.18in 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.header,
|
||||
.edu-item,
|
||||
.cert-item,
|
||||
.competency-tag,
|
||||
.skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title,
|
||||
.job-company,
|
||||
.job-role,
|
||||
.project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+79509066162">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">Telegram: @vbleroy</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (удалённо / гибрид)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">Резюме</div>
|
||||
<div class="summary-text">
|
||||
Frontend-разработчик с коммерческим опытом на Vue 3 (Composition API, TypeScript, Pinia). Разработала с нуля фронтенд внутренней системы управления заказами и логистикой («Здесь ЕКОМ») для сети из ~1200 аптек по всей России. Спроектировала и объяснила бэкенд-команде ролевую модель авторизации (RBAC) с разграничением доступа между отделами — нестандартный для frontend-разработчика навык, основанный на профильном образовании в информационной безопасности. Работаю с WebSocket, автотестами (Vitest, Playwright, Storybook) и legacy-кодом; параллельно веду мобильное приложение на Flutter.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">Ключевые компетенции</div>
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">Vue 3</span>
|
||||
<span class="competency-tag">Composition API</span>
|
||||
<span class="competency-tag">TypeScript</span>
|
||||
<span class="competency-tag">Pinia</span>
|
||||
<span class="competency-tag">Vue Router</span>
|
||||
<span class="competency-tag">RBAC / авторизация</span>
|
||||
<span class="competency-tag">WebSocket (WSS)</span>
|
||||
<span class="competency-tag">REST API</span>
|
||||
<span class="competency-tag">Vitest</span>
|
||||
<span class="competency-tag">Storybook</span>
|
||||
<span class="competency-tag">Playwright (E2E)</span>
|
||||
<span class="competency-tag">Tailwind CSS</span>
|
||||
<span class="competency-tag">Vite</span>
|
||||
<span class="competency-tag">Git / GitLab</span>
|
||||
<span class="competency-tag">Flutter</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Frontend-разработчик (Vue 3) / Flutter-разработчик</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 аптек по всей России. Frontend-команда: 4 человека.</div>
|
||||
<ul>
|
||||
<li><strong>«Здесь ЕКОМ» (Vue 3, Composition API, TypeScript, Pinia, Vue Router, Vite, Vitest, Storybook, WebSocket):</strong> разработала фронтенд внутренней системы управления заказами, курьерами и логистикой с нуля.</li>
|
||||
<li>Спроектировала ролевую модель авторизации (RBAC) с разграничением между отделами (логистика/заказы) и объяснила принцип работы бэкенд-разработчику, опираясь на профильное ИБ-образование.</li>
|
||||
<li>Реализовала график курьеров на базе календаря vue-cal с drag-and-drop — заменил ручной ввод расписания SQL-запросами разработчиков, теперь логистика управляет графиком самостоятельно.</li>
|
||||
<li>Спроектировала интерфейс списка заказов с фильтрацией по 9 параметрам, заменивший неудобные таблицы 1С; используется логистикой, клиентским отделом, техподдержкой и разработчиками.</li>
|
||||
<li><strong>«РМК» (legacy-проект, Vue 3, WebSocket, Playwright):</strong> исправила ~20 багов, включая сложный кейс с утечкой реактивной переменной в глобальном классе биндинга клавиш.</li>
|
||||
<li>Внедрила WebSocket-оповещения в реальном времени с индикацией прочтения — впервые видно, сколько аптек онлайн; внедрила Playwright E2E-тесты и Feature Branching в Git, обучив коллегу с 11-летним стажем.</li>
|
||||
<li><strong>«Здесь Аптека» (Flutter, Android/iOS):</strong> исправила более 20 багов; диагностировала и устранила причину неоткрывающегося раздела «Избранное» (переход на постраничную загрузку).</li>
|
||||
<li>Портировала приложения «Здесь Сотрудник» и «Здесь Чат» с Android на iOS: перепривязала Firebase push-токены, собрала и отправила билды в App Store.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (заказная разработка для НИЦ «БиоХимТех» при ТулГУ)</div>
|
||||
<ul>
|
||||
<li>Реализовала фронтенд-часть (Vue.js) программно-вычислительного комплекса контроля концентрации загрязняющих веществ в атмосфере.</li>
|
||||
<li>Работала с серверной частью на Node.js.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
<div class="project">
|
||||
<span class="project-title">Хакатон TulaHack.Digital <Web & Mobile><span class="project-badge">Май 2024</span></span>
|
||||
<div class="project-desc">Мобильное веб-приложение «Книга рецептов» с фильтрацией по имеющимся ингредиентам и личным кабинетом для подсчёта калорий.</div>
|
||||
<div class="project-tech">Vue 3, Ionic Capacitor, Express, Node.js, MongoDB</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации <span class="edu-org">— Тульский государственный университет (ТулГУ)</span></span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-desc">Институт прикладной математики и компьютерных наук. Специальность: информационная безопасность автоматизированных систем. Профильное образование напрямую применено при проектировании RBAC-модели авторизации в коммерческом проекте.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений <span class="cert-org">— Цифровая кафедра ТулГУ</span></span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Volga Summer Camp <span class="cert-org">— МИСИС и ЯрГУ им. П.Г. Демидова</span></span>
|
||||
<span class="cert-year">2021</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span><span class="skill-category">Языки программирования:</span> <span class="skill-item">JavaScript, TypeScript, HTML5/CSS3, Dart</span></span>
|
||||
<span><span class="skill-category">Frontend:</span> <span class="skill-item">Vue 3, Composition API, Vue Router, Pinia, Vue 2 (базово), Tailwind CSS, shadcn-vue, TanStack Table</span></span>
|
||||
<span><span class="skill-category">Тестирование:</span> <span class="skill-item">Vitest, Storybook, Playwright (E2E)</span></span>
|
||||
<span><span class="skill-category">Сеть:</span> <span class="skill-item">REST API, WebSocket/WSS</span></span>
|
||||
<span><span class="skill-category">Backend (ознакомительный уровень):</span> <span class="skill-item">Node.js, Express, MongoDB</span></span>
|
||||
<span><span class="skill-category">DevOps:</span> <span class="skill-item">Git, GitLab, CI/CD, Linux (пользовательский уровень)</span></span>
|
||||
<span><span class="skill-category">Mobile:</span> <span class="skill-item">Flutter, BLoC, Clean Architecture, Firebase Cloud Messaging</span></span>
|
||||
<span><span class="skill-category">Языки:</span> <span class="skill-item">Русский — родной, Английский — B1</span></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,310 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header { margin-bottom: 20px; }
|
||||
|
||||
.header h1 {
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a { color: #555; text-decoration: none; }
|
||||
.contact-row .separator { color: #ccc; }
|
||||
|
||||
.section { margin-bottom: 18px; }
|
||||
|
||||
.section-title {
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text { font-size: 11px; line-height: 1.7; color: #2f2f2f; }
|
||||
|
||||
a { white-space: nowrap; }
|
||||
|
||||
.competencies-grid { display: flex; flex-wrap: wrap; gap: 8px; }
|
||||
|
||||
.competency-tag {
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job { margin-bottom: 14px; }
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company { font-size: 12.5px; font-weight: 600; color: hsl(270, 70%, 45%); }
|
||||
.job-period { font-size: 10.5px; color: #777; white-space: nowrap; }
|
||||
.job-role { font-size: 11px; font-weight: 600; color: #333; margin-bottom: 6px; }
|
||||
.job-location { font-size: 10px; color: #888; }
|
||||
.job ul { padding-left: 18px; margin-top: 6px; }
|
||||
.job li { font-size: 10.5px; line-height: 1.6; color: #333; margin-bottom: 4px; }
|
||||
.job li strong { font-weight: 600; }
|
||||
|
||||
.project { margin-bottom: 12px; }
|
||||
.project-title { font-size: 11.5px; font-weight: 600; color: hsl(270, 70%, 45%); }
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
.project-desc { font-size: 10.5px; color: #444; margin-top: 3px; line-height: 1.55; }
|
||||
.project-tech { font-size: 9.5px; color: #888; margin-top: 3px; }
|
||||
|
||||
.edu-item { margin-bottom: 8px; }
|
||||
.edu-header { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
|
||||
.edu-title { font-weight: 600; font-size: 11px; color: #333; }
|
||||
.edu-org { color: hsl(270, 70%, 45%); font-weight: 500; }
|
||||
.edu-year { font-size: 10px; color: #777; white-space: nowrap; }
|
||||
.edu-desc { font-size: 10px; color: #666; margin-top: 2px; line-height: 1.5; }
|
||||
|
||||
.cert-table { display: table; width: 100%; }
|
||||
.cert-item { display: table-row; }
|
||||
.cert-item > * { display: table-cell; vertical-align: baseline; padding-bottom: 6px; }
|
||||
.cert-title { font-size: 10.5px; font-weight: 500; color: #333; }
|
||||
.cert-org { color: hsl(270, 70%, 45%); white-space: nowrap; }
|
||||
.cert-year { font-size: 10px; color: #777; white-space: nowrap; text-align: right; width: 44px; }
|
||||
|
||||
.skills-grid { display: flex; flex-wrap: wrap; gap: 6px 14px; }
|
||||
.skill-item { font-size: 10.5px; color: #444; }
|
||||
.skill-category { font-weight: 600; color: #333; font-size: 10.5px; }
|
||||
|
||||
@media print {
|
||||
body { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
|
||||
.page { padding: 0 0.18in 0 0; }
|
||||
}
|
||||
|
||||
.header, .edu-item, .cert-item, .competency-tag, .skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title, .job-company, .job-role, .project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+7 (950) 906-61-62">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">@vbleroy</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (полностью удалённо)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">Профессиональное резюме</div>
|
||||
<div class="summary-text">Frontend-разработчик с продакшн-опытом на Vue 3 (Composition API, TypeScript, Pinia, Vue Router). С ноября 2024 разработала с нуля фронтенд внутренней системы управления заказами и логистикой для сети из ~1200 точек, включая проектирование ролевой модели авторизации (RBAC) совместно с бэкенд-командой. Уверенно ориентируюсь в экосистеме Vue независимо от поколения тулинга (Pinia/Vite и Vuex/Webpack — единые паттерны state management и сборки). Тестовое покрытие через Vitest и Storybook. В компании без штатного дизайнера регулярно беру на себя UI-редизайн.</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">Ключевые компетенции</div>
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">Vue 3 / Composition API</span>
|
||||
<span class="competency-tag">TypeScript</span>
|
||||
<span class="competency-tag">Pinia (state management)</span>
|
||||
<span class="competency-tag">Vue Router</span>
|
||||
<span class="competency-tag">Vite / сборка проекта</span>
|
||||
<span class="competency-tag">Git / GitLab</span>
|
||||
<span class="competency-tag">Vitest / Storybook</span>
|
||||
<span class="competency-tag">Адаптивная вёрстка / UI-редизайн</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Frontend-разработчик</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 точек по России · команда фронтенда — 4 человека</div>
|
||||
<ul>
|
||||
<li>Разработала с нуля фронтенд системы управления заказами, курьерами и логистикой «Здесь ЕКОМ»: Vue 3, Composition API, TypeScript, Pinia, Vue Router, Vite, Vitest, Storybook.</li>
|
||||
<li>Спроектировала ролевую модель авторизации (RBAC) с разграничением между отделами (логистика/заказы) — самостоятельно спроектировала архитектуру доступа и объяснила бэкенд-команде принцип работы, опираясь на профильное ИБ-образование.</li>
|
||||
<li>Реализовала интерфейс списка заказов с фильтрацией по 9 параметрам, заменив неудобные таблицы 1С — используется логистикой, клиентским отделом, техподдержкой и разработчиками.</li>
|
||||
<li>Спроектировала интерфейс графика курьеров на базе календаря vue-cal с drag-and-drop — отдел логистики полностью самостоятельно управляет расписанием.</li>
|
||||
<li>Самостоятельно спроектировала и внедрила UI-редизайны (кнопка «Избранное», компоновка блока информации о заказе) в компании без штатного дизайнера.</li>
|
||||
<li>Внедрила Feature Branching в Git (GitLab) и обучила коллегу с 11-летним стажем — команда перешла на стабильные еженедельные релизы.</li>
|
||||
<li>Диагностировала и исправила продакшн-баг с загрузкой раздела «Избранное» — реализовала постраничную загрузку вместо загрузки всех товаров одним запросом.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (учебная/заказная разработка)</div>
|
||||
<div class="job-location">Заказная разработка для НИЦ «БиоХимТех» при ТулГУ</div>
|
||||
<ul>
|
||||
<li>Реализовала фронтенд-часть программно-вычислительного комплекса на Vue.js.</li>
|
||||
<li>Работала с серверной частью на Node.js.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь ЕКОМ» — система управления заказами и логистикой<span class="project-badge">Vue 3 / TypeScript</span></span>
|
||||
<div class="project-desc">Frontend с нуля для аптечной сети из ~1200 точек: RBAC-авторизация, drag-and-drop календарь курьеров, фильтрация заказов по 9 параметрам.</div>
|
||||
<div class="project-tech">Vue 3, Composition API, TypeScript, Pinia, Vue Router, Vite, Vitest, Storybook</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">Хакатон TulaHack.Digital — «Книга рецептов»<span class="project-badge">Vue 3 / Node.js</span></span>
|
||||
<div class="project-desc">Fullstack-прототип за хакатон: фронтенд на Vue 3/Ionic Capacitor и backend на Express/Node.js с MongoDB.</div>
|
||||
<div class="project-tech">Vue 3, Ionic Capacitor, Express, Node.js, MongoDB</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">НИЦ «БиоХимТех» при ТулГУ — заказная разработка<span class="project-badge">Vue.js / Node.js</span></span>
|
||||
<div class="project-desc">Программно-вычислительный комплекс контроля концентрации загрязняющих веществ — фронтенд на Vue.js.</div>
|
||||
<div class="project-tech">Vue.js, Node.js</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации — Информационная безопасность автоматизированных систем</span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-org">Тульский государственный университет (ТулГУ), Институт прикладной математики и компьютерных наук</div>
|
||||
<div class="edu-desc">Профильное образование в ИБ применено на коммерческом проекте — проектирование RBAC в «Здесь ЕКОМ».</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений</span>
|
||||
<span class="cert-org">Цифровая кафедра ТулГУ</span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Volga Summer Camp</span>
|
||||
<span class="cert-org">МИСИС и ЯрГУ им. П.Г. Демидова</span>
|
||||
<span class="cert-year">2021</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span class="skill-item"><span class="skill-category">Frontend:</span> Vue 3, Composition API, Vue Router, Pinia, Vue 2 (базово), TypeScript, Tailwind CSS, TanStack Table</span>
|
||||
<span class="skill-item"><span class="skill-category">Сборка и тулинг:</span> Vite, npm, ESLint, Prettier</span>
|
||||
<span class="skill-item"><span class="skill-category">Тестирование:</span> Vitest, Storybook, Playwright (E2E)</span>
|
||||
<span class="skill-item"><span class="skill-category">Сеть:</span> REST API, WebSocket/WSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Backend (ознакомительный уровень):</span> Node.js, Express, MongoDB</span>
|
||||
<span class="skill-item"><span class="skill-category">Инструменты:</span> Git, GitLab, CI/CD, Feature Branching</span>
|
||||
<span class="skill-item"><span class="skill-category">Безопасность:</span> RBAC-проектирование, модели авторизации</span>
|
||||
<span class="skill-item"><span class="skill-category">Быстро осваиваю:</span> Nuxt, GraphQL, Docker, любые CSS-подходы и UI-киты</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки:</span> Русский (родной), Английский (B1)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,308 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header { margin-bottom: 20px; }
|
||||
|
||||
.header h1 {
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a { color: #555; text-decoration: none; }
|
||||
.contact-row .separator { color: #ccc; }
|
||||
|
||||
.section { margin-bottom: 18px; }
|
||||
|
||||
.section-title {
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text { font-size: 11px; line-height: 1.7; color: #2f2f2f; }
|
||||
|
||||
a { white-space: nowrap; }
|
||||
|
||||
.competencies-grid { display: flex; flex-wrap: wrap; gap: 8px; }
|
||||
|
||||
.competency-tag {
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job { margin-bottom: 14px; }
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company { font-size: 12.5px; font-weight: 600; color: hsl(270, 70%, 45%); }
|
||||
.job-period { font-size: 10.5px; color: #777; white-space: nowrap; }
|
||||
.job-role { font-size: 11px; font-weight: 600; color: #333; margin-bottom: 6px; }
|
||||
.job-location { font-size: 10px; color: #888; }
|
||||
.job ul { padding-left: 18px; margin-top: 6px; }
|
||||
.job li { font-size: 10.5px; line-height: 1.6; color: #333; margin-bottom: 4px; }
|
||||
.job li strong { font-weight: 600; }
|
||||
|
||||
.project { margin-bottom: 12px; }
|
||||
.project-title { font-size: 11.5px; font-weight: 600; color: hsl(270, 70%, 45%); }
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
.project-desc { font-size: 10.5px; color: #444; margin-top: 3px; line-height: 1.55; }
|
||||
.project-tech { font-size: 9.5px; color: #888; margin-top: 3px; }
|
||||
|
||||
.edu-item { margin-bottom: 8px; }
|
||||
.edu-header { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
|
||||
.edu-title { font-weight: 600; font-size: 11px; color: #333; }
|
||||
.edu-org { color: hsl(270, 70%, 45%); font-weight: 500; }
|
||||
.edu-year { font-size: 10px; color: #777; white-space: nowrap; }
|
||||
.edu-desc { font-size: 10px; color: #666; margin-top: 2px; line-height: 1.5; }
|
||||
|
||||
.cert-table { display: table; width: 100%; }
|
||||
.cert-item { display: table-row; }
|
||||
.cert-item > * { display: table-cell; vertical-align: baseline; padding-bottom: 6px; }
|
||||
.cert-title { font-size: 10.5px; font-weight: 500; color: #333; }
|
||||
.cert-org { color: hsl(270, 70%, 45%); white-space: nowrap; }
|
||||
.cert-year { font-size: 10px; color: #777; white-space: nowrap; text-align: right; width: 44px; }
|
||||
|
||||
.skills-grid { display: flex; flex-wrap: wrap; gap: 6px 14px; }
|
||||
.skill-item { font-size: 10.5px; color: #444; }
|
||||
.skill-category { font-weight: 600; color: #333; font-size: 10.5px; }
|
||||
|
||||
@media print {
|
||||
body { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
|
||||
.page { padding: 0 0.18in 0 0; }
|
||||
}
|
||||
|
||||
.header, .edu-item, .cert-item, .competency-tag, .skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title, .job-company, .job-role, .project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+7 (950) 906-61-62">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">@vbleroy</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (удалённо / гибрид, готова к офису в СПб при дневном графике)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">О себе</div>
|
||||
<div class="summary-text">Frontend-разработчик с продакшн-опытом на Vue 3 (Composition API, TypeScript, Pinia). С нуля разработала фронтенд внутренней системы управления заказами и логистикой для сети из ~1200 точек, включая переиспользуемые UI-компоненты, множественную фильтрацию данных и архитектурное решение по разграничению доступа (RBAC) для ~20 пользователей в офисе. Веду legacy-проект на Vue 3 параллельно с новым продуктом, с опытом код-ревью, unit- и E2E-тестирования (Vitest, Playwright) и организации процессов разработки (Git Flow, версионирование). Образование в информационной безопасности пригодилось на практике при проектировании моделей доступа.</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">Vue 3 / Composition API</span>
|
||||
<span class="competency-tag">TypeScript</span>
|
||||
<span class="competency-tag">Переиспользуемые UI-компоненты</span>
|
||||
<span class="competency-tag">Архитектура и проектирование решений</span>
|
||||
<span class="competency-tag">RBAC / модели авторизации</span>
|
||||
<span class="competency-tag">SPA / REST API</span>
|
||||
<span class="competency-tag">Vitest / Playwright (unit + E2E)</span>
|
||||
<span class="competency-tag">Организация процессов разработки</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Frontend-разработчик (Vue 3)</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 точек по России · команда фронтенда — 4 человека</div>
|
||||
<ul>
|
||||
<li>Разработала с нуля фронтенд системы управления заказами, курьерами и логистикой «Здесь ЕКОМ»: Vue 3, Composition API, TypeScript, Pinia, REST API, WebSocket (WSS) — переиспользуемые компоненты для нескольких отделов компании.</li>
|
||||
<li>Спроектировала ролевую модель авторизации (RBAC) с разграничением между отделами (логистика/заказы) — самостоятельно спроектировала архитектуру доступа и объяснила бэкенд-команде принцип работы, опираясь на профильное ИБ-образование.</li>
|
||||
<li>Реализовала интерфейс списка заказов с фильтрацией по 9 параметрам (TanStack Table) — заменил неудобные таблицы 1С; используется логистикой, клиентским отделом, техподдержкой и разработчиками.</li>
|
||||
<li>Спроектировала интерактивный график курьеров на базе drag-and-drop календаря (vue-cal) — заменил ручной ввод расписания SQL-запросами разработчиков.</li>
|
||||
<li>Параллельно веду legacy-проект «РМК» (Vue 3, WebSocket), раскатанный на 1200 точках: исправила ~20 багов, внедрила Playwright E2E-тесты и Feature Branching в Git — обучила коллегу с 11-летним стажем, команда перешла на стабильные еженедельные релизы.</li>
|
||||
<li>Внедрила Vitest unit-тесты и Storybook для компонентов ЕКОМ, покрывая позитивные и негативные сценарии.</li>
|
||||
<li>Активно участвую в планировании спринтов и анализе бэклога — помогла восстановить постановку целей на полгода/год в команде.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (учебная/заказная разработка)</div>
|
||||
<div class="job-location">Заказная разработка для НИЦ «БиоХимТех» при ТулГУ</div>
|
||||
<ul>
|
||||
<li>Реализовала фронтенд-часть программно-вычислительного комплекса на Vue.js.</li>
|
||||
<li>Работала с серверной частью на Node.js.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь ЕКОМ» — система управления заказами и логистикой<span class="project-badge">Vue 3 / TypeScript</span></span>
|
||||
<div class="project-desc">Frontend с нуля для сети из ~1200 точек: переиспользуемые компоненты, RBAC-авторизация, множественная фильтрация данных, drag-and-drop календарь.</div>
|
||||
<div class="project-tech">Vue 3, Composition API, TypeScript, Pinia, Vue Router, TanStack Table, WebSocket, Vite, Vitest, Storybook</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«РМК» — legacy-проект (касса/первостольник)<span class="project-badge">Vue 3 / Playwright</span></span>
|
||||
<div class="project-desc">Рефакторинг и стабилизация legacy-кода: сложный баг с замыканием реактивной переменной, WebSocket real-time оповещения, внедрение E2E-тестов и процессов версионирования.</div>
|
||||
<div class="project-tech">Vue 3, WebSocket, Playwright, Git Flow</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">Хакатон TulaHack.Digital — «Книга рецептов»<span class="project-badge">Vue 3 / Node.js</span></span>
|
||||
<div class="project-desc">Fullstack-прототип: фронтенд на Vue 3/Ionic Capacitor, backend на Express/Node.js с MongoDB.</div>
|
||||
<div class="project-tech">Vue 3, Ionic Capacitor, Express, Node.js, MongoDB</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации — Информационная безопасность автоматизированных систем</span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-org">Тульский государственный университет (ТулГУ), Институт прикладной математики и компьютерных наук</div>
|
||||
<div class="edu-desc">Профильное образование в ИБ применено на коммерческом проекте — проектирование RBAC в «Здесь ЕКОМ».</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений</span>
|
||||
<span class="cert-org">Цифровая кафедра ТулГУ</span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Volga Summer Camp</span>
|
||||
<span class="cert-org">МИСИС и ЯрГУ им. П.Г. Демидова</span>
|
||||
<span class="cert-year">2021</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span class="skill-item"><span class="skill-category">Frontend:</span> Vue 3, Composition API, Vue Router, Pinia, TypeScript, TanStack Table, Tailwind CSS, shadcn</span>
|
||||
<span class="skill-item"><span class="skill-category">SPA / Сеть:</span> REST API, WebSocket/WSS, интеграция с внешними API</span>
|
||||
<span class="skill-item"><span class="skill-category">Тестирование:</span> Vitest (unit), Storybook, Playwright (E2E), позитивные/негативные сценарии</span>
|
||||
<span class="skill-item"><span class="skill-category">Архитектура:</span> RBAC-проектирование, переиспользуемые компоненты, Feature Branching</span>
|
||||
<span class="skill-item"><span class="skill-category">Backend (практический опыт):</span> Node.js, Express, MongoDB</span>
|
||||
<span class="skill-item"><span class="skill-category">Инструменты:</span> Vite, Git, GitLab, CI/CD, ESLint, Prettier</span>
|
||||
<span class="skill-item"><span class="skill-category">Процессы:</span> код-ревью, менторство, спринт-планирование, версионирование сборок</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки:</span> Русский (родной), Английский (B1)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,308 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header { margin-bottom: 20px; }
|
||||
|
||||
.header h1 {
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a { color: #555; text-decoration: none; }
|
||||
.contact-row .separator { color: #ccc; }
|
||||
|
||||
.section { margin-bottom: 18px; }
|
||||
|
||||
.section-title {
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text { font-size: 11px; line-height: 1.7; color: #2f2f2f; }
|
||||
|
||||
a { white-space: nowrap; }
|
||||
|
||||
.competencies-grid { display: flex; flex-wrap: wrap; gap: 8px; }
|
||||
|
||||
.competency-tag {
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job { margin-bottom: 14px; }
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company { font-size: 12.5px; font-weight: 600; color: hsl(270, 70%, 45%); }
|
||||
.job-period { font-size: 10.5px; color: #777; white-space: nowrap; }
|
||||
.job-role { font-size: 11px; font-weight: 600; color: #333; margin-bottom: 6px; }
|
||||
.job-location { font-size: 10px; color: #888; }
|
||||
.job ul { padding-left: 18px; margin-top: 6px; }
|
||||
.job li { font-size: 10.5px; line-height: 1.6; color: #333; margin-bottom: 4px; }
|
||||
.job li strong { font-weight: 600; }
|
||||
|
||||
.project { margin-bottom: 12px; }
|
||||
.project-title { font-size: 11.5px; font-weight: 600; color: hsl(270, 70%, 45%); }
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
.project-desc { font-size: 10.5px; color: #444; margin-top: 3px; line-height: 1.55; }
|
||||
.project-tech { font-size: 9.5px; color: #888; margin-top: 3px; }
|
||||
|
||||
.edu-item { margin-bottom: 8px; }
|
||||
.edu-header { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
|
||||
.edu-title { font-weight: 600; font-size: 11px; color: #333; }
|
||||
.edu-org { color: hsl(270, 70%, 45%); font-weight: 500; }
|
||||
.edu-year { font-size: 10px; color: #777; white-space: nowrap; }
|
||||
.edu-desc { font-size: 10px; color: #666; margin-top: 2px; line-height: 1.5; }
|
||||
|
||||
.cert-table { display: table; width: 100%; }
|
||||
.cert-item { display: table-row; }
|
||||
.cert-item > * { display: table-cell; vertical-align: baseline; padding-bottom: 6px; }
|
||||
.cert-title { font-size: 10.5px; font-weight: 500; color: #333; }
|
||||
.cert-org { color: hsl(270, 70%, 45%); white-space: nowrap; }
|
||||
.cert-year { font-size: 10px; color: #777; white-space: nowrap; text-align: right; width: 44px; }
|
||||
|
||||
.skills-grid { display: flex; flex-wrap: wrap; gap: 6px 14px; }
|
||||
.skill-item { font-size: 10.5px; color: #444; }
|
||||
.skill-category { font-weight: 600; color: #333; font-size: 10.5px; }
|
||||
|
||||
@media print {
|
||||
body { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
|
||||
.page { padding: 0 0.18in 0 0; }
|
||||
}
|
||||
|
||||
.header, .edu-item, .cert-item, .competency-tag, .skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title, .job-company, .job-role, .project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+7 (950) 906-61-62">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">@vbleroy</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (удалённо)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">Профессиональное резюме</div>
|
||||
<div class="summary-text">Frontend-разработчик с продакшн-опытом на Vue 3 (Composition API, TypeScript, Pinia, Tailwind CSS). Разработала с нуля фронтенд внутренней e-commerce/логистической системы («Здесь ЕКОМ») для сети из ~1200 точек: REST API + WebSocket-интеграция с backend, ролевая модель авторизации (RBAC), drag-and-drop интерфейсы. Параллельно ведёт legacy Vue 3-проект («РМК»), включая модернизацию и внедрение E2E-тестирования — практический опыт совмещения нового стека с поддержкой существующего кода. Профильное образование в информационной безопасности дало нестандартный для frontend-разработчика взгляд на проектирование моделей доступа.</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">Ключевые компетенции</div>
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">Vue 3 / Composition API</span>
|
||||
<span class="competency-tag">TypeScript / Pinia</span>
|
||||
<span class="competency-tag">Tailwind CSS</span>
|
||||
<span class="competency-tag">REST API / JSON</span>
|
||||
<span class="competency-tag">WebSocket / real-time</span>
|
||||
<span class="competency-tag">RBAC / архитектура доступа</span>
|
||||
<span class="competency-tag">Legacy-модернизация</span>
|
||||
<span class="competency-tag">Vitest / Playwright E2E</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Frontend-разработчик</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 точек по России · e-commerce + внутренние системы · команда фронтенда — 4 человека</div>
|
||||
<ul>
|
||||
<li>Разработала с нуля фронтенд-архитектуру системы управления заказами, курьерами и логистикой «Здесь ЕКОМ»: Vue 3, Composition API, TypeScript, Pinia, Vue Router, Tailwind CSS, REST API, WebSocket (WSS).</li>
|
||||
<li>Спроектировала ролевую модель авторизации (RBAC) с разграничением между отделами (логистика/заказы) — самостоятельно спроектировала архитектуру доступа и объяснила бэкенд-команде принцип работы, опираясь на профильное ИБ-образование.</li>
|
||||
<li>Реализовала drag-and-drop интерфейс графика курьеров (vue-cal) и список заказов с фильтрацией по 9 параметрам — заменил ручной ввод SQL-запросами и неудобные таблицы 1С; используется логистикой, клиентским отделом, техподдержкой и разработчиками.</li>
|
||||
<li>Параллельно ведёт legacy Vue 3-проект «РМК»: внедрила WebSocket-оповещения в реальном времени, исправила ~20 багов, внедрила Playwright E2E-тесты и версионирование сборок.</li>
|
||||
<li>Внедрила Feature Branching в Git (GitLab) и обучила коллегу с 11-летним стажем — команда перешла на стабильные еженедельные релизы, код-ревью вошло в постоянную практику.</li>
|
||||
<li>Внедрила Vitest unit-тесты и Storybook для компонентов Vue — покрытие позитивными и негативными сценариями.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (учебная/заказная разработка)</div>
|
||||
<div class="job-location">Заказная разработка для НИЦ «БиоХимТех» при ТулГУ</div>
|
||||
<ul>
|
||||
<li>Реализовала фронтенд-часть программно-вычислительного комплекса на Vue.js.</li>
|
||||
<li>Работала с серверной частью на Node.js.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь ЕКОМ» — e-commerce/логистическая система<span class="project-badge">Vue 3 / Composition API</span></span>
|
||||
<div class="project-desc">Frontend с нуля для аптечной сети из ~1200 точек: RBAC-авторизация, REST + WebSocket-интеграция с backend, drag-and-drop календарь курьеров, TanStack Table.</div>
|
||||
<div class="project-tech">Vue 3, TypeScript, Pinia, Tailwind CSS, shadcn-vue, WebSocket, Vite, Vitest</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«РМК» — модернизация legacy-проекта<span class="project-badge">Vue 3 / Playwright</span></span>
|
||||
<div class="project-desc">Поддержка и модернизация legacy Vue 3-интерфейса параллельно с разработкой нового продукта: real-time WebSocket-оповещения, E2E-тестирование, версионирование сборок.</div>
|
||||
<div class="project-tech">Vue 3, WebSocket, Playwright</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">Хакатон TulaHack.Digital — «Книга рецептов»<span class="project-badge">Vue 3 / Node.js / MongoDB</span></span>
|
||||
<div class="project-desc">Fullstack-прототип за хакатон: фронтенд на Vue 3/Ionic Capacitor и backend на Express/Node.js с MongoDB.</div>
|
||||
<div class="project-tech">Vue 3, Ionic Capacitor, Express, Node.js, MongoDB</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации — Информационная безопасность автоматизированных систем</span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-org">Тульский государственный университет (ТулГУ), Институт прикладной математики и компьютерных наук</div>
|
||||
<div class="edu-desc">Профильное образование в ИБ применено на коммерческом проекте — проектирование RBAC в «Здесь ЕКОМ».</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений</span>
|
||||
<span class="cert-org">Цифровая кафедра ТулГУ</span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Volga Summer Camp</span>
|
||||
<span class="cert-org">МИСИС и ЯрГУ им. П.Г. Демидова</span>
|
||||
<span class="cert-year">2021</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span class="skill-item"><span class="skill-category">Frontend:</span> Vue 3, Composition API, Vue Router, Pinia, TypeScript, Tailwind CSS, shadcn-vue, TanStack Table</span>
|
||||
<span class="skill-item"><span class="skill-category">Сеть:</span> REST API, WebSocket/WSS, JSON</span>
|
||||
<span class="skill-item"><span class="skill-category">Тестирование:</span> Vitest, Storybook, Playwright (E2E)</span>
|
||||
<span class="skill-item"><span class="skill-category">Инструменты:</span> Vite, Git, GitLab, Feature Branching, CI/CD, ESLint, Prettier</span>
|
||||
<span class="skill-item"><span class="skill-category">Backend (ознакомительный уровень):</span> Node.js, Express, MongoDB</span>
|
||||
<span class="skill-item"><span class="skill-category">Безопасность:</span> RBAC-проектирование, модели авторизации и разграничения доступа</span>
|
||||
<span class="skill-item"><span class="skill-category">Быстро осваиваю:</span> Nuxt, GraphQL, Docker</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки:</span> Русский (родной), Английский (B1)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,470 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a {
|
||||
color: #555;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.contact-row .separator {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text {
|
||||
font-size: 11px;
|
||||
line-height: 1.7;
|
||||
color: #2f2f2f;
|
||||
}
|
||||
|
||||
a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.competencies-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.competency-tag {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job {
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.job-period {
|
||||
font-size: 10.5px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.job-role {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.job-location {
|
||||
font-size: 10px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.job ul {
|
||||
padding-left: 18px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.job li {
|
||||
font-size: 10.5px;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job li strong {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.project {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.project-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.project-desc {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
margin-top: 3px;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.project-tech {
|
||||
font-size: 9.5px;
|
||||
color: #888;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.edu-item {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.edu-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.edu-title {
|
||||
font-weight: 600;
|
||||
font-size: 11px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.edu-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.edu-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.edu-desc {
|
||||
font-size: 10px;
|
||||
color: #666;
|
||||
margin-top: 2px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.cert-table {
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cert-item {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.cert-item > * {
|
||||
display: table-cell;
|
||||
vertical-align: baseline;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
.cert-title {
|
||||
font-size: 10.5px;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.cert-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cert-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
text-align: right;
|
||||
width: 44px;
|
||||
}
|
||||
|
||||
.skills-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px 14px;
|
||||
}
|
||||
|
||||
.skill-item {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.skill-category {
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
font-size: 10.5px;
|
||||
}
|
||||
|
||||
@media print {
|
||||
body {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
.page {
|
||||
padding: 0 0.18in 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.header,
|
||||
.edu-item,
|
||||
.cert-item,
|
||||
.competency-tag,
|
||||
.skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title,
|
||||
.job-company,
|
||||
.job-role,
|
||||
.project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+7 (950) 906-61-62">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">@vbleroy</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (удалённо, вся Россия)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">О себе</div>
|
||||
<div class="summary-text">Frontend/Fullstack-разработчик (Middle) с продакшн-опытом на Vue 3 (Composition API, TypeScript) и практическим опытом Node.js/Express (хакатон, учебный проект). С ноября 2024 года разработала с нуля фронтенд внутренней enterprise-системы для сети из ~1200 точек по России, включая проектирование клиент-серверного взаимодействия и ролевой модели авторизации (RBAC). Компонентное и реактивное мышление переносится между фреймворками — доказала это быстрым самостоятельным освоением Flutter с нуля до продакшена. Покрываю критичные сценарии unit- и e2e-тестами (Vitest, Playwright). Образование в информационной безопасности пригодилось на практике при проектировании модели доступа и авторизации.</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">Ключевые компетенции</div>
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">JavaScript / TypeScript</span>
|
||||
<span class="competency-tag">Vue 3 (компонентный подход)</span>
|
||||
<span class="competency-tag">Node.js / Express</span>
|
||||
<span class="competency-tag">Git / GitLab / CI/CD</span>
|
||||
<span class="competency-tag">Vitest (аналог Jest)</span>
|
||||
<span class="competency-tag">RBAC / модели авторизации</span>
|
||||
<span class="competency-tag">REST API & WebSocket</span>
|
||||
<span class="competency-tag">Английский B1 (документация)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Frontend / Flutter-разработчик</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 точек по России · команда фронтенда — 4 человека</div>
|
||||
<ul>
|
||||
<li>Разработала с нуля фронтенд enterprise-системы управления заказами, курьерами и логистикой «Здесь ЕКОМ»: компонентная архитектура на Vue 3, Composition API, TypeScript.</li>
|
||||
<li>Спроектировала ролевую модель авторизации (RBAC) с разграничением между отделами — самостоятельно спроектировала и объяснила бэкенд-команде принцип работы модели, опираясь на профильное ИБ-образование.</li>
|
||||
<li>Внедрила Vitest — прямой концептуальный аналог Jest/Jasmine — для unit-тестов компонентов, и Playwright для e2e-тестирования на legacy-проекте «РМК», покрывая позитивные и негативные сценарии.</li>
|
||||
<li>Внедрила WebSocket для интеграции клиент-сервер и оповещений в реальном времени между внутренними системами.</li>
|
||||
<li>Внедрила Feature Branching в Git (GitLab) и обучила коллегу с 11-летним стажем работе с CI/CD-процессом — команда перешла на стабильные еженедельные релизы.</li>
|
||||
<li>Спроектировала интерфейс списка заказов с фильтрацией по 9 параметрам для ~1200 точек, заменивший неудобные таблицы 1С — используется 4 отделами ежедневно.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (учебная/заказная разработка)</div>
|
||||
<div class="job-location">Заказная разработка для НИЦ «БиоХимТех» при ТулГУ</div>
|
||||
<ul>
|
||||
<li>Реализовала фронтенд-часть программно-вычислительного комплекса на Vue.js.</li>
|
||||
<li>Работала с серверной частью на <strong>Node.js</strong>.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">Хакатон TulaHack.Digital — «Книга рецептов»<span class="project-badge">Vue 3 / Express / Node.js / MongoDB</span></span>
|
||||
<div class="project-desc">Fullstack-прототип за ограниченное время хакатона: backend на Express/MongoDB + frontend на Vue 3/Ionic Capacitor. Фильтрация рецептов по имеющимся ингредиентам, личный кабинет с подсчётом калорий.</div>
|
||||
<div class="project-tech">Vue 3, Ionic Capacitor, Express, Node.js, MongoDB</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь ЕКОМ» — enterprise-система управления заказами и логистикой<span class="project-badge">Vue 3 / TypeScript</span></span>
|
||||
<div class="project-desc">Frontend разработан с нуля для сети из ~1200 точек: RBAC-авторизация, интеграция клиент-сервер через WebSocket, фильтрация заказов по 9 параметрам.</div>
|
||||
<div class="project-tech">Vue 3, Composition API, TypeScript, WebSocket, Vite, Vitest</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«РМК» (касса/первостольник) — legacy-проект<span class="project-badge">Vue 3 / CI/CD</span></span>
|
||||
<div class="project-desc">Внедрила Playwright e2e-тесты, Feature Branching в Git, стабилизировала релизный цикл до еженедельного.</div>
|
||||
<div class="project-tech">Vue 3, WebSocket (WSS), Playwright, Git/GitLab CI/CD</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации — Информационная безопасность автоматизированных систем</span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-org">Тульский государственный университет (ТулГУ), Институт прикладной математики и компьютерных наук</div>
|
||||
<div class="edu-desc">Профильное образование в ИБ применено на коммерческом проекте — проектирование ролевой модели авторизации (RBAC) в «Здесь ЕКОМ».</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений</span>
|
||||
<span class="cert-org">Цифровая кафедра ТулГУ</span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Volga Summer Camp</span>
|
||||
<span class="cert-org">МИСИС и ЯрГУ им. П.Г. Демидова</span>
|
||||
<span class="cert-year">2021</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span class="skill-item"><span class="skill-category">Языки программирования:</span> JavaScript, TypeScript, Dart</span>
|
||||
<span class="skill-item"><span class="skill-category">Frontend:</span> Vue 3, Composition API, Vue Router, Pinia, Tailwind CSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Backend:</span> Node.js, Express, MongoDB (проектная практика)</span>
|
||||
<span class="skill-item"><span class="skill-category">Тестирование:</span> Vitest (аналог Jest/Jasmine), Storybook, Playwright (e2e)</span>
|
||||
<span class="skill-item"><span class="skill-category">Сеть:</span> REST API, WebSocket/WSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Инструменты:</span> Vite, Git, GitLab, CI/CD, ESLint, Prettier</span>
|
||||
<span class="skill-item"><span class="skill-category">Безопасность:</span> RBAC-проектирование, модели авторизации и разграничения доступа</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки:</span> Русский (родной), Английский (B1 — чтение технической документации)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,309 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header { margin-bottom: 20px; }
|
||||
|
||||
.header h1 {
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a { color: #555; text-decoration: none; }
|
||||
.contact-row .separator { color: #ccc; }
|
||||
|
||||
.section { margin-bottom: 18px; }
|
||||
|
||||
.section-title {
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text { font-size: 11px; line-height: 1.7; color: #2f2f2f; }
|
||||
|
||||
a { white-space: nowrap; }
|
||||
|
||||
.competencies-grid { display: flex; flex-wrap: wrap; gap: 8px; }
|
||||
|
||||
.competency-tag {
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job { margin-bottom: 14px; }
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company { font-size: 12.5px; font-weight: 600; color: hsl(270, 70%, 45%); }
|
||||
.job-period { font-size: 10.5px; color: #777; white-space: nowrap; }
|
||||
.job-role { font-size: 11px; font-weight: 600; color: #333; margin-bottom: 6px; }
|
||||
.job-location { font-size: 10px; color: #888; }
|
||||
.job ul { padding-left: 18px; margin-top: 6px; }
|
||||
.job li { font-size: 10.5px; line-height: 1.6; color: #333; margin-bottom: 4px; }
|
||||
.job li strong { font-weight: 600; }
|
||||
|
||||
.project { margin-bottom: 12px; }
|
||||
.project-title { font-size: 11.5px; font-weight: 600; color: hsl(270, 70%, 45%); }
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
.project-desc { font-size: 10.5px; color: #444; margin-top: 3px; line-height: 1.55; }
|
||||
.project-tech { font-size: 9.5px; color: #888; margin-top: 3px; }
|
||||
|
||||
.edu-item { margin-bottom: 8px; }
|
||||
.edu-header { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
|
||||
.edu-title { font-weight: 600; font-size: 11px; color: #333; }
|
||||
.edu-org { color: hsl(270, 70%, 45%); font-weight: 500; }
|
||||
.edu-year { font-size: 10px; color: #777; white-space: nowrap; }
|
||||
.edu-desc { font-size: 10px; color: #666; margin-top: 2px; line-height: 1.5; }
|
||||
|
||||
.cert-table { display: table; width: 100%; }
|
||||
.cert-item { display: table-row; }
|
||||
.cert-item > * { display: table-cell; vertical-align: baseline; padding-bottom: 6px; }
|
||||
.cert-title { font-size: 10.5px; font-weight: 500; color: #333; }
|
||||
.cert-org { color: hsl(270, 70%, 45%); white-space: nowrap; }
|
||||
.cert-year { font-size: 10px; color: #777; white-space: nowrap; text-align: right; width: 44px; }
|
||||
|
||||
.skills-grid { display: flex; flex-wrap: wrap; gap: 6px 14px; }
|
||||
.skill-item { font-size: 10.5px; color: #444; }
|
||||
.skill-category { font-weight: 600; color: #333; font-size: 10.5px; }
|
||||
|
||||
@media print {
|
||||
body { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
|
||||
.page { padding: 0 0.18in 0 0; }
|
||||
}
|
||||
|
||||
.header, .edu-item, .cert-item, .competency-tag, .skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title, .job-company, .job-role, .project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+7 (950) 906-61-62">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">@vbleroy</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (удалённо / гибрид, готова к офису в СПб при дневном графике)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">О себе</div>
|
||||
<div class="summary-text">Fullstack-разработчик мобильных приложений (Flutter + Node.js) с продакшн-опытом на стыке frontend и backend. Разработала с нуля внутреннюю систему управления заказами и логистикой для сети из ~1200 точек: спроектировала клиент-серверное REST/WebSocket-взаимодействие и ролевую модель авторизации (RBAC) для ~20 пользователей в офисе, совместно с бэкенд-командой. Веду мобильное приложение на Flutter (Android/iOS), включая порт Android→iOS с интеграцией Firebase. Есть практический опыт полного fullstack-цикла (Vue 3 + Express + MongoDB) на хакатон- и университетском проектах.</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">Ключевые компетенции</div>
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">Flutter / Dart</span>
|
||||
<span class="competency-tag">Node.js / Express / REST API</span>
|
||||
<span class="competency-tag">TypeScript / Vue 3</span>
|
||||
<span class="competency-tag">WebSocket / real-time интеграции</span>
|
||||
<span class="competency-tag">RBAC / модели авторизации</span>
|
||||
<span class="competency-tag">Git / GitLab</span>
|
||||
<span class="competency-tag">iOS-релизы (App Store)</span>
|
||||
<span class="competency-tag">Vitest / Playwright</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Fullstack / Flutter-разработчик</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 точек по России · команда фронтенда — 4 человека</div>
|
||||
<ul>
|
||||
<li>Спроектировала ролевую модель авторизации (RBAC) с разграничением между отделами (логистика/заказы) для внутренней системы «Здесь ЕКОМ» — самостоятельно спроектировала архитектуру доступа и объяснила бэкенд-команде принцип работы, опираясь на профильное ИБ-образование.</li>
|
||||
<li>Внедрила WebSocket (WSS) для оповещений в реальном времени в связке с бэкенд-разработчиком на legacy-проекте «РМК» (раскатан на 1200 точках) — впервые видно, сколько аптек онлайн и кто/когда прочитал оповещение.</li>
|
||||
<li>Разработала с нуля фронтенд системы управления заказами, курьерами и логистикой «Здесь ЕКОМ»: Vue 3, Composition API, TypeScript, Pinia, REST API, WebSocket (WSS).</li>
|
||||
<li>Портировала мобильные приложения «Здесь Сотрудник» и «Здесь Чат» с Android на iOS: перепривязала Firebase push-токены, собрала iOS-билды, отправила на ревью в App Store.</li>
|
||||
<li>Исправила более 20 багов в приложении «Здесь Аптека» (Flutter), включая диагностику и постраничную загрузку для раздела «Избранное».</li>
|
||||
<li>Внедрила Feature Branching в Git (GitLab) и обучила коллегу с 11-летним стажем — команда перешла на стабильные еженедельные релизы.</li>
|
||||
<li>Внедрила Vitest unit-тесты и Playwright E2E-тесты, покрывая позитивные и негативные сценарии.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (учебная/заказная разработка)</div>
|
||||
<div class="job-location">Заказная разработка для НИЦ «БиоХимТех» при ТулГУ</div>
|
||||
<ul>
|
||||
<li>Реализовала фронтенд-часть программно-вычислительного комплекса на Vue.js.</li>
|
||||
<li>Работала с серверной частью на Node.js.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">Хакатон TulaHack.Digital — «Книга рецептов»<span class="project-badge">Vue 3 / Node.js / MongoDB</span></span>
|
||||
<div class="project-desc">Fullstack-прототип за хакатон: фронтенд на Vue 3/Ionic Capacitor и backend на Express/Node.js с MongoDB — фильтрация рецептов по ингредиентам и личный кабинет подсчёта калорий.</div>
|
||||
<div class="project-tech">Vue 3, Ionic Capacitor, Express, Node.js, MongoDB</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь ЕКОМ» — система управления заказами и логистикой<span class="project-badge">Vue 3 / WebSocket</span></span>
|
||||
<div class="project-desc">Frontend с нуля для аптечной сети из ~1200 точек: RBAC-авторизация, WebSocket-интеграция с backend, drag-and-drop календарь курьеров.</div>
|
||||
<div class="project-tech">Vue 3, TypeScript, Pinia, WebSocket, Vite, Vitest</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь Аптека» — мобильное приложение<span class="project-badge">Flutter</span></span>
|
||||
<div class="project-desc">Диагностика и фикс продакшн-багов, редизайн ключевых экранов (Android/iOS).</div>
|
||||
<div class="project-tech">Flutter, Dart, Firebase Cloud Messaging</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации — Информационная безопасность автоматизированных систем</span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-org">Тульский государственный университет (ТулГУ), Институт прикладной математики и компьютерных наук</div>
|
||||
<div class="edu-desc">Профильное образование в ИБ применено на коммерческом проекте — проектирование RBAC в «Здесь ЕКОМ».</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений</span>
|
||||
<span class="cert-org">Цифровая кафедра ТулГУ</span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Volga Summer Camp</span>
|
||||
<span class="cert-org">МИСИС и ЯрГУ им. П.Г. Демидова</span>
|
||||
<span class="cert-year">2021</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span class="skill-item"><span class="skill-category">Mobile:</span> Flutter, Dart, BLoC, Clean Architecture, Firebase Cloud Messaging, iOS-релизы</span>
|
||||
<span class="skill-item"><span class="skill-category">Frontend:</span> Vue 3, Composition API, Vue Router, Pinia, TypeScript, TanStack Table</span>
|
||||
<span class="skill-item"><span class="skill-category">Backend (практический опыт):</span> Node.js, Express, MongoDB, REST API интеграция</span>
|
||||
<span class="skill-item"><span class="skill-category">Сеть:</span> REST API, WebSocket/WSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Тестирование:</span> Vitest, Storybook, Playwright (E2E)</span>
|
||||
<span class="skill-item"><span class="skill-category">Инструменты:</span> Vite, Git, GitLab, CI/CD, ESLint, Prettier</span>
|
||||
<span class="skill-item"><span class="skill-category">Безопасность:</span> RBAC-проектирование, модели авторизации и разграничения доступа</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки:</span> Русский (родной), Английский (B1)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,307 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header { margin-bottom: 20px; }
|
||||
|
||||
.header h1 {
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a { color: #555; text-decoration: none; }
|
||||
.contact-row .separator { color: #ccc; }
|
||||
|
||||
.section { margin-bottom: 18px; }
|
||||
|
||||
.section-title {
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text { font-size: 11px; line-height: 1.7; color: #2f2f2f; }
|
||||
|
||||
a { white-space: nowrap; }
|
||||
|
||||
.competencies-grid { display: flex; flex-wrap: wrap; gap: 8px; }
|
||||
|
||||
.competency-tag {
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job { margin-bottom: 14px; }
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company { font-size: 12.5px; font-weight: 600; color: hsl(270, 70%, 45%); }
|
||||
.job-period { font-size: 10.5px; color: #777; white-space: nowrap; }
|
||||
.job-role { font-size: 11px; font-weight: 600; color: #333; margin-bottom: 6px; }
|
||||
.job-location { font-size: 10px; color: #888; }
|
||||
.job ul { padding-left: 18px; margin-top: 6px; }
|
||||
.job li { font-size: 10.5px; line-height: 1.6; color: #333; margin-bottom: 4px; }
|
||||
.job li strong { font-weight: 600; }
|
||||
|
||||
.project { margin-bottom: 12px; }
|
||||
.project-title { font-size: 11.5px; font-weight: 600; color: hsl(270, 70%, 45%); }
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
.project-desc { font-size: 10.5px; color: #444; margin-top: 3px; line-height: 1.55; }
|
||||
.project-tech { font-size: 9.5px; color: #888; margin-top: 3px; }
|
||||
|
||||
.edu-item { margin-bottom: 8px; }
|
||||
.edu-header { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
|
||||
.edu-title { font-weight: 600; font-size: 11px; color: #333; }
|
||||
.edu-org { color: hsl(270, 70%, 45%); font-weight: 500; }
|
||||
.edu-year { font-size: 10px; color: #777; white-space: nowrap; }
|
||||
.edu-desc { font-size: 10px; color: #666; margin-top: 2px; line-height: 1.5; }
|
||||
|
||||
.cert-table { display: table; width: 100%; }
|
||||
.cert-item { display: table-row; }
|
||||
.cert-item > * { display: table-cell; vertical-align: baseline; padding-bottom: 6px; }
|
||||
.cert-title { font-size: 10.5px; font-weight: 500; color: #333; }
|
||||
.cert-org { color: hsl(270, 70%, 45%); white-space: nowrap; }
|
||||
.cert-year { font-size: 10px; color: #777; white-space: nowrap; text-align: right; width: 44px; }
|
||||
|
||||
.skills-grid { display: flex; flex-wrap: wrap; gap: 6px 14px; }
|
||||
.skill-item { font-size: 10.5px; color: #444; }
|
||||
.skill-category { font-weight: 600; color: #333; font-size: 10.5px; }
|
||||
|
||||
@media print {
|
||||
body { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
|
||||
.page { padding: 0 0.18in 0 0; }
|
||||
}
|
||||
|
||||
.header, .edu-item, .cert-item, .competency-tag, .skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title, .job-company, .job-role, .project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+7 (950) 906-61-62">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">@vbleroy</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (удалённо / гибрид)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">О себе</div>
|
||||
<div class="summary-text">Mobile-разработчик (Flutter) с коммерческим продакшн-опытом: BLoC/Cubit, Service Locator (DI), чистая архитектура (Clean Architecture). Единственный разработчик в команде, самостоятельно доведший два приложения от Android-only до полноценного релиза на iOS — перепривязка Firebase push-уведомлений, сборка iOS-билдов и прохождение проверки App Store. На основном мобильном продукте («Здесь Аптека») диагностирую и проактивно исправляю продакшн-баги (постраничная загрузка данных, доступность интерфейса), а также беру на себя UI-редизайн в команде без штатного дизайнера. Параллельно веду Vue 3-продукт с нуля, что даёт широкий кросс-платформенный кругозор.</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">Flutter / Dart</span>
|
||||
<span class="competency-tag">BLoC / Cubit</span>
|
||||
<span class="competency-tag">Service Locator (DI)</span>
|
||||
<span class="competency-tag">Clean Architecture</span>
|
||||
<span class="competency-tag">Android → iOS портирование</span>
|
||||
<span class="competency-tag">Firebase Cloud Messaging</span>
|
||||
<span class="competency-tag">App Store релизы</span>
|
||||
<span class="competency-tag">Кросс-платформенная разработка</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Flutter/Frontend-разработчик</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 точек по России · команда фронтенда — 4 человека</div>
|
||||
<ul>
|
||||
<li>Портировала два внутренних приложения («Здесь Сотрудник», «Здесь Чат») с Android-only на кросс-платформенные: перепривязала Firebase push-уведомления на iOS и Android, собрала iOS-билды, спроектировала app-иконки и отправила приложения на проверку в App Store.</li>
|
||||
<li>На основном мобильном продукте «Здесь Аптека» (Flutter, Android/iOS) исправила более 20 багов, включая проблемы с фильтрами поиска и неадаптированные элементы интерфейса — большинство найдено проактивно, до жалоб пользователей.</li>
|
||||
<li>Диагностировала причину жалоб на не открывающийся раздел «Избранное»: все товары загружались одним запросом; реализовала постраничную загрузку — жалобы прекратились.</li>
|
||||
<li>Спроектировала и внедрила редизайн кнопки «Избранное» и блока информации о заказе — в компании нет штатного дизайнера, проектированием UI занималась самостоятельно.</li>
|
||||
<li>Параллельно разработала с нуля фронтенд системы управления заказами и логистикой «Здесь ЕКОМ» (Vue 3, TypeScript, WebSocket) — спроектировала ролевую модель авторизации (RBAC) для ~20 пользователей в офисе, опираясь на профильное ИБ-образование.</li>
|
||||
<li>Веду legacy-проект «РМК» (Vue 3, WebSocket), раскатанный на 1200 точках: внедрила Playwright E2E-тесты, Feature Branching в Git — команда перешла на стабильные еженедельные релизы.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (учебная/заказная разработка)</div>
|
||||
<div class="job-location">Заказная разработка для НИЦ «БиоХимТех» при ТулГУ</div>
|
||||
<ul>
|
||||
<li>Реализовала фронтенд-часть программно-вычислительного комплекса на Vue.js.</li>
|
||||
<li>Работала с серверной частью на Node.js.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь Сотрудник» / «Здесь Чат» — портирование Android → iOS<span class="project-badge">Flutter</span></span>
|
||||
<div class="project-desc">Полный цикл кросс-платформенного релиза: адаптация билдов под iOS, перепривязка Firebase push-токенов, сборка и отправка на проверку в App Store, проектирование app-иконок.</div>
|
||||
<div class="project-tech">Flutter, Dart, Firebase Cloud Messaging, App Store Connect</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь Аптека» — мобильное приложение<span class="project-badge">Flutter, BLoC</span></span>
|
||||
<div class="project-desc">Багфиксинг (20+ проактивно найденных дефектов), диагностика проблем производительности (постраничная загрузка), UI-редизайн без выделенного дизайнера.</div>
|
||||
<div class="project-tech">Flutter, BLoC, Service Locator (DI), Clean Architecture</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь ЕКОМ» — система управления заказами и логистикой<span class="project-badge">Vue 3 / TypeScript</span></span>
|
||||
<div class="project-desc">Frontend с нуля для сети из ~1200 точек: RBAC-авторизация, множественная фильтрация данных, drag-and-drop календарь курьеров.</div>
|
||||
<div class="project-tech">Vue 3, Composition API, TypeScript, Pinia, WebSocket, Vite</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации — Информационная безопасность автоматизированных систем</span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-org">Тульский государственный университет (ТулГУ), Институт прикладной математики и компьютерных наук</div>
|
||||
<div class="edu-desc">Профильное образование в ИБ применено на коммерческом проекте — проектирование RBAC в «Здесь ЕКОМ».</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений</span>
|
||||
<span class="cert-org">Цифровая кафедра ТулГУ</span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Volga Summer Camp</span>
|
||||
<span class="cert-org">МИСИС и ЯрГУ им. П.Г. Демидова</span>
|
||||
<span class="cert-year">2021</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span class="skill-item"><span class="skill-category">Mobile:</span> Flutter, Dart, BLoC, Cubit, Service Locator (DI), Clean Architecture, Firebase Cloud Messaging</span>
|
||||
<span class="skill-item"><span class="skill-category">iOS-релизы:</span> сборка и релиз iOS-билдов, портирование Android → iOS, App Store Connect</span>
|
||||
<span class="skill-item"><span class="skill-category">Frontend (web):</span> Vue 3, Composition API, TypeScript, Pinia</span>
|
||||
<span class="skill-item"><span class="skill-category">Сеть:</span> REST API, WebSocket/WSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Тестирование:</span> Vitest (unit), Playwright (E2E)</span>
|
||||
<span class="skill-item"><span class="skill-category">Инструменты:</span> Git, GitLab, CI/CD, Vite</span>
|
||||
<span class="skill-item"><span class="skill-category">Безопасность:</span> проектирование моделей авторизации и разграничения доступа (RBAC)</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки:</span> Русский (родной), Английский (B1)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,472 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a {
|
||||
color: #555;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.contact-row .separator {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text {
|
||||
font-size: 11px;
|
||||
line-height: 1.7;
|
||||
color: #2f2f2f;
|
||||
}
|
||||
|
||||
a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.competencies-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.competency-tag {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job {
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.job-period {
|
||||
font-size: 10.5px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.job-role {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.job-location {
|
||||
font-size: 10px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.job ul {
|
||||
padding-left: 18px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.job li {
|
||||
font-size: 10.5px;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job li strong {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.project {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.project-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.project-desc {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
margin-top: 3px;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.project-tech {
|
||||
font-size: 9.5px;
|
||||
color: #888;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.edu-item {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.edu-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.edu-title {
|
||||
font-weight: 600;
|
||||
font-size: 11px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.edu-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.edu-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.edu-desc {
|
||||
font-size: 10px;
|
||||
color: #666;
|
||||
margin-top: 2px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.cert-table {
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cert-item {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.cert-item > * {
|
||||
display: table-cell;
|
||||
vertical-align: baseline;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
.cert-title {
|
||||
font-size: 10.5px;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.cert-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cert-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
text-align: right;
|
||||
width: 44px;
|
||||
}
|
||||
|
||||
.skills-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px 14px;
|
||||
}
|
||||
|
||||
.skill-item {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.skill-category {
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
font-size: 10.5px;
|
||||
}
|
||||
|
||||
@media print {
|
||||
body {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
.page {
|
||||
padding: 0 0.18in 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.header,
|
||||
.edu-item,
|
||||
.cert-item,
|
||||
.competency-tag,
|
||||
.skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title,
|
||||
.job-company,
|
||||
.job-role,
|
||||
.project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+7 (950) 906-61-62">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">@vbleroy</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (удалённо / гибрид, офис в Москве)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">О себе</div>
|
||||
<div class="summary-text">Frontend-разработчик (Middle) с продакшн-опытом на Vue 3 (Composition API, TypeScript, Pinia). Разработала с нуля внутреннюю систему управления заказами и логистикой для сети из ~1200 точек, включая проектирование клиент-серверного взаимодействия с бэкендом и ролевой модели авторизации (RBAC). Работала с REST API и WebSocket для оповещений в реальном времени, покрывала критичные сценарии тестами (Vitest, Playwright). Образование в информационной безопасности пригодилось на практике при проектировании модели доступа и авторизации.</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">Ключевые компетенции</div>
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">Vue 3 / Composition API</span>
|
||||
<span class="competency-tag">TypeScript</span>
|
||||
<span class="competency-tag">REST API & WebSocket</span>
|
||||
<span class="competency-tag">RBAC / модели авторизации</span>
|
||||
<span class="competency-tag">Git / GitLab</span>
|
||||
<span class="competency-tag">Vitest / Playwright</span>
|
||||
<span class="competency-tag">UI/UX-редизайн</span>
|
||||
<span class="competency-tag">Feature Branching</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Frontend / Flutter-разработчик</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 точек по России · команда фронтенда — 4 человека</div>
|
||||
<ul>
|
||||
<li>Спроектировала ролевую модель авторизации (RBAC) для ~20 пользователей в офисе с разграничением между отделами (логистика/заказы) для внутренней системы «Здесь ЕКОМ» — самостоятельно спроектировала и объяснила бэкенд-команде принцип работы модели, опираясь на профильное ИБ-образование.</li>
|
||||
<li>Разработала с нуля фронтенд системы управления заказами, курьерами и логистикой «Здесь ЕКОМ»: Vue 3, Composition API, TypeScript, Pinia, Vue Router, TanStack Table, WebSocket (WSS).</li>
|
||||
<li>Спроектировала и реализовала интерфейс списка заказов с фильтрацией по 9 параметрам, заменивший неудобные таблицы 1С — используется логистикой, клиентским отделом, техподдержкой и разработчиками.</li>
|
||||
<li>Реализовала график курьеров на базе календаря vue-cal с drag-and-drop — заменила ручной ввод расписания SQL-запросами разработчиков, отдел логистики теперь управляет графиком самостоятельно.</li>
|
||||
<li>Внедрила WebSocket для оповещений в реальном времени на legacy-проекте «РМК» (раскатан на 1200 точках) — впервые видно, сколько аптек онлайн, и кто и когда прочитал оповещение.</li>
|
||||
<li>Исправила порядка 20 багов на «РМК», включая сложный кейс с замыканием реактивной переменной в глобальном классе работы с клавиатурой.</li>
|
||||
<li>Внедрила Playwright E2E-тесты и Vitest unit-тесты, покрывая позитивные и негативные сценарии.</li>
|
||||
<li>Внедрила Feature Branching в Git (GitLab) и обучила коллегу с 11-летним стажем — команда перешла на стабильные еженедельные релизы, сократилось число «зависших» фич.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (учебная/заказная разработка)</div>
|
||||
<div class="job-location">Заказная разработка для НИЦ «БиоХимТех» при ТулГУ</div>
|
||||
<ul>
|
||||
<li>Реализовала фронтенд-часть программно-вычислительного комплекса по контролю максимальной приземной концентрации загрязняющих веществ в атмосфере на Vue.js.</li>
|
||||
<li>Работала с серверной частью на Node.js.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь ЕКОМ» — система управления заказами и логистикой<span class="project-badge">Vue 3 / TypeScript</span></span>
|
||||
<div class="project-desc">Frontend разработан с нуля для аптечной сети из ~1200 точек: RBAC-авторизация, drag-and-drop календарь курьеров, фильтрация заказов по 9 параметрам.</div>
|
||||
<div class="project-tech">Vue 3, Composition API, TypeScript, Pinia, Vue Router, TanStack Table, WebSocket, Vite, Vitest, Storybook</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">«РМК» (касса/первостольник) — legacy-проект<span class="project-badge">Vue 3 / WebSocket</span></span>
|
||||
<div class="project-desc">Поддержка и развитие legacy-кодовой базы: внедрила WebSocket-оповещения в реальном времени, Playwright E2E-тесты, Feature Branching в Git.</div>
|
||||
<div class="project-tech">Vue 3, WebSocket (WSS), Playwright</div>
|
||||
</div>
|
||||
|
||||
<div class="project">
|
||||
<span class="project-title">Хакатон TulaHack.Digital — «Книга рецептов»<span class="project-badge">Vue 3 / Ionic</span></span>
|
||||
<div class="project-desc">Мобильное веб-приложение с фильтрацией по имеющимся в холодильнике ингредиентам и личным кабинетом для подсчёта потреблённых за день калорий.</div>
|
||||
<div class="project-tech">Vue 3, Ionic Capacitor, Express, Node.js, MongoDB</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации — Информационная безопасность автоматизированных систем</span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-org">Тульский государственный университет (ТулГУ), Институт прикладной математики и компьютерных наук</div>
|
||||
<div class="edu-desc">Профильное образование в ИБ применено на коммерческом проекте — проектирование ролевой модели авторизации (RBAC) в «Здесь ЕКОМ».</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений</span>
|
||||
<span class="cert-org">Цифровая кафедра ТулГУ</span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Volga Summer Camp</span>
|
||||
<span class="cert-org">МИСИС и ЯрГУ им. П.Г. Демидова</span>
|
||||
<span class="cert-year">2021</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span class="skill-item"><span class="skill-category">Frontend:</span> Vue 3, Composition API, Vue Router, Pinia, TypeScript, Tailwind CSS, TanStack Table</span>
|
||||
<span class="skill-item"><span class="skill-category">Тестирование:</span> Vitest, Storybook, Playwright (E2E)</span>
|
||||
<span class="skill-item"><span class="skill-category">Сеть:</span> REST API, WebSocket/WSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Инструменты:</span> Vite, Git, GitLab, CI/CD, ESLint, Prettier</span>
|
||||
<span class="skill-item"><span class="skill-category">Mobile:</span> Flutter, Dart, BLoC, Clean Architecture</span>
|
||||
<span class="skill-item"><span class="skill-category">Backend (ознакомительно):</span> Node.js, Express, MongoDB</span>
|
||||
<span class="skill-item"><span class="skill-category">Безопасность:</span> RBAC-проектирование, модели авторизации и разграничения доступа</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки:</span> Русский (родной), Английский (B1)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,453 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a {
|
||||
color: #555;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.contact-row .separator {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text {
|
||||
font-size: 11px;
|
||||
line-height: 1.7;
|
||||
color: #2f2f2f;
|
||||
}
|
||||
|
||||
a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.competencies-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.competency-tag {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job {
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.job-period {
|
||||
font-size: 10.5px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.job-role {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.job-location {
|
||||
font-size: 10px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.job ul {
|
||||
padding-left: 18px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.job li {
|
||||
font-size: 10.5px;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job li strong {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.project {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.project-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.project-desc {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
margin-top: 3px;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.project-tech {
|
||||
font-size: 9.5px;
|
||||
color: #888;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.edu-item {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.edu-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.edu-title {
|
||||
font-weight: 600;
|
||||
font-size: 11px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.edu-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.edu-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.edu-desc {
|
||||
font-size: 10px;
|
||||
color: #666;
|
||||
margin-top: 2px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.cert-table {
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cert-item {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.cert-item > * {
|
||||
display: table-cell;
|
||||
vertical-align: baseline;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
.cert-title {
|
||||
font-size: 10.5px;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.cert-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cert-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
text-align: right;
|
||||
width: 44px;
|
||||
}
|
||||
|
||||
.skills-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px 14px;
|
||||
}
|
||||
|
||||
.skill-item {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.skill-category {
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
font-size: 10.5px;
|
||||
}
|
||||
|
||||
@media print {
|
||||
body {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
.page {
|
||||
padding: 0 0.18in 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.header,
|
||||
.edu-item,
|
||||
.cert-item,
|
||||
.competency-tag,
|
||||
.skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title,
|
||||
.job-company,
|
||||
.job-role,
|
||||
.project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+79509066162">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">@vbleroy (Telegram)</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (удалённо)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">О себе</div>
|
||||
<div class="summary-text">Frontend-разработчик с коммерческим опытом на Vue.js (Vue 3, Composition API, TypeScript, Vue Router, Pinia) — веду фронтенд внутренней системы управления заказами и логистикой с нуля, параллельно поддерживаю legacy-проект на Vue 3 с HTML5/CSS3-версткой и Git-флоу. Быстро адаптируюсь к разным конфигурациям Vue-экосистемы: от современного стека (Vite, Pinia) до классического (Vuex, Webpack), встречающегося в агентских проектах. Профильное образование в информационной безопасности дало опыт проектирования ролевых моделей авторизации (RBAC). В команде без штатного дизайнера самостоятельно веду UI/UX-задачи.</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">Ключевые компетенции</div>
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">Vue.js / Vue 3</span>
|
||||
<span class="competency-tag">Vue Router</span>
|
||||
<span class="competency-tag">Composition API</span>
|
||||
<span class="competency-tag">TypeScript</span>
|
||||
<span class="competency-tag">HTML5 / CSS3 / Flexbox</span>
|
||||
<span class="competency-tag">Git</span>
|
||||
<span class="competency-tag">Pinia (state management)</span>
|
||||
<span class="competency-tag">UI/UX редизайн</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Frontend-разработчик (Vue 3 / Flutter)</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 аптек по всей России · Удалённо</div>
|
||||
<ul>
|
||||
<li>Разработала с нуля фронтенд внутренней системы управления заказами, курьерами и логистикой («Здесь ЕКОМ») на <strong>Vue 3, Composition API, TypeScript, Vue Router, Pinia</strong> — обслуживает сеть из ~1200 аптек по всей стране.</li>
|
||||
<li>Спроектировала и объяснила бэкенд-команде ролевую модель авторизации (RBAC) с разграничением доступа между отделами, опираясь на профильное образование в информационной безопасности.</li>
|
||||
<li>Заменила ручной ввод расписания курьеров SQL-запросами на интерактивный график с drag-and-drop (vue-cal, HTML5/CSS3) — отдел логистики теперь управляет графиком самостоятельно.</li>
|
||||
<li>Поддерживаю legacy-проект кассы (РМК) на <strong>Vue 3</strong>: внедрила WebSocket-оповещения в реальном времени, исправила порядка 20 багов, ввела Feature Branching в <strong>Git</strong> (GitLab) и обучила команду стабильному еженедельному релизному циклу.</li>
|
||||
<li>Самостоятельно веду UI/UX-задачи в команде без штатного дизайнера: редизайн интерфейсных блоков (кнопки, компоновка информации), отрисовка иконок приложений.</li>
|
||||
<li>Параллельно разрабатываю мобильное приложение на Flutter (Android/iOS): более 20 исправленных багов, оптимизация загрузки данных, портирование приложений с Android на iOS и отправка на проверку в App Store.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (заказная разработка для НИЦ «БиоХимТех»)</div>
|
||||
<div class="job-location">Тула, Россия</div>
|
||||
<ul>
|
||||
<li>Реализовала frontend-часть программно-вычислительного комплекса по контролю максимальной приземной концентрации загрязняющих веществ в атмосфере на <strong>Vue.js</strong>.</li>
|
||||
<li>Работала с серверной частью на <strong>Node.js</strong>.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
<div class="project">
|
||||
<span class="project-title">Хакатон TulaHack.Digital <Web & Mobile><span class="project-badge">Май 2024</span></span>
|
||||
<div class="project-desc">Мобильное веб-приложение «Книга рецептов» с фильтрацией по имеющимся в холодильнике ингредиентам и личным кабинетом для подсчёта потреблённых за день калорий.</div>
|
||||
<div class="project-tech">Vue 3, Ionic Capacitor, Express, Node.js, MongoDB</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации — Информационная безопасность автоматизированных систем</span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-org">Тульский государственный университет (ТулГУ), Институт прикладной математики и компьютерных наук</div>
|
||||
<div class="edu-desc">Профильное образование в ИБ напрямую применено на коммерческом проекте — при проектировании модели авторизации (RBAC) для ~20 пользователей в ЕКОМ.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений</span>
|
||||
<span class="cert-org">Цифровая кафедра ТулГУ</span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span class="skill-item"><span class="skill-category">Frontend:</span> Vue 3, Composition API, Vue Router, Pinia, Vue 2 (базово), HTML5/CSS3, Tailwind CSS, shadcn/shadcn-vue, TanStack Table</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки программирования:</span> JavaScript, TypeScript, HTML5/CSS3, Dart</span>
|
||||
<span class="skill-item"><span class="skill-category">Сборка и тулинг:</span> Vite, npm, ESLint, Prettier, Git, GitLab</span>
|
||||
<span class="skill-item"><span class="skill-category">Тестирование:</span> Vitest, Storybook, Playwright (E2E)</span>
|
||||
<span class="skill-item"><span class="skill-category">Сеть:</span> REST API, WebSocket/WSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Backend (ознакомительный уровень):</span> Node.js, Express, MongoDB</span>
|
||||
<span class="skill-item"><span class="skill-category">Mobile:</span> Flutter, BLoC, Clean Architecture, Firebase Cloud Messaging</span>
|
||||
<span class="skill-item"><span class="skill-category">Быстро осваиваю:</span> Nuxt, GraphQL, Docker, любые CSS-подходы (BEM/OOCSS), любые UI-киты и дизайн-системы</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки:</span> Русский (родной), Английский (B1)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
@@ -0,0 +1,457 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a {
|
||||
color: #555;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.contact-row .separator {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text {
|
||||
font-size: 11px;
|
||||
line-height: 1.7;
|
||||
color: #2f2f2f;
|
||||
}
|
||||
|
||||
a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.competencies-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.competency-tag {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job {
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.job-period {
|
||||
font-size: 10.5px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.job-role {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.job-location {
|
||||
font-size: 10px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.job ul {
|
||||
padding-left: 18px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.job li {
|
||||
font-size: 10.5px;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job li strong {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.project {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.project-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.project-desc {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
margin-top: 3px;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.project-tech {
|
||||
font-size: 9.5px;
|
||||
color: #888;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.edu-item {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.edu-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.edu-title {
|
||||
font-weight: 600;
|
||||
font-size: 11px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.edu-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.edu-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.edu-desc {
|
||||
font-size: 10px;
|
||||
color: #666;
|
||||
margin-top: 2px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.cert-table {
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cert-item {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.cert-item > * {
|
||||
display: table-cell;
|
||||
vertical-align: baseline;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
.cert-title {
|
||||
font-size: 10.5px;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.cert-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cert-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
text-align: right;
|
||||
width: 44px;
|
||||
}
|
||||
|
||||
.skills-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px 14px;
|
||||
}
|
||||
|
||||
.skill-item {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.skill-category {
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
font-size: 10.5px;
|
||||
}
|
||||
|
||||
@media print {
|
||||
body {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
.page {
|
||||
padding: 0 0.18in 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.header,
|
||||
.edu-item,
|
||||
.cert-item,
|
||||
.competency-tag,
|
||||
.skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title,
|
||||
.job-company,
|
||||
.job-role,
|
||||
.project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+79509066162">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">@vbleroy (Telegram)</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (удалённо/гибрид)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">О себе</div>
|
||||
<div class="summary-text">Flutter-разработчик с коммерческим продакшн-опытом (Android/iOS): BLoC, Clean Architecture, Firebase Cloud Messaging, релизы в App Store. Единственный разработчик в команде, самостоятельно портировавшая два приложения с Android на iOS. Параллельно веду фронтенд на Vue 3 (Composition API, TypeScript, Pinia) — веб-опыт напрямую переносится на архитектуру Flutter Web. Работаю с Git/GitLab, CI/CD-процессами, покрываю сценарии unit- и e2e-тестами (Vitest, Playwright). Быстро учусь новому — самостоятельно освоила Flutter с нуля до продакшена.</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">Ключевые компетенции</div>
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">Flutter</span>
|
||||
<span class="competency-tag">Dart</span>
|
||||
<span class="competency-tag">BLoC</span>
|
||||
<span class="competency-tag">Clean Architecture</span>
|
||||
<span class="competency-tag">REST API</span>
|
||||
<span class="competency-tag">Firebase</span>
|
||||
<span class="competency-tag">Git / CI-CD</span>
|
||||
<span class="competency-tag">Unit / E2E тестирование</span>
|
||||
<span class="competency-tag">Адаптивный UI (Web)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Flutter / Frontend-разработчик</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 аптек по всей России · Удалённо</div>
|
||||
<ul>
|
||||
<li>Веду мобильное приложение «Здесь Аптека» на <strong>Flutter</strong> (Android/iOS): исправила более 20 багов, спроектировала архитектуру на <strong>BLoC</strong> и <strong>Clean Architecture</strong>.</li>
|
||||
<li>Портировала приложения «Здесь Сотрудник» и «Здесь Чат» с Android на iOS: перепривязала push-токены <strong>Firebase Cloud Messaging</strong> на обеих платформах, собрала iOS-билды и отправила сборки на проверку в App Store.</li>
|
||||
<li>Диагностировала причину жалоб на не открывающийся раздел «Избранное» (загрузка одним тяжёлым запросом) и реализовала постраничную загрузку через <strong>REST API</strong> — жалобы прекратились.</li>
|
||||
<li>Параллельно разработала с нуля фронтенд внутренней веб-системы («Здесь ЕКОМ») на <strong>Vue 3, Composition API, TypeScript, Pinia</strong> — адаптивный интерфейс, drag-and-drop календарь, RBAC для ~20 пользователей.</li>
|
||||
<li>Внедрила unit-тесты (<strong>Vitest</strong>) и e2e-тесты (<strong>Playwright</strong>) на legacy-проекте «РМК», покрывая позитивные и негативные сценарии.</li>
|
||||
<li>Внедрила <strong>Git</strong> Feature Branching (GitLab) и обучила коллегу с 11-летним стажем работе с системой версионирования — команда перешла на стабильные еженедельные релизы (CI/CD-процесс).</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (заказная разработка для НИЦ «БиоХимТех»)</div>
|
||||
<div class="job-location">Тула, Россия</div>
|
||||
<ul>
|
||||
<li>Реализовала frontend-часть программно-вычислительного комплекса по контролю максимальной приземной концентрации загрязняющих веществ в атмосфере на <strong>Vue.js</strong>.</li>
|
||||
<li>Работала с серверной частью на <strong>Node.js</strong>.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь Аптека» — мобильное приложение<span class="project-badge">Flutter / Android+iOS</span></span>
|
||||
<div class="project-desc">Продакшн-приложение сети из ~1200 точек. Багфиксы, редизайн UI, портирование на iOS, интеграция Firebase Cloud Messaging.</div>
|
||||
<div class="project-tech">Flutter, Dart, BLoC, Firebase, REST API</div>
|
||||
</div>
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь ЕКОМ» — система управления заказами и логистикой<span class="project-badge">Vue 3 / Web</span></span>
|
||||
<div class="project-desc">Адаптивный веб-интерфейс с нуля: RBAC-авторизация, drag-and-drop календарь, фильтрация заказов по 9 параметрам.</div>
|
||||
<div class="project-tech">Vue 3, TypeScript, Pinia, Vite, Vitest</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации — Информационная безопасность автоматизированных систем</span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-org">Тульский государственный университет (ТулГУ), Институт прикладной математики и компьютерных наук</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений</span>
|
||||
<span class="cert-org">Цифровая кафедра ТулГУ</span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span class="skill-item"><span class="skill-category">Mobile:</span> Flutter, BLoC, Service Locator (DI), Flutter Router, Clean Architecture, Firebase Cloud Messaging, сборка и релиз iOS-билдов</span>
|
||||
<span class="skill-item"><span class="skill-category">Frontend/Web:</span> Vue 3, Composition API, Pinia, Tailwind CSS, адаптивная вёрстка</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки программирования:</span> Dart, JavaScript, TypeScript, HTML5/CSS3</span>
|
||||
<span class="skill-item"><span class="skill-category">Сеть:</span> REST API, WebSocket/WSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Сборка и тулинг:</span> Git, GitLab, CI/CD, npm, Vite</span>
|
||||
<span class="skill-item"><span class="skill-category">Тестирование:</span> Vitest, Storybook, Playwright (E2E)</span>
|
||||
<span class="skill-item"><span class="skill-category">Backend (ознакомительный уровень):</span> Node.js, Express, MongoDB</span>
|
||||
<span class="skill-item"><span class="skill-category">Быстро осваиваю:</span> Flutter Web, AI-инструменты разработки, Docker</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки:</span> Русский (родной), Английский (B1)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
@@ -0,0 +1,452 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a {
|
||||
color: #555;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.contact-row .separator {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text {
|
||||
font-size: 11px;
|
||||
line-height: 1.7;
|
||||
color: #2f2f2f;
|
||||
}
|
||||
|
||||
a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.competencies-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.competency-tag {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job {
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.job-period {
|
||||
font-size: 10.5px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.job-role {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.job-location {
|
||||
font-size: 10px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.job ul {
|
||||
padding-left: 18px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.job li {
|
||||
font-size: 10.5px;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job li strong {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.project {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.project-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.project-desc {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
margin-top: 3px;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.project-tech {
|
||||
font-size: 9.5px;
|
||||
color: #888;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.edu-item {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.edu-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.edu-title {
|
||||
font-weight: 600;
|
||||
font-size: 11px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.edu-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.edu-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.edu-desc {
|
||||
font-size: 10px;
|
||||
color: #666;
|
||||
margin-top: 2px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.cert-table {
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cert-item {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.cert-item > * {
|
||||
display: table-cell;
|
||||
vertical-align: baseline;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
.cert-title {
|
||||
font-size: 10.5px;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.cert-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cert-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
text-align: right;
|
||||
width: 44px;
|
||||
}
|
||||
|
||||
.skills-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px 14px;
|
||||
}
|
||||
|
||||
.skill-item {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.skill-category {
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
font-size: 10.5px;
|
||||
}
|
||||
|
||||
@media print {
|
||||
body {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
.page {
|
||||
padding: 0 0.18in 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.header,
|
||||
.edu-item,
|
||||
.cert-item,
|
||||
.competency-tag,
|
||||
.skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title,
|
||||
.job-company,
|
||||
.job-role,
|
||||
.project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+79509066162">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">@vbleroy (Telegram)</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (удалённо)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">О себе</div>
|
||||
<div class="summary-text">Mobile-разработчик с коммерческим опытом на Flutter (BLoC, Firebase Cloud Messaging, REST API) — веду мобильное приложение «Здесь Аптека» (Android/iOS): более 20 исправленных багов, оптимизация загрузки данных (постраничная загрузка вместо одного тяжёлого запроса), редизайн UI-элементов, портирование приложений с Android на iOS с перепривязкой push-токенов Firebase и отправкой сборок в App Store. Параллельно веду фронтенд внутренней системы на Vue 3. В команде без штатного дизайнера самостоятельно беру на себя UI/UX-задачи. Быстро учусь, комфортно работаю с git/code review в команде.</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">Ключевые компетенции</div>
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">Flutter</span>
|
||||
<span class="competency-tag">Dart</span>
|
||||
<span class="competency-tag">BLoC</span>
|
||||
<span class="competency-tag">REST API</span>
|
||||
<span class="competency-tag">Firebase Cloud Messaging</span>
|
||||
<span class="competency-tag">Git / Code Review</span>
|
||||
<span class="competency-tag">Clean Architecture</span>
|
||||
<span class="competency-tag">UI/UX</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Flutter / Frontend-разработчик</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 аптек по всей России · Удалённо</div>
|
||||
<ul>
|
||||
<li>Веду мобильное приложение «Здесь Аптека» на <strong>Flutter</strong> (Android/iOS): исправила более 20 багов, включая проблемы с фильтрами поиска и неадаптированные элементы интерфейса — многие нашла самостоятельно, до жалоб пользователей.</li>
|
||||
<li>Диагностировала причину жалоб на не открывающийся раздел «Избранное» (все товары грузились одним запросом) и реализовала постраничную загрузку через <strong>REST API</strong> совместно с бэкенд-разработчиком — жалобы прекратились.</li>
|
||||
<li>Портировала приложения «Здесь Сотрудник» и «Здесь Чат» с Android на iOS: перепривязала токены push-уведомлений <strong>Firebase Cloud Messaging</strong> на обеих платформах, собрала iOS-билды и отправила на проверку в App Store.</li>
|
||||
<li>Спроектировала app-иконки для обоих портированных приложений — в компании без штатного дизайнера самостоятельно веду UI/UX-задачи (редизайн кнопки «Избранное», компоновки информации о заказе).</li>
|
||||
<li>Параллельно разработала с нуля фронтенд внутренней системы управления заказами и логистикой («Здесь ЕКОМ») на <strong>Vue 3, TypeScript, Pinia</strong>, включая ролевую модель авторизации (RBAC) для ~20 пользователей в офисе.</li>
|
||||
<li>Внедрила <strong>Git</strong> Feature Branching и обучила коллегу с 11-летним стажем работе с системой версионирования — команда перешла на стабильные еженедельные релизы.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (заказная разработка для НИЦ «БиоХимТех»)</div>
|
||||
<div class="job-location">Тула, Россия</div>
|
||||
<ul>
|
||||
<li>Реализовала frontend-часть программно-вычислительного комплекса по контролю максимальной приземной концентрации загрязняющих веществ в атмосфере на <strong>Vue.js</strong>.</li>
|
||||
<li>Работала с серверной частью на <strong>Node.js</strong>.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
<div class="project">
|
||||
<span class="project-title">Хакатон TulaHack.Digital <Web & Mobile><span class="project-badge">Май 2024</span></span>
|
||||
<div class="project-desc">Мобильное веб-приложение «Книга рецептов» с фильтрацией по имеющимся в холодильнике ингредиентам и личным кабинетом для подсчёта потреблённых за день калорий.</div>
|
||||
<div class="project-tech">Vue 3, Ionic Capacitor, Express, Node.js, MongoDB</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации — Информационная безопасность автоматизированных систем</span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-org">Тульский государственный университет (ТулГУ), Институт прикладной математики и компьютерных наук</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений</span>
|
||||
<span class="cert-org">Цифровая кафедра ТулГУ</span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span class="skill-item"><span class="skill-category">Mobile:</span> Flutter, BLoC, Service Locator (DI), Flutter Router, Clean Architecture, Firebase Cloud Messaging, сборка и релиз iOS-билдов</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки программирования:</span> Dart, JavaScript, TypeScript, HTML5/CSS3</span>
|
||||
<span class="skill-item"><span class="skill-category">Сеть:</span> REST API, WebSocket/WSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Frontend:</span> Vue 3, Composition API, Pinia, Tailwind CSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Сборка и тулинг:</span> Git, GitLab, CI/CD, npm, Vite</span>
|
||||
<span class="skill-item"><span class="skill-category">Тестирование:</span> Vitest, Storybook, Playwright (E2E)</span>
|
||||
<span class="skill-item"><span class="skill-category">Backend (ознакомительный уровень):</span> Node.js, Express, MongoDB</span>
|
||||
<span class="skill-item"><span class="skill-category">Быстро осваиваю:</span> AI-инструменты разработки (Claude Code, Cursor), Docker, Linux</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки:</span> Русский (родной), Английский (B1)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
@@ -0,0 +1,459 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a {
|
||||
color: #555;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.contact-row .separator {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text {
|
||||
font-size: 11px;
|
||||
line-height: 1.7;
|
||||
color: #2f2f2f;
|
||||
}
|
||||
|
||||
a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.competencies-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.competency-tag {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job {
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.job-period {
|
||||
font-size: 10.5px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.job-role {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.job-location {
|
||||
font-size: 10px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.job ul {
|
||||
padding-left: 18px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.job li {
|
||||
font-size: 10.5px;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job li strong {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.project {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.project-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.project-desc {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
margin-top: 3px;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.project-tech {
|
||||
font-size: 9.5px;
|
||||
color: #888;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.edu-item {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.edu-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.edu-title {
|
||||
font-weight: 600;
|
||||
font-size: 11px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.edu-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.edu-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.edu-desc {
|
||||
font-size: 10px;
|
||||
color: #666;
|
||||
margin-top: 2px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.cert-table {
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cert-item {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.cert-item > * {
|
||||
display: table-cell;
|
||||
vertical-align: baseline;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
.cert-title {
|
||||
font-size: 10.5px;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.cert-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cert-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
text-align: right;
|
||||
width: 44px;
|
||||
}
|
||||
|
||||
.skills-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px 14px;
|
||||
}
|
||||
|
||||
.skill-item {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.skill-category {
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
font-size: 10.5px;
|
||||
}
|
||||
|
||||
@media print {
|
||||
body {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
.page {
|
||||
padding: 0 0.18in 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.header,
|
||||
.edu-item,
|
||||
.cert-item,
|
||||
.competency-tag,
|
||||
.skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title,
|
||||
.job-company,
|
||||
.job-role,
|
||||
.project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+79509066162">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">@vbleroy (Telegram)</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (удалённо)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">О себе</div>
|
||||
<div class="summary-text">Frontend-разработчик (Middle) с продакшн-опытом на <strong>Vue 3</strong> (Composition API, TypeScript, Pinia, Vue Router). Разработала с нуля фронтенд внутренней системы управления заказами и логистикой для сети из ~1200 точек: компонентная архитектура, ролевая модель авторизации (RBAC) для ~20 пользователей в офисе, unit-тесты на Vitest, сборка на Vite. Параллельно веду legacy Vue 3-проект и мобильное приложение на Flutter — комфортно переключаюсь между несколькими продуктами одновременно. Активно использую AI-инструменты разработки (Claude Code, Cursor) в рабочем процессе. Быстро адаптируюсь к новым фреймворкам и командным процессам.</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">Ключевые компетенции</div>
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">Vue 3 / Composition API</span>
|
||||
<span class="competency-tag">Pinia</span>
|
||||
<span class="competency-tag">Vue Router</span>
|
||||
<span class="competency-tag">TypeScript</span>
|
||||
<span class="competency-tag">Vite</span>
|
||||
<span class="competency-tag">Vitest</span>
|
||||
<span class="competency-tag">REST API</span>
|
||||
<span class="competency-tag">Git / Code Review</span>
|
||||
<span class="competency-tag">AI-инструменты разработки</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Frontend / Flutter-разработчик</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 аптек по всей России · Удалённо</div>
|
||||
<ul>
|
||||
<li>Разработала с нуля фронтенд внутренней системы управления заказами и логистикой («Здесь ЕКОМ») на <strong>Vue 3, Composition API, TypeScript, Pinia, Vue Router</strong>: график курьеров с drag-and-drop (vue-cal), список заказов с фильтрацией по 9 параметрам.</li>
|
||||
<li>Спроектировала ролевую модель авторизации (RBAC) для ~20 пользователей в офисе с разграничением между отделами — самостоятельно объяснила бэкенд-команде принцип работы модели, опираясь на профильное ИБ-образование.</li>
|
||||
<li>Внедрила unit-тесты на <strong>Vitest</strong> и <strong>Storybook</strong> для компонентов ЕКОМ, покрывая позитивные и негативные сценарии.</li>
|
||||
<li>Параллельно веду legacy-проект «РМК» на <strong>Vue 3</strong>, раскатанный на 1200 точках: внедрила WebSocket-оповещения в реальном времени, Playwright E2E-тесты, Feature Branching в Git — команда перешла на стабильные еженедельные релизы.</li>
|
||||
<li>Веду мобильное приложение «Здесь Аптека» на <strong>Flutter</strong> (Android/iOS): более 20 исправленных багов, портирование двух приложений с Android на iOS.</li>
|
||||
<li>В команде без штатного дизайнера самостоятельно беру на себя UI/UX-задачи (редизайн, app-иконки).</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (заказная разработка для НИЦ «БиоХимТех»)</div>
|
||||
<div class="job-location">Тула, Россия</div>
|
||||
<ul>
|
||||
<li>Реализовала frontend-часть программно-вычислительного комплекса по контролю максимальной приземной концентрации загрязняющих веществ в атмосфере на <strong>Vue.js</strong>.</li>
|
||||
<li>Работала с серверной частью на <strong>Node.js</strong>.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь ЕКОМ» — система управления заказами и логистикой<span class="project-badge">Vue 3 / TypeScript</span></span>
|
||||
<div class="project-desc">Frontend разработан с нуля для внутренней команды ~20 пользователей: RBAC-авторизация, drag-and-drop календарь курьеров, фильтрация заказов по 9 параметрам, unit-тесты (Vitest).</div>
|
||||
<div class="project-tech">Vue 3, Composition API, TypeScript, Pinia, Vue Router, Vite, Vitest, Storybook</div>
|
||||
</div>
|
||||
<div class="project">
|
||||
<span class="project-title">Хакатон TulaHack.Digital <Web & Mobile><span class="project-badge">Май 2024</span></span>
|
||||
<div class="project-desc">Мобильное веб-приложение «Книга рецептов» с фильтрацией по имеющимся в холодильнике ингредиентам и личным кабинетом для подсчёта потреблённых за день калорий.</div>
|
||||
<div class="project-tech">Vue 3, Ionic Capacitor, Express, Node.js, MongoDB</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации — Информационная безопасность автоматизированных систем</span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-org">Тульский государственный университет (ТулГУ), Институт прикладной математики и компьютерных наук</div>
|
||||
<div class="edu-desc">Образование в ИБ пригодилось на практике при проектировании модели авторизации (RBAC) в ЕКОМ.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений</span>
|
||||
<span class="cert-org">Цифровая кафедра ТулГУ</span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span class="skill-item"><span class="skill-category">Frontend:</span> Vue 3, Composition API, Vue Router, Pinia, Vue 2 (базово), Tailwind CSS, TanStack Table</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки программирования:</span> JavaScript, TypeScript, HTML5/CSS3, Dart</span>
|
||||
<span class="skill-item"><span class="skill-category">Сборка и тулинг:</span> Vite, npm, ESLint, Prettier</span>
|
||||
<span class="skill-item"><span class="skill-category">Тестирование:</span> Vitest, Storybook, Playwright (E2E)</span>
|
||||
<span class="skill-item"><span class="skill-category">Сеть:</span> REST API, WebSocket/WSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Mobile:</span> Flutter, BLoC, Clean Architecture, Firebase Cloud Messaging</span>
|
||||
<span class="skill-item"><span class="skill-category">Backend (ознакомительный уровень):</span> Node.js, Express, MongoDB</span>
|
||||
<span class="skill-item"><span class="skill-category">Архитектура и подходы:</span> RBAC-проектирование, Feature Branching (Git Flow)</span>
|
||||
<span class="skill-item"><span class="skill-category">Быстро осваиваю:</span> Nuxt, GraphQL, React, AI-инструменты разработки</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки:</span> Русский (родной), Английский (B1)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
@@ -0,0 +1,465 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Романова Валерия Вячеславовна — CV</title>
|
||||
<style>
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
html {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11px;
|
||||
line-height: 1.5;
|
||||
color: #1a1a2e;
|
||||
background: #ffffff;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-variant-ligatures: none;
|
||||
font-feature-settings: "liga" 0, "clig" 0, "dlig" 0;
|
||||
}
|
||||
|
||||
.page {
|
||||
width: 100%;
|
||||
max-width: 210mm;
|
||||
margin: 0 auto;
|
||||
padding: 2px 0;
|
||||
}
|
||||
|
||||
.header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.header h1 {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 28px;
|
||||
font-weight: 700;
|
||||
color: #1a1a2e;
|
||||
letter-spacing: -0.02em;
|
||||
margin-bottom: 6px;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
.header-gradient {
|
||||
height: 2px;
|
||||
background: linear-gradient(to right, hsl(187, 74%, 32%), hsl(270, 70%, 45%));
|
||||
border-radius: 1px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.contact-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px 14px;
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10.5px;
|
||||
line-height: 1.4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.contact-row a {
|
||||
color: #555;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.contact-row .separator {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.section {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: hsl(187, 74%, 32%);
|
||||
border-bottom: 1.5px solid #e2e2e2;
|
||||
padding-bottom: 4px;
|
||||
margin-bottom: 10px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.summary-text {
|
||||
font-size: 11px;
|
||||
line-height: 1.7;
|
||||
color: #2f2f2f;
|
||||
}
|
||||
|
||||
a {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.competencies-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
.competency-tag {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 10px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 28%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 4px 10px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid hsl(187, 40%, 88%);
|
||||
}
|
||||
|
||||
.job {
|
||||
margin-bottom: 14px;
|
||||
}
|
||||
|
||||
.job-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job-company {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 12.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.job-period {
|
||||
font-size: 10.5px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.job-role {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.job-location {
|
||||
font-size: 10px;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
.job ul {
|
||||
padding-left: 18px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.job li {
|
||||
font-size: 10.5px;
|
||||
line-height: 1.6;
|
||||
color: #333;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.job li strong {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.project {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.project-title {
|
||||
font-family: 'Liberation Sans', 'Helvetica Neue', Arial, 'DejaVu Sans', sans-serif;
|
||||
font-size: 11.5px;
|
||||
font-weight: 600;
|
||||
color: hsl(270, 70%, 45%);
|
||||
}
|
||||
|
||||
.project-badge {
|
||||
font-size: 9px;
|
||||
font-weight: 500;
|
||||
color: hsl(187, 74%, 32%);
|
||||
background: hsl(187, 40%, 95%);
|
||||
padding: 1px 6px;
|
||||
border-radius: 2px;
|
||||
margin-left: 6px;
|
||||
}
|
||||
|
||||
.project-desc {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
margin-top: 3px;
|
||||
line-height: 1.55;
|
||||
}
|
||||
|
||||
.project-tech {
|
||||
font-size: 9.5px;
|
||||
color: #888;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
.edu-item {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.edu-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.edu-title {
|
||||
font-weight: 600;
|
||||
font-size: 11px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.edu-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.edu-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.edu-desc {
|
||||
font-size: 10px;
|
||||
color: #666;
|
||||
margin-top: 2px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.cert-table {
|
||||
display: table;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.cert-item {
|
||||
display: table-row;
|
||||
}
|
||||
|
||||
.cert-item > * {
|
||||
display: table-cell;
|
||||
vertical-align: baseline;
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
.cert-title {
|
||||
font-size: 10.5px;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.cert-org {
|
||||
color: hsl(270, 70%, 45%);
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.cert-year {
|
||||
font-size: 10px;
|
||||
color: #777;
|
||||
white-space: nowrap;
|
||||
text-align: right;
|
||||
width: 44px;
|
||||
}
|
||||
|
||||
.skills-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px 14px;
|
||||
}
|
||||
|
||||
.skill-item {
|
||||
font-size: 10.5px;
|
||||
color: #444;
|
||||
}
|
||||
|
||||
.skill-category {
|
||||
font-weight: 600;
|
||||
color: #333;
|
||||
font-size: 10.5px;
|
||||
}
|
||||
|
||||
@media print {
|
||||
body {
|
||||
-webkit-print-color-adjust: exact;
|
||||
print-color-adjust: exact;
|
||||
}
|
||||
.page {
|
||||
padding: 0 0.18in 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.header,
|
||||
.edu-item,
|
||||
.cert-item,
|
||||
.competency-tag,
|
||||
.skill-item {
|
||||
break-inside: avoid;
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.section-title,
|
||||
.job-company,
|
||||
.job-role,
|
||||
.project-title {
|
||||
break-after: avoid;
|
||||
page-break-after: avoid;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page">
|
||||
|
||||
<!-- HEADER -->
|
||||
<div class="header">
|
||||
<h1>Романова Валерия Вячеславовна</h1>
|
||||
<div class="header-gradient"></div>
|
||||
<div class="contact-row">
|
||||
<a href="tel:+79509066162">+7 (950) 906-61-62</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="mailto:vbleroy@yandex.ru">vbleroy@yandex.ru</a>
|
||||
<span class="separator">|</span>
|
||||
<a href="https://t.me/vbleroy">@vbleroy (Telegram)</a>
|
||||
<span class="separator">|</span>
|
||||
<span>Тула, Россия (удалённо)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROFESSIONAL SUMMARY -->
|
||||
<div class="section">
|
||||
<div class="section-title">О себе</div>
|
||||
<div class="summary-text">Fullstack-разработчик (Middle) с продакшн-опытом на <strong>Vue 3</strong> (Composition API, TypeScript, Pinia) и практическим backend-опытом (Node.js/Express/MongoDB — хакатон, учебный проект). Разработала с нуля фронтенд внутренней системы управления заказами и логистикой для сети из ~1200 точек, включая проектирование клиент-серверного REST/WebSocket-взаимодействия и ролевой модели авторизации (RBAC) для ~20 пользователей — прямой релевантный опыт для систем с разграничением прав доступа. Быстро учусь новому стеку: самостоятельно освоила Flutter с нуля до продакшена за первые месяцы работы.</div>
|
||||
</div>
|
||||
|
||||
<!-- CORE COMPETENCIES -->
|
||||
<div class="section">
|
||||
<div class="section-title">Ключевые компетенции</div>
|
||||
<div class="competencies-grid">
|
||||
<span class="competency-tag">Vue 3 / Composition API</span>
|
||||
<span class="competency-tag">TypeScript</span>
|
||||
<span class="competency-tag">Pinia</span>
|
||||
<span class="competency-tag">RBAC / модели авторизации</span>
|
||||
<span class="competency-tag">REST API / WebSocket</span>
|
||||
<span class="competency-tag">Node.js / Express</span>
|
||||
<span class="competency-tag">MongoDB</span>
|
||||
<span class="competency-tag">Git</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="section">
|
||||
<div class="section-title">Опыт работы</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Здравсервис, ООО</span>
|
||||
<span class="job-period">Ноябрь 2024 — настоящее время</span>
|
||||
</div>
|
||||
<div class="job-role">Frontend / Flutter-разработчик</div>
|
||||
<div class="job-location">Аптечная сеть, ~1200 аптек по всей России · Удалённо</div>
|
||||
<ul>
|
||||
<li>Разработала с нуля фронтенд внутренней системы управления заказами и логистикой («Здесь ЕКОМ») на <strong>Vue 3, Composition API, TypeScript, Pinia</strong> — спроектировала клиент-серверное взаимодействие с бэкендом.</li>
|
||||
<li>Спроектировала ролевую модель авторизации (<strong>RBAC</strong>) для ~20 пользователей в офисе с разграничением между отделами (логистика/заказы) — самостоятельно объяснила бэкенд-команде принцип работы модели, опираясь на профильное ИБ-образование.</li>
|
||||
<li>Внедрила <strong>WebSocket</strong> для оповещений в реальном времени на legacy-проекте «РМК», раскатанном на 1200 точках — впервые видно, сколько аптек онлайн, и кто/когда прочитал оповещение.</li>
|
||||
<li>Внедрила unit-тесты (<strong>Vitest</strong>) и Storybook для компонентов ЕКОМ, покрывая позитивные и негативные сценарии.</li>
|
||||
<li>Веду мобильное приложение «Здесь Аптека» на <strong>Flutter</strong> — более 20 исправленных багов, портирование на iOS.</li>
|
||||
<li>Внедрила <strong>Git</strong> Feature Branching (GitLab) — команда перешла на стабильные еженедельные релизы.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Хакатон TulaHack.Digital <Web & Mobile></span>
|
||||
<span class="job-period">Май 2024</span>
|
||||
</div>
|
||||
<div class="job-role">Fullstack-разработчик</div>
|
||||
<div class="job-location">Тула, Россия</div>
|
||||
<ul>
|
||||
<li>Мобильное веб-приложение «Книга рецептов» на <strong>Vue 3, Ionic Capacitor</strong> с личным кабинетом.</li>
|
||||
<li>Backend на <strong>Express, Node.js, MongoDB</strong> — REST API, авторизация пользователей.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="job">
|
||||
<div class="job-header">
|
||||
<span class="job-company">Тульский государственный университет</span>
|
||||
<span class="job-period">Март 2022 — Декабрь 2022</span>
|
||||
</div>
|
||||
<div class="job-role">Разработчик (заказная разработка для НИЦ «БиоХимТех»)</div>
|
||||
<div class="job-location">Тула, Россия</div>
|
||||
<ul>
|
||||
<li>Реализовала frontend-часть на <strong>Vue.js</strong>, серверную часть — на <strong>Node.js</strong>.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PROJECTS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Проекты</div>
|
||||
<div class="project">
|
||||
<span class="project-title">«Здесь ЕКОМ» — RBAC и клиент-серверное взаимодействие<span class="project-badge">Vue 3 / TypeScript</span></span>
|
||||
<div class="project-desc">Ролевая модель авторизации для ~20 пользователей с разграничением по отделам, спроектированная и объяснённая бэкенд-команде.</div>
|
||||
<div class="project-tech">Vue 3, TypeScript, Pinia, REST API, WebSocket</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- EDUCATION -->
|
||||
<div class="section">
|
||||
<div class="section-title">Образование</div>
|
||||
<div class="edu-item">
|
||||
<div class="edu-header">
|
||||
<span class="edu-title">Специалист по защите информации — Информационная безопасность автоматизированных систем</span>
|
||||
<span class="edu-year">2024</span>
|
||||
</div>
|
||||
<div class="edu-org">Тульский государственный университет (ТулГУ), Институт прикладной математики и компьютерных наук</div>
|
||||
<div class="edu-desc">Образование в ИБ напрямую применено на коммерческом проекте — при проектировании модели авторизации (RBAC) в ЕКОМ.</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CERTIFICATIONS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Дополнительное образование</div>
|
||||
<div class="cert-table">
|
||||
<div class="cert-item">
|
||||
<span class="cert-title">Разработчик мобильных и веб-приложений</span>
|
||||
<span class="cert-org">Цифровая кафедра ТулГУ</span>
|
||||
<span class="cert-year">2024</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SKILLS -->
|
||||
<div class="section">
|
||||
<div class="section-title">Навыки</div>
|
||||
<div class="skills-grid">
|
||||
<span class="skill-item"><span class="skill-category">Frontend:</span> Vue 3, Composition API, Vue Router, Pinia, Tailwind CSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Backend (практический опыт):</span> Node.js, Express, MongoDB</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки программирования:</span> JavaScript, TypeScript, HTML5/CSS3, Dart</span>
|
||||
<span class="skill-item"><span class="skill-category">Сеть:</span> REST API, WebSocket/WSS</span>
|
||||
<span class="skill-item"><span class="skill-category">Сборка и тулинг:</span> Git, GitLab, CI/CD, Vite</span>
|
||||
<span class="skill-item"><span class="skill-category">Тестирование:</span> Vitest, Storybook, Playwright (E2E)</span>
|
||||
<span class="skill-item"><span class="skill-category">Mobile:</span> Flutter, BLoC, Clean Architecture, Firebase</span>
|
||||
<span class="skill-item"><span class="skill-category">Архитектура и подходы:</span> RBAC-проектирование, Feature Branching</span>
|
||||
<span class="skill-item"><span class="skill-category">Быстро осваиваю:</span> SQL, Nuxt, GraphQL, Docker</span>
|
||||
<span class="skill-item"><span class="skill-category">Языки:</span> Русский (родной), Английский (B1)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user