$0 MRR club – Telegram
$0 MRR club
121 subscribers
48 photos
23 links
Кирюша пытается стать предпринимателем
Личка: @kroksman
Download Telegram
Channel created
Короч, хочу преисполниться в запуске айтишных продуктов на рынок с 0 и доведения до инвестиций, клиентов, прибыли. Здесь будет дневник, как я и шо делаю
DayOff: Поиск друзей
0/ Идея

Итак, DayOff - это первая аппка, которую я буду пилить и запускать полностью сам. Я не ожидаю, что оно наберет большие охваты, станет источником серьезного бабла или что-то еще. Мой интерес в проекте - выстроить для себя флоу создания мвп продуктов в одно рыло и преисполниться в использовании всех необходимых для этого инструментов. Ну и если оно полетит - круто!

Что это будет? Это будет telegram mini app для поиска друзей оффлайн. Здесь юзеры смогут просматривать события от других юзеров в своем городе, присоединяться к ним и создавать собственные.

Откуда идея? У меня есть собственная боль - я обожаю знакомиться с новыми людьми на разных тусовка/митапах, но они проходят не так часто, как хотелось бы. Иногда сидишь, конец недели, ты заебался и хочешь попить пивко с каким-нибудь ребятами со схожими интересами, но все друзья заняты.

Какую проблему решаем? По сути - одиночество. Круто было бы иметь аппку, в которую заходишь, закидываешь событие, мол “го в кальянную сегодня вечером”, и вот вечером уже идешь с 5-ю незнакомыми ребятами со схожими интересами балдеть.

Минимальный набор функционала для теста будет такой:
- авторизация через tg mini apps
- редактирование профиля и просмотр профилей других
- создание события
- просмотр событий и возможность присоединиться к ним
- чат, привязанный к каждому событию для участия
- уведомление о новых событиях в твоем городе через бота (основная retention-механика)
- фильтр событий по городу

Начнем попил с авторизации. Стартую с использования lovable (для кода через промптинг) + chatgpt (для проработки логики) + supabase (в качестве простого способа сделать БД)
DayOff: Поиск друзей
1/ Авторизация

Короче, ебался с авторизацией я не только сегодня, но и дня 3-4 до этого. Не получалось сделать через lovable, а уж подумал, что инструмент говно и не нужон. Но сегодня получилось!

Авторизация теперь работает, ура, но есть нюанс. Не работает валидация данных от телеги. По идее, когда авторизуешь юзеров через телеграм, нужно валидировать подпись через хитрые махинации с initData и хэшем, чтобы исключить получение фейковых данных и разный на основе этого фрод.

Как только я ни ебался - и lovable просил починить, и chatgpt 03 просил помочь lovable починить - все то же самое, в edge function в supabase возвращается ошибка - Data Hash Mismatch. Промптов 30 на это потратил и все равно не работает.

Я подозреваю, что это из-за того, что supabase сохраняет токен бота в хэшированном виде, и в таком же отдает для сравнения. И из-за этого все ломается. И че с этим делать я пока не знаю, но я заебался пытаться это чинить. Пойдут пользователи - найду telegram mini apps разраба, который поможет мне это сделать и даст человеческую консультацию.

Но главное - авторизация теперь работает и юзеры в БД сохраняются!! Это уже победа, завтра буду делать главную страничку приложения, чутка доделаю онбординг и сделаю окно редактирования профиля.
DayOFF: Поиск друзей
2/ Настройки и редактирование профиля

Было качественное настроение и я решил поебстись с lovable и вечером. Сделали основную страницу приложения, хедер и панель со страничками снизу. + сделали окно настроек, возможность редактировать профиль и чтобы данные с бэка подтягивались в окно настроек.

С этим проблем особо не было, но возникла проблема с картинками. Я хотел ее noscript-шкой закинуть, шоб прям в код вставить, а она вышла огромная и ИИшка поломала билд. Я полез фиксить, думал закрыть предупреждения и вернуться к ним позже но в итоге их dismiss-нул. Чуть не обосрался, думал заново все пилить придется. Но вроде обошлось - он сам нашел проблемку и порешал ее. Закинул ему просто в png, сказал в public добавить и все сработало:)

Все еще ловлю иногда при запуске приложения на мобиле странные штуки - то не загружается, то показывает окно “Для начала работы откройте приложение через Telegram”. Периодически вкидываю это иишке, она что-то исправляет, вроде становится получше.

В целом, все как и писали - с lovable нужно немного терпения, но в итоге все получается. И код он пишет очень сносный, я даже его читать могу и понимать, че он делает. Ниже фоточки того, что сейчас есть.
DayOFF: Поиск друзей
3/ Создание события

Вот уж действительно, если пилишь проект через ии - секс тебе не нужен. Сегодня делал окошко для создания события, думал ща за часик сделаю - и пойду купаться, но не тут то было. Вызов поджидал в поле выбора города события.

Я решил делать его в формате поиск + выпадающий список с выбором. Создал в бд табличку с городами, закинул туда 100 самых крупных городов рф для начала, написал через lovable код подгрузки списка городов с бэка и парсинга в список. И тут начался пиздец.

При раскрытии списка приложение ложилось с ошибкой. Сначала я пытался это фиксить через промпты. Не помогло. Потом подрядил chatgpt o3 помочь нам разобраться. Не помогло. Потом полез в код сам, все просмотрел, нашел место потенциальной ошибки. Оно оказалось верным, но исправить ошибку это не помогло. В итоге я просто 2 часа пытался фиксить эту проблему через промптинг, понял, что делать список с поиском через эту шткук - полный пиздец, и переделал это в обычный выпадающий список сразу со всеми городами. И похуй.

Дальше еще на несколько часов была свистопляска со стилями - по умолчанию в этот раз lovable сделал их полным говном, фона у выпадающих списков не было, сочетания цветов он проебывал, календарь для выбора даты и времени не работал. Вот один из моих рейдж-промптов, с которого я потом в голос угарал:

Блять, я не понимаю, в чем твоя проблема со стилями и дизайном в этом проекте?

Календарь все еще не кликается, звездочки стали красные везде, кроме поля "Город". Ты че блять, отдельную звездочку для города чтоли используешь? Отдельным компонентом? Какого хуя то, что в предыдущем проекте 1 промпт занимало, сейчас занимает 10?

Исправь эту пиздопляску со стилями, пожалуйста. Мы делаем мобильное приложение, пройдись по всему коду, исправь все, что не адаптировано под мобилку, исправь ебаные звездочки (у нас они и в окне создания профиля используются вообще то, нахуя ты отдельные взял?), чтобы все были красыми.

И ИСПРАВЬ КАЛЕНДАРЬ, ЧТОБЫ Я МОГ НА НЕГО НАЖИМАТЬ.


Забавно, что после этого все и заработало:))

В итоге, теперь у нас есть работающее окно создания события, а лимиты у меня по промптам почти кончились. Надо предъявить, конечно, в поддержку lovable, мол почему мне приходится дебажить календарь через 10 промптов, а вы берете деньги за кол-во промптов. Исправляйте, суки. Но ладно, главное, события теперь создаются и в бд в том числе. Завтра будем уже пилить карточку события в списке и окно с возможностью присоединиться к событию. Ниже скрин, че мы сегодня делали несколько часов.
DayOFF: Поиск друзей
4/ Попытка сделать безопасность

Проснувшись рано утром, озаботился безопасностью прилки и решил перед стартом рабочего дня запилить нормальную авторизацию с валидацией подписи (сделать второй заход) и с созданием сессии, выдачей jwt и прочими приколами.

Снова была ебка на 2 часа. Сначала пытались валидировать подпись телеги - нихуя не получилось. Я весь код проверил сам, вроде все ровно по гайдлайну телеги, а хэши один хер не совпадают как их ни крути.

Потом я забил на это, думаю - хер с ним. Пусть без валидации, но будем создавать нормльно сессии и выдавать access токены. Но видимо этот функционал сырой и в lovable и в supabase. Сначала вроде как чето получилось, авторизация работала, сессии создавались, но я не мог редактировать профиль. Сервак не давал, выплевывал 406 ошибку мол у меня нет прав.

Я учинил скандал и стал чекать, в чем проблема и пытаться это промптить. В итоге я понял, что у supabase есть отдельный флоу авторизации пользователей через логин-пароль, который нельзя обойти. Отдельный интерфейс и фичи для авторизации типа. А я через телегу юзеров авторизовывать хочу. В связи с чем lovable предложил мне поднаебать supabase и чето там вместо пароля использовать. Естественно, не сработало. Потом сессии вообще перестали создаваться, меня это все заебало и я откатил до версии без нормальной авторизации.

В итоге, сейчас нормальной авторизации нет, войти под другим пользователем - как нехуй делать из за одной уязвимости, если ее знать. Но и ладно. Запускать будем так, а ближе к делу возьму консультацию какого нибудь нормального разраба и сделаем с ним авторизацию нормальную, чтобы и валидация работала, и сессии создавались. Все таки, канал называется х*як и в прод, так и будем работать:))

UPD: Все нормально, придумал промежуточное решение, теперь просто так под другим юзером не зайти. Для авторизации мастерим хитрый токен))
тест комментов
DayOFF: Поиск друзей
5/ События на доске

Под вечер на чилле и расслабоне сделал карточки событий на доске, чтобы они подтягивались с сервера. Сделал логику отображения мужицких событий для мужиков, женских для жонщин. Сделал, чтобы мужики только общие и мужицкие события могли создавать, а жонщины - жонские. Все это обернул в красивые лоадеры, шоб формы не скакали как проститутки.

Я не знаю почему, но в этот раз lovable прям жестко халявит с дизайном в проекте. По секрету - я уже делал фронт для этого проекта полностью на лавабл, но снес, потому что как начал делать бэк, понял, что затея была плохой. Надо делать все поэтапно. Так вот в прошлый раз ИИшка сама накидывала все по красоте - стили, сочетания цветов, шрифты красивенькие и все такое. А сейчас описал структуру карточки, и хуяк - на тебе белый текст в белой рамке тупо. Все стили приходится прописывать отдельно и точечно. Хз, что за халява.

По авторизации, шо за уязвимость была, рассказываю. При авторизации аппка сохраняла telegram id в локалсторадже, и при каждом запросе на сервер просто чекала, что там за id-шник лежит, связывая его с юзером. С точки зрения безопасности - полный пиздец, потому что я просто заменяю в локалсторадже этот айдишник и делаю че хочу от чужого лица.

Надо было чето делать, потому что оставлять это просто так = пиздец приложению через неделю. Авторизация через jwt токены человеческая не получилась, поэтому нашли компромисс. Теперь мы все так же сохраняем данные для авторизации в локалсторадже, но вместо телеграм айдишника там теперь хитро-выебанно собираемый токен, которые дешифруется при запросах и из которого вынимается айдишник. Все еще полу-хуйня, но за то теперь нельзя взять тг id любого юзера и зайти под ним.

Вот так вот веселимся. Завтра допинаю функционал событий быстренько + кнопку “присоединиться” и перейдем к самому, вероятно, пиздецу - чатам по событиям. Концептуально они делаются несложно через веб сокеты, но как с ними справится ИИ - посмотрим. И дай нам бог.
👍1
DayOFF: Поиск друзей
6/ События, фильтры, два юзера

Хо-хо, сегодня ноу-кодинг сессия была на удивление продуктивной. Столкнулся с минимумом проблем при реализации функционала, даже тупых моментов, как тогда со звездочками, не было.

1. Сделал страничку события с возможностью к нему присоединиться. Когда присоединяешься - появляется возможность перейти в чат.
2. Сделал страничку профиля пользователя, чтобы можно было посмотреть не только из окна редактирования, а кликнуть по любому пользователю в организаторах и участниках и посмотреть, че за кент, насколько активный.
3. Сделал функционал фильтрации по городам, чтобы можно было смотреть события только в своем городе (или в городе, куда едешь потусить).

Теперь все красивенько, чинно, благородо. В целом - уже можно пользоваться. Но чаты пипец как нужны. Поэтому завтра к ним приступаю и молюсь всем богам, чтобы все запилили нормально.

Сегодня пока плавал в бассейне, а потом и во время запила приложения, понял, что я просто пиздец как люблю айтишку. Ну вот просто максимально интересно постоянно копаться в том, как что работает, где какие подходы есть, что как лучше спроектировать и т.д. Я как будто для себя заново открыл web saas бизнес, хоть я в нем уже 4 года и кручусь. Все интереснее и интереснее становится реально чето запилить, продвинуть, монетизировать, сделать безопасным, сделать прибыльным.

Вот это сочетание технологий и денег (/бизнеса) - это именно та причина, почему у меня получился такой извилистый карьерный трек. Из фронтенд разработки в продажи, а из продаж в продукт менеджмент. В разработке не хватило бизнеса, в продажах не хватило технички. И очень классно вдруг с нихуя, в процессе попила пет проекта, понять, что пришел в итоге туда, куда хотел. Буквально все интересно - и техническая сторона создания веб прилы, и бизнесовая сторона, связанная с гоу-ту-маркетом и монетизацией. Идей куча, но этот блок работы я оставил на потом - сначала запилю.

Еще захотелось попробовать чето задеплоить самому. Вот прям по взрослому. Не через lovable, а вот прям ручками. Ебануть html страничку с 1 инпутом и кнопкой “сохранить”, ебануть 1 api endpoint, который это принимать будет и ебануть БД, в которую он это будет сохранять. Купить домен, развернуть там код со всеми зависимостями, сделать так, чтобы работало. Не знаю, нахуя, мне это, просто интересно! Займусь этой хуйней на выходных.

Короче, люблю движуху, в которой оказался. А все началось с видео “учим питон за 1 час”…
p.s. а организатор - это макс, пре-альфа-gay-тестер
❤‍🔥2
Как же я заебался делать эти чаты…

Вот как это было - подготовили с ИИ из lovable всю инфраструктуру в БД, сделали таблички, добавили новый код в компонент, сделали всю логику отправки сообщений, подгрузки сообщений, просмотра чата и тд. Я думал, основная проблема будет в риалтайме - боялся, что lovable не умеет работать с websocket. Оказалось, на это вообще похуй - в supabase есть отдельный интерфейс supabase realtime, который позволяет риалтайм данными обмениваться между сервером и клиентом. С этим вообще проблем не возникло.

Проблемы нашлись там, где я их вообще не ожидал. Во первых, он промптов 5 не мог мне просто интерфейс чата зарендерить. Забыл, что у нас хэдер и панелька управления общие на всю прилу и их надо явно отключать там, где мы хотим.

Дальше он мне предложил настроить rls политики для новых таблиц в бд, мол, чтобы в чат могли заходить только участники (и это проверялось на уровне запроса в бд), читать сообщения могли только участники события, писать тоже. Я подумал, что идея вообще-то православная довольно, и мы погнали настраивать. Сначала поломалась отправка сообщений - проебывался chat_id при отправке. Потом почему то бд отказалась давать мне данные о чате, хоть я и участник. Lovable сказал надо фиксить авторизацию, а то мы auth_uid не так передаем. Я сказал что-то вроде “ну хуй с тобой, давай”. После этого авторизация отъебнула в принципе. Полез в консоль с томным вздохом, и увидел ошибку, которая описывать что что-то не по формату jwt. А у нас вообще то изначально авторизация не через jwt, мы это с ИИ обсуждали.

Тут я окончательно заебался, отключил все rls политики для новых таблиц, ресторнул работающую версию чата и решил, что следующие проекты на lovable я делать не буду.

Проблема стандартная у него, как и у остальных ИИ - он теряет контекст. И это у меня еще не большое приложение. Из-за этого, когда надо чето пофиксить, начинает вносить пулеметом какие-то изменения во всех файлах, после чего отъебывает что-то другое. И так как он вносит сразу много изменений - это супер трудно дебажить точечно. Из-за чего приходится полагаться на него полностью и умолять, мол “пожааалуйста, ну исправь проблему, умоляю”. Короче, получается неконтролируемая разработка, которая порой больше времени жрет на дебагинг, чем писать код вручную.

Так что я затарил курс на codefa.st у моей главной ролевой модели сейчас по имени Marc Lou, буду вспоминать код и следующие проекты уже делать вручую на стеке next.js+mongodb (ну или продолжу supabase использовать). А dayoff допинаю через lovable, попробуем качнуть, если пойдет движ - буду перерабатывать на новом стеке, если нет - прикрою проект и пойду новые запускать. Скорее всего уже не на РФ и с более явной монетизацией:)
DayOFF: Поиск друзей
8/ Чаты и участники

Пиздец, никогда бы не подумал, что сами чаты будут самой легкой частю работы… Короче, доделал сегодня список участников в чате, возможность кикнуть участника из события и чтобы этот пидор больше не зашел. Также доработал немного чаты - чтобы по датам разделялись. По сути, весь функционал приложения готов.

На этой неделе осталось сделать главную retention фичу - уведомления в телеграм бот. Ведь просто так приложуху открывать никто не будет, а вот после уведомления, мол “у тебя в городе новые события!!” - да. Пока не знаю, когда их отправлять и по какому триггеру. А также, надо доработать все небезопасные моменты в приле - защитить все таблички, авторизацию допинать, немного редизайнуть, шоб удобно было, и готово!

Главная проблема сегодня возникла во вкладочке “чаты”. Я не знаю, в чем интимная трудность этого ебанного ИИ, но он тупо не может стабильно подтягивать список чатов по событиям юзера - постоянно чето ломается, даже когда код не меняю. Но я на сегодня заебался уже с ним воевать, так что оставляю на завтра.

Еще встал вопрос по поводу часовых поясов. Люди ведь не только из мск будут. Менеджерить внутри приложения, че кому какое время где отображать - это пиздец задача, и отдельная ебля при создании через ИИ. Сейчас все время в приле указывается по мск. Тоже надо будет с чатомгпт обсудить, шо вообще с этой хуйней делать.

Че будет после релиза (который я планирую на этой неделе)? Я прохожу codefa.st, а потому у меня появится окошко примерно в 2 недели, между релизом этого продукта и стартом нового, нормально монетизируемого. Поэтому следующий месяц буду выводить на рынок и собирать траф на вот этого, созданного за 2 недели через ИИ моего ребенка-уродца:)

Я сейчас вижу 3 go-to-market (по русски - уебывай-на-рынок) стратегии:
1. Через тг сообщества
2. Через контент
3. Через seo-траф

Но про них попозже, когда релизну и буду стартовать маркетинг. Там будет сложная задача - огранизовать первые мероприятия от разных человек и залить трафа в одно и то же время. Но будет интересно, думаю))
DayOFF: Поиск друзей
9/ Меняем стек

Короче, сегодня после благородного регулярного заплыва принял судьбоносное решение поменять стек и перевезти проект на стек, на котором я буду писать все следующие проекты - next.js+mongo.

Решил так по двум причинам. Во-первых, раз это учебный проект для теста стека, то почему бы не протестить на нем будущий основной стек сразу. А во-вторых, мне не нравится итог:(

Lovable классная штука, чтобы за пару дней склепать мвп и провести быстрый тест. Тут базару зиро. Но в остальном - с ним довольно сложно. Вот просто для примера - когда только запускаю приложение, логотип (там где два пива) сначала грузится, на его месте показывается лоадер. И это выглядит тупо, как будто там картинка зависит от каких-то данных. Типо для всех там лого, но если юзер - сочная милфа, то там вместо лого будет мой дикпик. Я потратил несколько часов чисто на эту хуйню, и он ничего не смог пофиксить.

Другой пример - окно “создать профиль” открывается при реге во всю высоту экрана, а у окна “создать события” есть небольшой зазор. Это тоже съело у меня часик времени и не дало результатов. И вот такой рассинхрон по стилям в проекте у него начался параллельно с ростом количества кода.

К этому плюсуются серверные моменты. Авторизацию нормально так и не сделали, сейчас костыльная, чаты какого то хуя он подтягивать нормально не хочет. И я так смотрю на эту всю хуйню - я быстрее это все напишу так, как мне нравится, вручную. Тем более курс codefast вообще бодро идет, я думаю мне еще пару дней - и допройду.

Короче - не хочется мне больше работать с лавабл, а значит нахуй. Для прототипирования - ваще респект, но все таки полноценные веб прилы на ИИ инструментах писать еще рановато.

Поэтому планы такие: на этой неделе заканчиваю курс, потом неделю-две перетаскиваю dayoff на новый стек. Потом посмотрим, если это уже середина марта будет - то я съебу в египет, а потом буду гоу-ту-маркетить. Если раньше - начну гоу-ту-маркетить до египта:))

А сразу после dayoff, который я на фоне буду качать чисто для своего нетворка, хочу запускать платные продукты (без freemium-а) и на рф, и на международку попробовать. Инфрастуктура (сервер на vercel, бд на mongo atlas) позволяет и туда и туда работать, надо будет только с платежами порешать, как выводить бабос с платежей через stripe.
Последние несколько дней разбирался с деплоем и всем, что возникает вокруг этого.

Что такое DNS и как оно работает, какие записи там можно делать и зачем оно вообще надо, как разворачивать на облачном сервере приложение и базу данных, как вообще сервер читает мой js-код, как все эти сущности взаимодействуют, че такое электронная почта и почему она связана с доменом. Мозг вскипел немного, особенно учитывая то, что я когда с чем то новым сталкиваюсь - иду копать глубже.

Но все оказалось не так сложно и в итоге за 4 дня копания по 2-3 часа в день превратилось в голове в цельную систему под названием "как работает интернет". Здесь же понял, как это нелепо - работать менеджером продукта в веб приложении, и знать, как оно технически работает, только на уровне "ну есть вот фронтенд и бекенд".

Но чем дальше иду, тем интереснее становится, это просто пиздец!

Короче, в итоге арендовал свой первый домен roxman.tech, задеплоил прилку на сервер через vercel и создал кластер на mongo. Сейчас там тестовый проект с курса (+ частичка гейских шуток), но позже сделаю там свою визиточку-резюме.

При реге домена провайдер предложил кучу услуг каких то допом, которые я пока не понимаю, че значат даже. Решил что буду разбираться по ходу.

Теперь осталось научится делать авторизацию и пилить бэкенд - и можно приступать уже к написанию прилы.

По этому поводу, кстати, есть новые идейки, с чего начать вместо dayoff, но об этом потом)
Почему сделать новый продукт легче, чем кажется (1/3)

Короче, сейчас буду ставить рекорд по самым очевидным продуктовым инсайтам, но мне очень понравилось. В один не поместится, поэтому ебну тремя.

Последние несколько недель я регулярно рисечу западные и российские интернет-проекты, которые запускают индихакеры, прям слот в календаре на каждый день перед сном забит. И вчера я наткнулся на проект nexara.ru. Недавно запустились на productradar, предоставляют апишку для транскрибации речи. Говорят, что у них оч дешево и оч быстро транскрибирует.

Я полазил по сайту, посмотрел и восхитился, но поразило следующее - запустил это все дело молодой паря по имени Данил. И зацепило это меня, потому что на сайте у него есть сравнение, мол эта моделька транскрибирует речь с WER 11% (как у топовых моделей) и в 10 раз быстрее, чем openai.

Как только я это увидел, сразу пошел разбираться - неужели сделать такую апишку не так уж сложно? Ну как один чел может сделать модельку лучше яндекса и openai, шо это за втиралово? Пошел, естественно, в чатгпт спрашивать, что за ситуация вообще и почему один кент превзошел сборище людей, которые интернет создавали. Вообще, кстати, не знаю, как без чатагпт уже жить, бустит обучение в десятки раз. Как личный ментор по разработке.

И что выяснилось? Если кратко, выяснилось, что в маленьком проекте такое можно сделать, потому что он маленький. И сделать можно с базовыми знаниями питона за пару вечеров, развенув на сервере уже готовую модельку типа whisper и немного подтюнив обработку запроса для повышенной скорости.

Тут я прибалдел, пошел попить водички и взглянул в окно…