Бессерверные email рассылки на Python, SQL и Markdown

Мотивация

А теперь представьте себе следующее:

Что такое Mailgit?

Кому подойдёт этот продукт?

Далее можете перейти сразу к сути предложения, или ознакомиться с возможностями системы.

Возможности

Реализованные типы рассылок

Broadcast и Sequence умеют таргетироваться только на весь список рассылки, дополнительные сегменты можно реализовать путём написания YQL запросов.

Возможна реализация других типов событий.

Реализованные email провайдеры

Консольная админка

Есть минималистичная админка на базе Textual работающая прямо в терминале:

Консольная админка

Журнал отправленных писем

Позволяет просматривать text и html версии отправленных писем:

Просмотр письма

Пуш уведомления

Получайте пуш уведомления через Pushover или ntfy когда кто-то подписывается или отписывается:

Пуш уведомление

Отслеживание ссылок

Любые ссылки в тексте письма можно обернуть в отслеживающий тег:

{{ track_link("https://mailgit.app") }}

При клике на такой ссылке будет сформировано событие, на основании которого можно создать сегмент или триггерную рассылку.

Топики рассылок

Помимо обычного статуса подписки (да/нет) есть поддержка opt-in и opt-out топиков (тем), позволяющих подписчикам более гибко управлять тем что им интересно получать:

Подписаться на [{{ get_topic("promotion").name }}]({{ topic_subscribe_link("promotion") }}), чтобы узнать больше по этой теме.

Отписаться от [{{ topic.name }}]({{ topic_unsubscribe_link(topic) }}), но продолжить получать обычную рассылку.

Кроме того, есть понятие транзакционных топиков для важных рассылок от которых нельзя отписаться.

Произвольные атрибуты подписчиков

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

Технические детали

Архитектура

Используемые сервисы Yandex Cloud

Сервисы Yandex Cloud

Размер кодовой базы

Количество строк кода сравнительно небольшое:

─────────────────────────────────────────────────
Language                 Files     Lines   Blanks
─────────────────────────────────────────────────
Python                      37      5496      368
HTML                        20      1216       45
Terraform                   13      1443      172
Markdown                     7       184       40
YAML                         3       277        4
Autoconf                     1        13        0
CSS                          1        11        1
Plain Text                   1       105        0
SQL                          1        66        4
gitignore                    1        28        5
─────────────────────────────────────────────────
Total                       85      8839      639
─────────────────────────────────────────────────
Estimated Cost to Develop (organic) $241 746
Estimated Schedule Effort (organic) 8,02 months
Estimated People Required (organic) 2,68
─────────────────────────────────────────────────

Ограничения

Предложение

Оферта пока не планируется, поэтому вот краткие тезисы:

Как выглядит процесс получения продукта: