05 / 06 · Best Practices

🚀 Nick Dobos

Vibe coder, YouTuber (NickScambi), специалист по rapid prototyping через AI. Nick доказал что можно строить работающие продукты за часы — если правильно итерировать через результат, а не через спецификацию. Ship first, refactor later — CC делает это возможным.

🚀
Nick Dobos
Vibe Coder, YouTuber @NickScambi, Rapid Prototyping
⚠️
Важный контекст: подход «vibe coding» Nick Dobos работает для прототипов и MVP — но не для production-кода с требованиями безопасности, масштабируемости или долгосрочной поддержки. Начинающие разработчики путают скорость прототипирования с production-готовностью. «Ship first, refactor later» предполагает что позже действительно будет рефакторинг с пониманием архитектуры. Без этого второго шага накапливается критический технический долг.
🚀 Ключевой принцип

"Ship first, refactor later — CC делает это возможным." Традиционная разработка: спека → архитектура → код → тест → деплой. Vibe coding: описание результата → итерация через демо → рефакторинг того что понравилось. Порядок меняется. Скорость к первому user feedback — в 10 раз быстрее.

💡
Тонкость для опытных: «Ship first, refactor later» в методологии Nick Dobos предполагает конкретный момент рефакторинга: когда первые реальные пользователи дали feedback и вы знаете какие части останутся. Это не откладывание рефакторинга на неопределённый срок — это осознанный выбор не инвестировать в архитектуру функций которые могут быть выброшены. Vibe coding + своевременный рефакторинг = быстро найти что нужно и качественно это построить. Без рефакторинга — просто технический долг.
1
"Vibe Coding" методология — работа с результатом, не спецификацией

Vibe coding — это принципиально другой workflow. Вместо того чтобы думать "как реализовать" — ты описываешь "что хочу увидеть". CC строит. Ты смотришь на результат и говоришь что нужно изменить. Итерируешь через демо, а не через код.

"Я не пишу код. Я описываю что хочу. CC строит. Я говорю что не так. CC переделывает. Через 2 часа у меня working demo которое можно показать пользователям."

Принципиальное отличие от обычного промптинга:

# ТРАДИЦИОННЫЙ подход: работа со спецификацией
"Реализуй UserService с методами:
 - create(UserDTO $dto): User
 - update(int $id, UserDTO $dto): User
 - delete(int $id): void
 Используй Repository pattern, валидацию через FormRequest,
 events UserCreated/UserUpdated/UserDeleted."

# Результат: точная реализация спеки. Но: правильная ли спека?

# VIBE CODING: работа с результатом
"Мне нужна страница где менеджер видит список пользователей,
 может добавить нового, отредактировать имя/email,
 и отключить аккаунт (не удалить, а именно отключить).
 Сделай это."

# Результат: working prototype. Потом: "вот здесь кнопка не там",
# "добавь поиск", "статус должен быть цветным".
# Итерация через ДЕМО, а не через спеку.

# Когда vibe coding лучше: ранние этапы, прототипы, unclear requirements
# Когда traditional лучше: чёткие требования, refactor существующего
Главный принцип Vibe Coding

Твой артефакт на каждой итерации — демонстрация, а не код. Ты смотришь на результат и итерируешь по нему. Это работает потому что пользователи реагируют на демо, не на спецификации. Ты быстрее узнаешь что нужно — ещё до того как написал "правильный" код.

2
"Prototype in Hours" паттерн — день 1 в production

Nick демонстрирует на YouTube: полный рабочий прототип за 2-4 часа. Это возможно если следовать правильному порядку. Ключевой инсайт: не рефакторить то что выбросишь.

Д1
Утро
CC строит working prototype
Минимальные ограничения. Цель: что-то показать пользователям сегодня. Качество кода вторично. Работает — уже ценность.
Д1
Вечер
Показываешь реальным пользователям
5-10 человек из целевой аудитории. Записываешь что непонятно, что мешает, что нравится. Не защищаешь решения.
Д2-3
Итерация
Итерируешь по фидбеку
CC переделывает то что пользователи не поняли. Снова показываешь. 2-3 итерации до стабильного "это то что нам нужно".
Д4+
Рефакторинг
CC рефакторит validated части
Только то что пользователи подтвердили. Остальное — выбросить. Рефакторинг с полным пониманием что именно нужно сохранить.
# Промпт для быстрого прототипа (Nick Dobos стиль)

"Мне нужен рабочий прототип за сегодня. НЕ production код —
 рабочая демонстрация.

 Что делает приложение:
 [описание на языке пользователя, не технические детали]

 Стек: Next.js + Tailwind CSS + Supabase
 (или: Laravel + Livewire + Tailwind)

 Приоритет: работает в браузере > качество кода
 НЕ нужно: авторизация, error handling, тесты, документация

 Начни с главной страницы. Я скажу что менять."

# Потом итерируешь через: "вот что не так:"
# - "кнопка должна быть справа"
# - "добавь поиск"
# - "нужен тёмный фон"
# - "убери это поле, оно не нужно"

# Каждая итерация: CC меняет → ты смотришь → следующее замечание
3
"Screenshot-driven development" — Figma в код за минуты

Nick популяризировал паттерн: показываешь CC скриншот нужного UI — получаешь рабочий код. Это не только для Figma — работает с любым сайтом, мобильным приложением, эскизом на бумаге.

# Базовый промпт для скриншота
"Сделай точно как на этом скриншоте.
 Используй Tailwind CSS.
 React + TypeScript.
 Все интерактивные элементы должны работать."

# Для Figma дизайна
"Вот дизайн из Figma [скриншот].
 Шрифт: Inter (Google Fonts).
 Цвета из скриншота — определи по визуалу.
 Адаптивность: mobile-first."

# Для существующего сайта (референс)
"Хочу страницу похожую на [скриншот чужого сайта].
 Не копируй — вдохновись структурой и расположением.
 Мой контент: [что нужно показать].
 Мой стек: Vue 3 + Tailwind."

# Для эскиза
"Вот мой набросок [фото скетча].
 Реализуй это как веб-страницу.
 Добавь интерактивность по смыслу."

Как подготовить скриншот для максимального результата:

# Что делает скриншот более эффективным:

✓ Обрезать только нужную область (не весь экран с браузером)
✓ Убрать личные данные (replace с placeholder'ами если нужно)
✓ Добавить стрелки/аннотации для неочевидных элементов:
  "→ это dropdown с вариантами"
  "→ здесь поиск должен быть живым"
  "→ этот блок фиксированный при скролле"
✓ Если несколько состояний — дать оба скриншота:
  "Вот состояние по умолчанию и вот после клика на кнопку"
✓ Указать что НЕ нужно реализовывать:
  "Блок с рекламой справа — не нужен"
  "Footer — оставь пустым пока"

# Чего избегать:
✗ Скриншот с очень маленьким текстом (CC может не прочитать)
✗ Слишком большой скриншот целой страницы — лучше разделить на блоки
✗ Тёмные/плохо контрастные изображения
4
"Zero-to-MVP prompts" — 5 промптов для полного MVP

Nick разработал серию из 5 промптов которые строят полный MVP с нуля. Каждый промпт — отдельный шаг с чёткой целью. Порядок важен: следующий шаг зависит от результата предыдущего.

Промпт 1 — Архитектура и стек (без кода)
"Я хочу построить [описание продукта]. Какой минимальный стек ты рекомендуешь для быстрого прототипа? Нарисуй архитектуру словами: какие страницы, какие сущности в БД, какие основные API endpoints. БЕЗ кода."
Промпт 2 — Базовые модели и БД
"Теперь реализуй только модели и миграции для БД. Никакого API, никакого UI. Только структура данных. Используй [выбранный стек]. Добавь seed данные для разработки."
Промпт 3 — Core фичи
"Реализуй core функциональность: [3-4 главные операции]. Backend только — без UI. Каждая операция должна работать через API или консоль. Никакой авторизации пока."
Промпт 4 — UI и UX
"Добавь минималистичный но приятный интерфейс для core фич. Tailwind CSS. Без кастомного JS пока — используй только то что фреймворк даёт из коробки. Мобильная адаптивность обязательна."
Промпт 5 — Деплой и базовая безопасность
"Добавь минимальную авторизацию (username/password, никакого OAuth пока). Создай Dockerfile и docker-compose.yml для деплоя. Добавь .env.example. Что нужно настроить для запуска на VPS?"
Почему 5 промптов, не один

Один большой промпт "сделай всё" даёт непредсказуемый результат с ошибками которые сложно локализовать. Пять шагов позволяют проверить каждый уровень отдельно и скорректировать курс до перехода к следующему. Если БД неправильная — лучше поправить до того как пишется UI.

5
"When to stop vibe coding" — переход к нормальной разработке

Vibe coding — для прототипов и ранних итераций. Nick честно признаёт: был момент когда его vibe-проект вырос до серьёзного продукта с реальными пользователями и деньгами — и подход пришлось менять. Он описывает признаки что пора переходить.

# Стоп-сигналы: пора переходить к structured development

## Признаки технические
✗ Один баг требует изменений в 5+ файлах
  (нет архитектуры, логика разбросана)
✗ CC начинает давать противоречивые решения для похожих задач
  (нет единого стиля, каждый промпт — отдельный мирок)
✗ Добавление новой фичи ломает существующую
  (нет тестов, нет архитектурных invariants)
✗ Нельзя объяснить коллеге как работает ключевая часть
  (ты сам не понимаешь что CC сделал)

## Признаки продуктовые
✗ Реальные пользователи платят деньги (ответственность выросла)
✗ Данные пользователей в production БД
✗ Нужна команда — ещё один человек должен работать с кодом
✗ SLA или договорённости с клиентами о надёжности

## Признаки процессные
✗ Невозможно вернуться на неделю назад (нет git истории с смыслом)
✗ Деплой = "надеюсь что ничего не сломалось"
✗ Починить один баг → появляется два новых

Что делать при переходе — передать CC для рефакторинга:

# Промпт для Nick-стиля рефакторинга из vibe в structured

"Этот код был написан как быстрый прототип.
 Теперь это production-приложение.

 Задача: рефакторить по слоям, начиная с [самый критичный модуль].
 НЕ менять функциональность — только структуру.

 Требования для нового кода:
 - Чёткое разделение: controller / service / repository
 - Каждый метод делает одно (SRP)
 - Все зависимости через параметры/DI (не глобальные)
 - Нет логики в контроллерах (только вызовы сервисов)

 Начни с создания интерфейсов и классов — БЕЗ реализации.
 Я утвержу структуру перед тем как начнёшь переносить логику."
История Nick: когда он остановился

Nick описывает свой проект инструмента для контент-создателей: стартовал как vibe-прототип за выходные, вырос до 200+ платящих пользователей. В тот момент когда серверные расходы превысили $500/месяц — он понял что надо остановиться и переписать по-человечески. Vibe-код работал но был неоптимален и хрупок. Переписал ключевые части за 2 недели с нормальной архитектурой.

6
Vibe coding с ограничениями — не "без правил"

Nick подчёркивает: vibe coding — это не "делай что хочешь". Это итерация через демо при минимальных ограничениях. Минимальных — не нулевых. Даже для прототипа есть правила которые нарушать опасно.

# CLAUDE.md — для vibe-проекта (Nick Dobos подход)

## Стек (зафиксировано, не менять без явного запроса)
- Frontend: Next.js + Tailwind CSS
- Backend: Next.js API Routes
- БД: Supabase (PostgreSQL)
- Деплой: Vercel

## Жёсткие запреты (даже в прототипе)
- Никогда не хранить пароли в plaintext
- Никогда не выводить ошибки с stack trace пользователю
- Никогда не делать SQL через template strings (только параметры)
- Env variables для всех секретов — не хардкодить

## Мягкие правила (можно нарушать с пометкой TODO)
- Валидация input — добавить потом, TODO: validate
- Error handling — минимальный, TODO: proper errors
- Тесты — не сейчас, TODO: add tests
- TypeScript типы — any допустим, TODO: proper types

## Приоритет при конфликте решений
1. Работает в браузере прямо сейчас
2. Безопасно (жёсткие запреты выше)
3. Читаемо
4. Оптимально (наименее важно для прототипа)