Как персонализировать аутрич B2B лидов и заинтересовать больше потенциальных клиентов?
Один из новых трендов, пришедший с развитием ИИ, — это персонализация. Моя задача — создавать персонализированные сервисы и автоматизации для развития бизнеса. Я анализирую деятельность компании, изучаю внутренние процессы и взаимодействую со стейкхолдерами.
Теперь ИИ тоже может исследовать источники и анализировать информацию. Для этого ему требуется хороший датасет - сайт компании, данные из социальных сетей и новостей. Эта информация может быть собрана как непосредственно ИИ, так и через сервисы парсинга, такие как Phantombuster. Также теперь ChatGPT может анализировать и графические файлы, например, скриншоты сайта/социальных сетей (который также могут быть собраны через API, к примеру APIFlash ).
Все это может послужить отличной основной для создания персонализированного обращения.
Кроме аутрича, анализ данных о клиентах помогает категоризировать их, отсеивать неподходящих клиентов, формировать персональные предложения и определять оптимальную ценовую стратегию.
Сервисы для умного аутрича через email и linkedin:
https://www.getintently.ai/
https://www.fastoutreach.ai/
https://www.smartwriter.ai/
https://lyne.ai/
Ставьте лайк и подписывайтесь, завтра я расскажу о том, как управлять контентом, используя Airtable
Один из новых трендов, пришедший с развитием ИИ, — это персонализация. Моя задача — создавать персонализированные сервисы и автоматизации для развития бизнеса. Я анализирую деятельность компании, изучаю внутренние процессы и взаимодействую со стейкхолдерами.
Теперь ИИ тоже может исследовать источники и анализировать информацию. Для этого ему требуется хороший датасет - сайт компании, данные из социальных сетей и новостей. Эта информация может быть собрана как непосредственно ИИ, так и через сервисы парсинга, такие как Phantombuster. Также теперь ChatGPT может анализировать и графические файлы, например, скриншоты сайта/социальных сетей (который также могут быть собраны через API, к примеру APIFlash ).
Все это может послужить отличной основной для создания персонализированного обращения.
Кроме аутрича, анализ данных о клиентах помогает категоризировать их, отсеивать неподходящих клиентов, формировать персональные предложения и определять оптимальную ценовую стратегию.
Сервисы для умного аутрича через email и linkedin:
https://www.getintently.ai/
https://www.fastoutreach.ai/
https://www.smartwriter.ai/
https://lyne.ai/
Ставьте лайк и подписывайтесь, завтра я расскажу о том, как управлять контентом, используя Airtable
Как я систематизировал публикацию контента
За последние 3 недели я стал регулярно публиковать контент. До этого контент появлялся случайно, когда у меня было свободное время и вдохновение. Хотя у меня всегда было желание писать регулярно — я люблю это дело, и публикации помогают мне находить новые знакомства и возможности.
Что изменилось? Я построил систему.
Месяц назад я присоединился к сообществу владельцев no-code агентств и там встретил Кола Фортмана. Именно он поделился со мной своей системой, которая стала отправной точкой для моей собственной.
Моя система создания контента включает: подбор актуальных для моей аудитории идей, планирование тем на следующую неделю, формулирование основных тезисов и редактирование текста с помощью ChatGPT.
Как я ищу идеи? На работе я часто сталкиваюсь с интересными задачами, которые становятся основой для моих постов. Также в Airtable я составил базу данных о своей аудитории и возможных форматах контента для генерации свежих идей:
1. Хуки - различные варианты заголовков: вопросы, провокационные утверждения и пр.
2. Аудитория - характеристика разных сегментов моей целевой аудитории: портрет, основные цели, проблемы и способы их решения на моем примере.
3. Типы контента - обзор различных форматов и их структуры, а также визуальные решения: кейсы, опросы, руководства и т. д.
4. Стадии - этапы воронки продаж, на которых находятся потенциальные клиенты. Это помогает разнообразить контент и лучше понимать нужды клиентов на разных этапах.
В Airtable я могу выбирать разные параметры (хук, аудитория и т. д.), и в итоге получать общее саммари по ним, которое я использую для доработки поста. Основную часть контента я создаю сам, так как автоматически сгенерированный текст часто кажется неэмоциональным. ChatGPT помогает мне совершенствовать написанное с точки зрения грамматики и стиля.
Каждые выходные я трачу 2-3 часа на планирование контента на следующую неделю. Потом мне остается только публиковать готовые материалы.
В будущем я планирую внедрить анализ опубликованного контента, чтобы улучшать его качество, добавляя визуальные элементы и углубляясь в изучаемые темы.
Ставьте лайк и подписывайтесь, завтра я расскажу о том, как выглядит идеальное техническое задание для меня
За последние 3 недели я стал регулярно публиковать контент. До этого контент появлялся случайно, когда у меня было свободное время и вдохновение. Хотя у меня всегда было желание писать регулярно — я люблю это дело, и публикации помогают мне находить новые знакомства и возможности.
Что изменилось? Я построил систему.
Месяц назад я присоединился к сообществу владельцев no-code агентств и там встретил Кола Фортмана. Именно он поделился со мной своей системой, которая стала отправной точкой для моей собственной.
Моя система создания контента включает: подбор актуальных для моей аудитории идей, планирование тем на следующую неделю, формулирование основных тезисов и редактирование текста с помощью ChatGPT.
Как я ищу идеи? На работе я часто сталкиваюсь с интересными задачами, которые становятся основой для моих постов. Также в Airtable я составил базу данных о своей аудитории и возможных форматах контента для генерации свежих идей:
1. Хуки - различные варианты заголовков: вопросы, провокационные утверждения и пр.
2. Аудитория - характеристика разных сегментов моей целевой аудитории: портрет, основные цели, проблемы и способы их решения на моем примере.
3. Типы контента - обзор различных форматов и их структуры, а также визуальные решения: кейсы, опросы, руководства и т. д.
4. Стадии - этапы воронки продаж, на которых находятся потенциальные клиенты. Это помогает разнообразить контент и лучше понимать нужды клиентов на разных этапах.
В Airtable я могу выбирать разные параметры (хук, аудитория и т. д.), и в итоге получать общее саммари по ним, которое я использую для доработки поста. Основную часть контента я создаю сам, так как автоматически сгенерированный текст часто кажется неэмоциональным. ChatGPT помогает мне совершенствовать написанное с точки зрения грамматики и стиля.
Каждые выходные я трачу 2-3 часа на планирование контента на следующую неделю. Потом мне остается только публиковать готовые материалы.
В будущем я планирую внедрить анализ опубликованного контента, чтобы улучшать его качество, добавляя визуальные элементы и углубляясь в изучаемые темы.
Ставьте лайк и подписывайтесь, завтра я расскажу о том, как выглядит идеальное техническое задание для меня
Как написать ТЗ к 3 проектам за неделю и не сойти с ума
Сама по себе разработка является воплощением задуманных идей во что-то “реальное” - код или в нашем случае набор элементов в конструкторе. В разработке есть свои тонкости и зачастую существует несколько вариантов реализации одной и той же идеи, но выбор варианта всегда связан с другими элементами и общим контекстом проекта.
Более важным элементом реализации проекта является планирование - ведь без четкого плана и договоренностей с клиентом по каждому критическому вопросу в моменте разработки начинается фрустрация и метания между тем, чтобы сделать на свой вкус, и тем, чтобы напрячь клиента, который зачастую сам не знает, как именно должно быть. И как бы не хотелось опустить руки и “сделать все как-нибудь, а потом разберемся”, очень важно потратить достаточное количество времени на написание документации к проекту и согласовать все наиболее важные моменты.
Поэтому сегодня я расскажу, как выглядит мой процесс подготовки к работе над проектом.
1. Сначала мы просим клиента собрать все его хотелки в конкретные юзер сториз от лица пользователя, админа и тд. Формат может быть простым - как пользователь я хочу создать план платежей, чтобы ежемесячно запрашивать платежи с клиентов
2. Далее нам нужно сгруппировать эти юзер сториз по ролям и выстроить их по порядку. Порядок может быть условно хронологическим, так как некоторые процессы могут выполняться параллельно.
3. Перед тем как углубляться в эти юзер сториз, нужно проанализировать текущие и подумать, не пропущены ли какие-либо части - для этого можно использовать ChatGPT и попросить его дополнить список или задать вопросы к ТЗ с точки зрения критика.
4. Слона лучше есть по кусочкам и поэтому далее я расписываю каждую историю по трем пунктам - интерфейс, база данных, бэкенд. Это помогает фокусироваться на конкретной сториз и думать, как она связана с другими частями приложения, находить упущенные детали и подготавливать вопросы для клиента.
- Для интерфейса я указываю описание элемента интерфейса, нужного для реализации данной юзер сториз. Это может быть форма, таблица, кнопка и тд. Если в интерфейсе есть какой-то элемент, запускающий действие, я описываю это действие отдельно в бэкенде.
- Для базы данных я указываю таблицу, поля и тип данных, которые будут задействованы в этой юзер сториз
- Для бэкенда я указываю процессы, которые должны происходить после действий на фронте (к примеру, нажатие кнопки) или которые должны быть запущены автоматически системой без участия пользователя (к примеру, ежедневная проверка новых платежей).
5. После прохождения по всем сториз у меня набирается ряд вопросов, которые я оставляю комментариями в документе (я работаю в Google Docs).
6. После уточнения всех деталей, я перехожу к сборке каждой из частей - интерфейса, базы данных и бэкенда.
7. На основе описания всех частей можно приступать к созданию дизайна.
Таким образом на выходе у меня оказывается полноценное и согласованное описание проекта. Далее я перехожу к разработке.
P.S. до ноукода я год работал бизнес-аналитиком и писал ТЗ на внедрение Битрикс-24. Там я набрался опыта и выработал собственные принципы по написанию документации. Последний проект был реализован после моего ухода на основе моего ТЗ на 70 страниц.
Ставьте лайк и подписывайтесь, а таже делитесь в комментариях своим подходом к планированию проекта, мне будет интересно узнать новые best practices и улучшить свой процесс
Сама по себе разработка является воплощением задуманных идей во что-то “реальное” - код или в нашем случае набор элементов в конструкторе. В разработке есть свои тонкости и зачастую существует несколько вариантов реализации одной и той же идеи, но выбор варианта всегда связан с другими элементами и общим контекстом проекта.
Более важным элементом реализации проекта является планирование - ведь без четкого плана и договоренностей с клиентом по каждому критическому вопросу в моменте разработки начинается фрустрация и метания между тем, чтобы сделать на свой вкус, и тем, чтобы напрячь клиента, который зачастую сам не знает, как именно должно быть. И как бы не хотелось опустить руки и “сделать все как-нибудь, а потом разберемся”, очень важно потратить достаточное количество времени на написание документации к проекту и согласовать все наиболее важные моменты.
Поэтому сегодня я расскажу, как выглядит мой процесс подготовки к работе над проектом.
1. Сначала мы просим клиента собрать все его хотелки в конкретные юзер сториз от лица пользователя, админа и тд. Формат может быть простым - как пользователь я хочу создать план платежей, чтобы ежемесячно запрашивать платежи с клиентов
2. Далее нам нужно сгруппировать эти юзер сториз по ролям и выстроить их по порядку. Порядок может быть условно хронологическим, так как некоторые процессы могут выполняться параллельно.
3. Перед тем как углубляться в эти юзер сториз, нужно проанализировать текущие и подумать, не пропущены ли какие-либо части - для этого можно использовать ChatGPT и попросить его дополнить список или задать вопросы к ТЗ с точки зрения критика.
4. Слона лучше есть по кусочкам и поэтому далее я расписываю каждую историю по трем пунктам - интерфейс, база данных, бэкенд. Это помогает фокусироваться на конкретной сториз и думать, как она связана с другими частями приложения, находить упущенные детали и подготавливать вопросы для клиента.
- Для интерфейса я указываю описание элемента интерфейса, нужного для реализации данной юзер сториз. Это может быть форма, таблица, кнопка и тд. Если в интерфейсе есть какой-то элемент, запускающий действие, я описываю это действие отдельно в бэкенде.
- Для базы данных я указываю таблицу, поля и тип данных, которые будут задействованы в этой юзер сториз
- Для бэкенда я указываю процессы, которые должны происходить после действий на фронте (к примеру, нажатие кнопки) или которые должны быть запущены автоматически системой без участия пользователя (к примеру, ежедневная проверка новых платежей).
5. После прохождения по всем сториз у меня набирается ряд вопросов, которые я оставляю комментариями в документе (я работаю в Google Docs).
6. После уточнения всех деталей, я перехожу к сборке каждой из частей - интерфейса, базы данных и бэкенда.
7. На основе описания всех частей можно приступать к созданию дизайна.
Таким образом на выходе у меня оказывается полноценное и согласованное описание проекта. Далее я перехожу к разработке.
P.S. до ноукода я год работал бизнес-аналитиком и писал ТЗ на внедрение Битрикс-24. Там я набрался опыта и выработал собственные принципы по написанию документации. Последний проект был реализован после моего ухода на основе моего ТЗ на 70 страниц.
Ставьте лайк и подписывайтесь, а таже делитесь в комментариях своим подходом к планированию проекта, мне будет интересно узнать новые best practices и улучшить свой процесс
Как я успеваю управлять 5 клиентами?
Идея создать агентство и систематизировать все процессы была у меня на примете уже более двух лет. Судя по моим беседам с владельцами разных ноукод агентств, многие из них не имеют четко установленного процесса – по крайней мере в этой сфере. Под "четким процессом" я имею в виду хорошо отлаженный и понятный путь от первой встречи с клиентом до успешного завершения проекта.
За последние два года я многократно пересматривал детали своего подхода к разработке, но многие из них так и оставались лишь на бумаге. Однако когда месяц назад ко мне одновременно обратились несколько клиентов, стало ясно, что без четкой системы я выгорю уже через 2 недели. Как и всегда - идеи реализуются только при реальной потребности.
Ранее я вел задачи в Clickup, но работа с ним вечно не приживается (возможно станет получше в версии 3.0). Поэтому я решил попробовать Airtable.
И так моя система (таблицы):
1. Клиенты - тут я храню основную информацию о клиентах, почасовую ставку, источник привлечения и так далее
2. К каждому клиенту привязывается проект, их может быть и несколько. Тут указывается стэк, основная идея, ссылка на документацию проекта.
3. К каждому проекту крепятся milestones. По сути эдакие эпики/большие фичи, к которым крепятся задачи. У них есть дедлайн и примерная оценка в часах.
4. К milestones крепятся задачи. У задачи есть название, описание, дата начала и конца, приоритетность, статус, заметка для статуса Blocking (уточнение почему задача заблокирована). Сейчас я пытаюсь подключить к системе разработчика, поэтому добавились поля assignee и заметки. После выполнения задача уходит ко мне на проверку и я оставляю заметки для разработчика.
В дополнение к основным таблицам у меня есть:
5. Звонки - тут, в идеале, должны фиксироваться все звонки с кратким содержанием, однако этот пункт пока еще в разработке.
6. Уведомления - напоминания о необходимости выставить счета, провести звонки и так далее.
7. Интеграция с календарем - тут я вижу все события из своего календаря.
8. Доступы - информация о доступах ко всем сервисам клиента.
9. Трекер времени - я использую трекер от Toptal. У него есть внутреннее API, которое я использую, чтобы вытащить данные по конкретному проекту. Название проектов в CRM и трекере совпадают. Таким образом я могу сравнивать суммарную оценку времени по milestones и реально затраченное время.
10. Счета - тут я храню данные о счетах. Они вяжутся к отдельной таблице с налоговыми отчетами (я подаю их каждый месяц)
Я также настроил интерфейсы для удобного управления задачами и их отображения в календаре. У разработчика есть свой интерфейс, где он видит информацию только по тем проектам, к которым он привязан.
Это все хорошо, но действительно ли оно работает, как задумано?
Я стараюсь записывать обновления по всем проектам в конце дня. Иногда я пропускаю дни, если работы очень много, но в течении нескольких дней все равно делаю ревью.
Ставьте лайк и подписывайтесь, завтра я буду пробовать новый формат и расскажу как расписать в ТЗ процесс оплаты и ничего не забыть.
Идея создать агентство и систематизировать все процессы была у меня на примете уже более двух лет. Судя по моим беседам с владельцами разных ноукод агентств, многие из них не имеют четко установленного процесса – по крайней мере в этой сфере. Под "четким процессом" я имею в виду хорошо отлаженный и понятный путь от первой встречи с клиентом до успешного завершения проекта.
За последние два года я многократно пересматривал детали своего подхода к разработке, но многие из них так и оставались лишь на бумаге. Однако когда месяц назад ко мне одновременно обратились несколько клиентов, стало ясно, что без четкой системы я выгорю уже через 2 недели. Как и всегда - идеи реализуются только при реальной потребности.
Ранее я вел задачи в Clickup, но работа с ним вечно не приживается (возможно станет получше в версии 3.0). Поэтому я решил попробовать Airtable.
И так моя система (таблицы):
1. Клиенты - тут я храню основную информацию о клиентах, почасовую ставку, источник привлечения и так далее
2. К каждому клиенту привязывается проект, их может быть и несколько. Тут указывается стэк, основная идея, ссылка на документацию проекта.
3. К каждому проекту крепятся milestones. По сути эдакие эпики/большие фичи, к которым крепятся задачи. У них есть дедлайн и примерная оценка в часах.
4. К milestones крепятся задачи. У задачи есть название, описание, дата начала и конца, приоритетность, статус, заметка для статуса Blocking (уточнение почему задача заблокирована). Сейчас я пытаюсь подключить к системе разработчика, поэтому добавились поля assignee и заметки. После выполнения задача уходит ко мне на проверку и я оставляю заметки для разработчика.
В дополнение к основным таблицам у меня есть:
5. Звонки - тут, в идеале, должны фиксироваться все звонки с кратким содержанием, однако этот пункт пока еще в разработке.
6. Уведомления - напоминания о необходимости выставить счета, провести звонки и так далее.
7. Интеграция с календарем - тут я вижу все события из своего календаря.
8. Доступы - информация о доступах ко всем сервисам клиента.
9. Трекер времени - я использую трекер от Toptal. У него есть внутреннее API, которое я использую, чтобы вытащить данные по конкретному проекту. Название проектов в CRM и трекере совпадают. Таким образом я могу сравнивать суммарную оценку времени по milestones и реально затраченное время.
10. Счета - тут я храню данные о счетах. Они вяжутся к отдельной таблице с налоговыми отчетами (я подаю их каждый месяц)
Я также настроил интерфейсы для удобного управления задачами и их отображения в календаре. У разработчика есть свой интерфейс, где он видит информацию только по тем проектам, к которым он привязан.
Это все хорошо, но действительно ли оно работает, как задумано?
Я стараюсь записывать обновления по всем проектам в конце дня. Иногда я пропускаю дни, если работы очень много, но в течении нескольких дней все равно делаю ревью.
Ставьте лайк и подписывайтесь, завтра я буду пробовать новый формат и расскажу как расписать в ТЗ процесс оплаты и ничего не забыть.
Как я использовал ChatGPT за последние 2 недели:
1. Любая техническая рутина - повторные действия где нужно что-то копировать/вставлять/менять много раз/форматировать.
2. Функция для замены испанских букв на английские - политика нейминга файлов AWS запрещает ряд символов и требует нормализации для сохранения на сервер. Я не смог найти какого-то существующего решения и пришлось писать код для замены каждого символа. (Смотрите в сторону нормализации по NFC и мэтчингу символов по юникоду)
На днях я доделал проект - копия HR инструмента для поиска кандидатов. Основой является большая БД с данными профилей с Linkedin и AI поиск. В рамках этого проекта я решил ряд задач с помощью ChatGPT:
1. До этого я не делал многоуровневую фильтрацию к SQL базе и оказалось, что для этого нужно собирать сложный запрос на лету. Вместе с GPT я собрал код для учета 8 разных фильтров (каждый фильтр принимает массив значений). На стороне Bubble я собираю JSON из выбранных фильтров и отправляю его в сценарий на Make. Этот сценарий является функцией - он получает данные с помощью webhook и возвращает их через webhook response. В этом сценарии я делаю запрос к функции на Napkin и возвращаю готовый SQL запрос, который использую дальше для поиска данных в БД и возвращения их в Bubble. Полученный список кандидатов выводится в РГ.
2. Одним из параметров является степень образования (магистр, бакалавр и тд). Linkedin не имеет жесткого ограничения на ввод данных, поэтому спарсенная информация представляет из себя микс всевозможных вариантов. С помощью SQL запроса я вывел список уникальных значений и скормил его GPT. На основе этого списка он составил мне SQL запрос для нормализации данных - замена Bachelors, Bachelor и тд. на Bachelor’s Degree.
3. Одной из главных фичей является поиск кандидатов по средством общения с системой подобно ChatGPT. Для реализации этого функционала я добавил шаг обработки запроса пользователя с помощью GPT - в промпте указываются инструкции для парсинга параметров и составления JSON подобно тому, что я отсылаю на бэк при обычной фильтрации. Дальше я использую этот JSON для поиска кандидатов с помощью сценария, описанного в первом пункте.
4. Найденные кандидаты возвращаются назад в сценарий и обрабатываются с помощью еще одного запроса к GPT. Он изучает полученную информацию о кандидатах и делает им короткое описание релевантное запросу пользователя. Полученный ответ сохраняется в БД и отображается в чате. Также к ответу крепится список пользователей, который можно отобразить списком (как при фильтрации) и изучить профиль каждого кандидата отдельно.
Такая реализация AI поиска является упрощенной, относительного того, как это должно быть сделано на самом деле с векторной базой и прочими AI элементами.
_____
Небольшое лирическое отступление - куда я пропал?
Оказалось, что невозможно вести 5 проектов, постить контент три раза в неделю и чувствовать себя хорошо, поэтому у меня практически полностью кончились силы как физические, так и моральные.
Сейчас я стараюсь освободить время для себя, а также я переехал в Мексику на берег Карибского моря, что думаю способствует релаксации на пассиве.
Ставьте лайк и подписывайтесь, со следующей недели я постараюсь вернуться в обычный темп и снова делиться с вами большим количеством полезной информации.
1. Любая техническая рутина - повторные действия где нужно что-то копировать/вставлять/менять много раз/форматировать.
2. Функция для замены испанских букв на английские - политика нейминга файлов AWS запрещает ряд символов и требует нормализации для сохранения на сервер. Я не смог найти какого-то существующего решения и пришлось писать код для замены каждого символа. (Смотрите в сторону нормализации по NFC и мэтчингу символов по юникоду)
На днях я доделал проект - копия HR инструмента для поиска кандидатов. Основой является большая БД с данными профилей с Linkedin и AI поиск. В рамках этого проекта я решил ряд задач с помощью ChatGPT:
1. До этого я не делал многоуровневую фильтрацию к SQL базе и оказалось, что для этого нужно собирать сложный запрос на лету. Вместе с GPT я собрал код для учета 8 разных фильтров (каждый фильтр принимает массив значений). На стороне Bubble я собираю JSON из выбранных фильтров и отправляю его в сценарий на Make. Этот сценарий является функцией - он получает данные с помощью webhook и возвращает их через webhook response. В этом сценарии я делаю запрос к функции на Napkin и возвращаю готовый SQL запрос, который использую дальше для поиска данных в БД и возвращения их в Bubble. Полученный список кандидатов выводится в РГ.
2. Одним из параметров является степень образования (магистр, бакалавр и тд). Linkedin не имеет жесткого ограничения на ввод данных, поэтому спарсенная информация представляет из себя микс всевозможных вариантов. С помощью SQL запроса я вывел список уникальных значений и скормил его GPT. На основе этого списка он составил мне SQL запрос для нормализации данных - замена Bachelors, Bachelor и тд. на Bachelor’s Degree.
3. Одной из главных фичей является поиск кандидатов по средством общения с системой подобно ChatGPT. Для реализации этого функционала я добавил шаг обработки запроса пользователя с помощью GPT - в промпте указываются инструкции для парсинга параметров и составления JSON подобно тому, что я отсылаю на бэк при обычной фильтрации. Дальше я использую этот JSON для поиска кандидатов с помощью сценария, описанного в первом пункте.
4. Найденные кандидаты возвращаются назад в сценарий и обрабатываются с помощью еще одного запроса к GPT. Он изучает полученную информацию о кандидатах и делает им короткое описание релевантное запросу пользователя. Полученный ответ сохраняется в БД и отображается в чате. Также к ответу крепится список пользователей, который можно отобразить списком (как при фильтрации) и изучить профиль каждого кандидата отдельно.
Такая реализация AI поиска является упрощенной, относительного того, как это должно быть сделано на самом деле с векторной базой и прочими AI элементами.
_____
Небольшое лирическое отступление - куда я пропал?
Оказалось, что невозможно вести 5 проектов, постить контент три раза в неделю и чувствовать себя хорошо, поэтому у меня практически полностью кончились силы как физические, так и моральные.
Сейчас я стараюсь освободить время для себя, а также я переехал в Мексику на берег Карибского моря, что думаю способствует релаксации на пассиве.
Ставьте лайк и подписывайтесь, со следующей недели я постараюсь вернуться в обычный темп и снова делиться с вами большим количеством полезной информации.
Всем привет!
После месяца молчания я снова в строю. За этот месяц многое поменялось - я вернулся из своего 1.5 годового путешествия домой, сделал порядка 5 проектов и окончательно устал от работы.
В ближайшее время, я хочу сделать выводы на основе полученного опыта и поделиться полезными советами. А пока поделюсь небольшим лайфаком о том, как получить небольшой бонус к основному заработку - старые добрые реферальные системы.
Вариант 1:
Я зарегистрирован в Make уже более 3 лет. За это время я несколько раз делился своей реферальной ссылкой с клиентами и в чатах сообщества, когда не забывал этого делать. Суммарно по моей ссылке зарегистрировались около 40 пользователей и около 5 из них были платящими. Часть платежей застряли в Integromat и были перенесены на мой аккаунт только в октябре этого года, после чего сайт Integromat закрылся насовсем.
В итоге, месяц назад я вывел свой новогодний бонус - $470. Я думаю эта сумма могла бы быть в два раза больше, если бы я не забывал делиться ссылкой с клиентами, но все равно приятно 🙂
Многие сервисы имеют такую систему, но мало кто ею пользуется и зря. Таким же образом я накопил $80 на счету Airtable для оплаты личной подписки.
Вариант 2:
Вам не обязательно быть no-code разработчиком, чтобы зарабатывать в этой сфере. Если вы отличный продажник, то можете выстроить воронку лидогенерации для no-code агентств, которые с радостью примут ваших лидов за процент от контракта.
Месяц назад ко мне обратился клиент и в процессе общения я понял, что он чересчур активен и я не смогу с ним поладить. Я отдал этого клиента одному из участников no-code сообщества, где собираются владельцы агентств. Ребята успешно закрыли этого лида и через месяц перевели мне $200 (5% от контракта). Таким образом в выигрыше остались абсолютно все.
Какой можно сделать вывод - способов заработка достаточно много, нужно лишь понять есть ли у ваших действий сторонние выгодоприоретатели. Найдя их, смело просите награду за свои старания.
Ставьте лайк и подписывайтесь, чтобы не упустить новый сезон полезных постов.
После месяца молчания я снова в строю. За этот месяц многое поменялось - я вернулся из своего 1.5 годового путешествия домой, сделал порядка 5 проектов и окончательно устал от работы.
В ближайшее время, я хочу сделать выводы на основе полученного опыта и поделиться полезными советами. А пока поделюсь небольшим лайфаком о том, как получить небольшой бонус к основному заработку - старые добрые реферальные системы.
Вариант 1:
Я зарегистрирован в Make уже более 3 лет. За это время я несколько раз делился своей реферальной ссылкой с клиентами и в чатах сообщества, когда не забывал этого делать. Суммарно по моей ссылке зарегистрировались около 40 пользователей и около 5 из них были платящими. Часть платежей застряли в Integromat и были перенесены на мой аккаунт только в октябре этого года, после чего сайт Integromat закрылся насовсем.
В итоге, месяц назад я вывел свой новогодний бонус - $470. Я думаю эта сумма могла бы быть в два раза больше, если бы я не забывал делиться ссылкой с клиентами, но все равно приятно 🙂
Многие сервисы имеют такую систему, но мало кто ею пользуется и зря. Таким же образом я накопил $80 на счету Airtable для оплаты личной подписки.
Вариант 2:
Вам не обязательно быть no-code разработчиком, чтобы зарабатывать в этой сфере. Если вы отличный продажник, то можете выстроить воронку лидогенерации для no-code агентств, которые с радостью примут ваших лидов за процент от контракта.
Месяц назад ко мне обратился клиент и в процессе общения я понял, что он чересчур активен и я не смогу с ним поладить. Я отдал этого клиента одному из участников no-code сообщества, где собираются владельцы агентств. Ребята успешно закрыли этого лида и через месяц перевели мне $200 (5% от контракта). Таким образом в выигрыше остались абсолютно все.
Какой можно сделать вывод - способов заработка достаточно много, нужно лишь понять есть ли у ваших действий сторонние выгодоприоретатели. Найдя их, смело просите награду за свои старания.
Ставьте лайк и подписывайтесь, чтобы не упустить новый сезон полезных постов.
Как я использовал чат ChatGPT за последние 2 месяца:
1. Основной и самой сложной задачей последнего месяца был риверс инжениринг внутренного API маркетплейса Poizon. В отличии от обычных API здесь добавляется шаг с шифрованием данных и созданием уникальной подписи на основе запроса. Таким образом для понимания процесса шифрования требовались навыки JS и на рынке оценили эту задачу в $600-1000 (скорее всего можно и дешевле, но это вопрос поиска хорошего специалиста). Я не отчаялся и решил скормить все, что вижу в консоле разработчика, GPT в надежде на его силы - через полчаса у меня был готовый код для создания подписи и неприступный API был взломан.
2. Для этого же проекта мне потребовалось создать список верхнеуровневых категорий на основе 300 подкатегорий с переводом на русский. Выдавать результаты в чате GPT поленился и это потребовало бы около 10 сообщений. Решением стал небольшой сценарий в Make сохранением данных в Airtable. Не забудьте переключить модель в API запросах на новую 1106-preview, так как она стоит в 2 раза меньше.
3. Схожую задачу категоризации я решил на соседнем проекте, где на основе неструктурированных данных из Linkedin требовалось выбрать уровень образования кандидата из фиксированного списка (bachelor, masters and etc)
4. Вместе с GPT я обновил проекты и портфолио на Upwork - зацените какая теперь красота.
5. На одном небольшом проекте я сделал финансовый дашборд и для тестирования формул основных метрик я сгенерировал десятки различных платежей, которыми заполнил базу.
6. На волне хайпа кастомных GPT я пробовал создать свой GPT на основе 2ух книг от Amliesolutions по оптимизации и безопасности в Bubble. Результат можете оценить сами.
Ставьте лайк и подписывайтесь, впереди много полезного контента.
1. Основной и самой сложной задачей последнего месяца был риверс инжениринг внутренного API маркетплейса Poizon. В отличии от обычных API здесь добавляется шаг с шифрованием данных и созданием уникальной подписи на основе запроса. Таким образом для понимания процесса шифрования требовались навыки JS и на рынке оценили эту задачу в $600-1000 (скорее всего можно и дешевле, но это вопрос поиска хорошего специалиста). Я не отчаялся и решил скормить все, что вижу в консоле разработчика, GPT в надежде на его силы - через полчаса у меня был готовый код для создания подписи и неприступный API был взломан.
2. Для этого же проекта мне потребовалось создать список верхнеуровневых категорий на основе 300 подкатегорий с переводом на русский. Выдавать результаты в чате GPT поленился и это потребовало бы около 10 сообщений. Решением стал небольшой сценарий в Make сохранением данных в Airtable. Не забудьте переключить модель в API запросах на новую 1106-preview, так как она стоит в 2 раза меньше.
3. Схожую задачу категоризации я решил на соседнем проекте, где на основе неструктурированных данных из Linkedin требовалось выбрать уровень образования кандидата из фиксированного списка (bachelor, masters and etc)
4. Вместе с GPT я обновил проекты и портфолио на Upwork - зацените какая теперь красота.
5. На одном небольшом проекте я сделал финансовый дашборд и для тестирования формул основных метрик я сгенерировал десятки различных платежей, которыми заполнил базу.
6. На волне хайпа кастомных GPT я пробовал создать свой GPT на основе 2ух книг от Amliesolutions по оптимизации и безопасности в Bubble. Результат можете оценить сами.
Ставьте лайк и подписывайтесь, впереди много полезного контента.
Как использовать Option sets в Bubble
Я замечаю, что многие практики разработки, которые давно стали для меня обыденностью, являются непознанными для других разработчиков. Скорее всего и я упускаю какие-то best practice, которые бы помогли мне в работе. С этой целью я буду потихоньку разбирать различные части рабочих инструментов и приглашаю вас к обсуждению и обмену опытом.
Начнем с теории, которую вы можете найти в официальной документации:
1. Данные из Option sets подгружаются на сторону пользователя вместе с загрузкой страницы, а значит там не стоит хранить чувствительную информацию.
2. Хоть эти данные и сохраняются в кэше пользователя до следующего деплоя, не стоит держать там длинных списков, чтобы не замедлять загрузку страницы.
3. Однако, даже если вы и захотите загрузить туда большой список, вам придется постараться, так как записи загружаются туда по одной вручную из панели разработчика, что делает этот функционал непригодным для типа данных, который может изменяться пользователями.
4. Как и в БД, к основной колонке Display вы можете добавить дополнительные аттрибуты (колонки). Их возможно поменять только открыв детали конкретной записи.
5. Аттрибут может иметь один из стандартных типов данных либо являться ссылкой на другой Option set. Ссылаться на таблицы из БД нельзя. Сам Options set может быть выбран как тип данных в API и SQL connector’ах, backend workflows и БД.
6. Значения Display могут быть неуникальными, поэтому нужно быть осторожным при создании списка и проверять на дубликаты.
7. Для изменения списка в Live потребуется деплой.
А вот что я успел понять об Option sets:
1. Иногда требуется загрузить длинный список значений (области страны). Для bulk загрузки можно использовать плагин, но работает он не совсем стабильно и не имеет возможности загружать аттрибуты.
2. Основные кейсы, когда я использую Option sets - статусы, опции для dropdown (области, должности, категории и тд), страницы приложения (menu, submenu), алерты.
3. Аттрибуты я использовал для перевода статусов на русский (в БД всегда англ), для сохранения порядкового номера (и дальнейшей сортировке на фронте), для динамических цветов тега.
4. Почему то так сложилось, что моя нейминговая конвенция для Options sets - start case (каждое слово с большой буквы).
А как вы используете Option sets?
___
Не забывайте ставить лайк и подписываться на канал, это мотивирует меня делать больше интересного контента
Я замечаю, что многие практики разработки, которые давно стали для меня обыденностью, являются непознанными для других разработчиков. Скорее всего и я упускаю какие-то best practice, которые бы помогли мне в работе. С этой целью я буду потихоньку разбирать различные части рабочих инструментов и приглашаю вас к обсуждению и обмену опытом.
Начнем с теории, которую вы можете найти в официальной документации:
1. Данные из Option sets подгружаются на сторону пользователя вместе с загрузкой страницы, а значит там не стоит хранить чувствительную информацию.
2. Хоть эти данные и сохраняются в кэше пользователя до следующего деплоя, не стоит держать там длинных списков, чтобы не замедлять загрузку страницы.
3. Однако, даже если вы и захотите загрузить туда большой список, вам придется постараться, так как записи загружаются туда по одной вручную из панели разработчика, что делает этот функционал непригодным для типа данных, который может изменяться пользователями.
4. Как и в БД, к основной колонке Display вы можете добавить дополнительные аттрибуты (колонки). Их возможно поменять только открыв детали конкретной записи.
5. Аттрибут может иметь один из стандартных типов данных либо являться ссылкой на другой Option set. Ссылаться на таблицы из БД нельзя. Сам Options set может быть выбран как тип данных в API и SQL connector’ах, backend workflows и БД.
6. Значения Display могут быть неуникальными, поэтому нужно быть осторожным при создании списка и проверять на дубликаты.
7. Для изменения списка в Live потребуется деплой.
А вот что я успел понять об Option sets:
1. Иногда требуется загрузить длинный список значений (области страны). Для bulk загрузки можно использовать плагин, но работает он не совсем стабильно и не имеет возможности загружать аттрибуты.
2. Основные кейсы, когда я использую Option sets - статусы, опции для dropdown (области, должности, категории и тд), страницы приложения (menu, submenu), алерты.
3. Аттрибуты я использовал для перевода статусов на русский (в БД всегда англ), для сохранения порядкового номера (и дальнейшей сортировке на фронте), для динамических цветов тега.
4. Почему то так сложилось, что моя нейминговая конвенция для Options sets - start case (каждое слово с большой буквы).
А как вы используете Option sets?
___
Не забывайте ставить лайк и подписываться на канал, это мотивирует меня делать больше интересного контента
Если клиент просит добавить фичу (за деньги), которая заведомо не имеет продуктовой значимости, основана на чистом желании клиента и не будет использоваться, вы добавите ее не обсуждая или попытаетесь доказать, что она не нужна?
Почему? (мотивация может быть разной - деньги, время, принципы и тд)
Почему? (мотивация может быть разной - деньги, время, принципы и тд)
Сегодня я поделюсь лайфхаками по работе с Supabase, которые я узнал, пока автоматизировал многоступенчатый процесс лизинга для мексиканской компании.
1️⃣ Вы можете создать базу через интерфейс, но мне больше нравится описывать вместе с ChatGPT запросы на создание нужных таблиц и просто запускать их во вкладке SQL Editor.
CREATE TABLE public.log_types (
id uuid NOT NULL DEFAULT gen_random_uuid(),
type_name TEXT NOT NULL,
CONSTRAINT log_types_pkey PRIMARY KEY (id)
) TABLESPACE pg_default;
2️⃣Немного о первичном ключе:
- Каждая запись должна иметь уникальный идентификатор, иначе вы не сможете изменять или удалять их.
- Для первичного ключа я использую поле с типом uuid и автоматической генерацией через дефолтное значение - gen_random_uuid(). Можно выбрать порядковую нумерация начиная с 1, но мне такой вариант не подошел, ведь при использовании этого id в ссылке пользователь сможет заменить его на другой и посмотреть чужую запись.
- Если вы ошиблись и хотите поменять тип Primary поля, то вам придется сделать несколько действий - для начала вам нужно снять галочку с текущего поля и сохранить таблицу, только после этого вы сможете выбрать новое поле.
3️⃣ Для разных типов данных можно использовать разные типы поля. Вы можете использовать для текста один и тот же тип text, а можете варьировать тип в зависимости от размера данных, которые собираетесь там хранить. Каждый из типов резервирует в базе определенный размер памяти, поэтому если вы собираетесь делать большой и масштабируемый проект, есть смысл задумываться над типом каждого поля.
- Varchar - короткий текст
- Text - длинный текст
- Timestamptz - дата с временем и таймзоной
- Int8 - для целых чисел
- Float8 - для чисел с точкой
- Bool - для логических переменных
- JSON - для хранения объектов
4️⃣ У поля можно выбрать дефолтное значение - удобно выставлять текущую дату или дефолтный статус.
5️⃣ Вы можете настроить поле с ссылкой на другую таблицу (значок ссылки). Для этого нужно будет выбрать таблицу и нужное поле (uuid). В настройке “Action if referenced row is removed” следует выбрать поведение базы при удалении референса, иначе при удалении записи и наличии связи база выдаст ошибку.
- Cascade - удалить связанные записи
- No action - ничего не делать, но вызывает ошибку
- Set default/NULL - выставить дефолтное/NULL значение (выбрайте это, если не знаете что лучше)
6️⃣ Все типы полей могут быть массивами (значок шестеренки - Set as Array). Однако, ссылки на другие таблицы не поддерживают массивы. Для хранения массива ссылок на другую таблицу следует убрать связь и хранить данные как массив uuid/text.
7️⃣ Не стоит забывать про нейминг таблиц и полей. Я использую snake_case конвенцию, а ссылки на другие таблицы обозначаю как entity_id.
8️⃣ Файлы хранятся отдельно в storage и вызываются/сохраняются по пути файла через API (название папок/название файла.расширение). Каждый файл я храню в отдельной папке пользователя (название - user_id), сами папки хранятся в папке сущности (users). В отдельной таблице в БД хранятся файлы с названием и полным путем до файла в storage (users/user_id/filename.txt).
9️⃣ Для получения временной ссылки на файл (удобно для просмотра) нужно сначала запросить url с помощью запроса https://yourbase.supabase.co/storage/v1/object/sign/file_storage/[filepath] : JSON body {"expiresIn": 600}. Далее эту ссылку можно использовать с префиксом https://yourbase.supabase.co/storage/v1
Данные советы могут содержать неточности и основаны лишь на моем опыте. Также для простоты я использую мастер-ключ для API запросов к базе (получение файлов), что является плохой практикой. Каждый пользователь должен быть создан в Supabase, данные должны быть привязаны к пользователю и для запросов к API нужно использовать токен пользователя, чтобы ограничить доступ к другим файлам.
Ставьте лайк и подписывайтесь, в следующей части мы разберем лайфхаки подключения SQL к Bubble
1️⃣ Вы можете создать базу через интерфейс, но мне больше нравится описывать вместе с ChatGPT запросы на создание нужных таблиц и просто запускать их во вкладке SQL Editor.
CREATE TABLE public.log_types (
id uuid NOT NULL DEFAULT gen_random_uuid(),
type_name TEXT NOT NULL,
CONSTRAINT log_types_pkey PRIMARY KEY (id)
) TABLESPACE pg_default;
2️⃣Немного о первичном ключе:
- Каждая запись должна иметь уникальный идентификатор, иначе вы не сможете изменять или удалять их.
- Для первичного ключа я использую поле с типом uuid и автоматической генерацией через дефолтное значение - gen_random_uuid(). Можно выбрать порядковую нумерация начиная с 1, но мне такой вариант не подошел, ведь при использовании этого id в ссылке пользователь сможет заменить его на другой и посмотреть чужую запись.
- Если вы ошиблись и хотите поменять тип Primary поля, то вам придется сделать несколько действий - для начала вам нужно снять галочку с текущего поля и сохранить таблицу, только после этого вы сможете выбрать новое поле.
3️⃣ Для разных типов данных можно использовать разные типы поля. Вы можете использовать для текста один и тот же тип text, а можете варьировать тип в зависимости от размера данных, которые собираетесь там хранить. Каждый из типов резервирует в базе определенный размер памяти, поэтому если вы собираетесь делать большой и масштабируемый проект, есть смысл задумываться над типом каждого поля.
- Varchar - короткий текст
- Text - длинный текст
- Timestamptz - дата с временем и таймзоной
- Int8 - для целых чисел
- Float8 - для чисел с точкой
- Bool - для логических переменных
- JSON - для хранения объектов
4️⃣ У поля можно выбрать дефолтное значение - удобно выставлять текущую дату или дефолтный статус.
5️⃣ Вы можете настроить поле с ссылкой на другую таблицу (значок ссылки). Для этого нужно будет выбрать таблицу и нужное поле (uuid). В настройке “Action if referenced row is removed” следует выбрать поведение базы при удалении референса, иначе при удалении записи и наличии связи база выдаст ошибку.
- Cascade - удалить связанные записи
- No action - ничего не делать, но вызывает ошибку
- Set default/NULL - выставить дефолтное/NULL значение (выбрайте это, если не знаете что лучше)
6️⃣ Все типы полей могут быть массивами (значок шестеренки - Set as Array). Однако, ссылки на другие таблицы не поддерживают массивы. Для хранения массива ссылок на другую таблицу следует убрать связь и хранить данные как массив uuid/text.
7️⃣ Не стоит забывать про нейминг таблиц и полей. Я использую snake_case конвенцию, а ссылки на другие таблицы обозначаю как entity_id.
8️⃣ Файлы хранятся отдельно в storage и вызываются/сохраняются по пути файла через API (название папок/название файла.расширение). Каждый файл я храню в отдельной папке пользователя (название - user_id), сами папки хранятся в папке сущности (users). В отдельной таблице в БД хранятся файлы с названием и полным путем до файла в storage (users/user_id/filename.txt).
9️⃣ Для получения временной ссылки на файл (удобно для просмотра) нужно сначала запросить url с помощью запроса https://yourbase.supabase.co/storage/v1/object/sign/file_storage/[filepath] : JSON body {"expiresIn": 600}. Далее эту ссылку можно использовать с префиксом https://yourbase.supabase.co/storage/v1
Данные советы могут содержать неточности и основаны лишь на моем опыте. Также для простоты я использую мастер-ключ для API запросов к базе (получение файлов), что является плохой практикой. Каждый пользователь должен быть создан в Supabase, данные должны быть привязаны к пользователю и для запросов к API нужно использовать токен пользователя, чтобы ограничить доступ к другим файлам.
Ставьте лайк и подписывайтесь, в следующей части мы разберем лайфхаки подключения SQL к Bubble
В no-code возможно зарабатывать $5-10 тыс./мес.
Какого уровня дохода вам хотелось бы достичь в следующем году? Как вы думаете, какие скиллы вам нужно для этого подтянуть?
Какого уровня дохода вам хотелось бы достичь в следующем году? Как вы думаете, какие скиллы вам нужно для этого подтянуть?
Как сделать не виснующее ноукод приложение с БД в 1000000 строк?
Продолжаем говорить о SQL и сегодня разберем полезные советы о работе с SQL в Bubble.
Ранее я уже делал ряд постов об этом, поэтому не будем повторяться и посмотрим новые инсайты.
1️⃣ Для подключение к Supabase устанавливаем плагин SQL Connector и берем креды из Settings - Database. Далее формируем строку для плагина - postgres://User:Password@Host:Port/Database.
- Пример: postgres://postgres:YGe24reS51Sba@db.ekgfdgwertwerajnwqw.supabase.co:5432/postgres
2️⃣ Работая с большим объемом данных не обойтись без пагинации - ее можно сделать с помощью OFFSET и переменной ($1). Для показа следующей “страницы” добавьте к переменной число, указанное у вас в LIMIT. При пагинации обязательна сортировка данных, чтобы БД точно понимать какие именно записи идут следующими.
- ORDER BY created_date DESC LIMIT 200 OFFSET $1;
3️⃣ Переменные в запросах:
- При составлении запроса заранее задумайтесь о переменных, которые вы будете использовать в нем. Если вы захотите удалить переменную, то порядок всех остальных переменных сместиться, поэтому лучше просто заменять ненужную переменную на последнюю в списке.
- Если вам нужно сделать запрос для поиска с различными фильтрами (переменными), которые могут быть пустыми, добавьте в условие проверку переменной - $1 IS NULL. Примеры условий для разных типов:
- - Текстовая переменная - (status LIKE '%' $1 '%' OR $1 IS NULL)
- - Числовая переменная - (telegram_id = $1 OR $1 IS NULL)
- - Массив - school_name = ANY(ARRAY[$1] OR $1 IS NULL) - $1=‘Harvard,Stanford’
- Если у вас есть проблемы с типом данных на стороне Bubble, смените тип переменной в SQL - $1::text или $1::int
4️⃣ Не бойтесь SQL, за меня на нем пишет ChatGPT. Даже 3.5 версии достаточно скормить структуру ваших таблиц (Table - Definition) и он сам напишет все нужные запросы за вас.
🔥Совет со звездочкой для самых-самых:
Кейс - я хочу выбрать из списка заказ и показать детали этого заказа.
Источником данных для карточки деталей заказа я использую выбранную запись из общего списка заказов, который основан на запросе get_orders. Тут нет проблем - жмем на заказ и используем This get_orders.
Но каждый запрос воспринимается как отдельный тип данных. Если я хочу из карточки счета перейти в заказ мне нужно либо использовать отдельный запрос get_this_order, либо брать весь список заказов и фильтровать его на стороне клиента, чтобы получить данные по конкретному заказу.
Первый способ вернет другой типа данных, который нельзя использовать для карточки товара (у нас там все завязано на get_orders). Второй же способ небезопасен (так как грузятся все данные на сторону клиента) и неэффективен (это может занять очень много времени). Что же делать?
Мы делаем универсальный запрос get_orders, куда добавляем еще один фильтр id=$1. Проблема в том, что UUID это жесткий 32 символьный формат и при попытке отправки пустой строки вы получите ошибку ($1 IS NULL тоже не поможет). Для обхода этой проблемы мы заменяем дефолтное пустое значение на валидный UUID и меняем условие. (id = $4 OR $4= '00000000-0000-0000-0000-000000000000’)
Спасибо вам, за то что читали мой блог весь этот год. ❤️🔥
Поздравляю всех с наступающим Новым Годом🎄, ставьте лайки и подписывайтесь, в следующем году дело примет серьезные обороты!
Продолжаем говорить о SQL и сегодня разберем полезные советы о работе с SQL в Bubble.
Ранее я уже делал ряд постов об этом, поэтому не будем повторяться и посмотрим новые инсайты.
1️⃣ Для подключение к Supabase устанавливаем плагин SQL Connector и берем креды из Settings - Database. Далее формируем строку для плагина - postgres://User:Password@Host:Port/Database.
- Пример: postgres://postgres:YGe24reS51Sba@db.ekgfdgwertwerajnwqw.supabase.co:5432/postgres
2️⃣ Работая с большим объемом данных не обойтись без пагинации - ее можно сделать с помощью OFFSET и переменной ($1). Для показа следующей “страницы” добавьте к переменной число, указанное у вас в LIMIT. При пагинации обязательна сортировка данных, чтобы БД точно понимать какие именно записи идут следующими.
- ORDER BY created_date DESC LIMIT 200 OFFSET $1;
3️⃣ Переменные в запросах:
- При составлении запроса заранее задумайтесь о переменных, которые вы будете использовать в нем. Если вы захотите удалить переменную, то порядок всех остальных переменных сместиться, поэтому лучше просто заменять ненужную переменную на последнюю в списке.
- Если вам нужно сделать запрос для поиска с различными фильтрами (переменными), которые могут быть пустыми, добавьте в условие проверку переменной - $1 IS NULL. Примеры условий для разных типов:
- - Текстовая переменная - (status LIKE '%' $1 '%' OR $1 IS NULL)
- - Числовая переменная - (telegram_id = $1 OR $1 IS NULL)
- - Массив - school_name = ANY(ARRAY[$1] OR $1 IS NULL) - $1=‘Harvard,Stanford’
- Если у вас есть проблемы с типом данных на стороне Bubble, смените тип переменной в SQL - $1::text или $1::int
4️⃣ Не бойтесь SQL, за меня на нем пишет ChatGPT. Даже 3.5 версии достаточно скормить структуру ваших таблиц (Table - Definition) и он сам напишет все нужные запросы за вас.
🔥Совет со звездочкой для самых-самых:
Источником данных для карточки деталей заказа я использую выбранную запись из общего списка заказов, который основан на запросе get_orders. Тут нет проблем - жмем на заказ и используем This get_orders.
Но каждый запрос воспринимается как отдельный тип данных. Если я хочу из карточки счета перейти в заказ мне нужно либо использовать отдельный запрос get_this_order, либо брать весь список заказов и фильтровать его на стороне клиента, чтобы получить данные по конкретному заказу.
Первый способ вернет другой типа данных, который нельзя использовать для карточки товара (у нас там все завязано на get_orders). Второй же способ небезопасен (так как грузятся все данные на сторону клиента) и неэффективен (это может занять очень много времени). Что же делать?
Мы делаем универсальный запрос get_orders, куда добавляем еще один фильтр id=$1. Проблема в том, что UUID это жесткий 32 символьный формат и при попытке отправки пустой строки вы получите ошибку ($1 IS NULL тоже не поможет). Для обхода этой проблемы мы заменяем дефолтное пустое значение на валидный UUID и меняем условие. (id = $4 OR $4= '00000000-0000-0000-0000-000000000000’)
Спасибо вам, за то что читали мой блог весь этот год. ❤️🔥
Поздравляю всех с наступающим Новым Годом🎄, ставьте лайки и подписывайтесь, в следующем году дело примет серьезные обороты!
Telegram
.DEV | No/low-code agency
Недавно мы сделали интеграцию между Bubble и AWS RDS и хотели бы поделиться с вами ценными советами, которые мы не смогли найти в Интернете.
Совет дня (Bubble — SQL-запрос):
Используйте NULLIF($1, '') в запросах UPDATE/INSERT, чтобы избежать пустых текстовых…
Совет дня (Bubble — SQL-запрос):
Используйте NULLIF($1, '') в запросах UPDATE/INSERT, чтобы избежать пустых текстовых…
Добро пожаловать на канал Грязного ноукодера
Что случилось?
Я делаю ребрендинг и начинаю прокачивать личный бренд. Вместе с этим я хочу выбросить из головы различные дурацкие принципы, сдерживающие меня от более публичной жизни и личностного роста.
Так повелось, что в моей семье и в условиях того места, где я жил, выделяться из толпы было зазорно и порою даже опасно. Поэтому будучи когда-то энергичным и открытым к миру, я навесил на себя множество ограничений, чтобы выжить в том суровом мире. Теперь, когда жизнь координально изменилась, пора меняться и мне.
Почему такое название?
Несмотря на мой сугобо технический контент, в жизни я совсем другой человек👀
Посудите сами - сейчас, когда меня просят рассказать о себе, я представляюсь так:
2019: работал бизнес-аналитиком
2020: работал в Integromat
2021: помогал делать немецкий стартап
2022: работал с инвестиционным фондом из США
Сухо, грустно, скучно. А что если так:
2012: слил первую 10ку на бинарных опционах
2014: придумывал стратегии для Forex
2015: полгода пытался математически переиграть букмекеров
2016: кардил через Paypal аккаунты
2019: создал сетку дропов для заработка на альфах
🔽
2022: все эти ранее накопленные навыки помогли мне с помощью ноукод обработать транзакций на $14 млн.
Стало интересней? А если я добавлю, что мне пришлось чистить следы за одним из 🍋 и мой бывший босс все еще под следствием в США? Думаю теперь вам будет о чем почитать😏
А чтобы познакомиться еще ближе, предлагаю начать этот год с полезной личной встречи. Я буду рад пообщаться с вами и узнать на каком этапе ноукодерского пути вы находитесь, по возможности дам полезный совет и задам несколько вопросов, которые помогут вам выйти на следующий уровень в новом году.
Назначить встречу можно тут - https://calendly.com/lowcodingdev/networking
Что случилось?
Я делаю ребрендинг и начинаю прокачивать личный бренд. Вместе с этим я хочу выбросить из головы различные дурацкие принципы, сдерживающие меня от более публичной жизни и личностного роста.
Так повелось, что в моей семье и в условиях того места, где я жил, выделяться из толпы было зазорно и порою даже опасно. Поэтому будучи когда-то энергичным и открытым к миру, я навесил на себя множество ограничений, чтобы выжить в том суровом мире. Теперь, когда жизнь координально изменилась, пора меняться и мне.
Почему такое название?
Несмотря на мой сугобо технический контент, в жизни я совсем другой человек
Посудите сами - сейчас, когда меня просят рассказать о себе, я представляюсь так:
2019: работал бизнес-аналитиком
2020: работал в Integromat
2021: помогал делать немецкий стартап
2022: работал с инвестиционным фондом из США
Сухо, грустно, скучно. А что если так:
2012: слил первую 10ку на бинарных опционах
2014: придумывал стратегии для Forex
2015: полгода пытался математически переиграть букмекеров
2016: кардил через Paypal аккаунты
2019: создал сетку дропов для заработка на альфах
🔽
2022: все эти ранее накопленные навыки помогли мне с помощью ноукод обработать транзакций на $14 млн.
Стало интересней? А если я добавлю, что мне пришлось чистить следы за одним из 🍋 и мой бывший босс все еще под следствием в США? Думаю теперь вам будет о чем почитать
А чтобы познакомиться еще ближе, предлагаю начать этот год с полезной личной встречи. Я буду рад пообщаться с вами и узнать на каком этапе ноукодерского пути вы находитесь, по возможности дам полезный совет и задам несколько вопросов, которые помогут вам выйти на следующий уровень в новом году.
Назначить встречу можно тут - https://calendly.com/lowcodingdev/networking
Please open Telegram to view this post
VIEW IN TELEGRAM
Как достичь стабильности в ноукоде?
Ответ на мой вчерашний призыв не заставил себя ждать и я уже успел созвониться с одним из своих подписчиков и обсудить его путь no-code разработчика.
Несмотря на весомый опыт в разработке, знание кода и английского языка (как по мне отличный набор для выхода на новый уровень), у него есть одна острая проблема. Эта проблема знакома большинству разработчиков и агентств - нет стабильного потока проектов. Невозможно строить планы и не сжигать нервные клетки, когда проекты то и дело появляются и исчезают в самый неподходящий момент.
Откуда же берется стабильность? Из большого потока задач. Ими вас может обеспечить агентство (продажники постоянно находят новые проекты), компания с растущим продуктом (рост = потребность в новых фичах) или же налаженный источник трафика (главное выстроить хорошую воронку).
1️⃣ Агентство. Вы можете создать свое🥲 или постучаться во все существующие агентства на российском/зарубежном рынке (не забывайте, что есть множество агентств на западе с русскими командами). Их можно найти на Clutch, Bubble, Airtable, Make, и в прочих списках.
2️⃣ Растущий продукт. Это компания с развивающимся бизнесом, использующая внешний или внутренний ИТ продукт . В зависимости от размера продукта вы можете получить должность разработчика в существующей команде или в одиночку тянуть на себе техническую часть продукта как фрилансер. Найти такое можно на досках с вакансиями (Linkedin, HH) или на биржах (Upwork, Fivver). Также, вы можете стать частью такого продукта, если создадите MVP и оно начнет приносить реальную пользу.
3️⃣ Источник трафика. Тут все гораздо сложнее, но надежнее. Вам нужно выстраивать собственную воронку с источником трафика и продуктом. Источники трафика - посты в соцсетях (Linkedin, TG), профильные статьи в онлайн журналах (VC.ru, habr), помощь в чатах комьюнити (TG, Facebook, Reddit, Linkedin), таргетированная реклама (Yandex, Google, IG), прочее (Avito🤨 ). Продукт - блог в тг, сайт, профиль на бирже или соцсети, где вы рассказываете о своей деятельности и призываете пользователя записаться на консультацию/оставить заявку с описанием проекта.
🔥 Бонус источник - ваши текущие клиенты. Самый мощный источник новых заказов для любого бизнеса - сарафанное радио. Выполните свою работу качественно, проявите заботу о клиенте и его продукте, и он будет советовать вас всем знакомым даже спустя несколько лет.
Кстати, этот подписчик ищет работу Bubble разработчика и вы можете связаться с ним напрямую - @pirueti
Если и вы хотите получить полезных советов или просто приятно поболтать, ставьте лайки и успевайте забронировать звонок тут - https://calendly.com/lowcodingdev/networking
Ответ на мой вчерашний призыв не заставил себя ждать и я уже успел созвониться с одним из своих подписчиков и обсудить его путь no-code разработчика.
Несмотря на весомый опыт в разработке, знание кода и английского языка (как по мне отличный набор для выхода на новый уровень), у него есть одна острая проблема. Эта проблема знакома большинству разработчиков и агентств - нет стабильного потока проектов. Невозможно строить планы и не сжигать нервные клетки, когда проекты то и дело появляются и исчезают в самый неподходящий момент.
Откуда же берется стабильность? Из большого потока задач. Ими вас может обеспечить агентство (продажники постоянно находят новые проекты), компания с растущим продуктом (рост = потребность в новых фичах) или же налаженный источник трафика (главное выстроить хорошую воронку).
1️⃣ Агентство. Вы можете создать свое
2️⃣ Растущий продукт. Это компания с развивающимся бизнесом, использующая внешний или внутренний ИТ продукт . В зависимости от размера продукта вы можете получить должность разработчика в существующей команде или в одиночку тянуть на себе техническую часть продукта как фрилансер. Найти такое можно на досках с вакансиями (Linkedin, HH) или на биржах (Upwork, Fivver). Также, вы можете стать частью такого продукта, если создадите MVP и оно начнет приносить реальную пользу.
3️⃣ Источник трафика. Тут все гораздо сложнее, но надежнее. Вам нужно выстраивать собственную воронку с источником трафика и продуктом. Источники трафика - посты в соцсетях (Linkedin, TG), профильные статьи в онлайн журналах (VC.ru, habr), помощь в чатах комьюнити (TG, Facebook, Reddit, Linkedin), таргетированная реклама (Yandex, Google, IG), прочее (Avito
🔥 Бонус источник - ваши текущие клиенты. Самый мощный источник новых заказов для любого бизнеса - сарафанное радио. Выполните свою работу качественно, проявите заботу о клиенте и его продукте, и он будет советовать вас всем знакомым даже спустя несколько лет.
Кстати, этот подписчик ищет работу Bubble разработчика и вы можете связаться с ним напрямую - @pirueti
Если и вы хотите получить полезных советов или просто приятно поболтать, ставьте лайки и успевайте забронировать звонок тут - https://calendly.com/lowcodingdev/networking
Please open Telegram to view this post
VIEW IN TELEGRAM
Меня всегда интересовала корреляция «впахивания» и получаемых доходов.
С одной стороны примеры из соцсетей дразнят нас историями людей, которые работают по часу в день и путешествуют по всему миру.
С другой стороны успешные люди в интервью то и дело рассказывают про 10-12 часовые рабочие дни.
Сколько часов в день работаете вы работаете сейчас?
Пытаетесь ли вы работать больше или качественнее, чтобы выйти на новый уровень дохода?
С одной стороны примеры из соцсетей дразнят нас историями людей, которые работают по часу в день и путешествуют по всему миру.
С другой стороны успешные люди в интервью то и дело рассказывают про 10-12 часовые рабочие дни.
Сколько часов в день работаете вы работаете сейчас?
Пытаетесь ли вы работать больше или качественнее, чтобы выйти на новый уровень дохода?
Всем привет!
Весь день готовлюсь к предстоящему уроку по автоматизации в Make, на который записалось уже 20 человек.
С каждым часом в голове всплывает все больше инсайтов и кажется что и двух часов не хватит, чтобы всех их покрыть.
Кто еще не успел прочитать последний пост в канале, заполнить анкету и зарегистрироваться на урок — успевайте, так как времени осталось совсем немного.
Даже если вы не сможете принять участие в уроке — я все равно пришлю его запись на почту.
А пока оставляю вам план урока, до встреч в 17:00 по МСК.
Весь день готовлюсь к предстоящему уроку по автоматизации в Make, на который записалось уже 20 человек.
С каждым часом в голове всплывает все больше инсайтов и кажется что и двух часов не хватит, чтобы всех их покрыть.
Кто еще не успел прочитать последний пост в канале, заполнить анкету и зарегистрироваться на урок — успевайте, так как времени осталось совсем немного.
Даже если вы не сможете принять участие в уроке — я все равно пришлю его запись на почту.
А пока оставляю вам план урока, до встреч в 17:00 по МСК.
Спасибо всем, кто поучаствовал на вчерашнем уроке и заполнил анкету!🔥
Я внимательно изучил ваши запросы и сделал вывод, что ваша основная точка интереса — это вырасти в уровне дохода.
У меня есть много чем поделиться на эту тему, так как сам прошел каждый шаг на пути с 0 до $5’000 на ноукоде и понимаю, как прийти к этому результату кратчайшим маршрутом.
Сейчас я рассылаю всем запись урока вместе с презентацией (вы еще успеваете получить ее, заполнив анкету).
Также я добавил туда дополнительных ссылок и домашнее задание разной сложности.
Кто был на уроке — напишите, как вам?
Буду благодарен за обратную связь в комментариях⏬
Я внимательно изучил ваши запросы и сделал вывод, что ваша основная точка интереса — это вырасти в уровне дохода.
У меня есть много чем поделиться на эту тему, так как сам прошел каждый шаг на пути с 0 до $5’000 на ноукоде и понимаю, как прийти к этому результату кратчайшим маршрутом.
Сейчас я рассылаю всем запись урока вместе с презентацией (вы еще успеваете получить ее, заполнив анкету).
Также я добавил туда дополнительных ссылок и домашнее задание разной сложности.
Кто был на уроке — напишите, как вам?
Буду благодарен за обратную связь в комментариях⏬