Как я собрал SGX Planner за 72 часа: промпты, стек, прайсы, роудмап
Тут всё, что не влезло в видео: с чего начинался проект, какими скиллами и MCP я его пилил, полные промпты, откуда взялись цены и что я бы переделал.
Канал: https://t.me/crypto_sgx
Приватка по вайбкодингу: https://t.me/crypto_sgx/1820
Фигма файл: https://www.figma.com/board/2vVzBSOdh0g06vNy7kTPMp/VIBECODING-72H?node-id=0-1&t=wtOBdxohG1jOW8CH-1
Сам продукт: https://t.me/sgxplanner_bot
Читать сверху вниз необязательно. Если пришёл за промптами, они в разделе «Промпты».
Что вообще собрано
SGX Planner это личный планер внутри Telegram. Не приложение, которое надо ставить, а мини-апп плюс бот в одном.
Механика одна и она вся суть продукта: ты надиктовываешь голосом всё подряд, одним сообщением, как думаешь, а оно само разваливается на нужные разделы.
Скидываешь боту: «завтра в три встреча с Андреем, на обед борщ, не забыть оплатить интернет, потратил 500 на такси». На выходе четыре разные записи в четырёх разных местах: встреча в календарь с временем и именем, еда с посчитанными калориями, задача в список, расход в дашборд по деньгам с категорией «Транспорт».
Всё остальное в продукте наросло вокруг этой одной механики.
Почему идея зашла
Разберу честно, потому что мне самому было интересно, что именно сработало.
Захват без формы. Все планеры, что я видел, требуют от тебя structured input: выбери проект, выбери приоритет, поставь дедлайн, нажми сохранить. Пять тапов на одну мысль. Люди бросают такое на третий день, я сам бросал раз пять. Тут ты просто говоришь вслух, и нейронка сама решает, куда это положить. Барьер входа падает до нуля.
Telegram вместо своего приложения. Не надо ставить, не надо регистрироваться, не надо придумывать пароль. Тапнул по ссылке и уже внутри, авторизация проходит через сам Telegram. Для РФ это ещё и решает вопрос сторов, которые то есть, то нет.
Голос как основной ввод, а не как фича. У всех голосовой ввод прикручен сбоку кнопкой. Тут он в центре, потому что голосом ты выкладываешь всё сразу, а руками пишешь по одной штуке и ленишься.
Не про продуктивность. Я специально не делал стрики, ачивки и «ты молодец, 7 дней подряд». Геймификация даёт всплеск на неделю и отвал на второй. Продукт спокойный, он ничего от тебя не требует, ты просто скидываешь и забываешь.
Одна ниша, много входов. Задачи, деньги, еда, дневник, встречи. Каждый заходит за своим, а остаётся, потому что всё в одном месте и не надо жонглировать пятью приложениями.
Если коротко: сработала не идея планера, планеров миллион. Сработало то, что порог использования оказался ниже, чем лень.
Роудмап: как это выглядело по дням
День 1: замысел и скелет
Первым делом я не открывал редактор. Я открыл Figma и разложил на доске ментальную карту: что это за продукт, из каких разделов состоит, что происходит, когда человек кидает голосовое.
Это выглядит как трата времени, когда у тебя таймер на 72 часа. На деле наоборот. Нейронка пишет ровно то, что ты описал, и если ты сам не понимаешь архитектуру, ты получишь красивую кашу и потом два дня будешь её распутывать.
Дальше собрал бриф в один текстовый документ и с него стартовал проект. Бриф лежит в репозитории до сих пор и работает как постоянный контекст, любая новая сессия начинается с него.
К концу дня был скелет: авторизация через Telegram, база с изоляцией по пользователю, пустые экраны разделов. Ничего ещё не работало по-настоящему, но каркас стоял.
День 2: две фишки, ради которых потом платят
Тут появилось то, за что вообще берут деньги.
Первое, разбор голосового на несколько типов записей за один заход. Это оказалось сложнее, чем звучит, и весь второй день я воевал именно с промптом, а не с кодом. Подробности ниже.
Второе, распознавание еды по фото с подсчётом калорий и БЖУ. Кидаешь фотку тарелки, получаешь запись с макросами.
К вечеру второго дня продукт впервые стал полезен мне самому. Это важная точка: пока ты сам не начал им пользоваться, ты его не дособрал.
День 3: платежи, безопасность и первый внешний тест
Третий день ушёл на скучное и обязательное: приём платежей, разделение бесплатного и платного тарифа, защита данных на уровне базы, чтобы пользователи физически не могли увидеть чужие записи.
Потом отдал продукт живым людям и собрал первую обратную связь. Там вылезло то, что я сам никогда бы не нашёл, потому что я знаю, как надо тапать, а они нет.
По итогу 72 часов: 31 миграция базы, 16 серверных функций, работающая оплата, живые пользователи.
Стек
Ничего экзотического, всё намеренно скучное, потому что за трое суток экспериментировать с незнакомыми технологиями это самоубийство.
Фронт: Next.js 15, React 19, TypeScript, Tailwind v4, shadcn/ui сильно перепиленный под свой дизайн.
Данные и сервер: Supabase. Postgres с построчной изоляцией по пользователю плюс serverless-функции на Deno. Одна база, одна авторизация, один хостинг для логики.
Telegram: официальный SDK мини-аппов. Авторизация проверяется на сервере по подписи, которую присылает сам Telegram, подделать её нельзя.
Платежи: Platega. Выбрал за то, что принимает и карты, и крипту, а мне нужны были оба варианта.
Нейронки внутри продукта (все через OpenRouter, кроме голоса):
meta-llama/llama-3.3-70b-instruct— разбор текста на структурированные записи. Дешёвая, быстрая, для задачи «разложи по типам» её хватает с запасомgoogle/gemini-2.5-flash— распознавание еды по фото и ответы на вопросы по твоим записям- Whisper через Groq — расшифровка голосовых
Отдельно скажу про выбор моделей. Соблазн взять топовую модель на всё огромный, и это прямой путь в минус по юнит-экономике. Подписка 290 рублей, и если каждое голосовое стоит тебе несколько центов, ты дотируешь пользователей из своего кармана. Разложи задачи по сложности и на каждую поставь самую дешёвую модель, которая справляется.
Скиллы и MCP
паттерны интерфейса, продуктовые решения по UX
анти-шаблонность, чтобы не выглядело как дефолтная сборка
финальная полировка, ощущение дорогого продукта
MCP, которые реально работали:
supabase — Клод сам создаёт таблицы, катит миграции, читает логи функций и деплоит их. Не надо копипастить SQL в дашборд руками. https://github.com/supabase-community/supabase-mcp
shadcn — поиск и установка компонентов прямо из чата. Проверяет реестр вместо того, чтобы писать компонент с нуля. https://ui.shadcn.com/docs/mcp
context7 — подтягивает актуальную документацию библиотек. Без него Клод пишет по памяти и регулярно предлагает API, которого больше нет. https://github.com/upstash/context7
figma — вытаскивает дизайн-контекст с доски прямо в код. https://developers.figma.com/docs/figma-mcp-server/
playwright — гоняет браузер, чтобы проверить, что собранное реально работает, а не «должно работать». https://github.com/microsoft/playwright-mcp
Скрин с полным списком у меня в телеге, там же выложу конфиг целиком.
Промпты
Самая полезная часть. Тут два разных промпта, и путать их не надо.
Даю контекст:
Собираю личное приложение. Живёт внутри телеги, отдельное из сторов не хочу.
Проблема моя своя. Семь приложений: заметки задачи траты встречи калории привычки. Каждый раз выбор куда сунуть запись. Из-за этого трение и я не записываю ничего. Мысль пришла записать некуда потерялась. Потратил и забыл сколько. Встречу держал в голове и проспал.
Решение. Одно место, скидываешь всё голосом не открывая приложение. Нейронка сама разбирает и раскладывает по разделам. Выбор куда положить убираю совсем.
Стек выбери сам, обоснуй коротко перед стартом. Скажу если не нравится. Дальше по нему и работаем, не меняем на ходу.
Требования:
мобильный веб внутри телеги, айфон в приоритете
вход через телегу без регистрации и паролей
мульти юзер с первого дня, даже если пока я один. данные юзеров изолированы на уровне базы, не кода
нужен сервер под секреты и вызовы моделей, ключи в клиент не попадают никогда
Дизайн монохром строго:
фон F6F6F4, текст 111111, вторичный 777777, границы D9D9D9
акцент чёрный, других цветов нет
шрифт Helvetica, веса 400 500 600
запрещено градиенты стекло неоморфизм тяжёлые тени огромные кнопки декоративная анимация мелкий капс с разрядкой
линии в 1 пиксель, углы скруглены умеренно
Приоритеты юикс по порядку, не менять местами:
скорость захвата
скорость навигации
простота
красота
Тон спокойствие и ясность. Без стриков огоньков полосок прогресса поздравлений и красных предупреждений. Это личный блокнот, не тренажёр дисциплины.
Работаем итерациями по одной за раз, всё сразу не пиши.
В начале итерации спроси если что-то неясно, потом код.
В конце скажи что готово, что осталось, где срезал угол.
Если прошу фигню, скажи прямо, не делай молча.
Даю фундамент:
Скелет, вход, дизайн система. Бизнес логики ноль.
Вход. Телега отдаёт данные юзера при открытии, проверь подпись на сервере, клиенту не верь совсем. На выходе сессия. Экрана логина нет, вход невидимый, открыл и уже внутри.
Если открыть вне телеги покажи спокойное сообщение, открой из мессенджера. Без кодов ошибок, без красного.
Изоляция. На каждой таблице политика доступа по владельцу. Проверь руками что юзер А физически не читает записи юзера Б даже подделав запрос. Сделать до любой фичи, потом поздно.
Дизайн система. Цвета и шрифты из контекста в токены, дальше нигде не хардкодить. Собери список карточку поле ввода кнопку нижний шит.
Оболочка. Нижняя навигация, отступы под вырез и home bar на айфоне.
Готово когда: открываю внутри телеги, я авторизован без тапа, экраны пустые но по ним хожу, всё по системе.
Захват:
Самое важное во всём приложении. Если тут медленно или неудобно, остальное не имеет смысла.
Разделы: задачи заметки встречи еда деньги привычки. Пока просто списки без сортировок тегов фильтров приоритетов, позже.
Захват:
одна кнопка, доступна с любого экрана, никуда идти не надо
основной ввод голос не текст. печатать долго, это и есть боль которую убираю
запись в списке мгновенно, не ждём сервер. если отвалился, откатываем и говорим
отмена последнего действия в один тап. надиктовал не то, отменил, забыл
Ничего не удаляем насовсем, всё в архив. Приложение это внешняя память, память не стирают.
Готово когда: надиктовал мысль и увидел её в списке меньше чем за две секунды.
Разбор голоса:
Тут вся ценность, остальное обвязка.
Голос в транскрипцию, текст в модель, модель раскладывает по разделам. В одной фразе может быть несколько записей.
Пример: завтра в три встреча с андреем, на обед был борщ, потратил тысячу на такси.
Выход: три записи в трёх разделах. Встреча с датой, борщ в еду с калориями, тысяча в расходы с категорией.
Разбор:
модель отвечает строго структурой, не свободным текстом
относительные даты понимает: завтра, в пятницу, через неделю, послезавтра утром
не уверена в разделе, кладёт в заметки. выдумывать раздел нельзя
суммы валюты категории вытаскивает сама, у меня не спрашивает
фото тарелки тоже разбирает, состав и калории
Отдельный экран, вопросы к своим записям. Спрашиваю сколько потратил на кафе за месяц, модель сначала считает по реальным записям, потом отвечает. По памяти или на глаз отвечать нельзя. Нет данных, так и говорит.
Готово когда: фраза становится тремя записями без моего тапа, ответ про траты сходится с базой.
Ленивый ввод:
Захват работает, довожу до предела. Лучший интерфейс тот который не открываешь.
Два сценария, оба без разблокировки телефона:
боковая кнопка на айфоне. нажал сказал отпустил, ушло в разбор, приложение не открывалось
двойное касание по задней крышке. быстрая трата, купил кофе стукнул два раза, сумма записана
Обе через системные быстрые команды айоэс, бьют в приложение снаружи. Продумай надёжность и как объяснить настройку в три шага, сам не догадается.
Готово когда: телефон в кармане заблокирован, жму кнопку говорю фразу достаю вижу запись.
Обзор. Главный экран он же хаб, свежие записи, короткая сводка дня, переходы в разделы. Утром брифинг что сегодня по встречам и задачам. Дашборд трат по категориям. Динамика за неделю. Всё спокойным тоном, без оценок и мотивации.
Подписка. Все разделы бесплатны навсегда, платный только AI, он единственный стоит денег на каждый запрос, остальное стоит один раз.
бесплатно: 3 AI действия в сутки, счётчик сбрасывается ночью
платно: безлимит AI, 290 в месяц, 2190 в год, 4390 разово навсегда
Подводка к оплате:
осталось одно действие, спокойное уведомление с намёком
кончились, прямо говорим лимит исчерпан когда обновится, даём кнопку
без красного, без слова внимание, без таймеров. человек не должен чувствовать что его прижали
Оплата наружу в браузер, внутри телеги сторонние платежи запрещены. Платёж создаём на сервере, клиенту отдаём только ссылку.
Готово когда: упёрся в лимит, нажал кнопку, оплатил, вернулся, лимит снят.
Примеров нужно больше, чем правил. Первая версия была написана красивым английским текстом без единого примера и работала отвратительно. Каждый пример входа и выхода поднимал качество сильнее, чем ещё один абзац объяснений. В финальной версии примеров по объёму больше, чем инструкций.
Модель по умолчанию склеивает. Она страшно не любит разделять и всё время пытается слепить «встречу с Андреем» и «на обед борщ» в одну запись «Встреча с Андреем на обед». Три отдельных блока в промпте воюют именно с этим: правило номер два, блок SCOPE и обязательный чеклист. Три раза об одном и том же, потому что двух не хватило.
Капслок работает. Не потому что модель «слышит крик», а потому что визуально выделенное в промпте реально держится лучше в длинном контексте. MUST, EVERY, NEVER заглавными это не стиль, это разметка приоритета.
Чеклист в конце сильнее инструкции в начале. Пока проверка типов была списком в середине промпта, модель половину пропускала. Как только это стало явным «перед ответом просканируй весь текст и ответь на каждый пункт», пропуски почти исчезли.
Дату надо подставлять всегда. Модель не знает, какое сегодня число. Без явной подстановки «завтра в три» превращается в мусор.
Температура ноль. Для разбора и классификации креативность это баг. Единственное место, где я поднимаю температуру, это генерация текстовых советов.
Прайсинг: откуда взялись 290, 2190 и 4390
Три тарифа, и каждый стоит там, где стоит, не случайно.
Бесплатно. Все разделы открыты, но AI-действий три в сутки. Бесплатный тариф должен давать почувствовать продукт целиком, а не показывать заглушки. Ограничение стоит ровно на том, что стоит мне денег.
290 рублей в месяц. Это цена ниже, чем чашка кофе. Порог, на котором человек не идёт считать, окупается ли, а просто платит. Для планера, которым пользуются каждый день, дороже ставить нельзя, отвалятся.
2190 рублей в год. Это 183 рубля в месяц, минус 37% к месячному. Годовой тариф нужен не ради скидки, а ради денег вперёд и отсутствия ежемесячного оттока. Скидка должна быть достаточно жирной, чтобы её было видно, и я вынес «−37%» прямо в подпись к цене.
4390 рублей навсегда. Founder Lifetime. Это тариф для тех, кто заходит на старте и хочет поддержать проект. Он окупается примерно за полтора года подписки, и это осознанный размен: я беру деньги сейчас, когда они нужнее.
Что важно: годовой тариф я подсветил как рекомендуемый, а не самый дорогой. Люди берут выделенное. Если подсветить Lifetime, будешь продавать один Lifetime вместо десяти годовых.
По факту после запуска большинство взяло месячный, и средний чек получился ниже, чем я закладывал. Так и должно быть на старте: люди пробуют минимальным платежом.
Что бы сделал иначе
День на Figma был не роскошью, а необходимостью, и я всё равно сделал её слишком поверхностно. Разделы разложил, а пользовательские сценарии нет. Из-за этого на втором дне переписывал навигацию.
Промпт надо было писать на примерах сразу. Я потратил часы на красивые формулировки правил, хотя двадцать примеров входа и выхода сделали бы то же самое за двадцать минут.
Платежи надо было ставить в первый день, а не в третий. Не потому что деньги, а потому что оплата это самая ломкая часть с внешними зависимостями. Оставлять её на последний день с таймером над головой это чистые нервы.
Тестировать на живых людях надо было со второго дня. Первый же внешний человек нашёл то, что я не видел трое суток, потому что я знал, куда тапать.
Ссылки
Supabase MCP: https://github.com/supabase-community/supabase-mcp shadcn MCP: https://ui.shadcn.com/docs/mcp context7: https://github.com/upstash/context7 Figma MCP: https://developers.figma.com/docs/figma-mcp-server/ Playwright MCP: https://github.com/microsoft/playwright-mcp
Канал: https://t.me/crypto_sgx
Приватка по вайбкодингу: https://t.me/crypto_sgx/1820