<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru"><generator uri="https://jekyllrb.com/" version="4.3.2">Jekyll</generator><link href="https://super-mark.ru/feed.xml" rel="self" type="application/atom+xml"/><link href="https://super-mark.ru/" rel="alternate" type="text/html" hreflang="ru"/><updated>2026-06-22T12:40:50+03:00</updated><id>https://super-mark.ru/feed.xml</id><title type="html">SuperMark</title><subtitle>Торговая марка Владимира Никишина. Веб-дизайн, разработка, digital-маркетинг.</subtitle><author><name>@supervova</name></author><entry xml:lang="ru"><title type="html">Magic Notebook: письменные принадлежности freemium</title><link href="https://super-mark.ru/ru/blog/2026/magic-notebook" rel="alternate" type="text/html" title="Magic Notebook: письменные принадлежности freemium"/><published>2026-05-16T00:00:00+03:00</published><updated>2026-05-16T00:00:00+03:00</updated><id>https://super-mark.ru/ru/blog/2026/magic-notebook</id><content type="html" xml:base="https://super-mark.ru/ru/blog/2026/magic-notebook"><![CDATA[<p>Я носился с этим прожектом 10 лет. Причем идея была симптомом, а патологией был Word – настоящая боль пишущего человека. Все эти давно никем не используемые инструменты и настройки, притащенные из прошлого века, когда любой текст нужно было распечатать… У меня кровь из глаз текла от одного вида интерфейса этого безусловно великого, но давно мёртвого приложения.</p> <p>Мне хотелось, чтобы я мог набирать текст так, как будто пишу на чистом листе дорогой бумаги хорошей перьевой ручкой. Хотелось, чтобы было как в появившихся в какой-то момент  Markdown-редакторах, только без некрасивой разметки. Хотелось, чтобы мне помогали подбирать слова и формулировать мысли, а не заставляли меня верстать объявления о корпоративных вечеринках.</p> <p>Спроектировал UX, разработал UI-дизайн и несколько лет подсовывал презентацию любому, у кого водились деньги, рассылал ангелам. Про traction и прочую фигню даже думать не хотел.</p> <p>Само собой, дураков нема. Если в 00–10-х ещё можно было найти мечтателей-меценатов, то к 20-м они перевелись. Остались одни прагматики и циники.</p> <p>Однако всё, как известно любому фаталисту, случается только в предопределенный, правильный момент. Поэтому мне надо было дождаться ИИ-бума и начать заниматься пет-проектом – вайб-кодингом и бутстрэппингом (пусть думцы сами подбирают русские синонимы).</p> <p>По часу-два в день, после основной работы, и на выходных я пилил свой аппу: React/Typescript/CSS + Tauri; e2e и юнит; Storybook, ADR и SOT для одного человека, солопренёра, и его верного помощника, <a href="https://marketplace.visualstudio.com/items?itemName=openai.chatgpt" target="_blank" rel="noopener noreferrer">Codex</a>‘а. И вот она, красивая на праздник к нам пришла. Вчера я сделал первый ланч <a href="https://www.producthunt.com/products/magic-notebook?launch=magic-notebook">на Product Hunt’е</a>.</p> <p>Пока это только MVP и macOS-версия (на Windows к уже запланированному релизу 15 мая не хватило лимитов Github Actions, а карточку мою они не принимают). Но всё равно я рад и чертовски доволен собой.</p> <p>И хотя ИИ уже перекроил рынок текстовых инструментов, еще остались некоторые старые и уже появились новые боли пользователей. Впереди – много работы.</p> <ul> <li>Найти стабильные масштабируемые источники трафика.</li> <li>Добиться нужного retention.</li> <li>Свести в плюс юнит-экономику.</li> <li>Стабилизировать бизнес-модель.</li> <li>Масштабироваться.</li> <li>Добавлять правильные фичи – те, что станут обезболивающим.</li> </ul> <p>И да, это приложение не принесет мне много денег прямо сейчас или через год. Но я уверен, что сделал хорошую штуку, которая будет полезна очень многим людям. Понимаю, что такие заявы похожи на самовнушение от инфоцыган, но тут уж ничего не поделаешь: все, кто говорят Yes We Can, поначалу кажутся наивными дурачками.</p>]]></content><author><name>@supervova</name></author><category term="Проекты и мечты"/><summary type="html"><![CDATA[Вчера я выпустил приложение Magic Notebook – текстовой редактор для людей, уставших от сложных интерфейсов.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://super-mark.ru/img/blog/2026/05-16-magic-notebook.png"/><media:content medium="image" url="https://super-mark.ru/img/blog/2026/05-16-magic-notebook.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry xml:lang="ru"><title type="html">🙂 → 🧐 (артефакты motion-дизайна)</title><link href="https://super-mark.ru/ru/blog/2026/motion-graphics" rel="alternate" type="text/html" title="🙂 → 🧐 (артефакты motion-дизайна)"/><published>2026-05-14T00:00:00+03:00</published><updated>2026-05-14T00:00:00+03:00</updated><id>https://super-mark.ru/ru/blog/2026/motion-graphics</id><content type="html" xml:base="https://super-mark.ru/ru/blog/2026/motion-graphics"><![CDATA[<div class="border mb-2"> <video class="video" controls="" poster="/assets/img/blog/2026/05-14-gogol.png" preload="metadata" playsinline="" width="1280" height="720"> <source src="/assets/video/projects/magic-notebook-gogol.mp4" type="video/mp4"/> </video> </div> <div class="border mb-2"> <video class="video" controls="" poster="/assets/img/projects/oldie/motion-graphics/homepage-2004-poster.png" preload="metadata" playsinline="" width="313" height="157"> <source src="/assets/video/projects/oldie/motion-graphics/homepage-teaser.mp4" type="video/mp4"/> </video> </div>]]></content><author><name>@supervova</name></author><category term="Дизайн"/><summary type="html"><![CDATA[«Разбирал коробки на чердаке» — наткнулся на свои «мультики». Старые уже, а второй прямо древний.]]></summary></entry><entry xml:lang="ru"><title type="html">Вайб-кодер поколения X: плюсы, минусы, подводные камни</title><link href="https://super-mark.ru/ru/blog/2026/vibe-coding-generation-x" rel="alternate" type="text/html" title="Вайб-кодер поколения X: плюсы, минусы, подводные камни"/><published>2026-02-20T00:00:00+03:00</published><updated>2026-02-20T00:00:00+03:00</updated><id>https://super-mark.ru/ru/blog/2026/vibe-coding-generation-x</id><content type="html" xml:base="https://super-mark.ru/ru/blog/2026/vibe-coding-generation-x"><![CDATA[<p>Блогерам и контент-маркетологам остаются форматы, которые трудно синтезировать: уникальные исследования, смешные видосы, мемы и инфографика. Форматы с первого по третий не оставляют времени ни на что больше – ими надо заниматься полный рабочий день. Поэтому решил сделать инфографику.</p>]]></content><author><name>@supervova</name></author><category term="Разработка"/><summary type="html"><![CDATA[Традиционные SEO и контент-маркетинг вымирают «как древний ящер» в результате естественного отбора. Делиться своим профессиональным опытом, как делал это я в течении 7 лет, рассказывая об ещё одном исчезающем виде, – Adobe Illustrator'е – бессмысленно. Люди уже не ищут знаний в интернете, у них теперь есть ИИ-помощники.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://super-mark.ru/img/blog/2026/02-20-infographics@2x.jpg"/><media:content medium="image" url="https://super-mark.ru/img/blog/2026/02-20-infographics@2x.jpg" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry xml:lang="ru"><title type="html">Antigravity – сам бот велел</title><link href="https://super-mark.ru/ru/blog/2025/antigravity" rel="alternate" type="text/html" title="Antigravity – сам бот велел"/><published>2025-11-23T00:00:00+03:00</published><updated>2025-11-23T00:00:00+03:00</updated><id>https://super-mark.ru/ru/blog/2025/antigravity</id><content type="html" xml:base="https://super-mark.ru/ru/blog/2025/antigravity"><![CDATA[<p>Впрочем, измена эта уровня лайка чужой женщине в соцсетях – несерьезная. Потому что это всё тот же IDE, только в правом сайдбаре живут еще Gemini 3 Pro и Claude Sonnet 4.5. А автодополнение работает без лимитов, как у Copilot’а.</p> <p>Gemini CLI и macOS-приложение Claude я использовал как запасных ассистентов и раньше. Теперь доступ стал удобнее. Основного своего LLM-помощника – Codex – поставил, как расширение, и перетащил в правую боковую колонку, к коллегам. В этом интерфейсе у меня нет проблем с терминальным шорткатом перевода строки <code class="language-plaintext highlighter-rouge">Ctrl</code>+<code class="language-plaintext highlighter-rouge">J</code>. Однако приходится постоянно подтверждать правки – команда <strong>Allow this session</strong> почему-то не работает. Поэтому с Codex’ом я общаюсь по-старинке, через встроенный терминал.</p> <p><a href="https://antigravity.google/" target="_blank" rel="noopener">Antigravity</a></p> <h2 id="upd-2025-11-27">UPD 2025-11-27</h2> <p>Вернулся я на VS Code – достала неотключаемая автозамена Supercomplete в Antigravity. Однако я благодарен редактору Google за то что он помог мне улучшить VS Code.</p> <ol> <li>Перешел с Codex CLI на расширение Codex, которое живёт в правой колонке, и не занимает вкладку терминала… Запоминает сессии без необходимости записывания хеша. Переводит строки с помощью <code class="language-plaintext highlighter-rouge">Shift</code>+<code class="language-plaintext highlighter-rouge">Enter</code>, а не ёбанутой комбинации <code class="language-plaintext highlighter-rouge">Ctrl</code>+<code class="language-plaintext highlighter-rouge">J</code>. А необходимость постоянных подтверждений правок Microsoft оперативно починил.</li> <li>Нашел в Codex обычную модель <code class="language-plaintext highlighter-rouge">gpt</code>, без суффикса <code class="language-plaintext highlighter-rouge">-codex</code>, которая по моему опыту гораздо умнее остальных. До Antigravity я даже не заглядывал в выбор моделей Codex, и если CLI-агент не справлялся, переходил в stand-alone ChatGPT со всеми вытекающими неудобствами передачи контекста.</li> <li>Улучшил настройки редактора – в основном, тему и подсказки.</li> </ol> <p>Красота! Спасибо Google.</p>]]></content><author><name>@supervova</name></author><category term="Разработка"/><summary type="html"><![CDATA[Google выкатил новый форк VS Code с бесплатными моделями, и я, как человек временно утративший былой размах и завидные доходы, тут же изменил оригинальному VSC.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://super-mark.ru/img/blog/2025/11-23-antigravity.png"/><media:content medium="image" url="https://super-mark.ru/img/blog/2025/11-23-antigravity.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry xml:lang="ru"><title type="html">Vibe-кодинг 101: 10 практических советов + определение термина</title><link href="https://super-mark.ru/ru/blog/2025/vibe-coding-101" rel="alternate" type="text/html" title="Vibe-кодинг 101: 10 практических советов + определение термина"/><published>2025-09-16T00:00:00+03:00</published><updated>2025-09-16T00:00:00+03:00</updated><id>https://super-mark.ru/ru/blog/2025/vibe-coding-101</id><content type="html" xml:base="https://super-mark.ru/ru/blog/2025/vibe-coding-101"><![CDATA[<blockquote> <p><strong>PRD (Product Requirements Document)</strong>. Документ с требованиями к продукту: пользовательские сценарии, функционал, ограничения, интеграции. Помогает команде работать в одном контексте, а <code class="language-plaintext highlighter-rouge">solopreneur</code>‘у, типа меня, держаться выбранной цели и корректировать ее, если нужно. PRD – это не ТЗ (техническое задание). PRD описывает, что надо сделать: функциональность и бизнес-цели. А ТЗ – как это сделать, общие инженерные решения.</p> </blockquote> <p><strong>2. Если разработка не no-code</strong>, кодируй в <a href="/ru/blog/2025/gemini-chatgpt-vs-code-copilot">VS Code c Codex или Gemini CLI</a> или в <a href="/ru/blog/2024/cursor">Cursor’е</a>. Подключи <a href="https://eslint.org/">Eslint</a>, <a href="https://stylelint.io/">Stylelint</a> и <a href="https://prettier.io/">Prettier</a>. Правильное форматирование — первое средство от ошибок.</p> <p><strong>3. Разработай инструкции для ассистента</strong> и сохрани их в «корне» проекта: если работаешь с Codex CLI – <code class="language-plaintext highlighter-rouge">AGENTS.md</code>; если с Gemini CLI – <code class="language-plaintext highlighter-rouge">GEMINI.md</code>. Если работаешь с Codex Веб, тогда инструкции сохраняй в папке Github – <code class="language-plaintext highlighter-rouge">./.github/AGENTS.md</code>. Попроси ассистента самому составь требования — он-то лучше их знает. Просто определи разделы документа, общие сведения о проекте, технологический стек – см. мой пример.</p> <pre><code class="language-markdown">
## Роль

Ты – эксперт в разработке веб-приложений. Твой основной стек: **React 19, TS, SCSS, PHP**. Для быстрого прототипирования можешь использовать **Pug**. Ты выдаешь лаконичные, рабочие решения без "воды".

## Проект

- **Название**: CryptoAPI.ai
- **Тип**: веб-приложение SaaS – LLM-консультант для криптотрейдеров
- **Целевая аудитория**: трейдеры криптовалют (новички и опытные)
- **Стадия**: разработка MVP с анализом рынка + простыми торговыми сигналами

### Функциональность

- **Основные фичи**:
  - Анализ рыночных трендов
  - Персонализированные торговые сигналы
  - Портфолио-трекер
- **Интеграции**: Binance API, CoinGecko, OpenAI API
- **Ограничения**: никаких прямых торговых операций

### Технологический стек

| Слой             | Технологии                                                                    |
| ---------------- | ----------------------------------------------------------------------------- |
| **Фронтенд**     | React 19, TypeScript, SCSS                                                    |
| **Бэкенд / API** | PHP 8.4 (PSR-12, strict_types, Composer autoload)                             |
| **Инструменты**  | PHPStan (level 9), ESLint + Prettier, Stylelint, Vite + esbuild               |

### Требования и ограничения

| Категория              | Требования                                    |
| ---------------------- | --------------------------------------------- |
| **UI/UX**              | WCAG AA; Desktop ≥ 1360 px, Tablet ≥ 768 px   |
| **Производительность** | LCP ≤ 2.5 s; CSS ≤ 200 KB; JS ≤ 300 KB (gzip) |

### Структура проекта

```txt
public/
  css/
  js/
  img/
src/
  components/      # React components: TS, SCSS, Storybook, tests, docs, images
  engine/          # PHP-контроллеры
  hooks/           # React hooks
  pages/           # Page-level components
  store/           # State management
  theme/           # SCSS mixins, functions, variables, doc styles, defaults, helpers
  translate/       # *.po
  types/           # TypeScript types
  utils/           # Utility functions
```

### Текущие задачи

1. Кабинет трейдера с дашбордом, страницами рынков и отдельных активов
2. Система уведомлений о сигналах
3. Интеграция с Binance API для получения данных

## Формат ответа

- Отвечай по-русски, если вопрос задан на русском.
- **Будь лаконичен.** Давай минимум необходимого, без "воды" и пояснений, если их не просили.
- Лучший ответ – **полностью готовый код, который соответствует стайлгайду (включая JSDoc)**, без TODO, заглушек и дополнительных комментариев вне кода.
- **Код давай сразу готовый и полный для текущего шага.** В больших задачах разбивай решение на логические блоки: отправляй один блок, дожидайся подтверждения и переходи к следующему. Не используй TODO или заглушки.
- **Не выдумывай.** Если не уверен в требовании – уточни.
- Следи за форматированием Markdown.
- Если нужно создать файл – укажи bash-команду.

## Стиль и лучшие практики кодирования

### Общие принципы

| Группа                                  | Правило                              |
| --------------------------------------- | ------------------------------------ |
| Отступ                                  | 2 пробела                            |
| Ширина строки                           | ≤ 100 символов                       |
| Один оператор / инструкция в строке     | да                                   |
| Пустая строка между логическими блоками | да                                   |
| Имена (vars, funcs, CSS)                | английский, kebab/camel по контексту |
| Комментарии                             | `// коротко, по делу`, над строкой   |

### HTML

| Группа         | Правило                                                                                                       |
| -------------- | ------------------------------------------------------------------------------------------------------------- |
| Атрибуты       | двойные кавычки                                                                                               |
| Классы         | Модифицированный БЭМ – модификаторы отделльными классами с префиксами `is-` и `has-` (`card__title is-large`) |
| Закрытие тегов | всегда явное ( `<li></li>` )                                                                                  |

### SCSS и CSS

| Группа              | Правило                                                                       |
| ------------------- | ----------------------------------------------------------------------------- |
| Переменные          | ограниченное использование SCSS-переменных, приоритет – CSS properties        |
| Цвета               | только через CSS properties                                                   |
| Вложенность в Sass  | ≤ 3 уровней                                                                   |
| **Порядок свойств** | Сначала `@extend`, затем `@include`, после них – остальные (порядок см. ниже) |
| Кавычки             | одинарные                                                                     |

#### Порядок свойств

- `moz-*`, `-webkit-*` в алфавитном порядке (если по какой-то причине добавлены)
- `all`
- `accent-color`
- `animation`
- `appearance`
- `background` и все настройки `background-*` в алфавитном порядке
- `border` и все свойства `border-*`, включая `border-radius`, в алфавитном порядке
- `box-shadow`
- `box-sizing`
- `contain`
- `color`
- `cursor`
- `display` и все настройки в алфавитном порядке: `align-items`, `flex-shrink`, `justify-content`, `place-itemc` etc
- `filter`
- `font` и любые `font-*` свойства в алфавитном порядке; а также: `letter-spacing`, `line-height`, `text-align`, `text-decoration`, `text-transform`, `white-space`, `word-wrap`
- `margin` и любые `margin-*`
- `padding` и любые `padding-*`
- `opacity`
- `outline`
- `overflow`
- `pointer-events`
- `position` и все настройки: `top`, `right`, `inset` и т.д.
- `rotate`
- `scale`
- `touch-action`
- `transform`
- `transition`
- `translate`
- `user-select`
- `vertical-align`
- `width` и `max`-/`min`-значения
- `height` и `max`-/`min`-значения
- `zindex`

### TypeScript &amp; React

| Группа                          | Правило                                                                                            |
| ------------------------------- | -------------------------------------------------------------------------------------------------- |
| Стиль                           | ESLint (Airbnb) + Prettier (одинарные кавычки, `trailing-comma: es5`, точка с запятой обязательна) |
| Типизация                       | Строгая (`strict: true` в `tsconfig.json`). Избегать `any`.                                        |
| Компоненты                      | Функциональные компоненты с хуками. Именование: `PascalCase.tsx`.                                  |
| Нейминг хуков                   | `useMyHook`                                                                                        |
| `const` &gt; `let`; `var` запрещён | да                                                                                                 |

### PHP 8.4

| Группа            | Правило                                                                                    |
| ----------------- | ------------------------------------------------------------------------------------------ |
| Стандарт          | PSR-12 (классы `CamelCase`, методы `camelCase`, константы `SCREAMING_SNAKE`)               |
| Файл              | `&lt;?php` на первой строке, `declare(strict_types=1);` сразу после                           |
| Тайп-хинты        | обязательны для параметров и `return`                                                      |
| Typed-properties  | `readonly`, union-types, intersection types разрешены                                      |
| **Запрещено**     | property promotion в конструкторе (для ясности)                                            |
| Исключения        | собственные классы от `\RuntimeException`                                                  |
| БД                | PDO + prepared SQL или ORM-query-builder                                                   |
| Контроль качества | `phpstan analyse --level max --no-progress` → `php-cs-fixer fix --dry-run`                   |

## Безопасность

- **Ввод**: всегда валидируй и фильтруй пользовательский ввод на бэкенде. Не доверяй данным из `$_SERVER`, `$_GET`, `$_POST`.
- **Вывод**: предотвращай XSS, используя JSX auto-escaping в React.
- **Формы**: используй CSRF-токены для всех POST-запросов (формы, AJAX).
- **Запросы к БД**: только prepared statements для предотвращения SQL-инъекций.
- **Протокол**: HTTPS only. Заголовки: `Content-Security-Policy: default-src 'self'`, `Strict-Transport-Security: max-age=31536000; includeSubDomains; preload`, `X-Frame-Options: SAMEORIGIN`.
- **Ошибки**: обрабатывай исключения и логируй ошибки, не показывая пользователю технические детали.
</code></pre> <p><strong>4. Не затягивай с тестами и документацией</strong>. Как только компонент проходит первое ручное тестирование, проси LLM-ассистент создать для него <a href="https://storybook.js.org/">истории Storybook</a>, <a href="https://vitest.dev/">юнит-тесты</a> и <a href="https://playwright.dev/">e2e-тесты</a>.</p> <p><strong>5. Делай маленькими шагами</strong>. Реализуй одну фичу за раз, проверяй её тест-кейсовыми промптами. Для багов — отдельные итерации.</p> <blockquote> <p><strong>Тест-кейс (test case)</strong>. Набор условий и шагов для проверки конкретной функции приложения. Помогает убедиться, что код работает как ожидается.</p> </blockquote> <p><strong>6. Выбирайся из «петель Дори»</strong>. Не гоняй один и тот же промпт. Добавляй контекст: логи, скриншоты, описание шагов. После трёх неудач — откатитесь к последнему рабочему коммиту.</p> <blockquote> <p><strong>Петля Дори (Dory loop)</strong>. Ситуация, когда ИИ-ассистент бесконечно повторяет фиксы бага, не решая проблему (по аналогии с рыбкой Дори из «В поисках Немо»).</p> </blockquote> <p><strong>7. Используй GitHub</strong>. Подключай проект сразу – сразу настрой CI. коммить осмысленные изменения. Это страховка от ошибок ИИ.</p> <blockquote> <p><strong>CI (Continuous Integration)</strong>. Непрерывная интеграция — практика регулярного слияния кода в общий репозиторий с автоматическим запуском тестов.</p> </blockquote> <p><strong>8. Для MVP вынеси бизнес-логику в <a href="https://n8n.io/">n8n</a></strong>. Пусть фронтенд остаётся простым, а сложные API-вызовы и обработка идут через визуальные воркфлоу.</p> <p><img src="/assets/img/blog/2025/09-16-n8n.webp" alt="n8n – произносится, как «нейтан»"/></p> <p><strong>Когда НЕ стоит</strong> использовать n8n.</p> <ul> <li><strong>Очень простая логика</strong> — оставь внутри приложения. Например, если нужно просто проверить правильность email или сложить два числа — проще оставить это в коде (JS/TS, Python и т. д.), чем дергать внешний сервис.</li> <li><strong>Критически важные и быстрые операции</strong>. Если логика должна выполняться мгновенно (например, расчёт цен в реальном времени или авторизация пользователей), то вызовы к n8n через вебхуки могут внести лишнюю задержку и стать точкой отказа.</li> <li><strong>Сложная бизнес-логика с высокой нагрузкой</strong>. При тысячах запросов в секунду n8n может стать узким местом. Лучше перенести эту часть в отдельный сервис (микросервис), оптимизированный под нагрузку.</li> <li><strong>Код, требующий строгой безопасности</strong>. Например, работа с секретами, финансовыми транзакциями или персональными данными. В таких случаях лучше использовать проверенные бэкенд-фреймворки и инфраструктуру с audit-логами.</li> </ul> <p><strong>9. Добавляй авторизацию на раннем этапе</strong>. Даже простая заглушка на входе спасёт от будущего рефакторинга.</p> <p><strong>10. Храни ключи в <code class="language-plaintext highlighter-rouge">.env</code></strong> Никогда не хардкодь секреты. Делай мини-аудиты безопасности через LLM.</p> <h2 id="а-что-вообще-такое--vibe-кодинг">А что вообще такое – vibe-кодинг?</h2> <p><strong>Вайб-кодинг</strong> (vibe-кодинг) – жаргонизм, означающий подход к кодированию, как к интерактивному творчеству совместно с LLM-ассистентами, а не как к инженерному процессу.</p> <p><strong>Формы вайб-кодинга</strong>:</p> <ul> <li>No-code / Low-code — визуальное «тыкание» блоков и логики.</li> <li>Prompt-driven coding — генерация кода через LLM-ассистента (Copilot, Cursor, Windsurf и т.п.).</li> <li>Гибридный vibe-кодинг (мой случай) — вы работаете в редакторе кода (VS Code и т.п.), пишете часть кода руками, но: <ul> <li>приоритет отдаёте подсказкам ассистента,</li> <li>опираетесь на «ощущение решения»,</li> <li>быстро пробуете идеи, не проектируя на тактическом уровне заранее.</li> </ul> </li> </ul>]]></content><author><name>@supervova</name></author><category term="Разработка"/><summary type="html"><![CDATA[1. Планируй заранее. Прежде чем писать код — обсуди идею с LLM, оформи краткий PRD в `requirements.md` и согласуй первый промпт.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://super-mark.ru/img/blog/2025/2025-09-16-paris.jpg"/><media:content medium="image" url="https://super-mark.ru/img/blog/2025/2025-09-16-paris.jpg" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry xml:lang="ru"><title type="html">Тестирую виджеты для текущего проекта</title><link href="https://super-mark.ru/ru/blog/2025/cryptoapi-widgets" rel="alternate" type="text/html" title="Тестирую виджеты для текущего проекта"/><published>2025-09-01T00:00:00+03:00</published><updated>2025-09-01T00:00:00+03:00</updated><id>https://super-mark.ru/ru/blog/2025/cryptoapi-widgets</id><content type="html" xml:base="https://super-mark.ru/ru/blog/2025/cryptoapi-widgets"><![CDATA[ <iframe src="https://cryptoapi.ai/ru/widgets/signals?theme=dark&amp;PageSpeed=Off&amp;rows=8&amp;widget_bypass=PROD_STUB" title="Crypto signals widget" loading="lazy" referrerpolicy="no-referrer-when-downgrade" sandbox="allow-scripts allow-popups allow-top-navigation-by-user-activation allow-same-origin" style="border:0;border-radius:12px;overflow:hidden;width:100%" width="100%"></iframe> <script>
(function() {
  if (window.cryptoApiWidgetListener) {
    return;
  }
  window.cryptoApiWidgetListener = true;
  window.addEventListener('message', function(e) {
    if (e.origin !== "https://cryptoapi.ai") {
      return;
    }
    if (e.data && e.data.type === 'cryptoapi:height' && e.source) {
      var iframes = document.querySelectorAll('iframe[src*="https://cryptoapi.ai"]');
      for (var i = 0; i < iframes.length; i++) {
        if (iframes[i].contentWindow === e.source) {
          iframes[i].style.height = (e.data.height || 120) + 'px';
          break;
        }
      }
    }
  });
})();
</script> <iframe src="https://cryptoapi.ai/ru/widgets/fgi?theme=light&amp;PageSpeed=Off&amp;widget_bypass=PROD_STUB" title="Crypto fgi widget" loading="lazy" referrerpolicy="no-referrer-when-downgrade" sandbox="allow-scripts allow-popups allow-top-navigation-by-user-activation allow-same-origin" style="border:0;border-radius:12px;overflow:hidden;width:100%" width="100%"></iframe> <script>
(function() {
  if (window.cryptoApiWidgetListener) {
    return;
  }
  window.cryptoApiWidgetListener = true;
  window.addEventListener('message', function(e) {
    if (e.origin !== "https://cryptoapi.ai") {
      return;
    }
    if (e.data && e.data.type === 'cryptoapi:height' && e.source) {
      var iframes = document.querySelectorAll('iframe[src*="https://cryptoapi.ai"]');
      for (var i = 0; i < iframes.length; i++) {
        if (iframes[i].contentWindow === e.source) {
          iframes[i].style.height = (e.data.height || 120) + 'px';
          break;
        }
      }
    }
  });
})();
</script> <iframe src="https://cryptoapi.ai/ru/widgets/btc?theme=dark&amp;PageSpeed=Off&amp;widget_bypass=PROD_STUB" title="Crypto btc widget" loading="lazy" referrerpolicy="no-referrer-when-downgrade" sandbox="allow-scripts allow-popups allow-top-navigation-by-user-activation allow-same-origin" style="border:0;border-radius:12px;overflow:hidden;width:100%" width="100%"></iframe> <script>
(function() {
  if (window.cryptoApiWidgetListener) {
    return;
  }
  window.cryptoApiWidgetListener = true;
  window.addEventListener('message', function(e) {
    if (e.origin !== "https://cryptoapi.ai") {
      return;
    }
    if (e.data && e.data.type === 'cryptoapi:height' && e.source) {
      var iframes = document.querySelectorAll('iframe[src*="https://cryptoapi.ai"]');
      for (var i = 0; i < iframes.length; i++) {
        if (iframes[i].contentWindow === e.source) {
          iframes[i].style.height = (e.data.height || 120) + 'px';
          break;
        }
      }
    }
  });
})();
</script> <iframe src="https://cryptoapi.ai/widgets/trindx?theme=dark&amp;PageSpeed=Off&amp;aff=2266320&amp;widget_bypass=PROD_STUB" title="Crypto trindx widget" loading="lazy" referrerpolicy="no-referrer-when-downgrade" sandbox="allow-scripts allow-popups allow-top-navigation-by-user-activation allow-same-origin" style="border:0;border-radius:12px;overflow:hidden;width:100%" width="100%"></iframe> <script>
(function() {
  if (window.cryptoApiWidgetListener) {
    return;
  }
  window.cryptoApiWidgetListener = true;
  window.addEventListener('message', function(e) {
    if (e.origin !== "https://cryptoapi.ai") {
      return;
    }
    if (e.data && e.data.type === 'cryptoapi:height' && e.source) {
      var iframes = document.querySelectorAll('iframe[src*="https://cryptoapi.ai"]');
      for (var i = 0; i < iframes.length; i++) {
        if (iframes[i].contentWindow === e.source) {
          iframes[i].style.height = (e.data.height || 120) + 'px';
          break;
        }
      }
    }
  });
})();
</script>]]></content><author><name>@supervova</name></author><category term="Разработка"/><summary type="html"><![CDATA[CryptoAPI.ai — приложение с LLM-ассистентом для трейдинга на крипторынках.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://super-mark.ru/img/blog/2025/2025-09-01-cryptoapi.png"/><media:content medium="image" url="https://super-mark.ru/img/blog/2025/2025-09-01-cryptoapi.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry xml:lang="ru"><title type="html">Vibe Coding эконом-класса: ChatGPT + Gemini CLI + VS Code Copilot</title><link href="https://super-mark.ru/ru/blog/2025/gemini-chatgpt-vs-code-copilot" rel="alternate" type="text/html" title="Vibe Coding эконом-класса: ChatGPT + Gemini CLI + VS Code Copilot"/><published>2025-07-13T00:00:00+03:00</published><updated>2025-07-13T00:00:00+03:00</updated><id>https://super-mark.ru/ru/blog/2025/gemini-chatgpt-vs-code-copilot</id><content type="html" xml:base="https://super-mark.ru/ru/blog/2025/gemini-chatgpt-vs-code-copilot"><![CDATA[<p>Если вы, как и я, переживаете не самый лучший в финансовом плане период жизни, то вы не можете себе позволить платные подписки. Вам нужно что-то бесплатное, но приличное. Бедненько, но со вкусом. Моя рекомендация: VS Code c Copilot’ом, ChatGPT и Gemini CLI.</p> <h2 id="chatgpt">ChatGPT</h2> <p>Надо признаться, что я использую версию пользователя пакета Team, поэтому для меня доступны папки, облегчающие процесс, – для каждого нового чата не надо по новой рассказывать о продукте, целях и стеке. Но, думаю, и с бесплатной версией можно вполне продуктивно работать, используя хештеги для упрощения поиска и вводные инструкции по проекту в начале каждого чата. Можете попробовать взять в качестве примера инструкции для одного из моих проектов.</p> <div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gu">## Роль</span>
<span class="p">
-</span> Эксперт по Twig 3 / SCSS / Vanilla JS (ES-2022) / PHP 7.4
<span class="p">-</span> Ответы по-русски, сверхлаконично. Главный формат — готовый рабочий код.

<span class="gu">## Проект</span>
<span class="p">
-</span> SaaS-LLM для криптотрейдеров: тренды, сигналы, портфолио.
<span class="p">-</span> Интеграции: Binance, CoinGecko, OpenAI. <span class="gs">**Без**</span> прямой торговли.

<span class="gu">## Стек</span>
<span class="p">
-</span> <span class="gs">**Frontend**</span> — Twig 3, ES-модули, SCSS
<span class="p">-</span> <span class="gs">**Backend/API**</span> — PHP 7.4 (PSR-12, strict_types)
<span class="p">-</span> <span class="gs">**Dev-tools**</span> — PHPStan 9, ESLint + Prettier, Stylelint, Gulp + BrowserSync + esbuild

<span class="gu">## Требования</span>
<span class="p">
-</span> UI: WCAG AA; ≥1360 px desktop, ≥768 px tablet
<span class="p">-</span> Performance: LCP ≤ 2.5 s, CSS ≤ 200 KB, JS ≤ 300 KB (gzip)

<span class="gu">## Актуальные задачи</span>
<span class="p">
1.</span> Кабинет трейдера (дашборд, рынки, активы)
<span class="p">2.</span> Уведомления о сигналах
<span class="p">3.</span> Подключение данных Binance

<span class="gu">## Формат ответов</span>
<span class="p">
-</span> Минимум текста, код без лишних комментариев.
<span class="p">-</span> На большие задачи — решение частями с подтверждением.
<span class="p">-</span> Не уверен — уточни.
<span class="p">-</span> Новый файл → покажи bash-команду.

<span class="gu">## Кодстайл (сводно)</span>
<span class="p">
-</span> Отступ 2 пробела, ≤ 100 симв./стр.
<span class="p">-</span> Англ. имена: kebab / camel.
<span class="p">-</span> <span class="gs">**JS**</span>: import/export, const &gt; let, стрелки, без <span class="sb">`for…in`</span>.
<span class="p">-</span> <span class="gs">**PHP**</span>: <span class="sb">`&lt;?php`</span>, <span class="sb">`declare(strict_types=1);`</span>, строгие типы, PDO prepared, исключения — <span class="sb">`RuntimeException`</span>.
<span class="p">-</span> <span class="gs">**HTML**</span>: двойные кавычки, закрытые теги, БЭМ-модификаторы <span class="sb">`is-`</span> / <span class="sb">`has-`</span>.
<span class="p">-</span> <span class="gs">**SCSS**</span>: ≤ 3 уровня вложенности, алфавит свойств, цвета через CSS vars.
<span class="p">-</span> <span class="gs">**Twig**</span>: только простые <span class="sb">`if/for`</span>, auto-escape on.
<span class="p">-</span> Чистота кода — PHPStan, php-cs-fixer, ESLint, Stylelint.

<span class="gu">## Безопасность</span>
<span class="p">
-</span> Валидируй ввод, XSS → <span class="err">``</span>, CSRF для POST.
<span class="p">-</span> Только prepared-запросы.
<span class="p">-</span> HTTPS + CSP, HSTS, X-Frame-Options.
<span class="p">-</span> Логи ошибок без утечек деталей.
</code></pre></div></div> <p>А далее в промте описывайте уже конкретную задачу.</p> <h2 id="vs-code-c-copilotом">VS Code c Copilot’ом</h2> <p>Не буду останавливаться на этом прекрасном и хорошо известном инструменте. Только отмечу, что в бесплатной версии есть лимит правок. Я трачу их на исправление ошибок линтера, и экономлю на агентских правках, потому что ими у меня заведует 👇</p> <h2 id="gemini-cli">Gemini CLI</h2> <p>Gemini CLI — это ИИ-помощник для терминала. Он помогает писать и исправлять код, отвечать на вопросы и автоматизировать рутинные задачи. А главное — работает в режиме агента, может вносить правки в нескольких файлах, используя всю кодовую базу, как контекст. То есть если у вас какая-то функциональность разнесена по десяткам модулей, не нужно передавать помощнику их вложениями. Просто используя собаку <code class="language-plaintext highlighter-rouge">@</code> укажите нужные папки, отдельные файлы или просто напишите в промте «проанализируй всю кодовую базу и…».</p> <h3 id="как-установить">Как установить</h3> <p>Потребуется установленные Node.js и npm. Откройте терминал и выполните команду:</p> <div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>npm <span class="nb">install</span> <span class="nt">-g</span> @google/gemini-cli
</code></pre></div></div> <h3 id="как-использовать-в-vs-code">Как использовать в VS Code</h3> <ol> <li>Откройте терминал в VS Code с помощью <code class="language-plaintext highlighter-rouge">Ctrl + \</code> (или <code class="language-plaintext highlighter-rouge">Cmd + \</code> на macOS).</li> <li>Запустите Gemini, введя команду <code class="language-plaintext highlighter-rouge">gemini</code> и нажав Enter.</li> <li>Начинайте чат: задавайте вопросы или давайте команды в терминале.</li> </ol> <p>У меня Gemini CLI отвечает за тесты и CI.</p>]]></content><author><name>@supervova</name></author><category term="Разработка"/><summary type="html"><![CDATA[Последние месяца три мой ИИ-стек для вайб-кодинга устаканился. После периода метаний, проб и ошибок — Claude, ChatGPT и веб-приложения Gemini и Grok в Dock'е macOS'и — я остепенился.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://super-mark.ru/img/blog/2025/2025-07-13-chat-gpt-gemini-cli-vs-code-copilot.png"/><media:content medium="image" url="https://super-mark.ru/img/blog/2025/2025-07-13-chat-gpt-gemini-cli-vs-code-copilot.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry xml:lang="ru"><title type="html">Как заработать миллион, найти любовь и править миром. Бесплатно, без СМС и регистрации</title><link href="https://super-mark.ru/ru/blog/2025/book-115-self-help-tips" rel="alternate" type="text/html" title="Как заработать миллион, найти любовь и править миром. Бесплатно, без СМС и регистрации"/><published>2025-06-08T00:00:00+03:00</published><updated>2025-06-08T00:00:00+03:00</updated><id>https://super-mark.ru/ru/blog/2025/book-115-self-help-tips</id><content type="html" xml:base="https://super-mark.ru/ru/blog/2025/book-115-self-help-tips"><![CDATA[<p>Собрал и структурировал советы популярной психологии на все случаи жизни. Очистил от метафизики и прочей инфоцыганщины – получилась <a href="https://www.litres.ru/book/vladimir-nikishin-18565332/115-sovetov-po-zhizni-72060589/">тоненькая книжка</a>.</p>]]></content><author><name>@supervova</name></author><category term="Проекты и мечты"/><summary type="html"><![CDATA[Опубликовал на Литрес «115 советов по жизни. От стоиков до современных психологов» – https://vk.cc/cMFgOK.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://super-mark.ru/img/blog/2025/2025-06-08-book-cover@2x.png"/><media:content medium="image" url="https://super-mark.ru/img/blog/2025/2025-06-08-book-cover@2x.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry xml:lang="ru"><title type="html">Моя «ласточка»</title><link href="https://super-mark.ru/ru/blog/2025/pixelmator" rel="alternate" type="text/html" title="Моя «ласточка»"/><published>2025-06-07T00:00:00+03:00</published><updated>2025-06-07T00:00:00+03:00</updated><id>https://super-mark.ru/ru/blog/2025/pixelmator</id><content type="html" xml:base="https://super-mark.ru/ru/blog/2025/pixelmator"><![CDATA[<p>Женские персонажи в моей истории: скучная, надоевшая Photoshop’иха и соблазнительная незнакомка Pixelmator.</p>]]></content><author><name>@supervova</name></author><category term="Дизайн"/><summary type="html"><![CDATA[Я – тот чувак из мема, идущий под ручку с девушкой и оборачивающийся на проходящую мимо.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://super-mark.ru/img/blog/2025/2025-06-07-pixelmator.png"/><media:content medium="image" url="https://super-mark.ru/img/blog/2025/2025-06-07-pixelmator.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry><entry xml:lang="ru"><title type="html">Кому – бесславие, а кому – Echo Immortal</title><link href="https://super-mark.ru/ru/blog/2025/behance" rel="alternate" type="text/html" title="Кому – бесславие, а кому – Echo Immortal"/><published>2025-05-12T00:00:00+03:00</published><updated>2025-05-12T00:00:00+03:00</updated><id>https://super-mark.ru/ru/blog/2025/behance</id><content type="html" xml:base="https://super-mark.ru/ru/blog/2025/behance"><![CDATA[<p><a href="https://www.behance.net/gallery/225665651/Designing-AI-Avatars-for-Digital-Immortality">См. на Behance</a>: процесс от исследований до «выката на прод».</p>]]></content><author><name>@supervova</name></author><category term="Дизайн"/><summary type="html"><![CDATA[Годами не доходили руки. Но всё-таки я это сделал: добавил первый проект на Behance – пусть будет, раз люди просят. Веб-приложение по созданию цифровых личностей, Echo Immortal.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://super-mark.ru/img/blog/2025/2025-05-12-behance.png"/><media:content medium="image" url="https://super-mark.ru/img/blog/2025/2025-05-12-behance.png" xmlns:media="http://search.yahoo.com/mrss/"/></entry></feed>