<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Главная on Portfolio — Technical Writing</title><link>https://thankfulfor.github.io/portfolio/</link><description>Recent content in Главная on Portfolio — Technical Writing</description><generator>Hugo</generator><language>ru</language><atom:link href="https://thankfulfor.github.io/portfolio/index.xml" rel="self" type="application/rss+xml"/><item><title/><link>https://thankfulfor.github.io/portfolio/about/docs-as-code/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/about/docs-as-code/</guid><description>&lt;h1 id="docs-as-code"&gt;Docs as Code&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Исходники документации хранятся в Git.&lt;/li&gt;
&lt;li&gt;Изменения проходят через Pull Request и code review.&lt;/li&gt;
&lt;li&gt;Публикация автоматизирована через GitHub Actions.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/about/interview-pitch/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/about/interview-pitch/</guid><description>&lt;h1 id="interview-pitch-90-секунд"&gt;Interview Pitch (90 секунд)&lt;/h1&gt;
&lt;p&gt;Я AI Technical Writer / Product UX Writer с инженерным бэкграундом и 10+ годами в IT.&lt;/p&gt;
&lt;p&gt;Моя ценность в том, что я быстро разбираюсь в сложной продуктовой логике и помогаю команде превращать разрозненные вводные в понятные документы, сценарии и тексты интерфейса.&lt;/p&gt;
&lt;p&gt;Я работаю на стыке продукта, разработки, дизайна и QA:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;уточняю требования и фиксирую решения;&lt;/li&gt;
&lt;li&gt;описываю пользовательские сценарии, edge cases и состояния интерфейса;&lt;/li&gt;
&lt;li&gt;пишу UX-тексты для ошибок, уведомлений, статусов, кнопок, плейсхолдеров и onboarding;&lt;/li&gt;
&lt;li&gt;готовлю пользовательскую и внутреннюю документацию: FAQ, troubleshooting, инструкции, release notes;&lt;/li&gt;
&lt;li&gt;помогаю команде заранее увидеть неописанные сценарии и риски.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Отдельно я развиваю применение AI в техническом письме и UX-writing:&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/ai-in-workflow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/ai-in-workflow/</guid><description>&lt;h1 id="ии-в-моей-работе"&gt;ИИ в моей работе&lt;/h1&gt;
&lt;p&gt;Как я использую ИИ в цикле документации без потери качества и контроля.&lt;/p&gt;
&lt;h2 id="кейс"&gt;Кейс&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/ai-workflow-case/"&gt;AI Workflow Case&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="применение"&gt;Применение&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Черновики структуры&lt;/li&gt;
&lt;li&gt;Вычитка и переформулирование&lt;/li&gt;
&lt;li&gt;Проверка консистентности терминов&lt;/li&gt;
&lt;li&gt;Генерация вариантов UX-текста&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/ai-workflow-case/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/ai-workflow-case/</guid><description>&lt;h1 id="ai-workflow-case"&gt;AI Workflow Case&lt;/h1&gt;
&lt;p&gt;Этот кейс показывает, как я использую AI-инструменты в документации без передачи им ответственности за факты, терминологию и продуктовую логику.&lt;/p&gt;
&lt;h2 id="принцип"&gt;Принцип&lt;/h2&gt;
&lt;p&gt;AI помогает ускорять черновую работу, но финальное решение остается за автором.&lt;/p&gt;
&lt;p&gt;Я использую AI для:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;структурирования неоформленных материалов;&lt;/li&gt;
&lt;li&gt;поиска нестыковок в сценариях;&lt;/li&gt;
&lt;li&gt;подготовки вариантов формулировок;&lt;/li&gt;
&lt;li&gt;сокращения длинных описаний;&lt;/li&gt;
&lt;li&gt;проверки единообразия терминов;&lt;/li&gt;
&lt;li&gt;подготовки вопросов к разработке, дизайну или QA.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Я не использую AI как источник истины. Факты проверяются по требованиям, макетам, задачам, API-контрактам и решениям команды.&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/api-explained-case/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/api-explained-case/</guid><description>&lt;h1 id="кейс-объяснить-api-простыми-словами"&gt;Кейс: объяснить API простыми словами&lt;/h1&gt;
&lt;p&gt;Кейс показывает, как я объясняю техническое понятие для пользователя без инженерного бэкграунда.&lt;/p&gt;
&lt;h2 id="задача"&gt;Задача&lt;/h2&gt;
&lt;p&gt;Объяснить, что такое API, коротко и без потери смысла. Аудитория — пользователь ПК, который знаком с базовой терминологией, но не работает с разработкой.&lt;/p&gt;
&lt;h2 id="подход"&gt;Подход&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Убрала детали про протоколы, методы и форматы данных.&lt;/li&gt;
&lt;li&gt;Оставила главную идею: API помогает системам обмениваться данными по правилам.&lt;/li&gt;
&lt;li&gt;Добавила пример из понятного пользовательского сценария.&lt;/li&gt;
&lt;li&gt;Сохранила точность: API — это не само приложение, а способ взаимодействия.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="версия-объяснения"&gt;Версия объяснения&lt;/h2&gt;
&lt;p&gt;API — это набор правил, по которым разные приложения обмениваются данными и командами.&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/api-explained-plain-english/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/api-explained-plain-english/</guid><description>&lt;h1 id="case-explaining-api-in-plain-english"&gt;Case: Explaining API in Plain English&lt;/h1&gt;
&lt;p&gt;This case shows how I explain a technical concept to a non-technical audience in English.&lt;/p&gt;
&lt;h2 id="task"&gt;Task&lt;/h2&gt;
&lt;p&gt;Explain what an API is in a short, clear way. The audience is a regular computer user who understands basic digital terms but does not work in software development.&lt;/p&gt;
&lt;h2 id="approach"&gt;Approach&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Keep the definition short.&lt;/li&gt;
&lt;li&gt;Avoid unnecessary details about HTTP, JSON, methods, and endpoints.&lt;/li&gt;
&lt;li&gt;Use a familiar product scenario.&lt;/li&gt;
&lt;li&gt;Keep the explanation accurate: an API is not an app itself, but a set of rules for interaction between systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="plain-english-version"&gt;Plain English Version&lt;/h2&gt;
&lt;p&gt;An API is a set of rules that lets different apps talk to each other and exchange data.&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/api-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/api-overview/</guid><description>&lt;h1 id="обзор-api"&gt;Обзор API&lt;/h1&gt;
&lt;p&gt;Раздел описывает структуру API-документации: цели, аудиторию, стандарт описания и формат примеров.&lt;/p&gt;
&lt;h2 id="внутри-раздела"&gt;Внутри раздела&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/api-explained-case/"&gt;Кейс: объяснить API простыми словами&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/api-explained-plain-english/"&gt;Case: Explaining API in Plain English&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/getting-started/"&gt;Быстрый старт&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/interactive-api/"&gt;Интерактивное API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/api/</guid><description>&lt;h1 id="api-reference"&gt;API Reference&lt;/h1&gt;
&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;Текущая версия API в этом кейсе: &lt;code&gt;v2&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="endpoints-by-resource"&gt;Endpoints By Resource&lt;/h3&gt;
&lt;h4 id="pet"&gt;Pet&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /pet/findByStatus&lt;/code&gt; - получить питомцев по статусу;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /pet/{petId}&lt;/code&gt; - получить питомца по ID.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="store"&gt;Store&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /store/inventory&lt;/code&gt; - получить статистику инвентаря.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="поиск-и-фильтрация"&gt;Поиск и фильтрация&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Используйте глобальный поиск MkDocs (поле поиска в шапке/сайдбаре) для быстрого перехода по терминам и endpoint-ам.&lt;/li&gt;
&lt;li&gt;В ReDoc используйте встроенный поиск по операциям и параметрам спецификации.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="get-petfindbystatus"&gt;GET /pet/findByStatus&lt;/h2&gt;
&lt;p&gt;Возвращает массив питомцев по статусу.&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/business/bpmn-order-flow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/business/bpmn-order-flow/</guid><description>&lt;h1 id="bpmn-процесс-оформления-заказа"&gt;BPMN: Процесс оформления заказа&lt;/h1&gt;
&lt;p&gt;Ниже BPMN-подобная диаграмма процесса от выбора питомца до подтверждения заказа.&lt;/p&gt;
&lt;p&gt;&lt;img alt="BPMN Order Flow" loading="lazy" src="https://thankfulfor.github.io/portfolio/diagrams-rendered/bpmn-order-flow.svg"&gt;&lt;/p&gt;
&lt;p&gt;!!! note &amp;ldquo;Цель&amp;rdquo;
Показать сквозной бизнес-процесс и точки контроля.&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/business/sales-dashboard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/business/sales-dashboard/</guid><description>&lt;h1 id="дашборд-продаж"&gt;Дашборд продаж&lt;/h1&gt;
&lt;p&gt;Ниже пример простого дашборда с динамикой заказов.&lt;/p&gt;
&lt;p&gt;&lt;canvas id="salesChart" height="120"&gt;&lt;/canvas&gt;&lt;/p&gt;
&lt;script&gt;
document.addEventListener("DOMContentLoaded", () =&gt; {
const canvas = document.getElementById("salesChart");
if (!canvas) return;
new Chart(canvas, {
type: "line",
data: {
labels: ["Jan", "Feb", "Mar", "Apr", "May", "Jun"],
datasets: [{
label: "Orders",
data: [12, 19, 15, 26, 31, 28],
borderColor: "#1e88e5",
backgroundColor: "rgba(30, 136, 229, 0.15)",
fill: true,
tension: 0.35
}]
},
options: {
responsive: true,
plugins: { legend: { display: true } }
}
});
});
&lt;/script&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/cases/api-payment-case/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/cases/api-payment-case/</guid><description>&lt;h1 id="кейс-api-reference-для-платежного-сервиса"&gt;Кейс: API Reference для платежного сервиса&lt;/h1&gt;
&lt;h2 id="контекст"&gt;Контекст&lt;/h2&gt;
&lt;p&gt;Нужно было повысить качество API-документации платежного сервиса: сократить время первого успешного запроса и снизить количество ошибок интеграции.&lt;/p&gt;
&lt;h2 id="что-сделано"&gt;Что сделано&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;введен сценарный Quick Start;&lt;/li&gt;
&lt;li&gt;добавлен интерактивный Swagger UI;&lt;/li&gt;
&lt;li&gt;унифицирована структура ошибок и примеров;&lt;/li&gt;
&lt;li&gt;добавлен changelog и версия документации.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="интерактивное-превью-api"&gt;Интерактивное превью API&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/interactive-api/"&gt;Открыть Interactive API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="до--после"&gt;До / После&lt;/h2&gt;
&lt;div class="before-after" id="beforeAfterCase1"&gt;
&lt;img src="https://dummyimage.com/1200x600/efefef/333&amp;text=Before:+flat+structure,+no+examples" alt="Before" class="before-img"&gt;
&lt;img src="https://dummyimage.com/1200x600/daf2ff/003355&amp;text=After:+scenario+quick+start+and+interactive+api" alt="After" class="after-img"&gt;
&lt;input type="range" min="0" max="100" value="50" class="ba-slider" aria-label="Сравнение до и после"&gt;
&lt;/div&gt;
&lt;h2 id="результат"&gt;Результат&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Time-to-first-call: 20 -&amp;gt; 5 минут.&lt;/li&gt;
&lt;li&gt;Доля ошибок первого запроса: 42% -&amp;gt; 18%.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="связанные-материалы"&gt;Связанные материалы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/api/"&gt;Справочник API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/scenario-payment-incident/"&gt;Сценарий: Инцидент — сбой оплаты&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/developers/architecture-c4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/developers/architecture-c4/</guid><description>&lt;h1 id="c4-контекст-системы"&gt;C4: Контекст системы&lt;/h1&gt;
&lt;pre class="mermaid"&gt;flowchart LR
U[&amp;#34;Пользователь&amp;#34;] --&amp;gt; D[&amp;#34;Портал документации&amp;#34;]
D --&amp;gt; API[&amp;#34;API сервиса&amp;#34;]
API --&amp;gt; DB[&amp;#34;База данных&amp;#34;]
API --&amp;gt; MQ[&amp;#34;Очередь событий / Kafka&amp;#34;]
API --&amp;gt; EXT[&amp;#34;Внешние интеграции&amp;#34;]&lt;/pre&gt;
&lt;h2 id="ключевые-взаимодействия"&gt;Ключевые взаимодействия&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Разработчик использует API для интеграций.&lt;/li&gt;
&lt;li&gt;GitHub Actions публикует документацию на GitHub Pages.&lt;/li&gt;
&lt;li&gt;Портал документации выступает источником контрактов и примеров.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/developers/sequence-create-order/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/developers/sequence-create-order/</guid><description>&lt;h1 id="sequence-создание-заказа"&gt;Sequence: Создание заказа&lt;/h1&gt;
&lt;p&gt;&lt;img alt="Sequence: Create Order" loading="lazy" src="https://thankfulfor.github.io/portfolio/diagrams-rendered/sequence-create-order.svg"&gt;&lt;/p&gt;
&lt;h2 id="поток"&gt;Поток&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Клиент отправляет &lt;code&gt;POST /store/order&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;API передает запрос в сервис заказов.&lt;/li&gt;
&lt;li&gt;Сервис сохраняет заказ в БД.&lt;/li&gt;
&lt;li&gt;Клиент получает &lt;code&gt;201 Created&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/developers/uml-class-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/developers/uml-class-model/</guid><description>&lt;h1 id="uml-class-model"&gt;UML Class Model&lt;/h1&gt;
&lt;p&gt;&lt;img alt="Class Model" loading="lazy" src="https://thankfulfor.github.io/portfolio/diagrams-rendered/class-model.svg"&gt;&lt;/p&gt;
&lt;h2 id="основные-сущности"&gt;Основные сущности&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Pet&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Order&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;User&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/docs-as-code-pipeline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/docs-as-code-pipeline/</guid><description>&lt;h1 id="docs-as-code-pipeline"&gt;Docs as Code Pipeline&lt;/h1&gt;
&lt;p&gt;Эта страница описывает пример пайплайна доставки документации: от Markdown-файла до опубликованного портала.&lt;/p&gt;
&lt;h2 id="что-решает-пайплайн"&gt;Что решает пайплайн&lt;/h2&gt;
&lt;p&gt;Docs as Code нужен, когда документация должна обновляться вместе с продуктом:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;изменения проходят review;&lt;/li&gt;
&lt;li&gt;история правок хранится в Git;&lt;/li&gt;
&lt;li&gt;сборка проверяется автоматически;&lt;/li&gt;
&lt;li&gt;публикация не зависит от ручной выгрузки файлов;&lt;/li&gt;
&lt;li&gt;ошибки в ссылках, спецификациях и структуре ловятся до релиза.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="архитектура-пайплайна"&gt;Архитектура пайплайна&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart LR
A[&amp;#34;Markdown / OpenAPI&amp;#34;] --&amp;gt; B[&amp;#34;Git branch&amp;#34;]
B --&amp;gt; C[&amp;#34;Pull request&amp;#34;]
C --&amp;gt; D[&amp;#34;Checks: build, links, OpenAPI&amp;#34;]
D --&amp;gt; E[&amp;#34;Review&amp;#34;]
E --&amp;gt; F[&amp;#34;Merge&amp;#34;]
F --&amp;gt; G[&amp;#34;Static build&amp;#34;]
G --&amp;gt; H[&amp;#34;GitHub Pages&amp;#34;]&lt;/pre&gt;
&lt;h2 id="минимальный-набор-проверок"&gt;Минимальный набор проверок&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Проверка&lt;/th&gt;
&lt;th&gt;Зачем нужна&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Build&lt;/td&gt;
&lt;td&gt;Документация собирается без ошибок&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Link check&lt;/td&gt;
&lt;td&gt;Нет битых внутренних ссылок&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAPI validation&lt;/td&gt;
&lt;td&gt;API-контракт синтаксически корректен&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Markdown lint&lt;/td&gt;
&lt;td&gt;Единый стиль разметки&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spell / terms check&lt;/td&gt;
&lt;td&gt;Меньше терминологических расхождений&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="пример-github-actions"&gt;Пример GitHub Actions&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;docs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;push&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;branches&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;main]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;pull_request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="nt"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;runs-on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ubuntu-latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;actions/checkout@v4&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;peaceiris/actions-hugo@v3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;hugo-version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;0.150.0&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;extended&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Build docs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;hugo --minify&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="docops-ценность"&gt;DocOps-ценность&lt;/h2&gt;
&lt;p&gt;Такой процесс помогает не просто &amp;ldquo;написать страницу&amp;rdquo;, а управлять жизненным циклом документации:&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/documentation-workflow/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/documentation-workflow/</guid><description>&lt;h1 id="documentation-workflow"&gt;Documentation Workflow&lt;/h1&gt;
&lt;p&gt;Эта страница показывает, как я вижу рабочий процесс документации в продуктовой команде: от задачи в трекере до публикации и обратной связи.&lt;/p&gt;
&lt;h2 id="цель-процесса"&gt;Цель процесса&lt;/h2&gt;
&lt;p&gt;Сделать документацию частью разработки, а не отдельной активностью после релиза.&lt;/p&gt;
&lt;p&gt;Хороший workflow помогает:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;фиксировать договоренности письменно;&lt;/li&gt;
&lt;li&gt;снижать количество повторных уточнений;&lt;/li&gt;
&lt;li&gt;связывать документацию с задачами и релизами;&lt;/li&gt;
&lt;li&gt;проверять контент до публикации;&lt;/li&gt;
&lt;li&gt;поддерживать базу знаний в актуальном состоянии.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="роли"&gt;Роли&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Роль&lt;/th&gt;
&lt;th&gt;Что дает в процесс&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Product / Analyst&lt;/td&gt;
&lt;td&gt;Контекст задачи, бизнес-правила, ограничения&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Designer&lt;/td&gt;
&lt;td&gt;Макеты, состояния интерфейса, UX-логика&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Developer&lt;/td&gt;
&lt;td&gt;Технические ограничения, API, edge cases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;QA&lt;/td&gt;
&lt;td&gt;Проверочные сценарии и регрессионные риски&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Technical Writer / DocOps&lt;/td&gt;
&lt;td&gt;Структура, текст, workflow, публикация&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="поток-работы"&gt;Поток работы&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart LR
A[&amp;#34;Задача в трекере&amp;#34;] --&amp;gt; B[&amp;#34;Сбор контекста&amp;#34;]
B --&amp;gt; C[&amp;#34;Карта сценариев&amp;#34;]
C --&amp;gt; D[&amp;#34;Черновик документации&amp;#34;]
D --&amp;gt; E[&amp;#34;Review: продукт, dev, QA&amp;#34;]
E --&amp;gt; F[&amp;#34;Правки и финальная вычитка&amp;#34;]
F --&amp;gt; G[&amp;#34;Публикация&amp;#34;]
G --&amp;gt; H[&amp;#34;Обратная связь и обновления&amp;#34;]&lt;/pre&gt;
&lt;h2 id="definition-of-ready"&gt;Definition of Ready&lt;/h2&gt;
&lt;p&gt;Документационная задача готова к работе, если есть:&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/email-change-ux-case/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/email-change-ux-case/</guid><description>&lt;h1 id="кейс-ux-текст-для-дополнительной-почты"&gt;Кейс: UX-текст для дополнительной почты&lt;/h1&gt;
&lt;p&gt;Пересмотрела старое тестовое задание и увидела главную ошибку: я редактировала дисклеймер, хотя проблема была не в формулировке согласия, а в сценарии. Попап просит добавить почту для важных писем, но рядом подписывает пользователя на рассылку.&lt;/p&gt;
&lt;h2 id="задача"&gt;Задача&lt;/h2&gt;
&lt;p&gt;Пользователь получает письма на почту, привязанную к аккаунту Яндекс.Учебника. Часто это не основной ящик: его завели для регистрации и редко проверяют.&lt;/p&gt;
&lt;p&gt;Сервис хочет предложить другой адрес, чтобы письма Учебника чаще попадались пользователю на глаза.&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/game/find-doc-bug/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/game/find-doc-bug/</guid><description>&lt;h1 id="игра-найди-ошибку-в-документации"&gt;Игра: Найди ошибку в документации&lt;/h1&gt;
&lt;p&gt;Найдите 4 ошибки в примере ниже и нажмите &lt;strong&gt;Проверить&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="doc-bug-game" id="docBugGame"&gt;
&lt;p&gt;&lt;strong&gt;POST /store/order&lt;/strong&gt; создает новый заказ и всегда возвращает &lt;code&gt;200 OK&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Поле &lt;code&gt;quantity&lt;/code&gt; может быть отрицательным, если заказ отменен заранее.&lt;/p&gt;
&lt;p&gt;Для авторизации используйте заголовок &lt;code&gt;X-Token&lt;/code&gt;, параметр &lt;code&gt;Authorization&lt;/code&gt; не поддерживается.&lt;/p&gt;
&lt;p&gt;Пример ответа:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{ "id": "abc", "status": 123, "complete": "yes" }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div class="doc-bug-controls"&gt;
&lt;button type="button" id="checkDocBug"&gt;Проверить&lt;/button&gt;
&lt;button type="button" id="resetDocBug"&gt;Сброс&lt;/button&gt;
&lt;span id="docBugResult" aria-live="polite"&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h2 id="подсказка"&gt;Подсказка&lt;/h2&gt;
&lt;p&gt;Ошибки связаны с HTTP-статусом, валидацией данных, авторизацией и типами полей ответа.&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/getting-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/getting-started/</guid><description>&lt;h1 id="getting-started"&gt;Getting Started&lt;/h1&gt;
&lt;h2 id="base-url"&gt;Base URL&lt;/h2&gt;
&lt;p&gt;Все примеры в документации используют:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;https://petstore.swagger.io/v2&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="формат-данных"&gt;Формат данных&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Контент-тип запросов: &lt;code&gt;application/json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Контент-тип ответов: &lt;code&gt;application/json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Кодировка: &lt;code&gt;UTF-8&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="быстрый-старт-за-3-шага"&gt;Быстрый старт за 3 шага&lt;/h2&gt;
&lt;h3 id="1-проверить-доступность-api"&gt;1. Проверить доступность API&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X GET &lt;span class="s2"&gt;&amp;#34;https://petstore.swagger.io/v2/store/inventory&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ожидаемый ответ &lt;code&gt;200 OK&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;available&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;pending&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;sold&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;87&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-получить-питомцев-в-статусе-available"&gt;2. Получить питомцев в статусе &lt;code&gt;available&lt;/code&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X GET &lt;span class="s2"&gt;&amp;#34;https://petstore.swagger.io/v2/pet/findByStatus?status=available&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ожидаемый ответ &lt;code&gt;200 OK&lt;/code&gt; с массивом объектов &lt;code&gt;Pet&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="пример-на-javascript-fetch"&gt;Пример на JavaScript (fetch)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;https://petstore.swagger.io/v2/pet/findByStatus?status=available&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ok&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`HTTP &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="3-получить-питомца-по-id"&gt;3. Получить питомца по ID&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X GET &lt;span class="s2"&gt;&amp;#34;https://petstore.swagger.io/v2/pet/1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ожидаемый ответ:&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/interactive-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/interactive-api/</guid><description>&lt;h1 id="interactive-api"&gt;Interactive API&lt;/h1&gt;
&lt;p&gt;Интерактивная версия API-спецификации Swagger Petstore для быстрого тестирования запросов.&lt;/p&gt;
&lt;div id="swagger-ui"&gt;&lt;/div&gt;
&lt;script&gt;
async function resolveSpecUrl() {
const candidates = [
"/portfolio/openapi/openapi.yaml",
"/openapi/openapi.yaml"
];
for (const candidate of candidates) {
try {
const response = await fetch(candidate, { method: "GET" });
if (response.ok) return candidate;
} catch (e) {
// try next
}
}
return candidates[0];
}
window.addEventListener("load", async function () {
const specUrl = await resolveSpecUrl();
window.ui = SwaggerUIBundle({
url: specUrl,
dom_id: "#swagger-ui",
deepLinking: true,
docExpansion: "list",
presets: [SwaggerUIBundle.presets.apis],
});
});
&lt;/script&gt;
&lt;h2 id="обратная-связь"&gt;Обратная связь&lt;/h2&gt;
&lt;p&gt;Если в Swagger UI не загружается контракт или есть ошибки в примерах:&lt;br&gt;
&lt;a href="https://github.com/thankfulfor/portfolio/issues/new?template=blank_issues"&gt;Открыть issue по Interactive API&lt;/a&gt;&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/process/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/process/</guid><description>&lt;h1 id="процессы-и-методология"&gt;Процессы и методология&lt;/h1&gt;
&lt;p&gt;Как организован процесс Docs as Code: от запроса до публикации.&lt;/p&gt;
&lt;h2 id="кейсы"&gt;Кейсы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/documentation-workflow/"&gt;Documentation Workflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/docs-as-code-pipeline/"&gt;Docs as Code Pipeline&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="этапы"&gt;Этапы&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Сбор требований&lt;/li&gt;
&lt;li&gt;Проектирование структуры&lt;/li&gt;
&lt;li&gt;Подготовка контента&lt;/li&gt;
&lt;li&gt;Техническая валидация&lt;/li&gt;
&lt;li&gt;Публикация и обратная связь&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/qa-checklist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/qa-checklist/</guid><description>&lt;h1 id="финальный-qa-checklist"&gt;Финальный QA Checklist&lt;/h1&gt;
&lt;p&gt;Перед демонстрацией портфолио проверьте:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Quick Start выполняется без правок команд.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Interactive API открывается и загружает &lt;code&gt;openapi.yaml&lt;/code&gt; без &lt;code&gt;404&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Все внутренние ссылки работают.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Диаграммы (BPMN, C4, UML) отображаются на страницах.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Мобильная версия читаема (меню, код-блоки, таблицы).&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Темная и светлая тема переключаются корректно.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Последние изменения отражены в &lt;code&gt;Changelog&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; CI workflow зеленый на &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Версия &lt;code&gt;latest&lt;/code&gt; доступна в переключателе версий.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="обратная-связь"&gt;Обратная связь&lt;/h2&gt;
&lt;p&gt;Если нашли проблему в документации:
&lt;a href="https://github.com/thankfulfor/portfolio/issues/new?template=blank_issues"&gt;Создать issue&lt;/a&gt;&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/release-banner-case/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/release-banner-case/</guid><description>&lt;h1 id="кейс-баннер-о-релизе"&gt;Кейс: баннер о релизе&lt;/h1&gt;
&lt;p&gt;Пересмотрела старое тестовое задание и увидела главную ошибку: в первом решении я попыталась объяснить, зачем команда выкатывает релиз, хотя баннер до релиза должен в первую очередь помочь пользователю не потерять результат работы.&lt;/p&gt;
&lt;p&gt;Публичный разбор этого кейса: &lt;a href="https://www.linkedin.com/pulse/%25D0%25B1%25D0%25B0%25D0%25BD%25D0%25BD%25D0%25B5%25D1%2580-%25D0%25BE-%25D1%2580%25D0%25B5%25D0%25BB%25D0%25B8%25D0%25B7%25D0%25B5-%25D1%258D%25D1%2582%25D0%25BE-%25D0%25BD%25D0%25B5-release-notes-%25D0%25B6%25D0%25B0%25D0%25BD%25D0%25BD%25D0%25B0-%25D0%25BD%25D0%25B0%25D1%2580%25D1%2581%25D0%25B8%25D1%258F-zgvff"&gt;«Баннер о релизе — это не release notes»&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="задача"&gt;Задача&lt;/h2&gt;
&lt;p&gt;Нужно придумать текст для баннера на портале поставщиков.&lt;/p&gt;
&lt;p&gt;Вводная: завтра в 9:00 команда выкатывает релиз. В течение пары часов некоторые функции могут работать неправильно или быть недоступны.&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/scenario-onboarding-store/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/scenario-onboarding-store/</guid><description>&lt;h1 id="сценарий-онбординг-нового-магазина"&gt;Сценарий: Онбординг нового магазина&lt;/h1&gt;
&lt;h2 id="контекст"&gt;Контекст&lt;/h2&gt;
&lt;p&gt;Новый партнерский магазин подключается к платформе, получает доступы и публикует первый каталог питомцев.&lt;/p&gt;
&lt;h2 id="bpmn-бизнес"&gt;BPMN (бизнес)&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart LR
A[Запрос на подключение] --&amp;gt; B[Проверка документов]
B --&amp;gt; C[Создание аккаунта магазина]
C --&amp;gt; D[Выдача API-ключей]
D --&amp;gt; E[Импорт каталога]
E --&amp;gt; F[Тестовый заказ]
F --&amp;gt; G[Go-Live]&lt;/pre&gt;
&lt;h2 id="api-технический-контракт"&gt;API (технический контракт)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Операция&lt;/th&gt;
&lt;th&gt;Метод и путь&lt;/th&gt;
&lt;th&gt;Назначение&lt;/th&gt;
&lt;th&gt;Успех&lt;/th&gt;
&lt;th&gt;Ошибки&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Создать пользователя&lt;/td&gt;
&lt;td&gt;&lt;code&gt;POST /user&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Регистрация администратора магазина&lt;/td&gt;
&lt;td&gt;&lt;code&gt;201&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;400&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Добавить питомца&lt;/td&gt;
&lt;td&gt;&lt;code&gt;POST /pet&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Публикация карточек&lt;/td&gt;
&lt;td&gt;&lt;code&gt;200&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;400&lt;/code&gt;, &lt;code&gt;422&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Загрузить изображение&lt;/td&gt;
&lt;td&gt;&lt;code&gt;POST /pet/{petId}/uploadImage&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Контент карточки&lt;/td&gt;
&lt;td&gt;&lt;code&gt;200&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;404&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="dev-задачи-что-меняем-в-системе"&gt;Dev-задачи (что меняем в системе)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Добавить шаблон онбординга с чеклистом выполнения шагов.&lt;/li&gt;
&lt;li&gt;Добавить endpoint для массовой загрузки карточек питомцев.&lt;/li&gt;
&lt;li&gt;Автоматизировать валидацию медиа и обязательных полей.&lt;/li&gt;
&lt;li&gt;Ввести onboarding status machine: &lt;code&gt;invited -&amp;gt; active -&amp;gt; verified&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="user-guide-действия-оператора"&gt;User guide (действия оператора)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Создать учетную запись магазина и администратора.&lt;/li&gt;
&lt;li&gt;Сгенерировать и передать API-ключ.&lt;/li&gt;
&lt;li&gt;Загрузить минимум 10 карточек питомцев.&lt;/li&gt;
&lt;li&gt;Проверить отображение карточек на витрине.&lt;/li&gt;
&lt;li&gt;Выполнить тестовый заказ и подтвердить оплату.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;!!! warning &amp;ldquo;Точка контроля&amp;rdquo;
Не переводите магазин в &lt;code&gt;verified&lt;/code&gt;, пока не выполнен тестовый заказ end-to-end.&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/scenario-order/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/scenario-order/</guid><description>&lt;h1 id="сценарий-проверка-интерфейсного-состояния"&gt;Сценарий: Проверка интерфейсного состояния&lt;/h1&gt;
&lt;h2 id="контекст"&gt;Контекст&lt;/h2&gt;
&lt;p&gt;Пользователь меняет важную настройку в личном кабинете. Команде нужно заранее описать, какие состояния интерфейса появляются до сохранения, после успешного сохранения и при ошибке, чтобы текст, дизайн, разработка и QA не разъехались.&lt;/p&gt;
&lt;h2 id="карта-сценария"&gt;Карта сценария&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart LR
A[Пользователь открывает настройки] --&amp;gt; B[Система загружает текущие параметры]
B --&amp;gt; C[Пользователь меняет значение]
C --&amp;gt; D[Показать несохраненные изменения]
D --&amp;gt; E[Пользователь нажимает Сохранить]
E --&amp;gt; F{Ответ сервера}
F --&amp;gt;|Успех| G[Показать подтверждение]
F --&amp;gt;|Ошибка валидации| H[Подсветить поле и объяснить ошибку]
F --&amp;gt;|Техническая ошибка| I[Показать сообщение и предложить повтор]
G --&amp;gt; J[Обновить состояние интерфейса]
H --&amp;gt; C
I --&amp;gt; E&lt;/pre&gt;
&lt;h2 id="что-нужно-зафиксировать-в-задаче"&gt;Что нужно зафиксировать в задаче&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Зона&lt;/th&gt;
&lt;th&gt;Что описать&lt;/th&gt;
&lt;th&gt;Зачем&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Состояния&lt;/td&gt;
&lt;td&gt;Загрузка, несохраненные изменения, успех, ошибка валидации, техническая ошибка&lt;/td&gt;
&lt;td&gt;Чтобы UX-тексты и интерфейс не зависели от догадок&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ограничения&lt;/td&gt;
&lt;td&gt;Какие поля обязательны, какие значения недопустимы, что делать при конфликте данных&lt;/td&gt;
&lt;td&gt;Чтобы разработка и QA одинаково понимали бизнес-логику&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Сообщения&lt;/td&gt;
&lt;td&gt;Текст ошибки, подтверждение сохранения, подсказка для повторной попытки&lt;/td&gt;
&lt;td&gt;Чтобы пользователь понимал, что произошло и что делать дальше&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Проверки&lt;/td&gt;
&lt;td&gt;Успешное сохранение, повтор после ошибки, уход со страницы с несохраненными изменениями&lt;/td&gt;
&lt;td&gt;Чтобы не потерять edge cases перед релизом&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="пример-ux-текстов"&gt;Пример UX-текстов&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Состояние&lt;/th&gt;
&lt;th&gt;Текст&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Успешное сохранение&lt;/td&gt;
&lt;td&gt;Изменения сохранены&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ошибка валидации&lt;/td&gt;
&lt;td&gt;Проверьте значение в поле и попробуйте еще раз&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Техническая ошибка&lt;/td&gt;
&lt;td&gt;Не удалось сохранить изменения. Повторите попытку&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Уход со страницы&lt;/td&gt;
&lt;td&gt;Есть несохраненные изменения. Уйти без сохранения?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="вопросы-к-команде"&gt;Вопросы к команде&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Нужно ли автосохранение или пользователь явно нажимает кнопку?&lt;/li&gt;
&lt;li&gt;Что происходит, если настройки меняются в другой вкладке?&lt;/li&gt;
&lt;li&gt;Нужно ли блокировать кнопку сохранения во время запроса?&lt;/li&gt;
&lt;li&gt;Кто видит системные ошибки: пользователь, поддержка, администратор?&lt;/li&gt;
&lt;li&gt;Где фиксируем событие для аналитики и логов?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="проверки-для-qa"&gt;Проверки для QA&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Изменить значение и убедиться, что появляется состояние несохраненных изменений.&lt;/li&gt;
&lt;li&gt;Сохранить корректное значение и проверить подтверждение.&lt;/li&gt;
&lt;li&gt;Ввести некорректное значение и проверить текст ошибки.&lt;/li&gt;
&lt;li&gt;Смоделировать техническую ошибку и проверить возможность повторить действие.&lt;/li&gt;
&lt;li&gt;Попробовать уйти со страницы до сохранения и проверить предупреждение.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="связанные-разделы"&gt;Связанные разделы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/users/troubleshooting/"&gt;UX-тексты и troubleshooting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/scenario-payment-incident/"&gt;Сценарий: Инцидент - сбой оплаты&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/scenario-payment-incident/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/scenario-payment-incident/</guid><description>&lt;h1 id="сценарий-инцидент--сбой-оплаты"&gt;Сценарий: Инцидент — сбой оплаты&lt;/h1&gt;
&lt;h2 id="контекст"&gt;Контекст&lt;/h2&gt;
&lt;p&gt;Во время checkout платежный шлюз возвращает ошибки. Нужно минимизировать потери заказов и быстро восстановить стабильность.&lt;/p&gt;
&lt;h2 id="bpmn-бизнес"&gt;BPMN (бизнес)&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart LR
A[Рост ошибок оплаты] --&amp;gt; B[Алерт в мониторинге]
B --&amp;gt; C[Триаж инцидента]
C --&amp;gt; D[Переключение на fallback-эквайер]
D --&amp;gt; E[Проверка успешных транзакций]
E --&amp;gt; F[Коммуникация клиентам]
F --&amp;gt; G[Пост-мортем]&lt;/pre&gt;
&lt;h2 id="api-технический-контракт"&gt;API (технический контракт)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Операция&lt;/th&gt;
&lt;th&gt;Метод и путь&lt;/th&gt;
&lt;th&gt;Назначение&lt;/th&gt;
&lt;th&gt;Успех&lt;/th&gt;
&lt;th&gt;Ошибки&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Создать заказ&lt;/td&gt;
&lt;td&gt;&lt;code&gt;POST /store/order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Основная операция checkout&lt;/td&gt;
&lt;td&gt;&lt;code&gt;201&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;400&lt;/code&gt;, &lt;code&gt;402&lt;/code&gt;, &lt;code&gt;503&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Получить заказ&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /store/order/{orderId}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Проверить финальный статус&lt;/td&gt;
&lt;td&gt;&lt;code&gt;200&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;404&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Требования к ошибке оплаты:&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/scenario-return-cancel/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/scenario-return-cancel/</guid><description>&lt;h1 id="сценарий-возврат--отмена"&gt;Сценарий: Возврат / отмена&lt;/h1&gt;
&lt;h2 id="контекст"&gt;Контекст&lt;/h2&gt;
&lt;p&gt;Клиент запрашивает отмену или возврат. Система должна корректно проверить статус заказа, зафиксировать решение и инициировать возврат средств.&lt;/p&gt;
&lt;h2 id="bpmn-бизнес"&gt;BPMN (бизнес)&lt;/h2&gt;
&lt;pre class="mermaid"&gt;flowchart LR
A[Клиент обращается в поддержку] --&amp;gt; B[Проверка статуса заказа]
B --&amp;gt;|До отгрузки| C[Отмена заказа]
B --&amp;gt;|После отгрузки| D[Оформление возврата]
C --&amp;gt; E[Инициировать возврат платежа]
D --&amp;gt; E
E --&amp;gt; F[Подтверждение возврата]
F --&amp;gt; G[Обновить статус заказа]
G --&amp;gt; H[Уведомить клиента]&lt;/pre&gt;
&lt;h2 id="api-технический-контракт"&gt;API (технический контракт)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Операция&lt;/th&gt;
&lt;th&gt;Метод и путь&lt;/th&gt;
&lt;th&gt;Назначение&lt;/th&gt;
&lt;th&gt;Успех&lt;/th&gt;
&lt;th&gt;Ошибки&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Получить заказ&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /store/order/{orderId}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Проверить состояние&lt;/td&gt;
&lt;td&gt;&lt;code&gt;200&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;404&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Обновить заказ&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PUT /store/order&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Выставить &lt;code&gt;cancelled&lt;/code&gt;/&lt;code&gt;returned&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;200&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;400&lt;/code&gt;, &lt;code&gt;409&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Удалить заказ&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DELETE /store/order/{orderId}&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Техническая очистка (по политике)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;200&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;404&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="dev-задачи-что-меняем-в-системе"&gt;Dev-задачи (что меняем в системе)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ввести явные статусы &lt;code&gt;cancelled&lt;/code&gt;, &lt;code&gt;return_requested&lt;/code&gt;, &lt;code&gt;returned&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Запретить отмену после статуса &lt;code&gt;delivery_in_progress&lt;/code&gt; без флага супервизора.&lt;/li&gt;
&lt;li&gt;Добавить audit trail для всех изменений статуса заказа.&lt;/li&gt;
&lt;li&gt;Добавить webhook событие &lt;code&gt;order.refund.completed&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="user-guide-действия-оператора"&gt;User guide (действия оператора)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Найти заказ по &lt;code&gt;orderId&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Проверить, на каком этапе находится доставка.&lt;/li&gt;
&lt;li&gt;Если возможно, выполнить отмену; иначе оформить возврат.&lt;/li&gt;
&lt;li&gt;Проверить факт возврата средств.&lt;/li&gt;
&lt;li&gt;Зафиксировать комментарий причины обращения.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;!!! note &amp;ldquo;Рекомендация&amp;rdquo;
Используйте единый справочник причин отмены для последующей аналитики.&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/screenshot-guide-case/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/screenshot-guide-case/</guid><description>&lt;h1 id="кейс-инструкция-по-скриншотам-на-macos"&gt;Кейс: инструкция по скриншотам на macOS&lt;/h1&gt;
&lt;p&gt;Кейс показывает структуру пользовательской инструкции: от базового сценария к частным вариантам и ограничениям.&lt;/p&gt;
&lt;h2 id="задача"&gt;Задача&lt;/h2&gt;
&lt;p&gt;Подготовить руководство для пользователя: как сделать скриншот на компьютере с macOS.&lt;/p&gt;
&lt;p&gt;В инструкции важно было показать несколько сценариев:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;снимок всего экрана;&lt;/li&gt;
&lt;li&gt;снимок окна;&lt;/li&gt;
&lt;li&gt;снимок части экрана;&lt;/li&gt;
&lt;li&gt;снимок меню;&lt;/li&gt;
&lt;li&gt;работа через встроенное приложение Screenshot.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="принцип-структуры"&gt;Принцип структуры&lt;/h2&gt;
&lt;p&gt;Пользователь приходит не за описанием инструмента, а за результатом. Поэтому инструкция строится по задачам:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Сценарий&lt;/th&gt;
&lt;th&gt;Команда&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Снять весь экран&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Shift + Cmd + 3&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Снять окно&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Shift + Cmd + 4&lt;/code&gt;, затем &lt;code&gt;Пробел&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Снять часть экрана&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Shift + Cmd + 4&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Открыть панель Screenshot&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Shift + Cmd + 5&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="фрагмент-инструкции"&gt;Фрагмент инструкции&lt;/h2&gt;
&lt;h3 id="скриншот-всего-экрана"&gt;Скриншот всего экрана&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Нажмите &lt;code&gt;Shift + Cmd + 3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Найдите файл скриншота на рабочем столе.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Примечание: чтобы скопировать скриншот в буфер обмена, нажмите &lt;code&gt;Shift + Cmd + Control + 3&lt;/code&gt;.&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/user-guides/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/user-guides/</guid><description>&lt;h1 id="пользовательские-руководства"&gt;Пользовательские руководства&lt;/h1&gt;
&lt;p&gt;Здесь собраны инструкции для конечных пользователей и операторов.&lt;/p&gt;
&lt;h2 id="содержание"&gt;Содержание&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/screenshot-guide-case/"&gt;Кейс: инструкция по скриншотам на macOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Онбординг&lt;/li&gt;
&lt;li&gt;Базовые операции&lt;/li&gt;
&lt;li&gt;Устранение неполадок&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/users/onboarding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/users/onboarding/</guid><description>&lt;h1 id="онбординг"&gt;Онбординг&lt;/h1&gt;
&lt;h2 id="первый-успешный-запрос"&gt;Первый успешный запрос&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X GET &lt;span class="s2"&gt;&amp;#34;https://petstore.swagger.io/v2/pet/findByStatus?status=available&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;=== &amp;ldquo;Успех (200)&amp;rdquo;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```json
[
{&amp;quot;id&amp;quot;: 1, &amp;quot;name&amp;quot;: &amp;quot;doggie&amp;quot;, &amp;quot;status&amp;quot;: &amp;quot;available&amp;quot;}
]
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;=== &amp;ldquo;Ошибка (400)&amp;rdquo;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;```json
{
&amp;quot;code&amp;quot;: 400,
&amp;quot;type&amp;quot;: &amp;quot;unknown&amp;quot;,
&amp;quot;message&amp;quot;: &amp;quot;bad input&amp;quot;
}
```
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;!!! warning &amp;ldquo;Частая ошибка&amp;rdquo;
Неверное значение &lt;code&gt;status&lt;/code&gt; в query-параметре.&lt;/p&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/users/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/users/troubleshooting/</guid><description>&lt;h1 id="устранение-неполадок"&gt;Устранение неполадок&lt;/h1&gt;
&lt;h2 id="400-bad-request"&gt;&lt;code&gt;400 Bad Request&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Причина: невалидные параметры запроса.&lt;/p&gt;
&lt;p&gt;Проверка:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -i &lt;span class="s2"&gt;&amp;#34;https://petstore.swagger.io/v2/pet/findByStatus?status=wrong&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="404-not-found"&gt;&lt;code&gt;404 Not Found&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Причина: ресурс с таким идентификатором не существует.&lt;/p&gt;
&lt;p&gt;Проверка:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -i &lt;span class="s2"&gt;&amp;#34;https://petstore.swagger.io/v2/pet/999999999&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title/><link>https://thankfulfor.github.io/portfolio/versions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/versions/</guid><description>&lt;h1 id="версии-api"&gt;Версии API&lt;/h1&gt;
&lt;h2 id="текущая-версия"&gt;Текущая версия&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;v2&lt;/code&gt; (активная): Swagger Petstore API, описанная в текущей документации.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="поддерживаемые-версии-в-документации"&gt;Поддерживаемые версии в документации&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;v2&lt;/code&gt; - рабочая версия (текущая).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v3&lt;/code&gt; - шаблон для следующей версии (пока в разработке).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="политика-версионирования"&gt;Политика версионирования&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Новая major-версия получает отдельный раздел документации.&lt;/li&gt;
&lt;li&gt;Для каждой версии фиксируются поддерживаемые endpoints и отличия от предыдущей.&lt;/li&gt;
&lt;li&gt;При релизе новой версии changelog должен содержать миграционные заметки.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="шаблон-раздела-для-новой-версии-v3"&gt;Шаблон раздела для новой версии (&lt;code&gt;v3&lt;/code&gt;)&lt;/h2&gt;
&lt;h3 id="base-url"&gt;Base URL&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;https://petstore.swagger.io/v3&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="ключевые-изменения"&gt;Ключевые изменения&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Добавить список новых endpoints.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Отметить breaking changes.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Добавить migration guide &lt;code&gt;v2 -&amp;gt; v3&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>00. Roadmap</title><link>https://thankfulfor.github.io/portfolio/learning/00-roadmap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/learning/00-roadmap/</guid><description>&lt;h1 id="roadmap-6-недель"&gt;Roadmap (6 недель)&lt;/h1&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Неделя&lt;/th&gt;
&lt;th&gt;Тема&lt;/th&gt;
&lt;th&gt;Артефакт недели&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;C4 (Context + Container)&lt;/td&gt;
&lt;td&gt;architecture-overview + 2 диаграммы&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;BPMN&lt;/td&gt;
&lt;td&gt;процесс отклика на вакансию&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;UML Sequence&lt;/td&gt;
&lt;td&gt;happy path + error path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;API docs&lt;/td&gt;
&lt;td&gt;3-5 endpoint&amp;rsquo;ов + ошибки&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Data + Kafka&lt;/td&gt;
&lt;td&gt;ERD + event card&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Runbook + Diataxis&lt;/td&gt;
&lt;td&gt;runbook + release note + упаковка&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="система-баллов-100"&gt;Система баллов (100)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Точность и корректность: 30&lt;/li&gt;
&lt;li&gt;Полнота сценариев и ошибок: 25&lt;/li&gt;
&lt;li&gt;Структура документации: 20&lt;/li&gt;
&lt;li&gt;Ясность языка: 15&lt;/li&gt;
&lt;li&gt;Поддерживаемость: 10&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Changelog</title><link>https://thankfulfor.github.io/portfolio/changelog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/changelog/</guid><description>&lt;h1 id="changelog"&gt;Changelog&lt;/h1&gt;
&lt;p&gt;Все значимые изменения в документации фиксируются на этой странице.&lt;/p&gt;
&lt;h2 id="2026-04-30"&gt;2026-04-30&lt;/h2&gt;
&lt;h3 id="added"&gt;Added&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Добавлен полноценный раздел &lt;code&gt;UX-портфолио&lt;/code&gt; под резюме &lt;code&gt;UX Writer / Product Writer&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Добавлены UX-кейсы: онбординг нового пользователя, аудит формы и чеклист UX-текста.&lt;/li&gt;
&lt;li&gt;Главная страница обновлена под двойное позиционирование: &lt;code&gt;Technical Writer / DocOps / UX Writer&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="changed"&gt;Changed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Раздел &lt;code&gt;UX-писательство&lt;/code&gt; переработан в витрину UX-кейсов с описанием процесса работы.&lt;/li&gt;
&lt;li&gt;Страница &lt;code&gt;Обо мне и контакты&lt;/code&gt; обновлена под две версии профиля: technical documentation и UX writing.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2026-04-29"&gt;2026-04-29&lt;/h2&gt;
&lt;h3 id="changed-1"&gt;Changed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;В контактном блоке ссылка на закрытое резюме на HH заменена на публичный профиль LinkedIn.&lt;/li&gt;
&lt;li&gt;Внутренние ссылки обновлены под текущий адрес сайта: &lt;code&gt;/portfolio/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ссылка на GitHub-репозиторий обновлена после переименования проекта в &lt;code&gt;portfolio&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2026-04-28"&gt;2026-04-28&lt;/h2&gt;
&lt;h3 id="added-1"&gt;Added&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Для страницы &lt;code&gt;Changelog&lt;/code&gt; добавлен front matter с &lt;code&gt;ShowToc: false&lt;/code&gt;, чтобы убрать шумный TOC в боковой панели.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="changed-2"&gt;Changed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Обновлена палитра портала: базовый фон сменен на &lt;code&gt;#1c1e20&lt;/code&gt; для более мягкого тёмного тона.&lt;/li&gt;
&lt;li&gt;Главная страница адаптирована под Hugo/PaperMod: заменен MkDocs-синтаксис кнопок на HTML-кнопки (&lt;code&gt;cta-btn&lt;/code&gt;), исправлены ссылки карточек.&lt;/li&gt;
&lt;li&gt;Переписаны кастомные стили под PaperMod, убраны конфликтующие правила &lt;code&gt;.md-*&lt;/code&gt; от MkDocs.&lt;/li&gt;
&lt;li&gt;Для контейнера &lt;code&gt;.main&lt;/code&gt; снято принудительное растягивание (&lt;code&gt;min-height&lt;/code&gt;), чтобы не создавать пустое пространство на коротких страницах.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fixed"&gt;Fixed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Исправлена читаемость &lt;code&gt;Interactive API&lt;/code&gt;: повышен контраст текста и элементов в &lt;code&gt;Swagger UI&lt;/code&gt; на тёмной теме.&lt;/li&gt;
&lt;li&gt;Дополнительно исправлена читаемость блока &lt;code&gt;Schemas&lt;/code&gt; (модели, свойства, скобки и разделители).&lt;/li&gt;
&lt;li&gt;Убран фон у &lt;code&gt;pre&lt;/code&gt;-блоков (&lt;code&gt;.post-content pre&lt;/code&gt;) для более чистого отображения кода.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2026-04-19"&gt;2026-04-19&lt;/h2&gt;
&lt;h3 id="added-2"&gt;Added&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Добавлена страница &lt;code&gt;Interactive API&lt;/code&gt; со Swagger UI на базе &lt;code&gt;openapi/openapi.yaml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Миграция портала на тему &lt;code&gt;Material for MkDocs&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Добавлены разделы портала: &lt;code&gt;Бизнес-аналитика&lt;/code&gt;, &lt;code&gt;Разработчикам&lt;/code&gt;, &lt;code&gt;Пользователям&lt;/code&gt;, &lt;code&gt;О проекте&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Добавлены страницы с контентом: BPMN, C4, UML, onboarding, troubleshooting, дашборд продаж.&lt;/li&gt;
&lt;li&gt;Добавлены исходники диаграмм &lt;code&gt;PlantUML&lt;/code&gt; (&lt;code&gt;docs/diagrams/*.puml&lt;/code&gt;) и скрипт рендера &lt;code&gt;scripts/render-diagrams.sh&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Добавлена страница &lt;code&gt;Docs as Code&lt;/code&gt; с описанием подхода.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="changed-3"&gt;Changed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Репозиторий и сайт переведены на новое имя: &lt;code&gt;petstore-api-docs&lt;/code&gt; (обновлен &lt;code&gt;site_url&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Усилен &lt;code&gt;Quick Start&lt;/code&gt;: добавлен пример на JavaScript (&lt;code&gt;fetch&lt;/code&gt;) и блок проверки типовых ошибок (&lt;code&gt;400&lt;/code&gt;, &lt;code&gt;404&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Обновлена навигация портала с многоуровневой структурой.&lt;/li&gt;
&lt;li&gt;CI workflow обновлен: установка зависимостей из &lt;code&gt;requirements.txt&lt;/code&gt;, рендер PlantUML-диаграмм и сборка портала перед деплоем.&lt;/li&gt;
&lt;li&gt;Добавлены критерии качества и измеримые показатели на главной странице.&lt;/li&gt;
&lt;li&gt;Добавлены разделы обратной связи на ключевые страницы портала.&lt;/li&gt;
&lt;li&gt;Добавлен &lt;code&gt;README.md&lt;/code&gt; для быстрого ревью кейса рекрутером/лидом.&lt;/li&gt;
&lt;li&gt;Добавлен финальный &lt;code&gt;QA Checklist&lt;/code&gt; в документацию.&lt;/li&gt;
&lt;li&gt;В CI добавлена валидация OpenAPI спецификации перед рендером и деплоем.&lt;/li&gt;
&lt;li&gt;Улучшен UX портала: обновлены тема/палитра, вкладки навигации, breadcrumbs и интегрированный TOC.&lt;/li&gt;
&lt;li&gt;Главная страница переработана в формат карточек разделов для быстрого сканирования.&lt;/li&gt;
&lt;li&gt;Удалены страницы-заглушки из структуры документации.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fixed-1"&gt;Fixed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Локализация пагинации (&lt;code&gt;Previous&lt;/code&gt;/&lt;code&gt;Next&lt;/code&gt;) стабилизирована с учетом динамической перерисовки темы.&lt;/li&gt;
&lt;li&gt;Исправлен CSS-отступ заголовков (&lt;code&gt;margin-bottom: 10px&lt;/code&gt;) через &lt;code&gt;docs/stylesheets/extra.css&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Исправлена загрузка OpenAPI в &lt;code&gt;Interactive API&lt;/code&gt; (fallback путей, устранен &lt;code&gt;404&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Исправлены несовместимые диаграммы &lt;code&gt;xychart-beta&lt;/code&gt; в сценариях (замена на совместимый формат).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="qa"&gt;QA&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Release check passed: проверены ключевые страницы &lt;code&gt;latest/&lt;/code&gt; и root (&lt;code&gt;/&lt;/code&gt;), включая &lt;code&gt;Interactive API&lt;/code&gt;, сценарии, версии и changelog.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2026-04-11"&gt;2026-04-11&lt;/h2&gt;
&lt;h3 id="added-3"&gt;Added&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Добавлен раздел &lt;code&gt;Changelog&lt;/code&gt; в структуру документации.&lt;/li&gt;
&lt;li&gt;Добавлена страница истории изменений для портфолио-кейса.&lt;/li&gt;
&lt;li&gt;Добавлена страница &lt;code&gt;Версии API&lt;/code&gt; с политикой версионирования и шаблоном для &lt;code&gt;v3&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Добавлен плагин поиска &lt;code&gt;search&lt;/code&gt; в конфигурацию MkDocs.&lt;/li&gt;
&lt;li&gt;Добавлен кастомный CSS &lt;code&gt;docs/stylesheets/extra.css&lt;/code&gt; для управления отступами заголовков.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="changed-4"&gt;Changed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Обновлена структура &lt;code&gt;API Reference&lt;/code&gt;: endpoints сгруппированы по ресурсам (&lt;code&gt;Pet&lt;/code&gt;, &lt;code&gt;Store&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;В &lt;code&gt;API Reference&lt;/code&gt; добавлен раздел про поиск и фильтрацию в документации.&lt;/li&gt;
&lt;li&gt;В &lt;code&gt;Getting Started&lt;/code&gt; исправлена разметка списков для корректного отображения по строкам.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fixed-2"&gt;Fixed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Исправлена локализация пагинации (&lt;code&gt;Previous&lt;/code&gt;/&lt;code&gt;Next&lt;/code&gt;) в теме Read the Docs.&lt;/li&gt;
&lt;li&gt;Улучшен JS-хук локализации, чтобы перевод применялся после динамической перерисовки DOM.&lt;/li&gt;
&lt;li&gt;Удалены лишние блоки с общими best practices с главной страницы.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2026-04-10"&gt;2026-04-10&lt;/h2&gt;
&lt;h3 id="changed-5"&gt;Changed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Проект переведен с плейсхолдерного &lt;code&gt;TaskFlow API&lt;/code&gt; на публичный &lt;code&gt;Swagger Petstore API&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Обновлены &lt;code&gt;Home&lt;/code&gt;, &lt;code&gt;Getting Started&lt;/code&gt;, &lt;code&gt;API Reference&lt;/code&gt; и &lt;code&gt;openapi/openapi.yaml&lt;/code&gt; под реальные публичные эндпоинты.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="added-4"&gt;Added&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Добавлены русские подписи пунктов меню в навигации документации.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2026-04-09"&gt;2026-04-09&lt;/h2&gt;
&lt;h3 id="added-5"&gt;Added&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Подготовлена базовая структура контента для API-документации: &lt;code&gt;Home&lt;/code&gt;, &lt;code&gt;Getting Started&lt;/code&gt;, &lt;code&gt;API Reference&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Добавлены примеры запросов и ответы для быстрого старта.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="fixed-3"&gt;Fixed&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Исправлен CI-деплой GitHub Pages: добавлено разрешение &lt;code&gt;contents: write&lt;/code&gt; в workflow.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Exams</title><link>https://thankfulfor.github.io/portfolio/learning/exams/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/learning/exams/</guid><description>&lt;h1 id="exams"&gt;Exams&lt;/h1&gt;
&lt;h2 id="midterm-после-week-3"&gt;Midterm (после Week 3)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Теория: 10 вопросов&lt;/li&gt;
&lt;li&gt;Практика: 1 sequence + 1 C4&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="final-после-week-6"&gt;Final (после Week 6)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Теория: 20 вопросов&lt;/li&gt;
&lt;li&gt;Практика: C4 + BPMN + API + Event + Runbook&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Knowledge Base</title><link>https://thankfulfor.github.io/portfolio/knowledge-base/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/knowledge-base/</guid><description>&lt;h1 id="база-знаний-проекта"&gt;База знаний проекта&lt;/h1&gt;
&lt;h2 id="цель"&gt;Цель&lt;/h2&gt;
&lt;p&gt;Сделать знания о продукте доступными для команды без устных пересказов и потери контекста.&lt;/p&gt;
&lt;h2 id="что-входит-в-базу-знаний"&gt;Что входит в базу знаний&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Архитектура: контекст системы, сервисы, зависимости.&lt;/li&gt;
&lt;li&gt;API и контракты: endpoint&amp;rsquo;ы, ошибки, ограничения.&lt;/li&gt;
&lt;li&gt;Пользовательские сценарии: happy path и edge cases.&lt;/li&gt;
&lt;li&gt;Инциденты: runbook, troubleshooting, postmortem.&lt;/li&gt;
&lt;li&gt;Релизы: release notes и изменения по версиям.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="структура"&gt;Структура&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Product Overview&lt;/li&gt;
&lt;li&gt;Architecture&lt;/li&gt;
&lt;li&gt;API&lt;/li&gt;
&lt;li&gt;Integrations&lt;/li&gt;
&lt;li&gt;User Flows&lt;/li&gt;
&lt;li&gt;Operations (runbooks)&lt;/li&gt;
&lt;li&gt;Release Notes&lt;/li&gt;
&lt;li&gt;FAQ&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="процесс-актуализации"&gt;Процесс актуализации&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Любое изменение функциональности должно иметь doc-обновление в том же цикле.&lt;/li&gt;
&lt;li&gt;Изменения в документации проходят review вместе с задачей разработки.&lt;/li&gt;
&lt;li&gt;Для критичных разделов назначены владельцы (owner + backup).&lt;/li&gt;
&lt;li&gt;Раз в спринт проводится ревизия устаревших страниц.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="definition-of-done-для-документации"&gt;Definition of Done для документации&lt;/h2&gt;
&lt;p&gt;Изменение считается завершенным, если:&lt;/p&gt;</description></item><item><title>Progress Log</title><link>https://thankfulfor.github.io/portfolio/learning/progress-log/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/learning/progress-log/</guid><description>&lt;h1 id="progress-log"&gt;Progress Log&lt;/h1&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Неделя&lt;/th&gt;
&lt;th&gt;Что сделано&lt;/th&gt;
&lt;th&gt;Балл&lt;/th&gt;
&lt;th&gt;Комментарий&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Quizzes</title><link>https://thankfulfor.github.io/portfolio/learning/quizzes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/learning/quizzes/</guid><description>&lt;h1 id="quizzes"&gt;Quizzes&lt;/h1&gt;
&lt;h2 id="каждую-неделю"&gt;Каждую неделю&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;5-10 вопросов по теме недели.&lt;/li&gt;
&lt;li&gt;Минимум 80% правильных для перехода.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="раз-в-2-недели"&gt;Раз в 2 недели&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Смешанный квиз по пройденному материалу.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Release Notes</title><link>https://thankfulfor.github.io/portfolio/release-notes/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/release-notes/</guid><description>&lt;h1 id="release-notes"&gt;Release Notes&lt;/h1&gt;
&lt;h2 id="пример-1-релиз-профиля-пользователя-v2140"&gt;Пример 1: Релиз профиля пользователя (v2.14.0)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Дата:&lt;/strong&gt; 2026-05-01
&lt;strong&gt;Статус:&lt;/strong&gt; Production&lt;/p&gt;
&lt;h3 id="что-изменилось"&gt;Что изменилось&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Добавили подтверждение смены email через код.&lt;/li&gt;
&lt;li&gt;Улучшили сообщения об ошибках при вводе кода.&lt;/li&gt;
&lt;li&gt;Добавили логирование причин неуспешной верификации.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="для-пользователей"&gt;Для пользователей&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Процесс смены почты стал понятнее: система сообщает, почему код не принят.&lt;/li&gt;
&lt;li&gt;При повторной отправке кода отображается ограничение по таймеру.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="для-поддержки"&gt;Для поддержки&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Новые коды ошибок: &lt;code&gt;EMAIL_CODE_EXPIRED&lt;/code&gt;, &lt;code&gt;EMAIL_CODE_INVALID&lt;/code&gt;, &lt;code&gt;EMAIL_RATE_LIMIT&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;В тикетах запрашивать &lt;code&gt;requestId&lt;/code&gt; для диагностики.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="для-команды"&gt;Для команды&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;API: &lt;code&gt;POST /api/v1/profile/email/confirm&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Логи в Kibana: &lt;code&gt;profile-email-confirm&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Метрики: &lt;code&gt;email_confirm_success&lt;/code&gt;, &lt;code&gt;email_confirm_failed&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="риски-и-откат"&gt;Риски и откат&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Риск: рост ошибок при старых клиентах.&lt;/li&gt;
&lt;li&gt;Откат: feature flag &lt;code&gt;email_confirm_v2&lt;/code&gt; в значение &lt;code&gt;off&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="пример-2-релиз-уведомлений-о-занятиях-v2150"&gt;Пример 2: Релиз уведомлений о занятиях (v2.15.0)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Дата:&lt;/strong&gt; 2026-05-08
&lt;strong&gt;Статус:&lt;/strong&gt; Production&lt;/p&gt;</description></item><item><title>Tech Writing</title><link>https://thankfulfor.github.io/portfolio/tech/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/tech/</guid><description>&lt;h2 id="что-я-делаю-в-роли-technical-writer"&gt;Что я делаю в роли Technical Writer&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Описываю функциональность ИТ-продукта с точки зрения пользовательских сценариев и технической реализации.&lt;/li&gt;
&lt;li&gt;Создаю и поддерживаю в актуальном состоянии базу знаний проекта.&lt;/li&gt;
&lt;li&gt;Пишу release notes для команды проекта.&lt;/li&gt;
&lt;li&gt;Читаю и создаю техническую документацию: API, инструкции, регламенты.&lt;/li&gt;
&lt;li&gt;Уточняю детали работы функциональности в связке с разработкой, QA, аналитикой и дизайном.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="кейсы"&gt;Кейсы&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Кейс&lt;/th&gt;
&lt;th&gt;Что внутри&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://thankfulfor.github.io/portfolio/architecture/"&gt;Архитектура и диаграммы&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;C4/sequence, зависимости, контекст&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://thankfulfor.github.io/portfolio/api-overview/"&gt;Документация API&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;endpoint&amp;rsquo;ы, примеры, ошибки&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://thankfulfor.github.io/portfolio/scenario-order/"&gt;Сценарий: создание заказа&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;сквозной flow UI → API → backend&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://thankfulfor.github.io/portfolio/scenario-payment-incident/"&gt;Инцидент: сбой оплаты&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;диагностика, шаги восстановления&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://thankfulfor.github.io/portfolio/release-notes/"&gt;Release Notes&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;формат релизных заметок: для пользователей, поддержки и команды&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://thankfulfor.github.io/portfolio/knowledge-base/"&gt;Knowledge Base&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;структура базы знаний и процесс актуализации&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://thankfulfor.github.io/portfolio/docs-as-code-pipeline/"&gt;Docs as Code pipeline&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;процесс обновления и review документации&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="контакты-и-cv"&gt;Контакты и CV&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/about/resume/"&gt;Резюме и контакты&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>UX Writing</title><link>https://thankfulfor.github.io/portfolio/ux/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/ux/</guid><description>&lt;h2 id="кейсы"&gt;Кейсы&lt;/h2&gt;
&lt;p&gt;Здесь собраны UX-кейсы и пересмотры старых тестовых заданий. В них я показываю не только финальные формулировки, но и ход работы: как разбираю сценарий, нахожу конфликт в логике интерфейса, уточняю риски и выбираю текст под действие пользователя.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Кейс&lt;/th&gt;
&lt;th&gt;Что внутри&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://thankfulfor.github.io/portfolio/email-change-ux-case/"&gt;Дополнительная почта&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;пересмотр тестового: как отделить служебные письма от маркетинговой рассылки&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://thankfulfor.github.io/portfolio/release-banner-case/"&gt;Релизный баннер&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;пересмотр тестового: как предупредить о релизе и не смешать это с рассказом о новых функциях&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://thankfulfor.github.io/portfolio/ux-form-audit-case/"&gt;UX-аудит формы&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;улучшение полей, подсказок и валидации&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="контакты-и-cv"&gt;Контакты и CV&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/about/resume/"&gt;Резюме и контакты&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>UX-кейс: аудит формы</title><link>https://thankfulfor.github.io/portfolio/ux-form-audit-case/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/ux-form-audit-case/</guid><description>&lt;h1 id="ux-кейс-аудит-формы"&gt;UX-кейс: аудит формы&lt;/h1&gt;
&lt;p&gt;Кейс показывает, как я проверяю форму не только на грамотность текста, но и на ясность сценария: что пользователь вводит, почему это нужно и как исправить ошибку.&lt;/p&gt;
&lt;h2 id="контекст"&gt;Контекст&lt;/h2&gt;
&lt;p&gt;Форма собирает контактные данные пользователя. Команда хочет снизить количество ошибок и незавершенных отправок.&lt;/p&gt;
&lt;h2 id="до"&gt;До&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Email
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Введите корректное значение.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Телефон
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Неверный формат.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Комментарий
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Заполните поле.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="проблемы"&gt;Проблемы&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Элемент&lt;/th&gt;
&lt;th&gt;Проблема&lt;/th&gt;
&lt;th&gt;Риск&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Не объяснено, зачем нужен адрес&lt;/td&gt;
&lt;td&gt;Пользователь может указать нерабочую почту&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Телефон&lt;/td&gt;
&lt;td&gt;Ошибка не показывает формат&lt;/td&gt;
&lt;td&gt;Пользователь повторяет ошибку&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Комментарий&lt;/td&gt;
&lt;td&gt;Неясно, что писать&lt;/td&gt;
&lt;td&gt;Поле заполняют случайным текстом&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Общая логика&lt;/td&gt;
&lt;td&gt;Все ошибки звучат одинаково&lt;/td&gt;
&lt;td&gt;Интерфейс не помогает исправиться&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="после"&gt;После&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Рабочая почта
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;На этот адрес отправим подтверждение и уведомления по заявке.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Телефон
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Введите номер в формате +7 900 000-00-00.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Комментарий
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Опишите задачу в 1-2 предложениях. Например: &amp;#34;Нужно подключить новый филиал к отчетам&amp;#34;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ошибки-после-редактуры"&gt;Ошибки после редактуры&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Не удалось отправить форму
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Проверьте обязательные поля и попробуйте еще раз.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Укажите рабочую почту
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Мы отправим туда подтверждение заявки.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Введите телефон в формате +7 900 000-00-00
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Так менеджер сможет связаться с вами без уточнений.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="что-изменилось"&gt;Что изменилось&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Названия полей стали конкретнее.&lt;/li&gt;
&lt;li&gt;Подсказки объясняют назначение данных.&lt;/li&gt;
&lt;li&gt;Ошибки говорят, как исправить ввод.&lt;/li&gt;
&lt;li&gt;Текст не обвиняет пользователя.&lt;/li&gt;
&lt;li&gt;Пример комментария снижает неопределенность.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="чеклист-проверки-формы"&gt;Чеклист проверки формы&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;У каждого обязательного поля понятна причина обязательности.&lt;/li&gt;
&lt;li&gt;Ошибка показывает ожидаемый формат или следующий шаг.&lt;/li&gt;
&lt;li&gt;CTA описывает действие: &lt;code&gt;Отправить заявку&lt;/code&gt;, а не &lt;code&gt;ОК&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Текст короткий и помещается в интерфейс.&lt;/li&gt;
&lt;li&gt;Термины совпадают с help center и письмами.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Week 1: C4</title><link>https://thankfulfor.github.io/portfolio/learning/week-01-c4/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/learning/week-01-c4/</guid><description>&lt;h1 id="week-1-c4-context--container"&gt;Week 1: C4 (Context + Container)&lt;/h1&gt;
&lt;h2 id="конспект"&gt;Конспект&lt;/h2&gt;
&lt;p&gt;C4 нужен, чтобы показать систему сверху вниз: кто взаимодействует с продуктом, какие контейнеры участвуют и где границы ответственности.&lt;/p&gt;
&lt;h2 id="практика"&gt;Практика&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Обязательное: C4 Context + C4 Container для кейса &amp;ldquo;Отклик на вакансию&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Optional: добавить 5 открытых вопросов к архитектору.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="чеклист"&gt;Чеклист&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Понятно, кто внешние акторы.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Понятно, где frontend/backend/database.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Понятно, какие внешние интеграции.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Есть легенда/глоссарий терминов.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="мини-квиз-5"&gt;Мини-квиз (5)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Чем Context отличается от Container?&lt;/li&gt;
&lt;li&gt;Какие границы системы обязательно показывать?&lt;/li&gt;
&lt;li&gt;Что не стоит добавлять в Context-диаграмму?&lt;/li&gt;
&lt;li&gt;Как связать C4 с API-документацией?&lt;/li&gt;
&lt;li&gt;Какие ошибки при построении C4 самые частые?&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="артефакт-недели"&gt;Артефакт недели&lt;/h2&gt;
&lt;p&gt;Ссылка на файл: &lt;code&gt;...&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Week 2: BPMN</title><link>https://thankfulfor.github.io/portfolio/learning/week-02-bpmn/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/learning/week-02-bpmn/</guid><description>&lt;h1 id="week-2-bpmn"&gt;Week 2: BPMN&lt;/h1&gt;
&lt;h2 id="конспект"&gt;Конспект&lt;/h2&gt;
&lt;p&gt;BPMN показывает бизнес-процесс: роли, этапы, развилки, исключения. Это не техническая последовательность вызовов.&lt;/p&gt;
&lt;h2 id="практика"&gt;Практика&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Обязательное: BPMN &amp;ldquo;Отклик -&amp;gt; Скрининг -&amp;gt; Решение&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Optional: добавить SLA-метки на ключевые этапы.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="чеклист"&gt;Чеклист&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Определены роли.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Есть точки принятия решения.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Есть путь отклонения/ошибки.&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Процесс понятен без разработчика.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="мини-квиз-5"&gt;Мини-квиз (5)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Чем BPMN отличается от Sequence?&lt;/li&gt;
&lt;li&gt;Какие роли обязательны в этом процессе?&lt;/li&gt;
&lt;li&gt;Где показать ручной шаг рекрутера?&lt;/li&gt;
&lt;li&gt;Как обозначить исключение?&lt;/li&gt;
&lt;li&gt;Что считать завершением процесса?&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="артефакт-недели"&gt;Артефакт недели&lt;/h2&gt;
&lt;p&gt;Ссылка на файл: &lt;code&gt;...&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Week 3: Sequence</title><link>https://thankfulfor.github.io/portfolio/learning/week-03-sequence/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/learning/week-03-sequence/</guid><description>&lt;h1 id="week-3-sequence"&gt;Week 3: Sequence&lt;/h1&gt;
&lt;h2 id="практика"&gt;Практика&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Обязательное: Sequence для &amp;ldquo;Отклика&amp;rdquo; (happy path).&lt;/li&gt;
&lt;li&gt;Обязательное: Sequence для ошибки (duplicate, timeout или validation).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="мини-квиз"&gt;Мини-квиз&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Чем sync и async вызовы отличаются в диаграмме?&lt;/li&gt;
&lt;li&gt;Где отмечать retries?&lt;/li&gt;
&lt;li&gt;Что такое критичный путь сценария?&lt;/li&gt;
&lt;li&gt;Какие ошибки нужно показывать в sequence?&lt;/li&gt;
&lt;li&gt;Когда sequence не нужен?&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Week 4: API</title><link>https://thankfulfor.github.io/portfolio/learning/week-04-api/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/learning/week-04-api/</guid><description>&lt;h1 id="week-4-api"&gt;Week 4: API&lt;/h1&gt;
&lt;h2 id="практика"&gt;Практика&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Обязательное: описать &lt;code&gt;POST /applications&lt;/code&gt;, &lt;code&gt;GET /applications/{id}&lt;/code&gt;, &lt;code&gt;GET /vacancies&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Обязательное: добавить ошибки 400/404/409/422 и что делать клиенту.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="мини-квиз"&gt;Мини-квиз&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Что обязательно в API reference?&lt;/li&gt;
&lt;li&gt;Чем 409 отличается от 422?&lt;/li&gt;
&lt;li&gt;Где описывать rate limit?&lt;/li&gt;
&lt;li&gt;Какие примеры нужны в response?&lt;/li&gt;
&lt;li&gt;Что такое idempotency и где его фиксировать?&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Week 5: Data + Kafka</title><link>https://thankfulfor.github.io/portfolio/learning/week-05-data-kafka/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/learning/week-05-data-kafka/</guid><description>&lt;h1 id="week-5-data--kafka"&gt;Week 5: Data + Kafka&lt;/h1&gt;
&lt;h2 id="практика"&gt;Практика&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Обязательное: ERD для candidate/vacancy/application/resume.&lt;/li&gt;
&lt;li&gt;Обязательное: карточка события &lt;code&gt;application.created&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="мини-квиз"&gt;Мини-квиз&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Что должно быть в event contract?&lt;/li&gt;
&lt;li&gt;Зачем нужен DLQ?&lt;/li&gt;
&lt;li&gt;Что такое source of truth?&lt;/li&gt;
&lt;li&gt;Как связать API поле с БД?&lt;/li&gt;
&lt;li&gt;Что проверить при дублях событий?&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Week 6: Runbook + Diataxis</title><link>https://thankfulfor.github.io/portfolio/learning/week-06-runbook-diataxis/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/learning/week-06-runbook-diataxis/</guid><description>&lt;h1 id="week-6-runbook--diataxis"&gt;Week 6: Runbook + Diataxis&lt;/h1&gt;
&lt;h2 id="практика"&gt;Практика&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Обязательное: Runbook для инцидента &amp;ldquo;не уходят уведомления&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Обязательное: 1 release note с user+tech блоком.&lt;/li&gt;
&lt;li&gt;Обязательное: разложить материалы по Diataxis.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="мини-квиз"&gt;Мини-квиз&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Чем How-to отличается от Reference?&lt;/li&gt;
&lt;li&gt;Что обязательно в runbook?&lt;/li&gt;
&lt;li&gt;Какие метрики указывать в troubleshooting?&lt;/li&gt;
&lt;li&gt;Что входит в релизный блок для поддержки?&lt;/li&gt;
&lt;li&gt;Когда документация считается готовой?&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Архитектура и диаграммы</title><link>https://thankfulfor.github.io/portfolio/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/architecture/</guid><description>&lt;p&gt;Раздел с архитектурными артефактами: C4, UML, последовательности, потоки данных и бизнес-процессы.&lt;/p&gt;
&lt;p&gt;Задача этого раздела: быстро объяснить, как устроена система, где проходят границы ответственности и как функциональность работает в реальных сценариях.&lt;/p&gt;
&lt;h2 id="типы-артефактов"&gt;Типы артефактов&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Контекстная диаграмма&lt;/li&gt;
&lt;li&gt;Диаграмма компонентов&lt;/li&gt;
&lt;li&gt;Диаграмма последовательности&lt;/li&gt;
&lt;li&gt;BPMN-процесс&lt;/li&gt;
&lt;li&gt;ERD / модель данных&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="что-документирую-в-архитектуре"&gt;Что документирую в архитектуре&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Границы системы: что внутри продукта, что относится к внешним интеграциям.&lt;/li&gt;
&lt;li&gt;Основные сервисы и их ответственность: frontend, backend, API, хранилища, очереди.&lt;/li&gt;
&lt;li&gt;Ключевые пользовательские и системные сценарии: happy path и ошибки.&lt;/li&gt;
&lt;li&gt;Технические ограничения: зависимости, retry, таймауты, точки отказа.&lt;/li&gt;
&lt;li&gt;Связь диаграмм с документацией API, инструкциями и release notes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="примеры-в-портфолио"&gt;Примеры в портфолио&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/developers/architecture-c4/"&gt;C4: контекст системы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/developers/uml-class-model/"&gt;UML: диаграмма классов&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/developers/sequence-create-order/"&gt;Sequence: создание заказа&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/business/bpmn-order-flow/"&gt;BPMN: поток обработки заказа&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="какие-вопросы-закрывает-раздел"&gt;Какие вопросы закрывает раздел&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Какие компоненты участвуют в реализации фичи?&lt;/li&gt;
&lt;li&gt;Где источник истины по данным?&lt;/li&gt;
&lt;li&gt;Какие сервисы вызываются синхронно, какие асинхронно?&lt;/li&gt;
&lt;li&gt;Что происходит при ошибках и как система восстанавливается?&lt;/li&gt;
&lt;li&gt;Как изменение в одном сервисе повлияет на другие части системы?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="как-поддерживаю-актуальность"&gt;Как поддерживаю актуальность&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Обновляю диаграммы в рамках той же задачи, где меняется функциональность.&lt;/li&gt;
&lt;li&gt;Добавляю ссылку на измененные API-контракты и сценарии.&lt;/li&gt;
&lt;li&gt;Фиксирую риски и ограничения в тексте рядом с диаграммой.&lt;/li&gt;
&lt;li&gt;Провожу ревью с разработкой/QA перед релизом.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="definition-of-done-для-архитектурной-документации"&gt;Definition of Done для архитектурной документации&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Диаграмма отражает текущую реализацию, а не черновую гипотезу.&lt;/li&gt;
&lt;li&gt;Для ключевого сценария есть последовательность шагов и обработка ошибок.&lt;/li&gt;
&lt;li&gt;Указаны внешние зависимости и зона ответственности сервисов.&lt;/li&gt;
&lt;li&gt;Есть ссылки на связанные API-страницы, инструкции и релизные изменения.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Обо мне и контакты</title><link>https://thankfulfor.github.io/portfolio/about-page/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/about-page/</guid><description>&lt;h1 id="обо-мне-и-контакты"&gt;Обо мне и контакты&lt;/h1&gt;
&lt;p&gt;Я работаю на стыке технической документации, UX writing и документационных процессов.&lt;/p&gt;
&lt;p&gt;У меня frontend-бэкграунд и 10+ лет в продуктовой IT-разработке. Это помогает быстро разбираться в логике продукта, ограничениях разработки, API, пользовательских сценариях и интерфейсных состояниях.&lt;/p&gt;
&lt;h2 id="позиционирование"&gt;Позиционирование&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Направление&lt;/th&gt;
&lt;th&gt;Что делаю&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Technical Writer / DocOps&lt;/td&gt;
&lt;td&gt;Навожу порядок в документации, описываю API, сценарии, edge cases, release notes, help center и документационный workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UX Writer / Product Writer&lt;/td&gt;
&lt;td&gt;Пишу и улучшаю интерфейсные тексты: ошибки, уведомления, onboarding, empty states, email, push и SMS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI-assisted documentation&lt;/td&gt;
&lt;td&gt;Использую AI для структурирования вводных, генерации вариантов, поиска нестыковок и проверки полноты сценариев&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="что-мне-интересно"&gt;Что мне интересно&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Небольшие и средние продуктовые команды.&lt;/li&gt;
&lt;li&gt;Документация рядом с разработкой: Markdown, Git, OpenAPI, docs-as-code, базы знаний.&lt;/li&gt;
&lt;li&gt;UX-тексты, которые помогают пользователю пройти сценарий без тупиков.&lt;/li&gt;
&lt;li&gt;Документационные процессы: актуальность, структура, навигация, release notes, workflow.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="контакты"&gt;Контакты&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;LinkedIn: &lt;a href="https://www.linkedin.com/in/narsiya/"&gt;linkedin.com/in/narsiya&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/thankfulfor"&gt;github.com/thankfulfor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Email: &lt;a href="mailto:thankfulfor@ya.ru"&gt;thankfulfor@ya.ru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Telegram: &lt;a href="https://t.me/fuckinuseless"&gt;@fuckinuseless&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Резюме Technical Writer / DocOps</title><link>https://thankfulfor.github.io/portfolio/about/resume-technical-writer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/about/resume-technical-writer/</guid><description>&lt;h1 id="резюме-technical-writer--docops"&gt;Резюме Technical Writer / DocOps&lt;/h1&gt;
&lt;h2 id="профиль"&gt;Профиль&lt;/h2&gt;
&lt;p&gt;Technical Writer / DocOps с frontend-бэкграундом и 10+ годами в продуктовой IT-разработке.&lt;/p&gt;
&lt;p&gt;Навожу порядок в продуктовой документации: описываю API, пользовательские сценарии, edge cases, release notes, внутренние гайды, базы знаний и документационные процессы.&lt;/p&gt;
&lt;p&gt;Понимаю код, REST API, JSON, CI/CD и ограничения разработки, поэтому быстро нахожу общий язык с разработчиками. Работаю с Markdown, Git, OpenAPI/Swagger, Confluence, YouTrack/Jira, Hugo/MkDocs и подходом Docs as Code.&lt;/p&gt;
&lt;p&gt;Использую AI-инструменты для структурирования вводных, подготовки черновиков, поиска нестыковок и проверки полноты документации. Факты, термины и продуктовую логику проверяю вручную.&lt;/p&gt;</description></item><item><title>Резюме UX-редактора / Product Writer</title><link>https://thankfulfor.github.io/portfolio/about/resume-ux-editor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/about/resume-ux-editor/</guid><description>&lt;h1 id="резюме-ux-редактора--product-writer"&gt;Резюме UX-редактора / Product Writer&lt;/h1&gt;
&lt;h2 id="профиль"&gt;Профиль&lt;/h2&gt;
&lt;p&gt;UX Writer / Product Writer с frontend-бэкграундом и 10+ годами в продуктовой IT-разработке.&lt;/p&gt;
&lt;p&gt;Пишу и улучшаю интерфейсные тексты: ошибки, уведомления, попапы, empty states, onboarding, подсказки, email, push и SMS. Помогаю командам описывать пользовательские сценарии, находить edge cases и делать продукт понятнее без лишней нагрузки на поддержку.&lt;/p&gt;
&lt;p&gt;Работаю с Figma, YouTrack/Jira, требованиями, макетами и техническими ограничениями. Использую AI-инструменты для анализа сценариев, генерации вариантов формулировок и проверки полноты UX-текстов. Финальные решения проверяю вручную по продуктовой логике и пользовательскому контексту.&lt;/p&gt;</description></item><item><title>Резюме и контакты</title><link>https://thankfulfor.github.io/portfolio/about/resume/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/about/resume/</guid><description>&lt;h1 id="резюме-и-контакты"&gt;Резюме и контакты&lt;/h1&gt;
&lt;p&gt;У меня два смежных, но разных профессиональных фокуса: UX/Product Writing и Technical Writing / DocOps. Для откликов лучше использовать отдельное резюме под конкретную вакансию, чтобы не размывать позиционирование.&lt;/p&gt;
&lt;h2 id="выбрать-резюме"&gt;Выбрать резюме&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/about/resume-ux-editor/"&gt;Резюме UX-редактора / Product Writer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thankfulfor.github.io/portfolio/about/resume-technical-writer/"&gt;Резюме Technical Writer / DocOps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="контакты"&gt;Контакты&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Email: &lt;a href="mailto:thankfulfor@ya.ru"&gt;thankfulfor@ya.ru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Telegram: &lt;a href="https://t.me/fuckinuseless"&gt;@fuckinuseless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;LinkedIn: &lt;a href="https://www.linkedin.com/in/narsiya/"&gt;linkedin.com/in/narsiya&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/thankfulfor/portfolio"&gt;github.com/thankfulfor/portfolio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Портфолио: &lt;a href="https://thankfulfor.github.io/portfolio/"&gt;thankfulfor.github.io/portfolio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="какую-ссылку-давать"&gt;Какую ссылку давать&lt;/h2&gt;
&lt;p&gt;Для вакансий UX-редактора, продуктового редактора, Product Writer, UX Writer и Content Designer лучше давать ссылку на редакторское резюме.&lt;/p&gt;</description></item><item><title>Чеклист UX-текста</title><link>https://thankfulfor.github.io/portfolio/ux-portfolio-checklist/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://thankfulfor.github.io/portfolio/ux-portfolio-checklist/</guid><description>&lt;h1 id="чеклист-ux-текста"&gt;Чеклист UX-текста&lt;/h1&gt;
&lt;p&gt;Короткий чеклист для проверки интерфейсного текста перед передачей в разработку.&lt;/p&gt;
&lt;h2 id="сценарий"&gt;Сценарий&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Понятно, в каком состоянии находится пользователь.&lt;/li&gt;
&lt;li&gt;Текст отвечает на вопрос: что произошло или что нужно сделать дальше.&lt;/li&gt;
&lt;li&gt;Нет противоречия между заголовком, описанием и CTA.&lt;/li&gt;
&lt;li&gt;Есть безопасный выход: отмена, пропуск, возврат или поддержка.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ясность"&gt;Ясность&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Нет технического жаргона без необходимости.&lt;/li&gt;
&lt;li&gt;Один объект называется одинаково во всем сценарии.&lt;/li&gt;
&lt;li&gt;Ошибка объясняет, как исправить ситуацию.&lt;/li&gt;
&lt;li&gt;Подсказка не дублирует название поля, а добавляет смысл.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="интерфейс"&gt;Интерфейс&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Текст помещается в макет и не ломает верстку.&lt;/li&gt;
&lt;li&gt;Вариант для мобильного интерфейса не теряет смысл.&lt;/li&gt;
&lt;li&gt;CTA начинается с действия: &lt;code&gt;Создать&lt;/code&gt;, &lt;code&gt;Сохранить&lt;/code&gt;, &lt;code&gt;Отправить&lt;/code&gt;, &lt;code&gt;Открыть&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Empty state помогает начать, а не просто сообщает, что данных нет.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="продуктовая-связность"&gt;Продуктовая связность&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Формулировка согласована с задачей, макетом и техническим ограничением.&lt;/li&gt;
&lt;li&gt;Help center, FAQ и release notes используют те же термины.&lt;/li&gt;
&lt;li&gt;Если действие необратимо, пользователь предупрежден до подтверждения.&lt;/li&gt;
&lt;li&gt;Если есть риск потери данных, он назван явно.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ai-assisted-проверка"&gt;AI-assisted проверка&lt;/h2&gt;
&lt;p&gt;AI можно использовать для:&lt;/p&gt;</description></item></channel></rss>