From bd0e562934be18a217758ebfda08bf684111c6d5 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 5 Oct 2026 19:08:12 +0200 Subject: [PATCH] =?UTF-8?q?refactor:=20=D1=83=D0=B1=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D1=81=D1=82=D0=B5=D0=BA=D0=BB=D1=8F=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D1=81=D0=BB=D0=BE=D0=B9=20=D1=81=D0=BE=20=D0=B2=D1=81?= =?UTF-8?q?=D0=B5=D1=85=20=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=B5=D0=BA?= =?UTF-8?q?=20=D0=BF=D0=BE=D1=80=D1=82=D1=84=D0=BE=D0=BB=D0=B8=D0=BE=20?= =?UTF-8?q?=D0=B8=20=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20data-glass=3D"false"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CSS: .mp-card[data-glass="false"] ::before/::after { display: none }, .portfolio-card[data-glass="false"] background -> var(--surface) --- .../2026-09-26_191306-ai-assistant-case.md | 19 ++++ ...026-09-26_192650-ai-case-callouts-media.md | 19 ++++ ...26-09-28_124636-merge-dev-main-redeploy.md | 23 ++++ ...30613-main-nav-activity-after-portfolio.md | 15 +++ .../2026-09-28_151119-case-site-portfolio.md | 34 ++++++ ...6-09-28_152945-push-site-portfolio-main.md | 27 +++++ ...6-09-29_174828-apply-card-columns-edits.md | 69 ++++++++++++ .../references/mesh-bg-optimization.md | 49 +++++++++ texts/content-edits/pending.json | 101 +++++++++++++----- 9 files changed, 330 insertions(+), 26 deletions(-) create mode 100644 .hermes/plans/2026-09-26_191306-ai-assistant-case.md create mode 100644 .hermes/plans/2026-09-26_192650-ai-case-callouts-media.md create mode 100644 .hermes/plans/2026-09-28_124636-merge-dev-main-redeploy.md create mode 100644 .hermes/plans/2026-09-28_130613-main-nav-activity-after-portfolio.md create mode 100644 .hermes/plans/2026-09-28_151119-case-site-portfolio.md create mode 100644 .hermes/plans/2026-09-28_152945-push-site-portfolio-main.md create mode 100644 .hermes/plans/2026-09-29_174828-apply-card-columns-edits.md create mode 100644 skills/site-portfolio/references/mesh-bg-optimization.md diff --git a/.hermes/plans/2026-09-26_191306-ai-assistant-case.md b/.hermes/plans/2026-09-26_191306-ai-assistant-case.md new file mode 100644 index 0000000..0a1e9d3 --- /dev/null +++ b/.hermes/plans/2026-09-26_191306-ai-assistant-case.md @@ -0,0 +1,19 @@ +# Plan: update AI Assistant case + +## Goal +Update the AI Assistant case using the facts collected in the interview. Keep the Russian and English case pages aligned, and distinguish the working plugin from the planned direction shown in the final video. + +## Approach +Replace placeholder and inaccurate narrative copy with the real workflow: scripts are authored with an LLM in Cursor; a local server and WebSocket let the Figma plugin retrieve and run them; saved scripts can be launched from the plugin independently of Cursor. Describe context copying, execution logs, test-first workflow, observed use cases, and qualitative outcome without inventing metrics. Keep the final video and add a separate plans section that states the interface is currently a concept and its features do not yet work. + +## Steps +1. Update `src/pages/cases/ai-assistant-figma.html`: introduction, context, task, solution, result, add a plans section, and give the final video a caption that clearly marks its UI as not yet functional. +2. Update `src/pages/cases/ai-assistant-figma.en.html` to match the Russian case. +3. Run `npm run build:pages`; inspect built Russian and English pages and verify the first-version narrative, plans distinction, and replacement of placeholders. +4. Review the diff and commit only the two case source files. Leave the pre-existing modification to `texts/content-edits/pending.json` untouched. Do not push. + +## Acceptance checks +- Clearly distinguish the working first version from the planned interface shown in the final video; state that planned agent features are not implemented. +- Outcome uses the user's stated estimate (1–30 minutes per task reduced to one click) as an approximate personal observation, not as a measured study result. +- No unprovided facts, timelines, or user research are introduced. +- Russian and English pages build successfully and remain aligned. diff --git a/.hermes/plans/2026-09-26_192650-ai-case-callouts-media.md b/.hermes/plans/2026-09-26_192650-ai-case-callouts-media.md new file mode 100644 index 0000000..e79c709 --- /dev/null +++ b/.hermes/plans/2026-09-26_192650-ai-case-callouts-media.md @@ -0,0 +1,19 @@ +# Plan: add callouts and distribute AI Assistant case media + +## Goal +Use the site's existing long-form case components and spread relevant media through the AI Assistant story rather than leaving screenshots together. + +## Approach +Use the documented `.case-callout` markup for the core product value and the observed time saving. Reposition existing screenshots and demos beside the narrative they illustrate: script handoff, script catalog/reuse, debugging/logs, and generated Figma work. Keep the final UI-only video in the Plans section. Do not invent feature behavior beyond the user's description and what is visible in the assets. + +## Steps +1. Edit `src/pages/cases/ai-assistant-figma.html` to add callout block(s) and rearrange figure/video elements around their related text. +2. Apply the same structure and matching captions to `src/pages/cases/ai-assistant-figma.en.html`. +3. Run `npm run build:pages`, inspect the built Russian and English pages, and verify all media references remain intact and distributed. +4. Review and commit only the affected case sources, generated pages, and sitemap. Leave `texts/content-edits/pending.json` untouched; do not push. + +## Acceptance checks +- At least one `.case-callout` uses the documented markup and communicates a real case insight. +- Static screenshots are placed near the text they illustrate, not in one consecutive cluster. +- Russian and English pages remain structurally aligned and build successfully. +- Existing video assets, including the planned-interface video, remain present with their status clear. diff --git a/.hermes/plans/2026-09-28_124636-merge-dev-main-redeploy.md b/.hermes/plans/2026-09-28_124636-merge-dev-main-redeploy.md new file mode 100644 index 0000000..6637ac6 --- /dev/null +++ b/.hermes/plans/2026-09-28_124636-merge-dev-main-redeploy.md @@ -0,0 +1,23 @@ +# Plan: merge dev into main and redeploy + +## Goal +Merge the current local `dev` work into `main` and verify the production redeploy, without including pre-existing working-tree changes. + +## Approach +The working copy is on local `dev` at `c8a9c82`; it is 47 commits ahead of `origin/dev`. `origin/dev` is already an ancestor of `main`, so merging that remote-tracking ref would add nothing. Local `dev` has 14 commits not in `main`; local `main` has one unique domain-verification commit, so this requires a merge commit. Use a temporary worktree for `main` so the modified `texts/content-edits/pending.json` and untracked `.hermes/` remain untouched and the active branch stays `dev`. + +## Steps +1. Push the confirmed local `dev` (`c8a9c82`) to `origin/dev` as a fast-forward; confirm the remote ref. +2. Create a temporary worktree at local `main`, fast-forward it to `origin/main`, then merge local `dev`; resolve only merge conflicts, if any. +3. Verify the merge commit and changed-file scope; push the merge commit to `origin/main`. +4. Verify the configured production deployment starts after the `main` push and check the deployed case/HTTP response. If no deployment starts, use only a confirmed, supported manual trigger; do not run the obsolete deploy script. +5. Remove the temporary worktree; leave the current `dev` branch and pre-existing dirty files untouched. + +## Verification +- Confirm `origin/main` points to the merge commit after push. +- Confirm the production endpoint responds with the merged revision's content after deployment. +- Confirm `pending.json` and `.hermes/` are not part of the merge commit. + +## Risks / open questions +- The local `dev` branch contains 47 commits not pushed to `origin/dev` (14 commits differ from `main`); merging local `dev` publishes those changes to production. +- `AGENTS.md` says pushing `main` triggers deployment, while the site-portfolio deployment note says the old deploy path is outdated and a proper workflow is still pending. Confirm the configured production trigger before relying on either path; do not use the obsolete deploy script. diff --git a/.hermes/plans/2026-09-28_130613-main-nav-activity-after-portfolio.md b/.hermes/plans/2026-09-28_130613-main-nav-activity-after-portfolio.md new file mode 100644 index 0000000..c9c7a30 --- /dev/null +++ b/.hermes/plans/2026-09-28_130613-main-nav-activity-after-portfolio.md @@ -0,0 +1,15 @@ +# План: пункт «Активность» в главном меню + +## Цель +Поставить пункт «Активность» сразу после «Портфолио» в навигации главной страницы. + +## Изменения и проверка +1. Переставить ссылку `#activity` сразу после `#portfolio` в общем `src/partials/header-home.html`; общий partial используется русской и английской версиями. +2. Выполнить `npm run build:pages` и проверить порядок ссылок в собранных RU/EN страницах. +3. Закоммитить только изменённый partial и относящиеся к сборке файлы; не включать изменённый `texts/content-edits/pending.json` и локальный `.hermes/`. +4. Запушить `dev`, затем слить его в `main` отдельным merge-коммитом и запушить `main`, сохранив активной ветку `dev`. +5. Запустить ручной редеплой Coolify с уже разрешённым токеном из `.env`; проверить статус deployment и порядок пунктов на production. + +## Проверки безопасности +- До коммитов и пушей повторно сверить ветки и рабочее дерево. +- Не использовать force push; сохранять все изменения, не относящиеся к навигации. diff --git a/.hermes/plans/2026-09-28_151119-case-site-portfolio.md b/.hermes/plans/2026-09-28_151119-case-site-portfolio.md new file mode 100644 index 0000000..acc0ccc --- /dev/null +++ b/.hermes/plans/2026-09-28_151119-case-site-portfolio.md @@ -0,0 +1,34 @@ +# План: оформить кейс site-portfolio + +## Цель +Сверстать страницу как личный рассказ об опыте Николая с LLM и агентами при создании сайта-портфолио, а не как классический кейс продуктового дизайнера. + +## Подход +Сохранить общий каркас и токены сайта, но заменить заглушки связным нарративом: от отсутствия актуального портфолио и ограничений конструкторов к работе с кодом, Cursor и Hermes Agent. Использовать только факты из интервью; не добавлять неподтверждённые метрики, результаты или иллюстрации. Синхронно обновить английскую версию. + +## Предлагаемая структура +1. Первый экран: «Как я создавал сайт-портфолио с LLM» и краткий личный подзаголовок. +2. Контекст: нужен был актуальный сайт с работами и резюме; опыт HTML/CSS и конструкторов. +3. Почему конструктора не хватило: ограничения платформ и медленные итерации. +4. Переход к LLM и Cursor: эксперименты с генерацией главной, затем IDE и появление агентного режима. +5. Рабочий процесс: постановка задач, собственная структура страниц, проверка результата в браузере, референсы, графические редакторы и дизайн-система. +6. Смена роли и инструментов: больше креативных решений, ветки для экспериментов, переход к Hermes Agent и причины. +7. Результат: сайт работает; следующие этапы — контент и продвижение. + +## Шаги +1. Переписать русскую и английскую страницы кейса, включая заголовок, вводный текст и заполнение существующих разделов. +2. Использовать существующую ширину статьи и компоненты; при необходимости добавить только локальную разметку для компактного brief-блока, без глобальных CSS-изменений. +3. Запустить `npm run build:pages`. +4. Проверить оба URL, тексты локалей, наличие устаревших заглушек и корректность собранного HTML. +5. После проверки сделать локальный commit согласно AGENTS.md. + +## Файлы +- `src/pages/cases/site-portfolio.html` +- `src/pages/cases/site-portfolio.en.html` +- соответствующие сгенерированные страницы в `public/cases/site-portfolio/` и `public/en/cases/site-portfolio/` + +## Проверка +`npm run build:pages`; запросить RU/EN страницы через dev-сервер и проверить статус, содержимое и отсутствие заглушек в уже заполненных разделах. + +## Ограничения +Не придумывать точные даты, цифры экономии, метрики, пользовательские результаты, технические сложности или детали дизайна. Не добавлять изображения без проверки и предоставленных/найденных подходящих ассетов. Раздел о сложностях не заполнять до ответа пользователя. diff --git a/.hermes/plans/2026-09-28_152945-push-site-portfolio-main.md b/.hermes/plans/2026-09-28_152945-push-site-portfolio-main.md new file mode 100644 index 0000000..f8b48f9 --- /dev/null +++ b/.hermes/plans/2026-09-28_152945-push-site-portfolio-main.md @@ -0,0 +1,27 @@ +# План: публикация site-portfolio в main + +## Цель +Опубликовать последние изменения кейса из `dev` в `origin/main` и проверить автоматический production-деплой сайта. + +## Текущее состояние +- Локальный `dev`: `adf0f4b` (`origin/dev` отстаёт на 4 коммита). +- `origin/main`: `fd8e524`; Gitea refs подтверждают этот SHA. +- Ветки разошлись: `main` содержит отдельный коммит с domain verification и merge-коммиты; `dev` содержит 4 коммита кейса. Fast-forward напрямую невозможен. +- Рабочее дерево содержит чужие/несвязанные изменения: `texts/content-edits/pending.json` и незакоммиченный `.hermes/`. Их не включать. +- Для репозитория правило AGENTS.md: production-деплой запускается пушем в `main`. Coolify-приложение `static-site` связано с `admin/site-portfolio` и доменом `mamadaevv.site`. + +## Подход +Создать временный изолированный worktree от актуального `origin/main`, влить туда текущий `dev` обычным merge-коммитом и отправить merge-коммит в `main` без force-push. Так сохраняется main-only domain verification и не затрагиваются незакоммиченные файлы в основной рабочей копии. После пуша проверить, что production отдал новую страницу кейса. + +## Шаги +1. После подтверждения обновить remote refs и убедиться, что `origin/main` не изменился; при изменении остановиться и пересмотреть план. +2. Создать временный worktree на основе `origin/main`, влить `dev`; при конфликте остановиться и показать его, не разрешать молча. +3. Убедиться, что merge содержит изменения кейса, затем отправить `HEAD` в `origin/main` без force-push. +4. Проверить SHA `origin/main` и production URL `https://mamadaevv.site/cases/site-portfolio/` на актуальный заголовок/содержимое; проверить завершение deployment по доступным сигналам. +5. Удалить временный worktree после успешной публикации. + +## Риски и границы +- Ветки разошлись, поэтому нужен merge-коммит; fast-forward или force-push не использовать. +- Если main ушёл вперёд или merge конфликтует, остановиться до записи на remote. +- Не трогать `pending.json`, незакоммиченный `.hermes/` и текущую ветку/рабочую копию. +- Автодеплой ожидается после push в `main`; если production не обновится, не утверждать успех и отдельно диагностировать webhook/деплой. diff --git a/.hermes/plans/2026-09-29_174828-apply-card-columns-edits.md b/.hermes/plans/2026-09-29_174828-apply-card-columns-edits.md new file mode 100644 index 0000000..7b91463 --- /dev/null +++ b/.hermes/plans/2026-09-29_174828-apply-card-columns-edits.md @@ -0,0 +1,69 @@ +# Card Columns case edits implementation plan + +> **For Hermes:** Execute only after the user confirms this plan. Keep the work on local branch `dev`; do not push or deploy. + +**Goal:** Apply the nine queued author edits to the Card Columns case in Russian and English, preserving the queue and existing media. + +**Architecture:** Treat `texts/content-edits/pending.json` as the user’s instruction source, but edit only the RU/EN case sources and the text snapshot. Keep each factual statement grounded in the supplied notes, the shipped 0.9.0 plugin, and live project listings; use a callout for the multi-column note behavior and another for the presentation benefit. + +**Tech Stack:** Static HTML pages, Node `build:pages`, Gitea-hosted source repository. + +--- + +### Task 1: Reframe the problem and Bases context + +**Objective:** Correct the description of the built-in Cards grid and explain Bases from the user's visible UI rather than from `.base` internals. + +**Files:** +- Modify: `src/pages/cases/card-columns-obsidian.html` +- Modify: `src/pages/cases/card-columns-obsidian.en.html` + +**Verification:** Confirm both locales say the built-in Cards view shows a grid, and describe Columns as another card view with column grouping. + +### Task 2: Add the core multi-column use case and interface rationale + +**Objective:** Surface the original pain in a callout with the supplied links and movies examples; add the Obsidian design-system / code-first UI note. + +**Files:** +- Modify: `src/pages/cases/card-columns-obsidian.html` +- Modify: `src/pages/cases/card-columns-obsidian.en.html` + +**Verification:** Check the shipped grouping code handles multiple frontmatter values and make the callout factual, not a claim about every other plugin. + +### Task 3: Apply settings, release workflow, and outcome edits + +**Objective:** Rename the settings subsection to reflect logical grouping, remove the obsolete separate-board sync sentence, replace the timing disclaimer with the presentation benefit, and describe the Hermes → laptop test → Gitea/GitHub release workflow and manual Community publication step. + +**Files:** +- Modify: `src/pages/cases/card-columns-obsidian.html` +- Modify: `src/pages/cases/card-columns-obsidian.en.html` + +**Verification:** Preserve the distinction between automated repo release steps and the user's manual Obsidian Community publication action. + +### Task 4: Update public evidence in both locales + +**Objective:** Replace the old result paragraph with the end-of-September download count, GitHub stars, and issue history using accurate wording. + +**Files:** +- Modify: `src/pages/cases/card-columns-obsidian.html` +- Modify: `src/pages/cases/card-columns-obsidian.en.html` + +**Verified evidence:** Obsidian Community lists version 0.9.0 and 846 downloads; GitHub reports 4 stars and 2 issues total (one closed bug report, one open feature request). Do not describe both issues as enhancement requests. + +### Task 5: Synchronize snapshot, build, verify, and commit locally + +**Objective:** Keep the text snapshot and localized pages aligned, build the generated pages, verify rendering and links, then commit only this task's files on local `dev`. + +**Files:** +- Modify: `texts/cases/card-columns-obsidian.md` +- Generated: `public/cases/card-columns-obsidian/index.html` +- Generated: `public/en/cases/card-columns-obsidian/index.html` +- Possibly generated: `public/sitemap.xml` + +**Verification:** `npm run build:pages`; `git diff --check`; HTML well-formedness; browser check of RU/EN copy, callouts, Obsidian Community link, and media paths. Leave `texts/content-edits/pending.json` and unrelated `.hermes/` content untouched. Do not push or deploy. + +## Risks + +- Current GitHub issue state is mixed: one issue is closed as a bug report and one remains open as a feature request. Phrase the total and states accurately. +- The local `dev` branch currently includes the production merge commit; this task must add a local-only commit and must not move or push remote refs. +- The content-edit queue remains intact by project convention; the user removes completed items after reviewing the result. diff --git a/skills/site-portfolio/references/mesh-bg-optimization.md b/skills/site-portfolio/references/mesh-bg-optimization.md new file mode 100644 index 0000000..23ea848 --- /dev/null +++ b/skills/site-portfolio/references/mesh-bg-optimization.md @@ -0,0 +1,49 @@ +# Статичный CSS-фон взамен WebGL шейдера + +Паттерн замены живого `mesh-gradient` (WebGL) на статичный CSS-фон из `--page-bg`: актуален при лагах прокрутки на мобильных устройствах. + +## Почему `backdrop-filter` не поможет + +В CSS проекта `backdrop-filter` применяется ~7 раз одновременно: `.btn--primary`, `.fab--primary`, `.btn--secondary/.btn--ghost`, `.header--scrolled .header__inner` (fixed, пересчитывается при скролле), `.nav-more__dock`, `.case-media .plyr__controls`, `.case-image-viewer`, `.mp-card--stack-bottom::before`. На мобильных Chrome/Safari каждый слой — отдельный рендер-слой, пересчитываемый на скролле. + +## Алгоритм замены + +1. **Решить порог** — по ширине (`matchMedia('(max-width: 768px)')`) или по `prefers-reduced-motion`. +2. **Вынести логику палитры** в `paletteFromTheme(root)` — читает `--theme-h/s/l` из `getComputedStyle`, строит монохромную палитру. +3. **Добавить `setStaticPageBg(root)`**, который прямо записывает `--page-bg` через `root.style.setProperty()`: + - Формула CSS (тёмная тема): `color-mix(in srgb, , color-mix(in srgb, var(--bg) 100%, transparent)) 0%, transparent 62%`, позиции `var(--mesh-a-x) var(--mesh-a-y)`, радиус `calc(48% * 1) calc(56% * 1)`. + - `hueShift` = +180 для тёмной, +90 для светлой (соответствует `--accent-square-3-h` / `--accent-square-2-h`). +4. **Интегрировать в `onTheme`** (событие `site-theme-applied`): при смене акцента обновлять шейдер через `mount.setUniforms(...)` если он работает, иначе `setStaticPageBg()`. +5. **Инициализация**: при старте страницы — `buildMount` если не мобильный, иначе `setStaticPageBg` + `markMeshReady()`. + +## Скролл-контроль видимости canvas + +Паттерн скрытия canvas при скролле вниз (когда фон перекрывается секциями): + +```js +function handleScroll(root) { + if (document.body.scrollTop > 1000 || document.documentElement.scrollTop > 1000) { + root.dataset.scrollHidden = "1"; + } else { + delete root.dataset.scrollHidden; + } + updateCanvasVisibility(root); +} + +function updateCanvasVisibility(root) { + const host = root.querySelector(".page-mesh-bg canvas"); + if (!host) return; + const shouldHide = root.dataset.meshBg === "off" || document.body.dataset.scrollHidden === "1"; + host.style.visibility = shouldHide ? "hidden" : "visible"; +} +``` + +> **Питфолл:** `.page-mesh-bg` у `position: fixed, inset: 0` — собственный `intersectionObserver` из `ShaderMount` **никогда** не поставит паузу. Если нужна пауза — ограничить высоту контейнера (например `height: 110vh`) либо скрывать через `dataset`-флаг, как выше. + +> **Питфолл:** `ShaderMount` останавливает rAF только когда `currentSpeed === 0`. Ставить `speed = 0` — значит полностью остановить цикл, но **единовременный** первый кадр пересчитается при `setUniforms` / ресайзе. Не путать с `mount.dispose()`. + +## Где лежат узлы (site-portfolio) + +- `public/js/modules/theme/theme-core.js:154–161` — `activeAccent(state)` → `--theme-h/s/l` → `site-theme-applied`. +- `public/js/modules/ui/page-mesh-shader.js` — `initPageMeshShader`, `buildMount`, `onTheme`. +- `public/css/main.css:62–77` — определение `--page-bg` (тёмная тема), `174–188` (светлая). diff --git a/texts/content-edits/pending.json b/texts/content-edits/pending.json index 829e866..4fee94c 100644 --- a/texts/content-edits/pending.json +++ b/texts/content-edits/pending.json @@ -1,44 +1,93 @@ { "version": 2, - "updatedAt": "2026-10-02T11:40:41.597Z", + "updatedAt": "2026-10-05T15:20:48.877Z", "items": [ { - "instruction": "эту секцию надо переместить наверх перед этой «Work Experience» ", + "n": 1, + "page": "index.html", + "instruction": "Сжать вводное описание продукта: оставить короткую связку «внутренний контур → обучение модели → использование в Primo RPA Studio или клиентском продукте через REST API». Перечень fine-tuning и skills вынести в более подходящее место или сократить, чтобы в первом абзаце быстрее читалась суть AI Server.", "target": { - "selector": "main#main article.section__inner > #about > #about-title", - "anchorId": "about-title", - "tag": "h2", - "content": "About Me", - "snippet": "About Me" + "selector": "main#case-main #situaciya > p.section__prose:nth-of-type(1)", + "anchorId": "situaciya", + "tag": "p", + "content": "AI Server ставят на внутренние серверы клиента. Он позволяет использовать нейросети внутри контура компании: загрузил датасет своих документов, разметил поля, обучил модель, и потом используешь её в Primo RPA Studio или в любом клиентском продукте с доступом по REST API. Качество распознавания вырастает сильно, а документы не покидают периметр компании. Позже сервис научился дообучать любую базовую модель под задачи бизнеса: файнтюнинг и скиллы на суммаризацию, извлечение, генерацию.", + "snippet": "AI Server ставят на внутренние серверы клиента. Он позволяет использовать нейросети внутри контура компании: загрузил датасет своих документов…" + }, + "refs": [] + }, + { + "n": 2, + "page": "index.html", + "instruction": "Убрать повтор боли: callout перед этим абзацем уже говорит о десятках шагов и трёх типах проектов. Свести их с этим описанием в один плотный блок: оставить уникальные детали про недели до запуска, помощь специалиста, запутанную навигацию и дубли функций.", + "target": { + "selector": "main#case-main #situaciya > p.section__prose:nth-of-type(3)", + "anchorId": "situaciya", + "tag": "p", + "content": "Обратная связь от клиентов сходилась в одном: настройка проекта занимает слишком много шагов. Их три типа, и каждый настраивался по-своему. Между созданием проекта и его реальным использованием проходили недели, почти всегда с участием специалиста компании. Запутанная навигация и дублирующийся функционал тормозили отдел внедрения и не давали масштабировать продукт на широкую аудиторию.", + "snippet": "Обратная связь от клиентов сходилась в одном: настройка проекта занимает слишком много шагов. Их три типа…" }, "refs": [ { - "label": "Work Experience", + "label": "Callout о десятках шагов", "target": { - "selector": "main#main article.section__inner > #experience > #experience-title", - "anchorId": "experience-title", - "tag": "h2", - "content": "Work Experience", - "snippet": "Work Experience" + "selector": "main#case-main #situaciya > aside.case-callout", + "anchorId": "situaciya", + "tag": "aside", + "content": "Настройка проекта состояла из десятков шагов, и три типа проектов настраивались каждый по-своему. Без специалиста компании клиент проект до конца не доводил.", + "snippet": "Настройка проекта состояла из десятков шагов…" } } - ], - "n": 1, - "page": "index.html" + ] }, { - "instruction": "Поправь чтобы после · был пробел и точка это не часть ссылки", + "n": 3, + "page": "index.html", + "instruction": "Уточнить рамки моей ответственности: перечислить, какие части настройки я лично проектировал и за что отвечал в команде. Связать задачу с ограничением проекта: продукт уже работал у клиентов, поэтому редизайн внедряли по частям. Не добавлять объём работ, которого нет в кейсе.", "target": { - "selector": "main#main article.section__inner > #experience > ol > li:nth-of-type(2) > div:nth-of-type(1) > p", - "anchorId": "experience", + "selector": "main#case-main #zadacha > p.section__prose:nth-of-type(1)", + "anchorId": "zadacha", "tag": "p", - "content": "February 2023 — November 2025 (2 years and 10 months)·primo-rpa.com", - "snippet": "February 2023 — November 2025 (2 years and 10 months)·primo-rpa.com" + "content": "Меня пригласили как UX/UI-дизайнера: проект делали одни разработчики, дизайнера в нём не было. Бизнес ждал, что настройку клиент сможет пройти сам, без постоянной помощи поддержки и внедрения. Моя задача звучала так: снизить порог входа, чтобы работать с сервисом могли люди без специальных знаний в ИИ и OCR.", + "snippet": "Меня пригласили как UX/UI-дизайнера: проект делали одни разработчики, дизайнера в нём не было…" }, - "refs": [], - "n": 2, - "page": "index.html" + "refs": [ + { + "label": "Ограничение поэтапного редизайна", + "target": { + "selector": "main#case-main #zadacha > p.section__prose:nth-of-type(2)", + "anchorId": "zadacha", + "tag": "p", + "content": "Остановить разработку и перерисовать всё целиком было нельзя, продукт уже в эксплуатации. Значит, менять придётся по частям, вкладываясь в текущие релизы.", + "snippet": "Остановить разработку и перерисовать всё целиком было нельзя…" + } + } + ] + }, + { + "n": 4, + "page": "index.html", + "instruction": "Добавить конкретику к выбору ленты из карточек: какие варианты компоновки сравнивали и по какому критерию карточки оказались читаемее. Если критерий не фиксировали, убрать неподтверждённое «самой читаемой» и описать только причину, которую команда действительно обсуждала.", + "target": { + "selector": "main#case-main #deystviya > p.section__prose:nth-of-type(10)", + "anchorId": "deystviya", + "tag": "p", + "content": "После разметки модель можно дообучить. Сценарий разобрали с командой так же, как остальные, и сделали несколько вариантов компоновки страницы. Выбрали ленту из карточек: она оказалась самой читаемой.", + "snippet": "После разметки модель можно дообучить. Сценарий разобрали с командой так же, как остальные…" + }, + "refs": [] + }, + { + "n": 5, + "page": "index.html", + "instruction": "Развести сделанные изменения и доказанный эффект. Для пунктов про снижение порога входа и сокращение рутины добавить подтверждение, если оно есть: обратную связь клиентов, наблюдение внедрения или метрику. Если данных нет, сформулировать их как результат проектных решений, а не как измеренное изменение поведения пользователей.", + "target": { + "selector": "main#case-main #rezultat > aside.case-callout", + "anchorId": "rezultat", + "tag": "aside", + "content": "порог входа снизился: работать с сервисом могут люди без знаний в ИИ и OCR; часть настроек автоматизирована и спрятана от пользователя, рутины и ошибок меньше; интерфейс стал консистентным, паттерны из одного раздела переезжают в другие; под новые типы проектов и разделы заложено место, без переделок с нуля.", + "snippet": "порог входа снизился: работать с сервисом могут люди без знаний в ИИ и OCR…" + }, + "refs": [] } - ], - "lastAppliedAt": "2026-06-06T11:54:50.470Z" + ] }