Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
c428e08
Localize email templates to Russian
talyguryn Dec 18, 2025
c78f40c
Update workers/email/src/templates/emails/assignee/html.twig
talyguryn Dec 18, 2025
34c089c
Update text.twig
talyguryn Dec 19, 2025
8b309ba
Update workers/email/src/templates/emails/sign-up/html.twig
talyguryn Dec 19, 2025
2133e94
Update text.twig
talyguryn Dec 19, 2025
640e525
Update workers/email/src/templates/emails/payment-failed/html.twig
talyguryn Dec 19, 2025
69c8702
Update workers/email/src/templates/emails/payment-success/html.twig
talyguryn Dec 19, 2025
05ff5b5
Update text.twig
talyguryn Dec 19, 2025
cb2d4da
Update workers/email/src/templates/emails/events-limit-almost-reached…
talyguryn Dec 19, 2025
cab4f71
Update wording in events limit notification emails
talyguryn Dec 19, 2025
5cbe119
Update assignee email templates wording
talyguryn Dec 19, 2025
10a6df7
Update subject.twig
talyguryn Dec 19, 2025
021a0ef
Update workers/email/src/templates/emails/days-limit-almost-reached/h…
talyguryn Dec 19, 2025
1e07a82
Refine event email templates formatting
talyguryn Dec 19, 2025
e24899a
Update event-info.twig
talyguryn Dec 19, 2025
5499a98
Update workers/email/src/templates/emails/days-limit-almost-reached/h…
talyguryn Dec 19, 2025
82813eb
Update text.twig
talyguryn Dec 19, 2025
e49b810
Update workers/email/src/templates/emails/days-limit-almost-reached/s…
talyguryn Dec 19, 2025
ceedd91
Merge branch 'feat/translate-all-emails' of https://github.com/codex-…
talyguryn Dec 19, 2025
0c42184
Update workers/email/src/templates/emails/event/text.twig
talyguryn Dec 19, 2025
aaad2d8
Improve event type and title display in email templates
talyguryn Dec 19, 2025
11a2a10
Merge branch 'feat/translate-all-emails' of https://github.com/codex-…
talyguryn Dec 19, 2025
621e95b
Update workers/email/src/templates/emails/events-limit-almost-reached…
talyguryn Dec 19, 2025
f451d31
Update text.twig
talyguryn Dec 19, 2025
1a490fe
Update event email templates button and link text
talyguryn Dec 19, 2025
6ecddb2
Update Russian email templates for events limit notice
talyguryn Dec 19, 2025
648642f
Update days-limit email templates with renewal info
talyguryn Dec 19, 2025
6eadbc2
Merge branch 'master' into feat/translate-all-emails
talyguryn Dec 19, 2025
87a3d3b
Update email templates branding and footer text
talyguryn Dec 19, 2025
364356b
Fix placement of plan suspension notice in email templates
talyguryn Dec 19, 2025
f59ac88
Unify unsubscribe text in email templates
talyguryn Dec 19, 2025
9b0a87a
Update Russian email templates wording and formatting
talyguryn Dec 19, 2025
88b1fcc
Prefill email in login link for sign-up email
talyguryn Dec 19, 2025
bbc499c
Update workers/email/src/templates/emails/assignee/html.twig
talyguryn Dec 19, 2025
1da23e9
Prefill email in sign-up email login link
talyguryn Dec 19, 2025
e0ec132
Simplify days-limit-almost-reached email templates
talyguryn Dec 19, 2025
32d212e
Update days-limit email templates with clearer renewal info
talyguryn Dec 19, 2025
b4d165d
Fix event type display when type is undefined in email templates
talyguryn Dec 19, 2025
94812b2
Refactor event type display in email templates
talyguryn Dec 19, 2025
03c0227
Update workspace invite subject variable name
talyguryn Dec 19, 2025
4b5fefa
Remove duplicate event title block in email template
talyguryn Dec 19, 2025
04db419
Update html.twig
talyguryn Dec 19, 2025
6d40fd0
fix some styles
neSpecc Dec 19, 2025
37d224d
Update backtrace.twig
neSpecc Dec 19, 2025
799a2d9
Update event-info.twig
neSpecc Dec 19, 2025
5c42dfd
few more fixes
neSpecc Dec 19, 2025
4610867
Update backtrace.twig
neSpecc Dec 19, 2025
e3873b0
Update subject.twig
neSpecc Dec 20, 2025
29adaa6
Add environment prefix to email sender name
neSpecc Dec 20, 2025
2225058
Revert "Add environment prefix to email sender name"
neSpecc Dec 21, 2025
057d01c
Add user email to sign-up email template variables
talyguryn Dec 21, 2025
d8e1841
Update backtrace.twig
neSpecc Dec 23, 2025
a2949f7
move nobr outside or pre
neSpecc Dec 23, 2025
4c394d9
fix typo
neSpecc Dec 23, 2025
e4b5f18
remove nobr
neSpecc Dec 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions workers/email/scripts/emailOverview.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,16 @@ class EmailTestServer {
period: 10,
reason: 'error on the payment server side',
daysAfterPayday: countDaysAfterPayday(workspace.lastChargeDate, workspace.paidUntil),
daysAfterBlock: 5,
daysLeft: 3,
eventsCount: workspace.billingPeriodEventsCount,
eventsLimit: 100000,
tariffPlanId: '5f47f031ff71510040f433c1',
password: '1as2eadd321a3cDf',
plan: {
name: 'Корпоративный'
},
workspaceName: workspace.name,
};

try {
Expand Down
5 changes: 1 addition & 4 deletions workers/email/src/templates/components/backtrace.twig
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,7 @@
</div>
</td>
<td style="border-top-right-radius: 6px;border-top-left-radius: 0;border-bottom-right-radius: 6px;border-bottom-left-radius: 0; background-color: {{ frame.line == backtrace.line ? 'rgba(149, 61, 135, 0.3);' : 'unset' }}">
<div style="padding-top: 0;padding-right: 10px;margin-left: 20px;padding-bottom: 0; overflow: auto">
<font color="#969FB3"
style="font-size: 12px; line-height: 1.75; color: #969FB3; white-space: pre; text-overflow: clip">{{ frame.content | escape }}</font>
</div>
<pre style="margin: 0;padding-top: 0;padding-right: 10px;margin-left: 20px;padding-bottom: 0; overflow: auto"><font color="#969FB3" style="font-size: 12px; line-height: 1.75; color: #969FB3; white-space: nowrap; text-overflow: clip">{{ frame.content | escape }}</font></pre>
</td>
</tr>
{% endfor %}
Expand Down
4 changes: 2 additions & 2 deletions workers/email/src/templates/components/button.twig
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<a href="{{ href }}" style="text-decoration: none">
<div style="padding-top: 12px;padding-right: 0;padding-left: 0;padding-bottom: 12px;background-color: #4979e4; border-radius: 4px; text-align: center">
<font color="#dbe6ff"
style="font-size: 14.4px; font-weight: 500; color: #dbe6ff;">
{{ label }}
style="font-size: 14.4px; color: #dbe6ff;">
<b>{{ label }}</b>
</font>
</div>
</a>
8 changes: 4 additions & 4 deletions workers/email/src/templates/components/event-info.twig
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,31 @@
<div style="display: inline-block; padding: 0 9px; border-radius: 16px; background-color: #4979e4; text-align: center; margin-bottom: 5px; margin-right: 10px;">
<font color="#dbe6ff" style="font-size: 12px; line-height: 20px; font-weight: 500; letter-spacing: -0.09px; color: #dbe6ff;">
<nobr>
{{ event.newCount | abbrNumber }}&nbsp;new
{{ event.newCount | abbrNumber }}&nbsp;{{ pluralize_ru(event.newCount, ['новое', 'новых', 'новых']) }}
</nobr>
</font>
</div>
{% endif %}
{% if event.event.totalCount is not empty %}
<font color="#969FB3" style="font-size: 12px; line-height: 20px;letter-spacing: 0.17px;text-align: center; color: #969FB3;">
<nobr>
{{ event.event.totalCount | abbrNumber }}&nbsp;total
{{ event.event.totalCount | abbrNumber }}&nbsp;всего
</nobr>
</font>
&nbsp;&nbsp;
{% endif %}
{% if event.daysRepeated is not empty %}
<font color="#969FB3" style="font-size: 12px; line-height: 20px; letter-spacing: 0.17px;text-align: center; color: #969FB3;">
<nobr>
{{ event.daysRepeated }}&nbsp;days&nbsp;repeating
{{ event.daysRepeated }}&nbsp;{{ pluralize_ru(event.daysRepeated, ['день', 'дня', 'дней']) }}
</nobr>
</font>
&nbsp;&nbsp;
{% endif %}
{% if event.usersAffected %}
<font color="#969FB3" style="font-size: 12px; line-height: 20px; letter-spacing: 0.17px;text-align: center; color: #969FB3;">
<nobr>
{{ event.usersAffected }}&nbsp;users&nbsp;affected
{{ event.usersAffected }}&nbsp;{{ pluralize_ru(event.usersAffected, ['пользователь', 'пользователя', 'пользователей']) }}
</nobr>
</font>
{% endif %}
Expand Down
4 changes: 2 additions & 2 deletions workers/email/src/templates/components/event.twig
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<tr>
<td style="display: block; padding-top: 20px; padding-right: 20px; padding-bottom: 20px; padding-left: 20px; margin-bottom: 60px; border-width: 1px; border-color: #494f5e; border-style: solid; border-radius: 10px; color: #dbe6ff; text-decoration: none;">
<td style="display: block; padding-top: 13px; padding-right: 20px; padding-bottom: 13px; padding-left: 20px; margin-bottom: 60px; border-width: 1px; border-color: #494f5e; border-style: solid; border-radius: 10px; color: #dbe6ff; text-decoration: none;">
<font color="#dbe6ff" style="font-size: 15px; letter-spacing: 0.4px; pointer-events: none;">
<span style="display: block; padding-bottom: 15px;">
{{ event.payload.title | escape }}
</span>
</font>
{% include './event-info.twig' with {event: { daysRepeated: daysRepeated, event: {totalCount: event.totalCount}, usersAffected: event.usersAffected}} %}
</td>
</tr>
</tr>
12 changes: 1 addition & 11 deletions workers/email/src/templates/components/layout.twig
Original file line number Diff line number Diff line change
Expand Up @@ -152,17 +152,7 @@
<td style="text-align: center">
<font color="#969FB3"
style="font-size: 13px; line-height: 1.46; letter-spacing: 0.16px; color: #969FB3;">
Российский трекер ошибок
</font>
</td>
</tr>
<tr>
<td style="padding-top: 30px; text-align: center">
<font color="#969FB3"
style="font-size: 13px; line-height: 1.46; letter-spacing: 0.16px; color: #969FB3;">
Made by
<a href="https://codex.so"
style="color: inherit !important; text-decoration: none;">CodeX</a>
Мониторинг ошибок
</font>
</td>
</tr>
Expand Down
8 changes: 3 additions & 5 deletions workers/email/src/templates/emails/assignee/html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
{% else %}
{{ whoAssigned.email }}
{% endif %}
assigned you to resolve the event
назначил вас ответственным за исправление ошибки
</span>
</font>
</td>
Expand All @@ -28,7 +28,7 @@
<tr>
<td style="padding-right: 20px;padding-left: 20px;padding-bottom: 40px;">
{% set url = host ~ '/project/' ~ project._id ~ '/event/' ~ event._id ~ '/overview' %}
{% include '../../components/button.twig' with {href: url, label: 'View event'} %}
{% include '../../components/button.twig' with {href: url, label: 'Смотреть событие'} %}
</td>
</tr>

Expand All @@ -39,7 +39,5 @@
{% endblock %}

{% block unsubscribeText %}
You received this email because you are currently opted in to receive such alerts via your
personal notifications settings. You may adjust your preferences at any time by clicking
the link above.
Вы получили это письмо, потому что подписаны на подобные уведомления. Вы можете изменить настройки, перейдя по ссылке выше.
{% endblock %}
2 changes: 1 addition & 1 deletion workers/email/src/templates/emails/assignee/subject.twig
Original file line number Diff line number Diff line change
@@ -1 +1 @@
You're assigned: ({{ project.name | escape }}) {{ event.payload.title }}
Вы были назначены ответственным за фикс «{{ event.payload.title }}» — {{ project.name | escape }}
18 changes: 9 additions & 9 deletions workers/email/src/templates/emails/assignee/text.twig
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
{% if whoAssigned.name %}{{ whoAssigned.name | escape }}{% else %}{{ whoAssigned.email }}{% endif %} assigned you to resolve the event
{% if whoAssigned.name %}{{ whoAssigned.name | escape }}{% else %}{{ whoAssigned.email }}{% endif %} назначил вас ответственным за исправление ошибки в проекте «{{ project.name | escape }}»

{{ event.payload.title }}

{{ event.totalCount }} total
{{ daysRepeated }} {% if daysRepeated == 1 %}day{% else %}days{% endif %} repeating
{{ event.usersAffected }} {% if event.usersAffected == 1 %}user{% else %}users{% endif %} affected
{{ event.totalCount }} {{ pluralize_ru(event.totalCount, ['раз', 'раза', 'раз']) }}
{{ daysRepeated }} {{ pluralize_ru(daysRepeated, ['день', 'дня', 'дней']) }} повторяется
{{ event.usersAffected }} {{ pluralize_ru(event.usersAffected, ['пользователь', 'пользователя', 'пользователей']) }} затронуто

View event: {{ host }}/project/{{ project._id }}/event/{{ event._id }}/overview
Смотреть событие: {{ host }}/project/{{ project._id }}/event/{{ event._id }}/overview

***

You received this email because you are currently opted in to receive such alerts via your personal notifications settings. You may adjust your preferences at any time by clicking the link: {{ host }}/account/notifications
Вы получили это письмо, потому что подписаны на подобные уведомления. Вы можете изменить настройки, перейдя по ссылке: {{ host }}/account/notifications

Hawk
Errors tracking system
***

Made by CodeX
Хоук
Мониторинг ошибок
10 changes: 8 additions & 2 deletions workers/email/src/templates/emails/block-workspace/html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<td align="center" style="padding: 15px 0;">
<font color="#dbe6ff" style="font-size: 15px; text-align: center; color: #dbe6ff; letter-spacing: 0.4px;">
<span style="vertical-align: middle; display: inline-block;">
«{{ workspace.name | escape }}» не принимает события
«{{ workspace.name | escape }}» не видит новые ошибки
</span>
</font>
</td>
Expand All @@ -33,7 +33,13 @@
</tr>
<tr>
<td style="padding-right: 20px; padding-left: 20px; padding-bottom: 40px;">
{% include '../../components/button.twig' with {href: host ~ '/workspace/' ~ workspace._id ~ '/settings/billing', label: workspace.tariffPlanId is same as('5f47f031ff71510040f433c1') ? 'Увеличить лимит от 99 ₽' : 'Открыть настройки'} %}
{% set tariffPlanIdString = workspace.tariffPlanId ~ '' %}
{% if tariffPlanIdString == '5f47f031ff71510040f433c1' %}
{% set buttonLabel = 'Увеличить лимит от 99 ₽' %}
{% else %}
{% set buttonLabel = 'Открыть настройки' %}
{% endif %}
{% include '../../components/button.twig' with {href: host ~ '/workspace/' ~ workspace._id ~ '/settings/billing', label: buttonLabel} %}
</td>
</tr>
{% endblock %}
4 changes: 1 addition & 3 deletions workers/email/src/templates/emails/block-workspace/text.twig
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,4 @@
***

Хоук
Российский трекер ошибок

Made by CodeX
Мониторинг ошибок
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,13 @@
</tr>
<tr>
<td style="padding-right: 20px; padding-left: 20px; padding-bottom: 40px;">
{% include '../../components/button.twig' with {href: host ~ '/workspace/' ~ workspace._id ~ '/settings/billing', label: workspace.tariffPlanId is same as('5f47f031ff71510040f433c1') ? 'Выбрать тариф от 99 ₽' : 'Открыть настройки'} %}
{% set tariffPlanIdString = workspace.tariffPlanId ~ '' %}
{% if tariffPlanIdString == '5f47f031ff71510040f433c1' %}
{% set buttonLabel = 'Выбрать тариф от 99 ₽' %}
{% else %}
{% set buttonLabel = 'Открыть настройки' %}
{% endif %}
{% include '../../components/button.twig' with {href: host ~ '/workspace/' ~ workspace._id ~ '/settings/billing', label: buttonLabel} %}
</td>
</tr>
{% endblock %}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,4 @@
***

Хоук
Российский трекер ошибок

Made by CodeX
Мониторинг ошибок
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,24 @@
<td align="center" style="padding: 15px 0;">
<font color="#dbe6ff" style="font-size: 15px; text-align: center; color: #dbe6ff; letter-spacing: 0.4px;">
<span style="vertical-align: middle; display: inline-block;">
{{ daysLeft | escape }} day{{ daysLeft > 1 ? 's' : '' }} left to the paid plan ending
Осталось {{ daysLeft | escape }} {{ pluralize_ru(daysLeft, ['день', 'дня', 'дней']) }} до окончания подписки на мониторинг ошибок.
</span>
</font>
</td>
</tr>
<tr>
<td style="display: block; padding: 20px; margin-bottom: 30px; border-width: 1px; border-color: #494f5e; border-style: solid; border-radius: 10px; line-height: 1.47">
<font color="#dbe6ff" style="font-size: 15px; letter-spacing: 0.4px;">
Please, make sure that you have linked a card as a payment method for the workspace "{{ workspace.name | escape }}".
Otherwise it will be blocked because the plan was not renewed.
Привяжите карту для автоматического продления тарифа в воркспейсе «{{ workspace.name | escape }}». Или оплатите следующий месяц разово.<br>
<br>
Если план не продлить, то мониторинг ошибок будет приостановлен.
<br>
</font>
</td>
</tr>
<tr>
<td style="padding-right: 20px; padding-left: 20px; padding-bottom: 40px;">
{% include '../../components/button.twig' with {href: host ~ '/workspace/' ~ workspace._id ~ '/settings/billing', label: 'Go to payment settings'} %}
{% include '../../components/button.twig' with {href: host ~ '/workspace/' ~ workspace._id ~ '/settings/billing', label: 'Перейти к настройкам'} %}
</td>
</tr>
{% endblock %}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{{ daysLeft | escape }} day{{ daysLeft > 1 ? 's' : '' }} left to the paid plan ending for workspace {{ workspace.name | escape }}!
Через {{ daysLeft | escape }} {{ pluralize_ru(daysLeft, ['день', 'дня', 'дней']) }} заканчивается подписка воркспейса «{{ workspace.name | escape }}» на мониторинг ошибок!
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
{{ daysLeft | escape }} day{{ daysLeft > 1 ? 's' : '' }} left to the paid plan ending for workspace {{ workspace.name | escape }}.
{{ daysLeft | escape }} {{ pluralize_ru(daysLeft, ['день', 'дня', 'дней']) }} до окончания платного тарифа воркспейса «{{ workspace.name | escape }}».

Please, check payment settings and renew the plan: {{ host }}/workspace/{{ workspace._id }}/settings/billing
Привяжите карту для автоматического продления тарифа в воркспейсе «{{ workspace.name | escape }}». Или оплатите следующий месяц разово.

***
Если план не продлить, то мониторинг ошибок будет приостановлен.

Перейти к настройкам оплаты: {{ host }}/workspace/{{ workspace._id }}/settings/billing

Hawk
Errors tracking system
***

Made by CodeX
Хоук
Мониторинг ошибок
14 changes: 8 additions & 6 deletions workers/email/src/templates/emails/event/html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,18 @@
<font color="#969FB3" style="font-size: 14px; text-align: center; color: #969FB3; letter-spacing: 0.2px;">
<img src="{{ hostOfStatic }}/email/event-badge-icon.png" width="8" height="14" hspace="3" style="vertical-align: middle">
<span style="vertical-align: middle; display: inline-block;">
{{ event.payload.type ? event.payload.type : 'Uncaught Error' }}
{% if event.payload.type %}
{{ event.payload.type }}
{% else %}
Ошибка
{% endif %}
</span>
</font>
</td>
</tr>
<tr>
<td>
<div class="event-title-block" style="padding: 20px; border-width: 1px; border-style: solid; border-color: #494F5E; border-radius: 10px;">
<div class="event-title-block" style="padding-top: 13px; padding-bottom: 13px; padding-left: 20px; padding-right: 20px; border-width: 1px; border-style: solid; border-color: #494F5E; border-radius: 10px;">
<font class="event-title-block__font" color="#dbe6ff" style="font-size: 15px; line-height: 1.47; letter-spacing: 0.4px; color: #dbe6ff; text-decoration: none;">
{{ event.payload.title | escape }}
</font>
Expand Down Expand Up @@ -52,7 +56,7 @@
<tr>
<td style="padding-top: 30px;padding-right: 20px;padding-left: 20px;padding-bottom: 40px;">
{% set eventURL = host ~ '/project/' ~ project._id ~ '/event/' ~ event._id %}
{% include '../../components/button.twig' with {href: eventURL, label: 'View event'} %}
{% include '../../components/button.twig' with {href: eventURL, label: 'Смотреть детали'} %}
</td>
</tr>
{% endblock %}
Expand All @@ -62,7 +66,5 @@
{% endblock %}

{% block unsubscribeText %}
You received this email because you are currently opted in to receive such alerts via your
project’s notifications settings. You may adjust your preferences at any time by clicking
the link above.
Вы получили это письмо, потому что подписаны на подобные уведомления. Вы можете изменить настройки, перейдя по ссылке выше.
{% endblock %}
27 changes: 11 additions & 16 deletions workers/email/src/templates/emails/event/text.twig
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
{% set daysRepeated = events[0].daysRepeated %}
{% set newCount = events[0].newCount %}
{% set usersAffected = events[0].usersAffected %}
{% set newLabel = 'a new event' %}
{% if newCount > 1 %}
{% set newLabel = newCount ~ ' new events' %}
{% set newLabel = newCount ~ ' ' ~ pluralize_ru(newCount, ['новое событие', 'новых события', 'новых событий']) %}
{% if newCount == 1 %}
{# Оставить как есть #}
{% endif %}

You have {{ newLabel }} on «{{ project.name }}» project.
{{ newLabel }} в проекте «{{ project.name }}»

------------------------
{{ event.payload.type ? event.payload.type : 'Uncaught Error' }}: {{ event.payload.title | escape }}
{% if event.payload.type %}{{ event.payload.type }}: {% endif %}{{ event.payload.title | escape }}
------------------------
{% if event.payload.backtrace is not empty %}
{% if event.payload.backtrace[0] is not empty %}
Expand All @@ -21,20 +21,15 @@ You have {{ newLabel }} on «{{ project.name }}» project.
{% endif %}
{% endif %}

This event appears {{ event.totalCount }} total times, {{ daysRepeated }} days repeating.
Это событие произошло {{ event.totalCount }} {{ pluralize_ru(event.totalCount, ['раз', 'раза', 'раз']) }} за {{ daysRepeated }} {{ pluralize_ru(daysRepeated, ['день', 'дня', 'дней']) }}.

View event: {{ host }}/project/{{ project._id }}/event/{{ event._id }}
Смотреть детали: {{ host }}/project/{{ project._id }}/event/{{ event._id }}

***

You received this email because you are currently opted in to receive such alerts via your project’s notifications settings. You may adjust your preferences at any time by clicking the link above. To unsubscribe, follow the link: {{ host }}/unsubscribe/{{ project._id }}

Hawk
Errors tracking system

Made by CodeX



Вы получили это письмо, потому что подписаны на подобные уведомления. Вы можете изменить настройки, перейдя по ссылке: {{ host }}/unsubscribe/{{ project._id }}

***

Хоук
Мониторинг ошибок
Loading
Loading