Второй проект, который мы запустили в рамках челленджа — это браузерное расширение для скачивание писем из Gmail в PDF. В этой статье я расскажу про то, как мы нашли идею, разработали продукт и бесплатно привлекли 896 установок за 3 месяца.

Привет! Я Антон Георгиев. Работаю Frontend-разработчиком, а после работы делаю свои пет-проекты. Мы с другом решили запустить 12 стартапов за 12 месяцев. Про наш первый проект читайте в этой статье.
Эта история про наш 2-й продукт из 12. Весь путь от идеи до запуска мы прошли за 1 месяц. А первых 100 пользователей мы привлекли уже через 2 недели, не потратив ни копейки на маркетинг. Вот результаты за 90 дней жизни продукта Save Emails from Gmail as PDF:

Выбор идеи
Идея возникла довольно просто. Мы изучали рынок расширений для Google Chrome, перебирали разные направления, пока не наткнулись на нишу плагинов для Gmail. Заинтересовались, начали глубже копать и нашли компанию CloudHQ, которая делает исключительно расширения для работы с сервисами Google.
Мы нашли все их расширения и отсортировали по самым популярным. Среди топ-5 их расширений был продукт «Save Emails as PDF», у которого было 100 000 пользователей. Это функция сохранения писем и вложений из Gmail в формате PDF. Можно выделить сразу несколько писем, нажать кнопку экспорт и все письма вместе с файлами, картинками, видосиками и документами сохраняются на компьютер.
Я сразу вспомнил личный опыт. Однажды мне нужно было выгрузить около 50 писем, чтобы заверить переписку у нотариуса. Делать это вручную, особенно с вложениями, оказалось неудобно и заняло несколько часов.
Мы проверили спрос по ключевым словам в поиске и изучили обсуждения на Reddit. Оказалось, у многих такая же проблема. Пользователи ищут способы массово сохранять письма из Gmail в PDF.

Так родилась идея создать простое расширение, которое одним кликом формирует PDF-документ со всеми выбранными письмами и вложениями.
Разработка
Разработка оказалась непростой. Сначала я изучил множество библиотек для конвертации HTML в PDF и JPEG в PDF на фронтенде, но большинство из них были устаревшими и плохо справлялись с задачей. Я рассматривал вариант делать обработку на backend. Просто отправлять туда HTML или URL и генерировать PDF на сервере. Но быстро понял, что это небезопасно. Важно было избежать пересылки и хранения личных данных.
В итоге я решил реализовать всё полностью на frontend. Чтобы разобраться, как это лучше сделать, я даже скачал исходники расширения одного из конкурентов. Посмотрел, как все устроено у них. Понял, что идея собирать PDF из HTML с помощью JavaScript, вполне рабочая. Это позволило сохранить верстку писем и оставить текст выделяемым.
Самой сложной проблемой была «плавающая» верстка. Элементы постоянно смещались, ломались стили. После множества экспериментов мне удалось подобрать оптимальное решение. Сейчас большинство писем и вложений отображаются корректно.
Весь контент в PDF (текст, изображения, линии) позиционируется вручную по координатам x, y. Для этого используется библиотека jsPDF.
Логика работы:
Обработка DOM-дерева.
Я прохожу по каждому узлу DOM, получаю размеры и стили элементов через:
node.getBoundingClientRect()
— размеры и положение элемента на экране.
window.getComputedStyle()
— CSS-стили (шрифты, цвета, границы).
Элементы добавляются в PDF, используя методы jsPDF.
Для текста:
doc.text(value, x, y);
Для изображений:
doc.addImage(imageData, 'PNG', x, y, width, height);
Для линий (границ элементов):
doc.line(x1, y1, x2, y2);
— значения x, y здесь - это абсолютные координаты относительно текущей страницы PDF.
Я выделил несколько особенностей:
Каждая страница PDF имеет фиксированный размер (например, Letter — 612x792 pt).
Чтобы текст и изображения не упирались в края, я использую padding. Всё содержимое размещается внутри страницы, ограниченной отступами.
Если элемент не помещается в оставшееся пространство текущей страницы, то я вставляю невидимые элементы-заполнители (fake-объекты), чтобы автоматически переместить контент на следующую страницу. Из-за этого на странице бывают пустоты.
Загрузка вложений и изображений
Сначала я простым селектором “.att a” нахожу все ссылки на вложения и изображения из письма, а потом скачиваю их. Данные загружаются в виде Blob, затем преобразуются в DataURL с помощью FileReader. SVG конвертируется в PNG при помощи библиотеки Canvg, чтобы затем вставить в PDF:
const v = await Canvg.fromString(ctx, svgText);
await v.render();
const pngDataUrl = canvas.toDataURL('image/png');
const img = document.createElement('img');
img.dataset.fileName = fileName;
img.src = pngDataUrl;
// Вычисляем коэффициент масштабирования:
// Если изображение больше доступного пространства, то scale < 1, иначе scale === 1 (не увеличиваем)
const scale = Math.min(1, availableWidth / origWidth, availableHeight / origHeight);
const renderWidth = origWidth scale;
const renderHeight = origHeight scale;
img.style.width = renderWidth + 'px';
img.style.height = renderHeight + 'px';
Изображения масштабируются так, чтобы вписаться в доступную область страницы без искажений.
Заполнение fake-объектами и перенос контента
Если масштабированное изображение не помещается в оставшееся пространство на текущей странице, я вставляю fake-объекты (пустые HTML-элементы), которые сдвигают контент на следующую страницу.
Логика вставки fake-объекта:
function addFakeElement(rect, element, pageHeight, padding) {
const effectivePageHeight = pageHeight - padding;
const finalTop = rect.top % effectivePageHeight;
const availableSpace = pageHeight - padding / 2 - finalTop;
if (rect.height > availableSpace) {
const filler = document.createElement('div');
filler.style.setProperty('display', 'block', 'important');
filler.style.setProperty('padding-top', availableSpace + 'px', 'important');
filler.style.setProperty('width', '100%', 'important');
element.parentNode.insertBefore(filler, element);
}
}
Как это работает
Я рассчитываю, сколько свободного места осталось до конца текущей страницы (availableSpace).
Если высота текущего элемента (например, изображения) больше, чем свободное место, перед ним вставляется пустой элемент-заполнитель с нужной высотой (padding-top).
Этот заполнитель «толкает» следующий элемент вниз, автоматически перемещая его на следующую страницу PDF.
Этот подход обеспечивает предсказуемое расположение изображений и вложений в PDF-документе, несмотря на сложности, связанные с разметкой и размерами исходных данных из Gmail.
Дизайн и лендинг
Дизайн интерфейса, иконки и изображения для Chrome Store мы сделали на основе конкурентов. Главной задачей было сделать яркую иконку и привлекательную картинку для превью, которая выводится в результатах поиска и в блоке рекомендаций.

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

Сделали простой лендинг на Google Sites. Быстро и самое главное бесплатно. Вот что получилось - https://sites.google.com/view/email-to-pdf/. Наша цель — привязать сайт в форме публикации расширения, чтобы получить статус «Verified publisher». Также лендинг позволяет нам поставить ссылку на страницу расширения, чтобы передать немного веса для SEO.
SEO и локализация
Для оптимизации страницы расширения под поисковые запросы нам нужно было найти ключевые слова, которые люди вводят в Google, когда ищут способы сохранения или конвертации писем из Gmail в PDF. Мы проанализировали конкурентов, Google Trends, сервис WordStream и составили список ключевых слов.

Ключевые слова с самым высоким спросом мы использовали в названии расширения, а остальные вписывали в описание. В генерации описания на английском языке нам помогал DeepSeek.
Мы составили промт, с помощью которого получили уникальный текст с вписанными ключевыми словами и с учетом функций расширения. За основу брали тексты конкурентов. Вот такой промт у нас получился:
Представь себя в роли копирайтера, SEO-специалиста и носителя английского языка. Напиши описание для браузерного расширения, которое сохраняет e-mail письма из Gmail как PDF файлы.
Функции моего расширения:
- Сохранение 1 письма или всей истории переписки
- Сохранение облегченной версии письма без картинок и без вложений
- Сохранение полной версии письма с картинками и с вложениями. Картинки и PDF-файлы из письма выводятся в экспортированном PDF-файле
- Сохранение нескольких выделенных писем. Сохранение до 50 выделенных писем с 1 страницы.
- Выбор формата экспортируемого файлы: A0-A8, Letter, Legal
Проанализируй описания конкурентов моего расширения ниже, объедини их в 1 самый подробный текст, который включает в себя смыслы и факты из всех текстов написанных ниже.
Используй в тексте следующие ключевые слова для SEO, не нарушая грамматику:
Ключевые слова:
[Тут список ключевых слов]
-----
Описание конкурента 1:
[Тут текст 1]
-----
Описание конкурента 2:
[Тут текст 2]
После нескольких итераций правок в DeepSeek мы получили практический готовый текст. Немного подредактировали его вручную и довели вхождения ключевых слов в нужном количестве.
Затем мы перевели описание и интерфейс расширения на 55 языков с помощью API ChatGPT. Так мы получаем более широкий охват потенциальных пользователей за счет языковых версий страницы расширения.
Бесплатный маркетинг
Мы попросили друзей оставить первые отзывы, чтобы повысить доверие пользователей и получить звездочки рейтинга. На этом этапе расширение было полностью упаковано.
Далее мы подали заявку на фичеринг. Про то как получить статус «Featured» я писал в предыдущем посте. Это позволило увеличить показы расширения в Chrome Store.

Для привлечения первых пользователей в наши продукты, мы активно используем бесплатные площадки и SEO.
Мы разместили ссылки на UGC-площадках: ProductRadar, ProductHunt, VC, Reddit, Quora, Stackoverflow, Github, Medium, Dev.to, indiehackers.com. Это дало немного новых установок, но в большей степени ссылки увеличивают вес для SEO в Google.
Пример размещения на Reddit:

Пример размещения на Dev.to:

Запуск на ProductHunt

Запуск на ProductRadar

Результаты
Что мы имеем за 3 месяца:
896 установок.
696 активных пользователей в неделю.
Получили статус «Featured» в Chrome Store ?.
Получили обратную связь от пользователей, поправили баги и залили уже 3-ю версию.
Самая большая доля по странам — это пользователи из США, Сербии и Индии. А основные источники трафика — Chrome Store (попадает в Direct и Unassigned) и поиск Google. Это органический трафик, который позволяет протестировать продукт без вложений в маркетинг.

Сколько мы вложили
Разработка — $0 и 4 недели своего времени.
Маркетинг — $0 и 1 неделя на SEO и контент-маркетинг.
Выводы и планы
Наш опыт подтвердил, что даже небольшие инструменты для повседневных задач могут найти свою аудиторию. А востребованный продукт можно создать с нулевым бюджетом, если выявить потребность, проанализировать конкурентов и грамотно применить SEO.
В планах:
Добавить новые функции: загрузка в Google Drive, объединение нескольких писем в 1 PDF.
Улучшить конвертацию. Чтобы корректно сохранять сложные письма с нестандартной версткой.
Протестировать платную версию.
Эксперименты с контентом и новыми каналами трафика.
Заходите к нам в Телеграм-канал «Инди-хакеры: стартапы из ? и ?» и следите за нашим челленджем «12 проектов за 12 месяцев».
Kahelman
Это не стартап. Это хобби. Какая стратегия монетизации? Пока у вас нет ни одного пользователя который бы хоть - евро/доллар заплатил.
gsaw
Можно продать расширение какому ни будь скаммеру. :)
Я вообще браузерными расширениями боюсь пользоваться, тем более давать им доступ к приватным маилам или вообще google account-у. Уж слишком на него много завязано. И платить не собираюсь.
Считаю, что эти 300 пользователей из тех, кто скачивает все, что им предложат.
ghoster Автор
Если бы вы изучили продукт, то поняли бы что все выполняется локально на компьютере пользователя, ваши письма никому не пересылаются
Qargwic
А как это понять можно? Если будет подписка, значит в манифесте для запросов есть сайты помимо почты. А как понять, что по нему отправляется?
ghoster Автор
Сделать анализ запросов
FifthLeg
А потом гостер обновление выпустил, оно накотилось и ата-та.
И зловредный код активировался через три дня после обновления, чтобы параноики пару дней запросы проанализировали.
В бульоны расширения. Только самописные, опенсоурсные с установкой в дев режиме или те у кого 10 мил пользователей.