Serverless email campaigns as Python code, SQL and Markdown

Motivation

Now imagine the following:

What is Mailgit?

Who is this product for?

Next, you can jump straight to the offer or read about the system’s capabilities.

Capabilities

Available campaign types

Broadcast and Sequence can target the entire mailing list only. Additional segments can be implemented by writing YQL queries.

Other types of events can be implemented.

Available email providers

Console-based admin tool

There is a minimalistic admin UI written with Textual that works in a terminal:

Terminal-based UI

Sent messages log

View plain text and HTML versions of sent email messages:

View email message

Push notifications

Get push notifications via Pushover or ntfy when someone subscribes or unsubscribes to your mailing list:

Push notification

Any links in an email body can be wrapped in a tracking tag:

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

Clicking on such a link will generate an event, based on which a segment or trigger campaign can be created.

Subscription topics

In addition to the usual subscription status (yes/no), there is support for opt-in and opt-out topics, allowing subscribers to more flexibly manage what they are interested in receiving:

Subscribe to [{{ get_topic("promotion").name }}]({{ topic_subscribe_link("promotion") }}) topic if you want to hear more

Unsubscribe from [{{ topic.name }}]({{ topic_unsubscribe_link(topic) }}) topic, but continue receiving regular emails

There is also the concept of transactional topics for important messages that cannot be unsubscribed from.

Custom subscriber attributes

You can define your own Pydantic class with an arbitrary set of subscriber properties to use for segmentation.

Technical details

Architecture

List of Yandex Cloud services used

Yandex Cloud Services

Codebase stats

The amount of code is quite small:

─────────────────────────────────────────────────
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
─────────────────────────────────────────────────

Limitations

The offer

There is no formal offer yet, so here are some bullet points:

Here’s how the process of obtaining the product will look like: