Как собрать задачник для команды за две недели: один промт и 9 шагов
Собрать доску задач — не задача про ИИ. Код пишется за вечер. Не пишется другое: из чего состоит ваша работа, кто хозяин задачи и что происходит, когда срок прошёл. Поэтому здесь вы не заполняете анкету — вы отдаёте один промт, и вопросы задаёт Клод, а потом он же собирает готовую доску под ваш бизнес.
Один промт, который спросит и соберёт
Опрос зашит внутрь промта. Вы вставляете один текст, отвечаете на десяток вопросов про свою работу — и получаете доску со своими колонками, своими людьми и своими запретами, а не универсальную. Сборка, самопроверка и инструкция «как пользоваться» для команды — в том же промте.
- Заведите пустую папку под проект и откройте её в Claude Code — так делали мы. Не хотите ничего ставить — тот же промт работает в чате на claude.ai, только файлы придётся скачивать руками.
- Вставьте промт целиком и отвечайте своими словами. На размытые ответы он переспросит — это и есть работа.
- Если работаете один — так и скажите в первом же ответе, он уберёт роли и права.
- Он покажет ТЗ на десять строк и спросит «собираю?». Прочитайте: это последний момент, когда переделать бесплатно.
- На выходе — файл доски, файл «как пользоваться» и его отчёт по девяти проверкам. Сразу попросите сделать первый коммит: с этого момента у вас есть «верни как было».
Собери мне доску задач под мою работу. Работаешь в три этапа и НЕ ПЕРЕХОДИШЬ к следующему, пока не закончил предыдущий: сначала интервью, потом сборка, потом проверка. ═══════════════════════════════════════ ЭТАП 1. ИНТЕРВЬЮ. Сначала спроси, потом собирай ═══════════════════════════════════════ Правила интервью: - Задавай по ОДНОМУ вопросу за раз и жди ответа. Не показывай список вопросов целиком. - Если мой ответ размытый («ну, задачи разные») — переспроси конкретнее и предложи два-три варианта на выбор, чтобы мне было от чего оттолкнуться. - Спорь со мной, если я прошу то, что развалит систему: например «пусть срок будет необязательным» или «исполнителем поставим отдел». - Всего 10–12 вопросов, не больше. Это разговор, а не форма. - Если я скажу, что работаю один, — не отговаривай и не предлагай «пригласить команду». Просто убери роли, права и согласования внутри, всё остальное оставь как есть. Что нужно выяснить: 1. Чем я (или моя команда) занимаюсь и что должно перестать происходить — одной фразой. 2. Кто пользуется каждый день, поимённо, и кто что видит. 3. Что у нас считается задачей, а что нет. 4. Откуда задачи приходят: встречи, чаты, заявки, регламент, поручения. 5. Из каких этапов состоит работа — это будущие колонки. 6. Кого мы ждём снаружи и на каком этапе: клиент, поставщик, подрядчик, госорган. 7. Что нужно знать о задаче кроме срока и исполнителя: точка, клиент, сумма, объект. 8. Что я готов запретить — не подсветить, а именно запретить. 9. Как у нас считается «вовремя». 10. Три вопроса, на которые обязан отвечать экран статистики. 11. Что мы точно НЕ делаем в этой системе. Когда закончишь — покажи короткое ТЗ на десять строк: чем занимаемся · боль одной фразой · люди и права · что считается задачей · колонки с типами · поля карточки · запреты · правило «вовремя» · три вопроса статистики · чего не делаем. Если по какому-то пункту я ответил размыто — не пиши «уточнить позже», а предложи конкретный вариант и спроси, годится ли он. Если работаешь с моими файлами — сохрани ТЗ рядом отдельным файлом. Покажи ТЗ и спроси одной строкой: «Собираю?» Дождись ответа. Код до этого не пиши. ═══════════════════════════════════════ ЭТАП 2. СБОРКА. Один файл, который открывается двойным кликом ═══════════════════════════════════════ Собери доску по этому ТЗ — один самодостаточный HTML-файл: без сборки, без внешних библиотек, без обращений в сеть. Данные храни в localStorage браузера. Ниже — то, что должно быть в любой такой доске, даже если в ТЗ об этом не сказано. Это не пожелания, а то, на чём такие доски обычно ломаются. ## Главное правило Доска нужна не чтобы видеть задачи — их и так видно. Она нужна, чтобы у каждой задачи был хозяин и срок, а у просрочки — фамилия. Если какая-то твоя идея этому не служит — не добавляй её. ## Колонки Колонка задаётся ТИПОМ, а не цветом: `backlog` (идеи и заявки, срок не обязателен, в просрочку не попадают), `work` (наша работа), `approval` (ждём решения снаружи), `done` (закрыто). Тип храни в данных, а не в названии: название поменяют завтра, тип — нет. Из типа считается просрочка, загрузка и вся статистика. ## Правила, которые нельзя обойти 1. В колонках `work` и `approval` задача НЕ СОХРАНЯЕТСЯ без срока и исполнителя. Это запрет, а не подсказка. В `backlog` — можно без всего. 2. Просрочка считается по дате ЗАКРЫТИЯ, а не по дате последней правки. Иначе задача, которую сегодня переименовали, станет просроченной задним числом. 3. Задача в `approval` не считается просрочкой исполнителя — он свою часть сделал. Показывай отдельной строкой: «ждёт N дней». 4. Если задача проходит через проверку или согласование, «вовремя» считается по дате, когда исполнитель СДАЛ её на проверку, а не когда её наконец закрыли. Задержка проверяющего — отдельная строка «висит на проверке N дней», и она на проверяющем. Иначе люди получают красное за чужую занятость и перестают верить цифрам. 4. Запрет нельзя обойти перетаскиванием — это первый способ, которым его обходят. Любой отказ формулируй по-человечески: «Нельзя закрыть, минуя утверждение клиента», а не «ошибка валидации поля». ## Что должно работать - Перетаскивание карточек. Если перенос запрещён правилом — карточка возвращается на место и появляется объяснение. - Перенос НЕ ТОЛЬКО перетаскиванием: на самой карточке кнопка «перенести в…». Проверено на живой сборке — без неё доска бесполезна с телефона и с трекпада, а именно с телефона её открывают чаще всего. - Таймер прямо на карточке: старт/стоп, время идёт в факт. Таймер, идущий дольше 4 часов или заведённый в предыдущий день, помечается забытым и НЕ считается работой. - Фильтры: по исполнителю, по просрочке, по метке, по моим дополнительным полям. Поиск по заголовку и описанию. - История изменений у карточки: кто, что, когда, старое значение и новое. - Отмена последнего действия (Ctrl+Z) для перемещения, создания, удаления и архива. - Корзина: удалённое не пропадает, его можно вернуть. - Счётчик переносов срока: задача, у которой срок двигали три раза и больше, выглядит иначе. ## Экран статистики Отвечает на три вопроса из ТЗ. Плюс базовое: закрыто вовремя и с опозданием (в штуках и процентах); среднее опоздание в днях; загрузка по ФАКТИЧЕСКИ отработанным часам из таймера, а не по сумме оценок; сколько задач закрыто без срока (их «вовремя» неизмеримо — так и напиши); сколько создано и закрыто в один день (признак, что работа идёт мимо доски). Каждая цифра кликается и открывает свой список. Цифра, в которую нельзя провалиться, не вызывает доверия. Если данных нет — пиши «пусто» и подсказывай первое действие, а не рисуй шеренгу нулей. ## Как это выглядит Спокойно и плотно, как рабочий инструмент, а не как лендинг. Тёмная и светлая темы — обе проработанные, переключатель плюс уважение к системной настройке. Просрочка — единственное красное пятно на экране. Приглушённый текст проходит контраст 4.5:1 в обеих темах. Клавиатура: `N` — новая задача, `/` — поиск, `Esc` — закрыть окно, Tab не уводит фокус из открытого окна. ## Демо-данные 15–20 задач по моим людям и моим колонкам: большая часть закрыта, несколько в работе, ровно одна просроченная, одна ждёт снаружи неделю, на одной идёт таймер, на одной таймер забыт со вчера. Систему должно быть видно, а паники быть не должно. ## Чего делать НЕ надо Не добавляй регистрацию и облачную синхронизацию. Не рисуй графики ради графиков. Не делай анимаций длиннее 300 мс. Не пиши «задача успешно создана» — просто создай её. Сделай сразу целиком, одним файлом. Если требования противоречат друг другу — выбери то, что лучше служит правилу «у каждой задачи хозяин и срок», и напиши одной строкой, что выбрал и почему. ═══════════════════════════════════════ ЭТАП 3. ПРОВЕРКА И ИНСТРУКЦИЯ. Не отдавай непроверенное ═══════════════════════════════════════ Пройди по списку сам и по каждому пункту ответь одной строкой: работает или нет — и покажи, в каком месте кода это сделано. Не пиши «должно работать»: если не уверен, так и напиши. 1. Создать задачу в рабочей колонке без срока и без исполнителя — не должна сохраниться, и должно быть понятно, чего не хватает. 2. Перетащить задачу из работы сразу в «Готово» мимо согласования — должна вернуться и объяснить человеческой фразой. 3. Задача с вчерашним сроком, закрытая сегодня, попадает в «с опозданием». 4. Переименовать давно закрытую вовремя задачу — она НЕ должна стать просроченной. 5. Задача в колонке ожидания не висит просрочкой на исполнителе. 6. Таймер, запущенный вчера, помечен забытым и не попал в отработанные часы. 7. Удалённая задача возвращается из корзины; Ctrl+Z отменяет последнее действие. 8. Любая цифра в статистике открывает список именно этих задач. 9. Карточку можно перенести в другую колонку без перетаскивания — кнопкой на самой карточке. Проверьте на телефоне или в узком окне. Что не работает — почини сразу, не переписывая файл целиком. Потом напиши на одну страницу «Как этим пользоваться» — для тех, кто не участвовал в нашем разговоре: зачем эта доска, что в ней нельзя и почему именно так, что делать в первый день, три правила для всех. Простыми словами, без слова «функционал». Положи её отдельным файлом рядом и продублируй внутри доски под кнопкой «?». В самом конце — одной строкой: что из ТЗ ты не сделал и почему.
Проверено на живом прогоне. Мы прогнали этот промт в чистой сессии от лица владельца сети кофеен: одиннадцать вопросов по одному, шесть раз поспорил по делу, собрал файл — и все девять проверок из третьего этапа прошли руками, а не только в его отчёте.
Почему это не задача про ИИ
Инструмент не решает, что считать задачей. Он не решает, чья просрочка, когда клиент молчит неделю, и должен ли менеджер заводить карточку на звонок. Это управленческие договорённости — ИИ примет их как данность и соберёт ровно то, что вы описали. Час, потраченный на разговор о своём деле, экономит неделю переделок.
- Признак, что пора: вопрос «а что там с…» вы задаёте чаще раза в день, и ответ каждый раз приходится искать в переписке.
- Признак, что рано: вы строите систему для людей, которые пока не согласились ею пользоваться. Сначала договорённость, потом файл.
- Чего система не чинит: нежелание делать работу. Она делает видимым, кто и что не сделал, — а это разговор, который всё равно ведёт человек.
Откуда это. Всё, что дальше, — не теория. Так устроена операционка нашего агентства: доска задач, агент-операционный директор в телеграме и дашборд по клиентам. Собиралась она в Claude Code, папкой с файлами, а не перепиской. Сроки в шагах — сколько это заняло у нас. Грабли — настоящие, все до одной случились.
Если вы работаете один
Половина тех, кому это нужно, работает в одиночку: фриланс, консультирование, своё небольшое дело. Ядро остаётся тем же — хозяин, срок, ожидание снаружи, дата закрытия. Уходит только то, что существует ради нескольких людей. Скажите об этом в первом же ответе на интервью, и промт соберёт систему без ролей и согласований.
Оставить обязательно
- Срок и хозяинХозяин — вы, и всё равно поле обязательное: оно заставляет решить, делаете вы это сами или делегируете. Срок обязателен всегда — без него нет просрочки, а значит нет и системы.
- Колонка ожиданияВы ждёте снаружи не меньше, чем команда: клиент, подрядчик, банк, налоговая, поставщик. Это не ваша просрочка, и видеть их отдельно — половина пользы.
- Просрочка от даты закрытияТот же расчёт, что и у команды. Иначе вчерашняя правка заголовка сделает старую задачу просроченной задним числом.
- Повторяющиеся задачиУ одного человека это главная утечка: отчёты, оплаты, продления, налоги. Пока это помнит голова — это не система, а тревожность.
- ТаймерБез часов вы не узнаете, сколько стоит ваш час и какой клиент съедает неделю за деньги двух дней. Для соло это часто важнее самой доски.
Смело убрать
- Роли и праваВы один — делить нечего. Вход по паролю нужен только когда доска уедет в интернет.
- Статистика по людямСреднее опоздание по сотрудникам превращается в одну строку про вас. Оставьте «сколько закрыто вовремя» и «где копится».
- Согласование внутриКолонка утверждения нужна только под внешнее ожидание, не под себя.
- Эскалация «выше»Некому. Вместо неё — жёсткое правило: три переноса срока подряд означают, что задача сформулирована неправильно, и её надо переписать, а не двигать.
Сроки для соло короче: вечер на доску, ещё вечер на бота, который пишет вам самим. База и выкладка нужны не сразу — пока вы работаете с одного компьютера, файл в браузере честно справляется. Они понадобятся в тот день, когда захочется открыть доску с телефона.
Что зашито в промт и почему
Девять решений промт принимает за вас — не потому что так красивее, а потому что каждое из них мы сначала сделали неправильно. Если будете менять промт под себя, меняйте что угодно, кроме этого: на этом держатся все цифры.
Типы колонок
У колонки есть тип — бэклог, работа, ожидание снаружи, закрыто, — и он хранится в данных, а не в названии.
Название колонки поменяют завтра, тип — нет. Из типа считается всё остальное: что считать просрочкой, чью загрузку мерить, что показывать в статистике. Это единственное решение, которое нельзя отложить.
Запрет, а не напоминание
В рабочих колонках задача не сохраняется без срока и исполнителя. В бэклоге — можно без всего.
Мягкий вариант — подсветить красным и разрешить сохранить — проверен: поле остаётся пустым у половины задач. Запрет работает с первого дня и не требует ни дисциплины, ни разговоров.
Просрочка от даты закрытия
Сравниваем срок с датой закрытия, а не с датой последней правки строки.
У нас так набежало 168 «просрочек», настоящих оказалось 60: любая правка заголовка делала старую задачу просроченной задним числом. Это самая частая ошибка в таких досках, и её почти никто не замечает.
Ожидание снаружи — не ваша просрочка
Задача в колонке ожидания не висит долгом на исполнителе; вместо этого пишем «ждёт 9 дней».
68% всех наших «просрочек» оказались ожиданием клиента или продюсера. Люди годами получали чужие долги и перестали верить цифрам вообще, включая настоящие. Это уже разговор с клиентом, а не с сотрудником.
Забытый таймер не считается работой
Таймер, идущий дольше рабочего дня или заведённый вчера, помечается забытым — и не останавливается сам.
Автоматическая остановка врёт в обе стороны: либо запишет часы, которых не было, либо сотрёт настоящие. Пусть человек решит сам, а система не делает вид, что знает.
Статус вычисляется, а не ставится
«Сейчас работает над…» берётся из запущенного таймера и записанных часов, руками его поставить нельзя.
Ручной статус протухает в тот же день, когда человек забыл нажать. У нас такой жил полтора месяца, и его читали агенты, уверенно отвечая неправду. Нажать нельзя забыть, если нажимать не надо.
Каждая цифра проваливается в список
Любое число в статистике кликается и открывает именно те задачи, из которых оно сложилось.
По цифре, в которую нельзя провалиться, решения не принимают — ей просто не верят. Заодно это единственный способ поймать, что цифра посчитана неправильно.
«Вовремя» — по дате сдачи, а не закрытия
Если задача идёт через проверку, срок сравнивается с моментом, когда исполнитель сдал её, а не когда руководитель наконец нажал «Готово». Задержка проверяющего висит отдельной строкой на нём.
Иначе человек получает красное за чужую занятость. Это всплыло на живом прогоне промта: сдал десятого в срок, посмотрели четырнадцатого — и по наивному расчёту виноват исполнитель. Месяц такой статистики, и цифрам перестают верить все.
Пусто выглядит как пусто
Нет данных — так и написано, плюс подсказка первого действия. Никаких нулей вместо цифр.
«Постов 0 · Охват 0 · Просмотры 0» над надписью «пока пусто» — четыре числа, которые ничего не сообщают, но выглядят как отчёт.
Шесть мест, где утекают задачи
Шесть дыр, через которые задачи уходят и из команды, и у одного человека. Почти наверняка у вас работают две-три. Начинать надо с той, из которой льётся сильнее.
Договорились на встрече — не стало задачей
Созвон закончился, все кивнули, никто не записал.
Договорённость, не ставшая задачей в тот же день, не выполняется почти никогда. Самая большая дыра из всех: её не видно нигде, потому что задачи не существовало.
Чем закрывается: Правило «встреча не закончена, пока поручения не заведены». Дальше — расшифровка звонка и кнопка «завести задачу» напротив каждой договорённости.
Просьба в рабочем чате — утонула
«Поправьте, пожалуйста, цену на баннере» между двумя мемами.
Клиент считает, что попросил. Вы считаете, что не просили. Оба правы и оба недовольны.
Чем закрывается: Просьба из чата живёт до конца дня: либо стала задачей, либо на неё ответили отказом. Позже — система сама находит такие просьбы и приносит их с цитатой.
Задача есть, хозяина нет
Исполнитель — «команда», «отдел», «мы». У соло — «когда-нибудь».
У задачи без фамилии и даты нет ни срока, ни разговора. Она просто существует.
Чем закрывается: Запрет на сохранение без исполнителя и срока. Не напоминание — запрет. У нас таких задач ноль, потому что их физически нельзя создать.
Ждём снаружи — числится нашей просрочкой
Человек сделал свою часть неделю назад, а в отчёте у него красное.
У нас 68% всех «просрочек» оказались ожиданием клиента или продюсера. Люди годами получали чужие долги — и перестали верить цифрам вообще, включая настоящие.
Чем закрывается: Отдельный тип колонки. Такая задача не просрочка исполнителя, а строка «ждёт клиента 9 дней» — и это разговор с клиентом, а не с сотрудником.
Сделано, но не отмечено
Работа сделана вчера, карточка висит в работе.
Цифры врут вниз, руководитель дёргает по сделанному, доверие падает с двух сторон.
Чем закрывается: Агент вечером спрашивает, и первая кнопка — «уже сделал». Нажатие двигает карточку, заходить в систему не нужно.
Повторяющееся живёт в голове
Отчёт первого числа, аренда, продление домена, проверка чек-листа на точках.
Пока это помнит один человек, это не процесс, а зависимость от человека. У соло — единственный источник по-настоящему дорогих провалов.
Чем закрывается: Повторяющиеся задачи создаются сами по расписанию, с исполнителем и сроком. Не напоминание в календаре, а задача, попадающая в общую просрочку.
Шесть конфигураций под разный бизнес
Ядро одинаковое у всех: типы колонок, хозяин и срок, ожидание снаружи отдельно. Различается то, что вокруг. Найдите похожее на себя — это заготовки для разговора с Клодом, а не готовые ответы.
Один человек: фриланс, консультант, ИПтоже нормально
- Колонки
- Идеи (backlog) · Сегодня (work) · Ждём клиента / подрядчика (approval) · Сделано (done)
- Свои поля
- клиент, счёт, «работа или своё»
- Главный запрет
- Задача не сохраняется без срока. Три переноса подряд — задачу переписать, а не двигать.
- Главная цифра
- Сколько часов ушло на каждого клиента и что висит на чужой стороне.
Агентство, студия, продакшннаш случай
- Колонки
- Идея (backlog) · Задачи недели (work) · Сегодня (work) · У клиента (approval) · Готово (done)
- Свои поля
- клиент, площадка, ссылка на макет
- Главный запрет
- Нельзя закрыть, минуя «У клиента»: утверждение — часть работы, а не формальность.
- Главная цифра
- Успеваем ли по обещаниям каждому клиенту и сколько часов съел каждый проект.
Сеть точек: кофейни, магазины, салонычастый случай
- Колонки
- Идеи (backlog) · Сегодня по точкам (work) · Ждём поставщика (approval) · Сделано (done)
- Свои поля
- точка, смена, фото-подтверждение
- Главный запрет
- Нельзя закрыть задачу по точке без фото или отметки управляющего.
- Главная цифра
- Какие точки раз за разом не выполняют чек-лист и что зависло на поставщике.
Стройка, ремонт, монтаж, производство
- Колонки
- Смета (backlog) · В работе (work) · Ждём материал / подрядчика (approval) · Принято (done)
- Свои поля
- объект, этап, подрядчик, сумма
- Главный запрет
- Нельзя перевести в «Принято» без отметки приёмки — иначе спор через месяц не разрешить.
- Главная цифра
- Где стоим из-за материалов, а где из-за людей: это разные болезни с разным лечением.
Услуги с записью: клиника, сервис, салон
- Колонки
- Заявки (backlog) · Записан (work) · Ждём клиента (approval) · Закрыто (done)
- Свои поля
- клиент, канал заявки, обещанное время ответа
- Главный запрет
- Заявка не может лежать без ответственного дольше обещанного времени ответа.
- Главная цифра
- Сколько заявок ответили в срок и на каком шаге теряем людей.
Отдел продаж
- Колонки
- Новые (backlog) · В работе (work) · Ждём решения клиента (approval) · Закрыто (done)
- Свои поля
- клиент, сумма, следующий шаг
- Главный запрет
- Сделка не сохраняется без следующего шага с датой. Сделка без следующего шага — потерянная.
- Главная цифра
- Сколько сделок без следующего шага и у кого они копятся.
Сборка по шагам: от доски до дашборда
Первый шаг даёт работающую доску целиком — он выше. Остальные восемь добавляются потом и по одному: база, адрес в интернете, часы, агент, дашборд. Порядок важен: собранный не в том порядке задачник считает красивые цифры ни из чего.
Проверить руками1 час
Он уже проверил себя сам — и всё равно проверьте. ИИ ошибается тихо и уверенно: все наши грабли были именно такими, ничего не падало и всё выглядело рабочим.
- Пройдите девять проверок ниже на своём экране, а не в его ответе.
- Расхождение между его отчётом и вашей проверкой — самое ценное, что вы сегодня увидите. Разберитесь в нём до того, как строить дальше.
- Не принимайте «должно работать» и «я исправил» — спрашивайте, в каком месте это сделано.
- Создать задачу в рабочей колонке без срока и без исполнителя — не должна сохраниться, и должно быть понятно, чего не хватает.
- Перетащить задачу из работы сразу в «Готово» мимо согласования — должна вернуться и объяснить человеческой фразой.
- Задача с вчерашним сроком, закрытая сегодня, попадает в «с опозданием».
- Переименовать давно закрытую вовремя задачу — она НЕ должна стать просроченной.
- Задача в колонке ожидания не висит просрочкой на исполнителе.
- Таймер, запущенный вчера, помечен забытым и не попал в отработанные часы.
- Удалённая задача возвращается из корзины; Ctrl+Z отменяет последнее действие.
- Любая цифра в статистике открывает список именно этих задач.
- Карточку можно перенести в другую колонку без перетаскивания — кнопкой на самой карточке. Проверьте на телефоне или в узком окне.
- Все девять проверок проходят у вас на экране.
- Вы знаете, что из ТЗ он не сделал.
Уверенный тон ничего не значит. Из семи наших граблей шесть выглядели как работающая система.
Правки словамипо ходу дела
Здесь теряют больше всего времени. «Переделай, что-то не то» стоит вам целого нового файла, в котором сломано другое.
- Одна правка за раз, с оговоркой «остальное не трогай».
- Цитируйте дословно то, что видите на экране, вместо «не работает».
- После каждой правки — номер версии на экране. Иначе не понять, ту ли версию вы смотрите.
- Коммит после каждой рабочей версии. Сломалось — «верни как было в прошлом коммите», и это работает всегда.
- Если после трёх попыток не чинится — начните новый разговор. В папке уже лежат и ТЗ, и файл, пересказывать ничего не надо; длинная переписка тащит за собой все прошлые ошибки.
Сломалось вот что: [дословно то, что вижу на экране]. Найди причину и почини только её — остальное не трогай. Сначала скажи, в чём была причина, одной фразой, потом дай исправленный кусок. — — — Добавь одно: [что именно]. Больше ничего не меняй. Подними номер версии в углу экрана и в трёх строках скажи, что изменилось.
- Вы правите по одной вещи и всегда знаете, что именно изменилось.
Обкатка на своих задачах2–3 дня
Доска проверяется не демо-данными, а прошлой неделей. Именно здесь выясняется, что не хватает колонки или что запрет обходят.
- Разложите руками задачи прошлой недели. Не ложится — не хватает колонки или типа.
- Проверьте, что «ждём снаружи» отделено от «делаем мы». Смешивать дорого: у нас 68% просрочек оказались чужими.
- Попробуйте обойти свой запрет. Через перетаскивание, через редактирование, через закрытие карточки на полпути.
- Внесите правки в ТЗ, а не только в файл: дальше из него будет собираться база.
- Система отвечает на вопрос «чья это просрочка» без участия человека.
- Обойти запрет не получилось.
Соблазн сделать запрет «мягким»: подсветить красным и оставить возможность сохранить. Проверено — так поле остаётся пустым у половины задач.
База и права2–3 дня
Пока данные в браузере, они живут на одном компьютере: с телефона не открыть, у второго человека своя копия. Переносим — теперь, когда понятно, что храним.
- Заведите проект в Supabase: это Postgres плюс готовый вход по почте, свой сервер не нужен.
- ВКЛЮЧИТЕ RLS на каждой таблице. Без этого любой, у кого есть публичный ключ, читает всю базу. Это не настройка «на потом», а единственная защита.
- Два ключа: публичный живёт в html-файле — так и задумано, он бесполезен без политик. Секретный (service_role) не попадает во фронт никогда: он ходит мимо всех политик.
- Схему держите миграциями — файлами в репозитории. Иначе через полгода никто не поднимет такую же базу.
- Соло это тоже касается, но проще: политика «вижу только своё» — одна строка.
Помоги перенести эту доску из localStorage в базу Supabase. Работай пошагово и жди меня: после каждого куска говори, что именно вставить и куда, и дожидайся «готово». Сначала спроси: заведён ли у меня проект, как называются мои поля из ТЗ и кто должен видеть чужие задачи. Потом дай по одному куску за раз: 1. SQL-миграцию: таблицы под мои поля; ВКЛЮЧЁННЫЙ RLS на каждой таблице; политики — кто читает, кто меняет, кто удаляет; мягкое удаление в корзину триггером; таблицу журнала изменений (кто, что, когда, старое и новое значение). 2. Правила из ТЗ (нет срока — нет задачи, нельзя мимо согласования) продублируй в базе, а не только в интерфейсе: проверка в браузере обходится любым внешним запросом. 3. То, что мне делать из браузера нельзя, но нужно, — оформи функцией в базе (security definer) и явно раздай право на её вызов, отозвав у всех остальных. 4. Изменения в html: вход по почте, чтение и запись через публичный ключ. 5. Отдельно объясни, как проверить, что RLS действительно работает: покажи запрос, который должен вернуть пустоту у человека без доступа. Важно: секретный ключ (service_role) в браузер не попадает никогда, и присылать его в чат мне не предлагай. Работаем только с публичным ключом.
- Человек без доступа не видит данных, даже если знает адрес запроса.
- Удалённую задачу можно вернуть.
- Базу можно развернуть заново из файлов репозитория.
Правила из шага 4 продублируйте в базе. Проверка только в интерфейсе обходится вкладкой, ссылкой и любым внешним запросом. Интерфейс — удобство, а не защита.
Выкладка: адрес вместо файлаполдня
Пока система — файл на чьём-то ноутбуке, ей не пользуются: у одного старая версия, у другого не открывается, с телефона никак.
- Репозиторий на GitHub. Заодно появится история: что менялось и когда.
- Подключите его к Vercel — дальше каждый push сам становится выкладкой, сборка не нужна.
- Свой домен; сертификат выпустится сам.
- Ветку можно выложить отдельным адресом и показать клиенту, не трогая рабочую версию.
- Запомните раздел: фронт выкладывается через push, а миграции базы и серверные функции — отдельно. Они не едут вместе. Мне это стоило восьми правок, лежавших в репозитории, пока я говорил «выкачено».
Проведи меня по выкладке — по одному шагу за раз, дожидаясь моего «готово» после каждого: 1. Репозиторий на GitHub: что в него класть и, главное, чего класть нельзя. Объясни, почему удалить файл с ключом уже не поможет. 2. Импорт репозитория в Vercel, чтобы каждый push в основную ветку сам становился выкладкой. Сборка мне не нужна — это статика. 3. Свой домен и сертификат. 4. Номер версии на экране, который меняется при каждой выкладке — иначе я никогда не буду знать, ту ли версию видит человек, у которого «не работает». 5. Отдельно: что из моей системы НЕ выкладывается вместе с фронтом (миграции базы и серверные функции) и какой командой это выкладывать.
- Система открывается по адресу с телефона.
- Номер версии виден на экране и меняется после выкладки.
Не кладите секретные ключи в html и в репозиторий. Всё, что уехало в git, считайте опубликованным навсегда: удаление файла не убирает его из истории.
Учёт времени1–2 дня
Единственное, что человек обязан нажимать. Всё остальное система должна вычислять сама. Без часов не посчитать ни загрузку, ни маржу, ни цену своего часа.
- Таймер прямо на карточке, в двух сантиметрах от работы. Отдельная система учёта времени не заполняется никогда.
- План и факт по задаче — чтобы видеть, что оценивали вдвое оптимистичнее.
- Забытый таймер помечайте, но не останавливайте автоматически.
- Статус человека вычисляйте из фактов, а не из кнопки «я работаю».
Добавь учёт времени: таймер прямо на карточке, план и факт по задаче, недельный итог часов по проектам. Забытый таймер (идёт дольше рабочего дня или заведён в предыдущий день) помечай и НЕ считай работой — но и не останавливай сам: я либо запишу человеку часы, которых он не работал, либо сотру те, что работал. Статус «сейчас работает над…» вычисляй из запущенного таймера и записанных часов, руками его ставить нельзя.
- Видно, сколько часов ушло на каждый проект за неделю.
- Никто не ставит свой статус руками.
Не считайте забытый таймер работой и не стирайте его молча: в первом случае вы запишете часы, которых не было, во втором — сотрёте настоящие.
Агент, который додавливает3–5 дней
Доска показывает просрочку, но смотреть на неё никто не обязан. Агент замечает и пишет — сам, вовремя, конкретному человеку. Ради этого всё остальное и собиралось.
- Бот в мессенджере, где вы УЖЕ сидите. Новый канал не заводите: туда не придут.
- Логика — в серверной функции (в Supabase это Edge Functions). Токен и ключи в секретах проекта, не в коде.
- Расписание — планировщиком на стороне базы.
- Первой кнопкой — «уже сделал». Нажатие двигает карточку.
- Защита от повторов: одно событие — одно сообщение. Мы получали брони дважды, пока не завели отметку об отправке.
- Соло-версия: тот же бот пишет вам самим. Утром список, вечером «что не сделал». Работает лучше, чем кажется.
Сделаем агента, который сам пишет людям в телеграм. Спроси сначала, что у меня
уже есть — бот, база, кто получатели, — и дальше веди по шагам, дожидаясь моего «готово»
после каждого. Объясняй как человеку, который телеграм-ботов раньше не делал.
1. Бот у @BotFather: продиктуй, какие команды вводить, и скажи, куда положить токен,
чтобы он не попал в репозиторий. Токен в чат присылать не проси.
2. Приём сообщений: серверная функция плюс вебхук, с секретным словом, которое функция
проверяет в каждом запросе. Объясни, зачем эта проверка нужна.
3. ПРИВЯЗКА ЛЮДЕЙ — не пропусти этот шаг. Бот не может написать первым: пока человек
сам не нажал «Старт», для телеграма его не существует. Сделай так, чтобы человек
отправил боту /start со своим кодом, а функция связала его chat_id с сотрудником
в базе. Покажи, как выдать коды и как проверить, у кого привязка не сделана.
4. Рассылка: утром — задачи со сроком сегодня, вечером — что осталось. Каждому только
его задачи. Часовой пояс задай явно и дай сначала проверить на одном человеке.
5. Кнопки под сообщением: «уже сделал» первой, «перенести на завтра» с записью переноса,
«это не моя» с возвратом постановщику. Нажатие ДВИГАЕТ карточку в базе. Если после
ответа всё равно надо зайти в систему — ботом перестанут пользоваться на второй неделе.
При нажатии проверяй, в каком состоянии задача СЕЙЧАС: вчерашнюю кнопку нажмут
послезавтра.
6. Новая задача из сообщения боту: человек пишет текст — бот спрашивает исполнителя
и срок и заводит карточку.
7. Защита от повторов: отпечаток события и отметка об отправке, проверка ДО отправки.
8. Обработка отказов: если человек заблокировал бота, рассылка не должна вставать —
отмечай это в системе и иди дальше по списку.
9. Эскалация: молчание после трёх напоминаний — сообщение руководителю.
10. ГОЛОСОВЫЕ СООБЩЕНИЯ. Человек за стойкой или за рулём не печатает — он скажет.
Принимай голосовое: скачай файл по file_id, распознай речь, дальше работай с текстом
так же, как с набранным. Обязательно: перед тем как завести задачу, покажи, что
расслышал, и спроси подтверждение кнопкой — распознавание ошибается именно на именах,
точках и числах. В разбор передавай список моих людей и колонок, чтобы модель выбирала
из них, а не угадывала написание. Длинное голосовое считай планёркой: собери из него
СПИСОК задач с галочками, что заводим. Саму запись после распознавания удаляй.- Задачу можно закрыть, не открывая систему.
- Одно событие даёт ровно одно сообщение.
Не запускайте агента раньше запретов из шага 4. Рассылка напоминаний по задачам без сроков — спам, от которого отписываются за неделю, и второго шанса не будет.
Дашборд — последним2–3 дня
Считается из накопленного. Раньше трёх-четырёх недель реальной работы строить нечего.
- Возьмите три вопроса из ТЗ. Только их.
- Каждая цифра открывает свой список: по цифре, в которую нельзя провалиться, решения не принимают.
- Рядом с выводом — охват данных. Дашборд, молча считающий по неполным данным, опаснее его отсутствия.
- Складывайте в базе, а не в браузере.
Сделай экран статистики. Три вопроса, на которые он обязан отвечать, — из ТЗ. Требования: каждая цифра кликается и открывает список именно этих задач; рядом с каждой цифрой видно, по какой доле данных она посчитана («часы проставлены на 71%»); все суммы считаются в базе, а не в браузере — интерфейс базы отдаёт ограниченное число строк, и молча сложить видимую часть нельзя; если тянешь строки — всегда задавай сортировку; ни одного графика без числа рядом; пустой экран показывает «пусто» и первое действие, а не шеренгу нулей.
- На вопрос «почему такая цифра» можно ответить, ткнув в неё.
- Видно, по какой доле данных посчитана каждая цифра.
Дашборд первым — самая частая ошибка. Красивые графики по пустым таблицам, и никто не понимает, почему им не верят.
Телеграм-бот и голосовые команды
Доска показывает просрочку, но смотреть на неё никто не обязан — бот приходит сам. Технически он делается за вечер, и почти весь затык не в коде, а в одном шаге: бот не может написать человеку первым, пока тот сам не нажал «Старт».
Пять шагов подключения
Завести бота
В телеграме напишите @BotFather, команда /newbot, придумайте имя и адрес. В ответ придёт токен — длинная строка через двоеточие.
Токен — это пароль от бота: у кого он есть, тот пишет от вашего имени. В код и в репозиторий его не кладут никогда.
Спрятать токен
Положите токен в секреты проекта (в Supabase — секреты Edge Functions). Код читает его оттуда по имени.
Всё, что уехало в git, считайте опубликованным навсегда: удалить файл потом мало, он остаётся в истории.
Дать боту адрес
Серверная функция получает сообщения по вебхуку: вы один раз говорите телеграму, на какой адрес слать. При этом задаётся секретное слово, и функция проверяет его в каждом запросе.
Без проверки любой, кто узнает адрес функции, сможет прислать ей поддельное «нажатие кнопки» от имени вашего сотрудника.
Привязать людей
Человек открывает бота и отправляет /start со своим кодом (или просто /start, если вы дали каждому свою ссылку). Функция запоминает его chat_id и связывает с сотрудником в базе.
Это тот шаг, который забывают. Бот не может написать первым: пока человек сам не нажал «Старт», для телеграма его не существует — и никакие напоминания не уйдут.
Включить расписание
Планировщик на стороне базы будит функцию утром и вечером. Часовой пояс задайте явно и проверьте на одном человеке, прежде чем включать всем.
Первая же рассылка в шесть утра стоит вам доверия команды сильнее, чем любая ошибка в цифрах.
Что он умеет
- Утренний список — Каждому — только его задачи со сроком сегодня. Не общий список на всех: чужие задачи в своём сообщении люди перестают читать на третий день.
- Вечерний вопрос — «Что из этого осталось?» — и кнопки. Это единственный момент, когда карточки двигаются без захода в систему.
- Кнопка «уже сделал» — Первая по счёту. Чаще всего работа сделана, а карточка не двинута — и цифры врут вниз, а руководитель дёргает по сделанному.
- Кнопка «перенести на завтра» — С записью переноса. Три переноса подряд — задача сформулирована неправильно, и это видно в системе, а не только в ощущениях.
- Кнопка «это не моя» — Возвращает задачу постановщику вместо молчания. Молчание все читают как согласие, а это чаще всего несогласие.
- Новая задача прямо из чата — Человек пишет боту текст — бот спрашивает исполнителя и срок и заводит карточку. Так закрывается утечка «сказал в чате, никто не записал».
- Эскалация — Молчание после трёх напоминаний — сообщение руководителю. Напоминание без последствий перестают читать через неделю.
Голосом, а не текстом
Текстом задачу заводят те, кто сидит за компьютером; голосом — все остальные, а это как раз те люди, чьи задачи теряются чаще всего.
Зачем вообще голос
Человек за стойкой, за рулём или на объекте не печатает. Он скажет — и не заведёт, потому что «потом с компьютера». Потом не бывает.
Самая большая утечка любой системы — ввод. Голосовое сообщение снимает её целиком: сказал сразу после планёрки — задачи уже в доске.
Как это устроено
Телеграм присылает голосовое обычным файлом. Функция скачивает его по file_id, отправляет в распознавание речи, получает текст — и дальше работает с ним точно так же, как с набранным вручную.
Отдельной «голосовой логики» не появляется: распознавание — это просто ещё один способ получить тот же текст, который человек мог бы напечатать.
Всегда показывать, что расслышал
Прежде чем заводить задачу — сообщение с кнопками: «Завожу: “заказать стаканы 300 мл” на Аслана, срок пятница. Верно?»
Распознавание ошибается ровно на том, что здесь важнее всего — на именах, названиях точек и числах. Молча заведённая задача с чужим исполнителем хуже, чем не заведённая.
Подсказывать список своих
В разбор передавайте список людей, точек и колонок: модель должна ВЫБИРАТЬ из них, а не угадывать написание.
Иначе «на Аслана» станет «Асланом» в тексте задачи, а исполнитель останется пустым — и запрет из шага 3 не даст такую задачу сохранить.
Длинное голосовое — это планёрка
Две минуты речи — не одна задача. Из такого сообщения бот должен собрать СПИСОК задач и показать его галочками: что заводим, а что нет.
Именно так закрывается «договорились на встрече — не стало задачей»: наговорили итоги планёрки, отметили галочками, всё разошлось по людям и точкам.
Что делать с самой записью
Проще не хранить: распознали, показали текст, аудио удалили. Если храните — скажите людям об этом прямо.
Голос сотрудника — это данные о человеке, а не просто файл. Тихо копить их у себя на сервере не стоит ни в одной стране.
Грабли именно бота
Одно событие — два сообщения
Как надо: Заведите отпечаток события и отметку об отправке, проверяйте её ДО отправки. У нас брони уезжали дважды именно поэтому.
Кнопки живут вечно
Как надо: Человек нажмёт вчерашнюю кнопку послезавтра. При нажатии проверяйте, в каком состоянии задача сейчас, а не в каком была при отправке.
Бот в группе слышит не всё
Как надо: По умолчанию в группах он видит только сообщения, адресованные ему. Для рабочих напоминаний это и к лучшему: пишите людям в личку, в группу — только то, что касается всех.
Человек заблокировал бота
Как надо: Телеграм ответит ошибкой, и рассылка может встать на этом месте. Обрабатывайте отказ по каждому получателю отдельно и показывайте в системе, у кого бот отключён.
Токен утёк
Как надо: Отзывается у @BotFather одной командой — токен меняется, старый перестаёт работать. Сделайте это сразу, как только он попал в переписку или в код.
Внедрение: где умирает большинство систем
Собрать систему — половина дела и половина недели. Вторая половина — чтобы ею начали пользоваться. Технически исправная и никем не открываемая доска — обычный итог, и причины у него всегда одни и те же.
Объявите как снятие лишнего, а не как контроль
«Чтобы вам не прилетало в десять вечера “а где?”» — правда и работает. «Чтобы я видел, кто чем занят» — тоже правда, но после неё заводить задачи перестают, а работают мимо доски.
Перенесите только живое
Не тащите архив. Задачи текущей недели и то, что горит. Перенос трёх лет истории — верный способ утопить старт в бессмысленной работе.
Первые две недели ведёте вы
Не «команда сама разберётся». Кто-то один каждый день смотрит, что не завели, и заводит. Через две недели это привычка, до этого — нет. Если вы один, роль та же: две недели вы заводите задачу на всё, даже на мелочь.
Первый месяц не наказывайте по цифрам
Иначе люди научатся не заводить задачи, а не делать их вовремя. Цифры первого месяца — про качество данных, а не про людей.
Руководитель ставит задачи только через систему
Если владелец продолжает раздавать поручения голосом и в личку, система умрёт за месяц, и никакой агент этого не спасёт. Это главное условие, и оно не техническое.
Что мерить, чтобы понять, прижилось ли
Доля задач с исполнителем и сроком (у нас 100% — иначе их нельзя создать). Доля задач, закрытых прямо из мессенджера. Доля дней, где проставлены часы. Все три — про пользование, а не про дисциплину.
Грабли, на которых мы уже полежали
Каждая прожила в нашей системе от недели до полутора месяцев. Все — тихие: ничего не падало, всё выглядело работающим, а цифры были неверными. Поэтому в промте есть отдельный этап приёмки: ИИ ошибается уверенно.
Просрочка от даты последней правки
Задача, которую сегодня переименовали, становится просроченной задним числом. У нас так набежало 168 «просрочек» — настоящих оказалось 60.
Как надо: Считайте от даты ЗАКРЫТИЯ. Заведите отдельное поле, не полагайтесь на дату изменения строки.
Молчаливая обрезка выборки
Интерфейс базы отдал первую тысячу строк вместо всех, а код сложил их и выдал за итог. У нас бот так считал по 4% данных и на один и тот же вопрос отвечал по-разному — порядок строк не был задан.
Как надо: Складывайте в базе, а не в коде. Если тянете строки — всегда задавайте сортировку и проверяйте, не упёрлись ли в лимит.
Тихая поломка
Кнопка нажимается и не делает ничего: ни ошибки, ни реакции. У нас так «не существовало» удаление конкурента — идентификатор был текстовый, а код приводил его к числу и молча выходил.
Как надо: Любой выход по условию должен что-то сказать. И заведите журнал ошибок с первого дня: падение у человека уезжает в таблицу, а не в его консоль, где вы его никогда не увидите.
Статус, который ставят руками
«Работает над задачей» протухает в тот же день, когда человек забыл нажать. У нас такой статус жил полтора месяца, и его читали агенты, уверенно отвечая неправду.
Как надо: Вычисляйте статус из фактов — запущенный таймер, записанные часы. Нажимать нельзя забыть, если нажимать не надо.
Одно событие — два сообщения
Бронь уезжала в мессенджер дважды: обработчик срабатывал повторно, а отметки «уже отправлено» не было.
Как надо: У каждого уведомления должен быть отпечаток события и отметка об отправке. Повтор проверяйте до отправки, а не после.
Коммит не равен выкладке
Восемь готовых правок лежали в репозитории, пока я говорил «выкачено». Живым было только то, что деплоится отдельно.
Как надо: Знайте, что именно и по какому событию попадает на прод. Проверяйте номер версии на экране, а не факт коммита.
Пустой экран, полный нулей
«Постов 0 · Охват 0 · Просмотры 0» над надписью «пока пусто» — четыре цифры, которые ничего не говорят.
Как надо: Пусто должно выглядеть как пусто и подсказывать первое действие.
Сколько это стоит
Порядок величин на середину 2026 года — тарифы меняются, проверяйте актуальные. Начать можно на нуле и платить только тогда, когда системой уже пользуются. Версия для одного человека может остаться бесплатной навсегда.
| Что | Сколько | Примечание |
|---|---|---|
| Клод | подписка | Основная статья на старте. Claude Code входит в ту же подписку — отдельно платить за него не надо. |
| Доска на своём компьютере | 0 | Один html-файл. Соло-версия может остаться такой навсегда. |
| База и вход по почте | 0 → ~25 $/мес | Бесплатного тарифа Supabase хватает начать; на нём проект засыпает при простое. Платный — когда системой уже пользуются. |
| Хостинг и домен | 0 → ~20 $/мес + домен | У Vercel бесплатный тариф рассчитан на некоммерческие проекты — компании берут платный. Домен отдельно, обычно 10–20 $ в год. |
| Бот в мессенджере | 0 | Телеграм-бот бесплатен. Платите только за место, где живёт его код. |
Что добавлять потом
В таком порядке добавляли мы. Каждое имеет смысл только после того, как предыдущее прижилось: половина этих вещей бесполезна на доске, куда не заводят задачи.
- Поручения со встреч — Расшифровка звонка превращается в список с кнопками «завести задачу». Самая большая утечка: договорённость, не ставшая задачей в тот же день, не выполняется никогда.
- Чтение рабочих чатов — Система находит просьбы и замечания клиентов и приносит их с цитатой и кнопкой.
- Повторяющиеся задачи — Отчёты, оплаты, чек-листы, продления — создаются сами, с исполнителем и сроком.
- Статистика опозданий — По людям и по проектам. Разговор о дисциплине без цифр превращается в спор о характерах.
- Цели клиентов — Не «сколько сделали», а «успеваем ли к сроку по тому, что обещали».
- Доход на час по проекту — Чтобы решение «брать ли этого клиента» принималось не по тому, приятно ли с ним общаться.
Соберём такую систему под ваш бизнес
Мы делаем это себе и клиентам: доска под ваш процесс, агент в мессенджере, который додавливает людей вместо вас, и дашборд, где каждая цифра открывает список. Обычно две-три недели от разговора до работающей системы. Напишите — обсудим, что у вас утекает, даже если делать будете сами.