Мое путешествие по созданию побочного проекта, приносящего пассивный доход

Здравствуйте, я хочу поделиться своей историей о том, как я создал свой побочный проект html2pdf.app. Из названия домена видно, что это API преобразования HTML в PDF.

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

Я решил сделать что-то для очень специфической ниши, чтобы избежать высокой конкуренции и где у меня есть некоторый опыт. Так я пришел к идее, что отличным вариантом для начала будет онлайн-сервис конвертации HTML в PDF по API.

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

Как я начинал

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

Будучи разработчиком PHP в течение долгого времени, я также имел опыт работы с JavaScript, и в то время фреймворк NodeJS был довольно интересен для меня. Кроме того, я знал, что существует движок Headless Chrome, который очень удобно использовать с библиотекой Puppeteer.

Я заметил, что при использовании Headless Chrome конвертированные PDF-файлы получаются высокого качества и довольно похожи на HTML. Я понял, что у Headless Chrome есть мощь, и я должен ее использовать!

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

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

Технологический стек

Это технологии, которые я решил использовать. Единственное, что я бы изменил, это, возможно, выбор golang вместо NodeJS.

  • NodeJS/TypeScript + фреймворки ExpressJS/NestJS;
  • Mysql для постоянного хранения данных;
  • MongoDB для хранения журналов конверсий;
  • Redis для кэширования;
  • RabbitMQ для асинхронных заданий и асинхронной коммуникации между микросервисами;

Также я интегрировал сторонние сервисы, такие как sentry, mailgun, stripe, mailerlite, которые очень полезны и облегчают жизнь разработчика.

Архитектура микросервисов

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

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

На диаграмме ниже показаны связи между микросервисами моего проекта.

Где взять клиентов?

Наконец, я запустил свой сервис совершенно бесплатно. Мой план состоял в том, чтобы получить новых клиентов и убедиться, что мой сервис кому-то полезен. И действительно, он был полезен, новые клиенты регистрировались, и я не знаю, как я оказался на первой странице поиска Google по ключевому слову «HTML to pdf API». Я также настроил Google AdWords, чтобы получить больше новых клиентов.

Первый платный клиент

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

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

В настоящее время у меня более 50 платящих клиентов, не так много, но все же это хорошее достижение для меня, приносящее пассивный доход.

Проблемы, с которыми я столкнулся

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

Я боролся с этим некоторое время и решил использовать TypeScript, поэтому переписал весь код на этом языке. Переписывание и настройка проекта для использования TypeScript заняли некоторое время, но оно того стоило.

Масштабируемость Headless Chrome и AWS Lambda

Еще одной проблемой, с которой я столкнулся, была масштабируемость, поскольку я использовал движок headless chrome, просто установленный непосредственно на сервер, на котором запускаются приложения.

Время от времени я замечал, что один экземпляр Headless Chrome иногда падал при большом количестве запросов. Поэтому после нескольких попыток решить эту проблему я решил попробовать функцию AWS Lambda, и результаты оказались ошеломляющими.

Она масштабируется автоматически и способна справляться с высокими нагрузками. Настройка работающей функции Lambda и библиотеки Puppeteer была немного сложной задачей, но я успешно справился с ней.

Заключение

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

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

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

Без сомнения, я узнал много нового и получил опыт, который не смог бы получить на работе, работая над обычными проектами.

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

Я чувствую, что расту как профессионал, узнавая новое и решая проблемы, одновременно делая свой проект лучше.

Это была моя история, надеюсь, вам понравилось ее читать. Если кому-то интересно узнать технические подробности, я с удовольствием отвечу в комментариях.

Оцените статью
Procodings.ru
Добавить комментарий