лагерь · 12.06
День 1 — сначала идея, потом код
Сегодня пишем не код, а документы. По шагам заполним docs/: тема, spec.md, ERD, исследование рынка и набросок одного экрана.
К коду перейдём на День 3 — сначала нужен чертёж.
Как устроен сегодняшний день
Это не лекция, а практика. Впереди семь шагов, и каждый мы проходим руками: создаём файл, заполняем его, отмечаем чекпоинт. Если шаг не получился — сначала разбираемся с ним и только потом идём дальше.
Формат тот же, что в English Bot — День 1: там ты по шагам собрал бота, сегодня так же по шагам собираешь продукт на бумаге. Завтра код ляжет на готовый чертёж, а не наоборот.
| Что делаем | Что не делаем |
|---|---|
Создаём свою папку и свой docs/ с нуля | Не клонируем чужой готовый репозиторий |
| Заполняем шаблоны короткими предложениями | Не пишем эссе на три страницы |
| После каждого шага отмечаем чекпоинт | Не откладываем всё на вечер |
| Опираемся на цифры и слова живых людей | Не пишем «мне кажется» и не верим ChatGPT без источников |
Шаг 0: папка проекта
Зачем: проект чаще умирает не от плохого кода, а от непонятной идеи. Поэтому сначала заводим место для мыслей — папку docs/, — а о React и Supabase подумаем позже.
Порядок дня простой: утром — задачи на acmp.kz, днём — этот урок. Сначала закрой утреннюю квоту, потом открывай терминал.
Делаем:
mkdir my-project
cd my-project
mkdir docs schema
Скопируй шаблоны из workshops/spec-driven-pet/templates/ в docs/ и убери .template из имени:
cp workshops/spec-driven-pet/templates/spec.template.md docs/spec.md
cp workshops/spec-driven-pet/templates/erd.template.md docs/erd.md
cp workshops/spec-driven-pet/templates/market-research.template.md docs/market-research.md
cp workshops/spec-driven-pet/templates/api.template.md docs/api.md
| Файл | Что внутри |
|---|---|
docs/spec.md | Что строим — проблема, юзер, фичи v1 |
docs/erd.md | Какие данные — таблицы и связи |
docs/market-research.md | Рынок — Trends, конкуренты, цитаты |
docs/api.md | Команды и endpoints (черновик, доделаем на День 2) |
Шаг 1: open source — ты уже опираешься на чужую работу
Зачем: чтобы понять простую вещь — свой проект не нужно писать с нуля. Он собирается из готовых открытых частей, и это нормально.
Раньше код прятали за закрытыми дверями. Потом появились GitHub и GitLab, и код стало можно открыто читать, копировать и улучшать вместе. Открытый код выиграл, потому что тысячи глаз находят и чинят больше, чем одна команда:
- Linux — операционная система, на которой работает почти весь интернет. Открыта.
- React — то, на чём написаны интерфейсы половины сайтов. Открыта.
- Supabase — твоя база и API в проекте. Открыта.
В English Bot ты уже опирался на чужую работу: grammY общался с Telegram вместо тебя, а Supabase дал готовый Postgres. Ты не писал HTTP-запросы и не поднимал свой сервер базы данных. Проект к демо устроен так же — берёшь открытые инструменты и собираешь из них свою ценность.
Делаем (минута): открой свой профиль на github.com. Есть там хоть какая-то активность за последний месяц? Если аккаунта пока нет — заведи прямо сейчас, он понадобится уже с Дня 3.
Open source — это…
Шаг 2: выбери и сформулируй тему
Зачем: пока идея только в голове, она кажется готовой. Стоит проговорить её вслух — и сразу видно, где дыры. После этого шага тема перестаёт быть «подумаю на неделе» и становится конкретной.
Не ищи идеальную идею. Ищи боль, которую видел сам, и данные, которые лягут в 3–5 таблиц. В 25 идеях проектов уже есть готовые темы со схемой базы — возьми одну или предложи свою.
Делаем: дай себе две минуты и ответь вслух на три вопроса:
- Какую боль решаешь? Конкретно: кто и на чём теряет время или нервы?
- Для кого? Один человек — имя или роль, а не «все студенты Казахстана».
- Что юзер сможет сделать на демо? Одна фича, одной фразой.
Главный здесь — второй вопрос. Если вместо конкретного человека получается «для всех» — тема пока сырая, сузь её.
Пример (своя тема — другие слова, та же конкретность)
- Боль: «Куратор тратит 20 минут после каждой лекции, вручную сводя ответы из Google Form в Excel.»
- Юзер: «Айгуль, куратор, группа около 25 человек.»
- Фича v1: «Кнопка в Telegram — и запись попадает в список.»
| Сигнал «бери» | Сигнал «мимо» |
|---|---|
| Можешь назвать имя или роль юзера | «Для всех людей Казахстана» |
| 3–5 таблиц ложатся на фичи | Одна таблица users, всё свалено в JSON |
| Одна фича проходится на демо за 30 секунд | «AI + блокчейн + соцсеть» за 8 дней |
Шаг 3: заполни spec.md
Зачем: spec.md — это список покупок, который пишут до похода в магазин. Сначала формулируешь, что строишь, и только потом строишь. Представь двоих с одинаковой идеей: первый сразу запускает npm init и идёт к ChatGPT — и через день у него каша; второй сначала пишет spec.md. Мы делаем как второй.
Делаем: открой docs/spec.md и заполняй его простыми предложениями, поле за полем.
| Поле spec | Вопрос | Образец |
|---|---|---|
| Problem | Какая боль, с цифрой? | Куратор 20 минут сводит ответы из Google Form в Excel |
| User | Кто этот один человек? | Айгуль, куратор, группа около 25 |
| Success metric | Как поймём, что v1 удался? | Не меньше 15 записей через бота за неделю после демо |
| Features v1 | Что должно работать к демо? | F1: кнопка в Telegram → запись в списке → «Ты в списке» |
| Out of scope | Что осознанно не делаем? | Оплата, сайт, личный кабинет, отмена записи |
Полный пример (уровень B)
Problem: После лекции куратор собирает запись через Google Form. Около 30% отвечают поздно, и куратор вручную сводит ответы в Excel.
User: Айгуль, куратор, группа около 25 человек.
Success metric: не меньше 15 записей через бота за неделю после демо.
Features v1:
- F1: Given студент в Telegram, When жмёт «Записаться», Then в таблице
enrollmentsпоявляется строка, и бот отвечает «Ты в списке». - F2: Given куратор, When отправляет
/list, Then бот присылает до 30 имён (без редактирования в v1).
Out of scope: оплата, сайт, email, отмена записи.
Сколько фич брать. Уровень C — одна фича (F1). Уровень B — две-три. Уровень A — до пяти, но к демо всё равно оставляем только то, что реально работает.
Правило одно: нет строки в spec — нет кода.
Можно писать код до spec.md?
Шаг 4: нарисуй ERD
Зачем: ERD — это карта данных, которую рисуют до того, как класть асфальт. Вспомни English Bot, День 2: очки сбрасывались после перезапуска, потому что жили в Map, а не в таблице. Поэтому сначала ERD, потом SQL.
Делаем: открой docs/erd.md и выпиши таблицы и связи так, чтобы каждая фича из spec ложилась хотя бы на одну таблицу. Имена будут свои — важно, чтобы связь читалась.
Сколько таблиц. Уровень C — две, уровень B — три-четыре, уровень A — четыре-пять.
Рисуй на dbdiagram.io или от руки, а потом опиши словами в erd.md. Черновик SQL можно набросать в schema/init.sql, но в Supabase сегодня ничего не запускаем — это завтра, вместе с ментором.
Почему плохо хранить всё в одном JSON-поле?
Шаг 5: исследование рынка — конкуренты и цифры
Зачем: «мне кажется, бот нужен» — это не аргумент. «Три одногруппника сказали, что форму неудобно заполнять с телефона» — уже аргумент. Исследование отличает реальную потребность от «маме понравилось».
Нужны оба типа данных:
- Слова людей — интервью и цитаты. Они объясняют, почему и когда болит.
- Цифры — Google Trends, цены, число отзывов. Они показывают, насколько часто это случается.
5.1. Google Trends — пять шагов
- Открой Google Trends.
- Введи запрос по своей теме (например,
online course registration). - Выбери регион Kazakhstan и сравни с соседним, например Turkey.
- Сохрани скриншот графика за 12 месяцев.
- Запиши одним предложением, что это значит для твоего проекта.
5.2. Три конкурента
Конкурент — это не обязательно такой же продукт. Это любой способ, которым человек решает ту же боль сейчас. У каждого запиши слабое место и свой угол.
| Конкурент | Слабое место | Твой угол |
|---|---|---|
| Google Forms | Долго заполнять с телефона | Та же запись, но в одну кнопку в Telegram |
| Готовый сервис или приложение | Чужой интерфейс, не под твою боль | Один сценарий, заточенный под лагерь |
| Чат «+1» в Telegram | Хаос, имена приходится считать вручную | Структура как в таблице, а порог входа — как у чата |
Где искать: App Store, Telegram, Product Hunt, 2GIS. У English Bot конкурент — это Duolingo, а не «бот соседа».
5.3. Одна цитата
Найди хотя бы одного живого человека, у которого эта боль есть, и запиши его слова вместе с источником (например, «опрос группы 11.06» или ссылку на отзыв).
Всё это собери в docs/market-research.md.
Зачем смотреть на конкурентов?
Шаг 6: набросок одного экрана
Зачем: перерисовать экран на бумаге — две минуты, переписать уже свёрстанный — час. Дешевле ошибаться на бумаге.
Wireframe — это черновик экрана: где кнопка, где список, где текст. Хватит карандаша и бумаги или Figma, без цветов и оформления.
Делаем: нарисуй один главный экран. Заодно продумай три состояния, про которые новички забывают (вернёмся к ним на Дне 4):
| Состояние | Что видит юзер |
|---|---|
| Загрузка | Спиннер или скелетон, а не пустой белый экран |
| Пусто | «Пока записей нет» и кнопка действия |
| Ошибка | «Что-то пошло не так, попробуй ещё» — а не белый экран |
Что забрать с собой в День 2
Сегодня было много нового, и держать всё в голове не нужно. Перед сном проговори главное:
- Сегодня мы не писали код, а приводили в порядок идею.
- Твой проект стоит на открытых инструментах (Supabase, grammY, React) — писать всё самому не нужно.
- Spec ведёт за собой код: нет строки в spec — нет кода.
- Каждая фича из spec обязана лечь на таблицу в ERD.
- Исследование — это цифры и слова живых людей, а не догадки.
- Состояния «загрузка / пусто / ошибка» придумывают до кода, а не после.
Завтра, на Дне 2, превратим docs/ в живой репозиторий на GitHub, разнесём фичи по задачам и доведём ERD до SQL.
Чекпоинты дня
Если все галочки стоят — день закрыт.
- Создана папка
my-project/сdocs/и шаблонами без словаtemplate. - У тебя есть живой аккаунт на GitHub.
- Тема записана одной строкой, и ты можешь назвать конкретного юзера и одну фичу v1.
- В
docs/spec.mdзаполнены Problem, User, Success metric, хотя бы одна фича с Acceptance и Out of scope. - В
docs/erd.mdминимум две таблицы, и каждая фича ложится на таблицу. - В
docs/market-research.mdесть Trends, три конкурента и одна цитата с источником. - Есть фото или Figma одного экрана с состояниями «пусто» и «ошибка».
Если что-то не сделано — не идём дальше, а добиваем этот пункт.
Домашка до завтра
Сначала — утренние задачи на acmp.kz, потом своё. К 22:00 жду в чате пакет.
Вечер 12.06
0 / 5Код сегодня не открываем.
Готово, если заполнены market-research.md, spec.md и erd.md, и есть фото наброска экрана.
Проверь себя
Почему сегодня день без кода?
Что значит «нет строки в spec — нет кода»?
Зачем рисовать ERD до того, как трогать Supabase?
Что входит в исследование рынка?
Зачем рисовать набросок экрана до вёрстки?