Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж

в 14:23, , рубрики: Full Stack, laravel, php, product development, SaaS, Программирование, продуктовая разработка, разработка, Разработка веб-сайтов, стартап

Некоторые люди здесь знают меня как основателя двух прибыльных SaaS проектов и автора популярных статей о них (статья про Postio, статья про Menumake). В этом тьюториале я расскажу о том как я, обыкновенный разработчик, в одиночку создавал свой первый глобальный проект и что из этого получилось (TL;DR: хеппи-энд и первые продажи). Ну и заодно пробежимся по всем проблемным вопросам, начиная о том как найти неконкурентную и гарантированно прибыльную идею (оставим создание следующего Гугла более амбициозным и умным людям), и заканчивая тем, как принимать платежи глобально, находясь при этом в России. Летс гоу.

Ищем идею

Я всегда был сторонником правила, что поиск хорошей идеи — это не случайность, а обычный аналитический процесс. Есть много мест и способов найти проверенную реальностью идею, но поскольку однажды я твитнул это…

… то я буду пользоваться старым добрым Файвером. Есть еще одно пожелание: я люблю работать с социальными сетями и изображениями, поэтому первое куда мы пойдем — соответствующий раздел этой популярной фриланс-платформы.

image

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

Немного отступлю от темы и скажу, что несмотря на то, что в Рунете идея подобного проекта вызвала бы смех, то на Западе, где авторское право — не пустой звук, все гораздо более интересно. Цитаты там — это доступный и популярный формат, который используют небольшие (а иногда и крупные) компании, которые не могут позволить себе более дорогой тип контента. Поэтому такая популярность услуг по созданию уникальных картинок-цитат — не случайность.

Итак, у нас есть фаворит; теперь давайте оценим сколько на этом можно заработать. Я не буду проводить полный анализ, поэтому ограничимся следующим: зайдем в профиль самого крупного специалиста по цитатам на Файвере и разделим общее число его заказов на время, которое он провел на платформе.

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 2

Средний чек в этой нише — $15, его можно предположить, взяв за основу средний тарифный план этого парня.

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 3

Число его заказов мы можем оценить приблизительно, взяв число отзывов оставленных его клиентами (6688 на момент написания статьи); разумеется отзывов намного меньше, чем заказов, поскольку не все клиенты оставляют отзыв. Время, в месяцах, проведенное на платформе можно получить из даты его регистрации (тоже приблизительно, он мог начать работать не сразу). Итого получается такая математика:

6688 заказов / 36 месяцев x $15 = $2786

$2786 в месяц — не самая сказочная цифра, согласен. Но для того, чтобы понять потенциальный доход в этой нише, давайте вспомним, что:

  • Мы оценили доход этого парня в сильно меньшую сторону, потому что взяли отзывы вместо числа заказов и время действия аккаунта, а не время его реальной работы;
  • Это всего лишь один человек из многих
  • Это всего лишь Файвер, одна платформа из многих
  • Наверняка нам удастся придумать что-то еще, что может увеличить средний чек (спойлер: удастся)

Меня устраивают эти выкладки и эти цифры, поэтому сформулируем миссию проекта: массово и автоматически создавать уникальный контент в виде картинок-цитат под социальные сети с логотипом клиента.

Массово — потому что клиентам удобно сразу получить пак картинок и закинуть их в постилку. Уникальный — потому что неуникального и так завались, а соцсети любят уникальность. С логотипом — потому что клиенты верят, что те, кто смотрят на цитату запомнят их брендинг. Картинок-цитат — потому что этот формат эффективен и дешев в изготовлении.

Теперь за дело.

Создаем минимальный прототип

Поскольку мы будем создавать картинки-цитаты, нам потребуются следующие ингридиенты:

  1. Сами тексты цитат
  2. Изображения, незащищенные авторским правом
  3. Красивые шрифты
  4. Алгоритм, который смешает все это смузи вместе.

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

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

function autoWrap($text, $maxWidth, $maxHeight, $lineMargin, $fontName) {
  $image = new Imagick();
  $draw = new ImagickDraw();

  $startFontSize = round($this->height / 4);
  $fontSize = $startFontSize;

  $draw->setFont($fontName);

  $lineWidth = 10;
  $custom = false;
  
  $text = preg_replace('/s+/', ' ', $text);
  
  while (true) {
    $draw->setFontSize($fontSize);

    $fit = false;

    while (true) {
      if ($custom == false) {
        $lines = explode("n", wordwrap($text, $lineWidth, "n", false));
      }

      $longestLine = 0;
      $longestLineIndex = 0;

      // Search for the longest line for the current font size
      foreach ($lines as $i => $line) {
        $fontMetrics = $image->QueryFontMetrics($draw, $line);

        if ($fontMetrics['textWidth'] > $longestLine) {
          $longestLine = $fontMetrics['textWidth'];
          $longestLineIndex = $i;

          /*
          if the longest line is longer than the width then get out
          of the outer loop without $fit = true
          */
          if ($longestLine > $maxWidth) {
            break 2;
          }
        }
      }

      $fit = true;
      $resultLines = $lines;
      $resultLineHeight = $fontMetrics['textHeight'];

      if (count($lines) == 1) {
        break;
      }

      $lineWidth++;
    }


    if ($fit) {
      $totalHeight = count($resultLines) * ($resultLineHeight + $lineMargin) - $lineMargin;

      if ($totalHeight <= $maxHeight) {
        break;
      }
    }
    $fontSize--;
  }

  return array($resultLines, $fontSize);
}

К концу второй недели разработки мой генератор мог создавать вот такие изображения:

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 4

Смотрится симпатично. Пока я игрался с генератором родилась идея делать анимированные гифки и видео с цитатами — достаточно просто генерировать последовательность кадров, а потом собирать ее в конечный файл. Для сборки в GIF использовался все тот же ImageMagick. Для создания MP4 я cначала создавал GIF, но потом перегонял его в видеофайл с помощью FFmpeg.

Все это дало возможность делать вот такой контент:

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 5

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 6

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 7

Почему бы не продавать его по удвоенной цене, увеличив таким образом средний чек?

Окей, все это здорово, но это еще не продукт. Чтобы сделать все это готовым продуктом, нам потребуется выполнить следующие пункты.

Сайт

Для этого проекта я выбрал фреймворк Laravel и, несмотря на некоторые трудности…

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

Наверное, самая главная часть в сайте — это инструмент создания заказов. Он получился таким:

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 8

Прием платежей

Чтобы быть бизнесом, нам нужно как-то принимать платежи. Если бы мы продавали в России, я бы использовал решения типа Яндекс.Кассы или Робокассы. Если бы я был инкорпорирован в стране первого мира, я бы использовал Stripe или Braintree. Но в этот раз, я сорвал джекпот проблем из-за необходимости принимать платежи глобально (основные клиенты нашего с вами сервиса находятся в США), будучи инкорпорированным в России.

Единственной надежной системой, которую мне удалось найти, оказался Paypal. Они позволяют принимать платежи почти по всему миру, а потом выводить их на счет ООО или даже ИП, удерживая какие-то крохи комиссии. Все это, вместе с клевым российским налогом в 6%, удержало меня от желания инкорпорироваться в Делавере, Гонконге или Сингапуре в этот раз.

Процесс подключения к палке прост:

  1. Создаете корпоративный аккаунт у них
  2. Загружаете документы о своей компании
  3. Ждете пару недель, отвечая на их письма с разными запросами
  4. Интегрируетесь технически — это заняло у меня ровно один день.

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 9

Все, теперь вам могут платить со всего мира.

Массовая генерация изображений

Клиентам нашего будущего сервиса не интересно создание единичных изображений — они хотят заплатить один раз, загрузить полученные картинки в публикатор и забыть о проблеме контента (зачастую, это малый бизнес, где директор является одновременно и сммщиком, и маркетологом).

Сама генерация была организована через встроенный в Laravel механизм очередей и воркеров. Одна очередь отвечала за поштучную генерацию изображений для заказа, а вторая — за их сборку в единый архив. Кстати, когда клиент заказывал пак изображений, ему автоматически в архив добавлялось и 10 видео — так я давал попробовать новый формат и немного радовал клиента неожиданным подарком.

База изображений и цитат

Тут все просто. Я зашел на Upwork, нанял там индуса, который собрал 500 мотивационных цитат, и 500 подходящих картинок с дорогами, энергичными людьми и живописными видами. Далее, запустив генератор, создал тысячи готовых картинок, где случайная цитата соединялась со случайной картинкой, и удалил неподходящие изображения — те, которые не на 100% соответствовали всем цитатам. Все.

Лендинг

Не буду пытаться изложить здесь принципы создания хорошей главной страницы (на эту тему написаны книги размером с трактаты Лао-Цзы), просто оставлю свой твит с быстрым чек-листом:

Конечно, каждый случай уникален, но есть общие правила, которые позволяют сконвертировать человека с проблемой в пользователя вашего решения для нее. Совет новичкам: сильно не заморачивайтесь на этом этапе, оставьте вопросы увеличения конверсии лендинга на потом. С точки зрения проверки идеи на жизнеспособность, нет никакой разницы, какова конверсия вашего лендинга, 5% или 10%, до тех пор, пока есть хоть какая-то.

Статистика и логи

Важность хорошей, подробной статистики сложно переоценить. Меня иногда спрашивают, что надо собирать? Ответ прост — все. Все, что можете. Потому что никто не знает какие данные вам могут потребоваться в будущем.

Начать можно с небольшой таблицы, например, для нашего с вами проекта она может быть такой:

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 10

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

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

Сервер

Я ни разу не админ, поэтому, чтобы не париться с распараллеливанием генерации (ведь генерация изображений и тем более видео — затратный процесс), я решил просто арендовать мощный сервер у Hetzner и доверить деплой Laravel Forge. Оба продукта справились со своей задачей на пятерку.

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 11

На саму разработку я потратил примерно пару месяцев. Теперь давайте смотреть куда нас приведут продажи.

Запуск

Нет места прекраснее для запуска проектов, чем ProductHunt. Раньше, я искал человека с прокачанным аккаунтом, чтобы он или она опубликовали мой продукт. В этот раз, я забил на все это и просто захантил проект самостоятельно, доверившись их инструкции и собственной лени.

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 12

Сообщество PH отреагировало на проект очень положительно, и помимо классных отзывов и идей, принесло мне несколько продаж, две из США, одну из Великобритании:

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 13

Несмотря на то, что QuoteArtist (так я окрестил сервис) занял какое-то там 25-е место, он пробился на главную страницу платформы, что дало достаточно трафика:

Как я создавал прибыльный глобальный SaaS проект, от разработки до продаж - 14

Кстати, что особенно важно и круто — один из клиентов заказал не простые картинки, а их видео-варианты (помните, красивые гифки чуть выше?). Это значит, что идея валидирована и нам можно думать о том, как правильно ее продавать и масштабировать.

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

Заключение

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

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

Автор: mskvsk

Источник


  1. Tatiana:

    Здравствуйте! Интересно у вас все описано. Есть американская торговая площадка, которая существует с 2008 года, где можно тоже такие штучки продавать.
    http://www.tripleclicks.com/17739458/ECA
    Удачи!
    С уважением,
    Татьяна Глезер

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js