лагерь · 12.06

День 1 — сначала идея, потом код

Сегодня пишем не код, а документы. По шагам заполним docs/: тема, spec.md, ERD, исследование рынка и набросок одного экрана.

К коду перейдём на День 3 — сначала нужен чертёж.

Как устроен сегодняшний день

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

Формат тот же, что в English Bot — День 1: там ты по шагам собрал бота, сегодня так же по шагам собираешь продукт на бумаге. Завтра код ляжет на готовый чертёж, а не наоборот.

Что делаемЧто не делаем
Создаём свою папку и свой docs/ с нуляНе клонируем чужой готовый репозиторий
Заполняем шаблоны короткими предложениямиНе пишем эссе на три страницы
После каждого шага отмечаем чекпоинтНе откладываем всё на вечер
Опираемся на цифры и слова живых людейНе пишем «мне кажется» и не верим ChatGPT без источников

Шаг 0: папка проекта

Зачем: проект чаще умирает не от плохого кода, а от непонятной идеи. Поэтому сначала заводим место для мыслей — папку docs/, — а о React и Supabase подумаем позже.

Порядок дня простой: утром — задачи на acmp.kz, днём — этот урок. Сначала закрой утреннюю квоту, потом открывай терминал.

Делаем:

bash
mkdir my-project
cd my-project
mkdir docs schema

Скопируй шаблоны из workshops/spec-driven-pet/templates/ в docs/ и убери .template из имени:

bash
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 идеях проектов уже есть готовые темы со схемой базы — возьми одну или предложи свою.

Делаем: дай себе две минуты и ответь вслух на три вопроса:

  1. Какую боль решаешь? Конкретно: кто и на чём теряет время или нервы?
  2. Для кого? Один человек — имя или роль, а не «все студенты Казахстана».
  3. Что юзер сможет сделать на демо? Одна фича, одной фразой.

Главный здесь — второй вопрос. Если вместо конкретного человека получается «для всех» — тема пока сырая, сузь её.

Пример (своя тема — другие слова, та же конкретность)

  1. Боль: «Куратор тратит 20 минут после каждой лекции, вручную сводя ответы из Google Form в Excel.»
  2. Юзер: «Айгуль, куратор, группа около 25 человек.»
  3. Фича 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 ложилась хотя бы на одну таблицу. Имена будут свои — важно, чтобы связь читалась.

Образец ERD — запись на лекцию
🗄 students
🔑id bigint
·tg_id bigint
·name text
1Nкто записался
🗄 enrollments
🔑id bigint
🔗student_id bigint
🔗course_id bigint
🔗 student_id → students.id 🔗 course_id → courses.id
N1на какую лекцию
🗄 courses
🔑id bigint
·title text
·date date
🔑 Primary Key🔗 Foreign Key UNIQUE

Сколько таблиц. Уровень C — две, уровень B — три-четыре, уровень A — четыре-пять.

Рисуй на dbdiagram.io или от руки, а потом опиши словами в erd.md. Черновик SQL можно набросать в schema/init.sql, но в Supabase сегодня ничего не запускаем — это завтра, вместе с ментором.

Почему плохо хранить всё в одном JSON-поле?

Шаг 5: исследование рынка — конкуренты и цифры

Зачем: «мне кажется, бот нужен» — это не аргумент. «Три одногруппника сказали, что форму неудобно заполнять с телефона» — уже аргумент. Исследование отличает реальную потребность от «маме понравилось».

Нужны оба типа данных:

  • Слова людей — интервью и цитаты. Они объясняют, почему и когда болит.
  • Цифры — Google Trends, цены, число отзывов. Они показывают, насколько часто это случается.
  1. Открой Google Trends.
  2. Введи запрос по своей теме (например, online course registration).
  3. Выбери регион Kazakhstan и сравни с соседним, например Turkey.
  4. Сохрани скриншот графика за 12 месяцев.
  5. Запиши одним предложением, что это значит для твоего проекта.

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

Сегодня было много нового, и держать всё в голове не нужно. Перед сном проговори главное:

  1. Сегодня мы не писали код, а приводили в порядок идею.
  2. Твой проект стоит на открытых инструментах (Supabase, grammY, React) — писать всё самому не нужно.
  3. Spec ведёт за собой код: нет строки в spec — нет кода.
  4. Каждая фича из spec обязана лечь на таблицу в ERD.
  5. Исследование — это цифры и слова живых людей, а не догадки.
  6. Состояния «загрузка / пусто / ошибка» придумывают до кода, а не после.

Завтра, на Дне 2, превратим docs/ в живой репозиторий на GitHub, разнесём фичи по задачам и доведём ERD до SQL.

Чекпоинты дня

Если все галочки стоят — день закрыт.

  1. Создана папка my-project/ с docs/ и шаблонами без слова template.
  2. У тебя есть живой аккаунт на GitHub.
  3. Тема записана одной строкой, и ты можешь назвать конкретного юзера и одну фичу v1.
  4. В docs/spec.md заполнены Problem, User, Success metric, хотя бы одна фича с Acceptance и Out of scope.
  5. В docs/erd.md минимум две таблицы, и каждая фича ложится на таблицу.
  6. В docs/market-research.md есть Trends, три конкурента и одна цитата с источником.
  7. Есть фото или Figma одного экрана с состояниями «пусто» и «ошибка».

Если что-то не сделано — не идём дальше, а добиваем этот пункт.

Домашка до завтра

Сначала — утренние задачи на acmp.kz, потом своё. К 22:00 жду в чате пакет.

Вечер 12.06

0 / 5
1Утренние задачи
2market-research.md
3spec.md
4erd.md
5Набросок экрана

Код сегодня не открываем.

Готово, если заполнены market-research.md, spec.md и erd.md, и есть фото наброска экрана.

Проверь себя

Почему сегодня день без кода?

Что значит «нет строки в spec — нет кода»?

Зачем рисовать ERD до того, как трогать Supabase?

Что входит в исследование рынка?

Зачем рисовать набросок экрана до вёрстки?

© 2026 aqlacademy.kz