diff --git a/backend/apps/notifications/tasks.py b/backend/apps/notifications/tasks.py
index b78ee95..a7563dc 100644
--- a/backend/apps/notifications/tasks.py
+++ b/backend/apps/notifications/tasks.py
@@ -107,56 +107,274 @@ def send_email_notification(notification):
# Если шаблон не содержит body, используем дефолтный
if not email_body:
+ action_button = ''
+ if notification.action_url:
+ action_url = f"{settings.FRONTEND_URL}{notification.action_url}"
+ action_button = f'''
+
+ |
+
+ |
+
+ '''
+
email_body = f"""
-
-
-
-
{notification.title}
-
-
{notification.message}
-
- {f'
Перейти' if notification.action_url else ''}
-
- Это автоматическое уведомление от образовательной платформы.
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+ {notification.title}
+ |
+
+
+ |
+ {notification.message}
+ |
+
+ {action_button}
+
+ |
+
+
+
+
+
+ |
+ С уважением, Команда Uchill
+
+ © 2026 Uchill. Все права защищены.
+
+ |
+
+
+ |
+
+
+ |
+
+
+
"""
else:
# Если есть шаблон, оборачиваем его в базовую HTML структуру, если нужно
if not email_body.strip().startswith('
+
+
+ |
+
+ '''
+
email_body = f"""
-
-
-
- {email_body}
- {f'
Перейти' if notification.action_url else ''}
-
- Это автоматическое уведомление от образовательной платформы.
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+ |
+ {email_body}
+ |
+
+ {action_button}
+
+ |
+
+
+
+
+
+ |
+ С уважением, Команда Uchill
+
+ © 2026 Uchill. Все права защищены.
+
+ |
+
+
+ |
+
+
+ |
+
+
+
"""
except NotificationTemplate.DoesNotExist:
# Если шаблона нет, используем дефолтный
email_subject = notification.title
+
+ action_button = ''
+ if notification.action_url:
+ action_url = f"{settings.FRONTEND_URL}{notification.action_url}"
+ action_button = f'''
+
+ |
+
+ |
+
+ '''
+
email_body = f"""
-
-
-
-
{notification.title}
-
-
{notification.message}
-
- {f'
Перейти' if notification.action_url else ''}
-
- Это автоматическое уведомление от образовательной платформы.
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+ {notification.title}
+ |
+
+
+ |
+ {notification.message}
+ |
+
+ {action_button}
+
+ |
+
+
+
+
+
+ |
+ С уважением, Команда Uchill
+
+ © 2026 Uchill. Все права защищены.
+
+ |
+
+
+ |
+
+
+ |
+
+
+
"""
diff --git a/backend/apps/users/geo_data/cities_ru.json b/backend/apps/users/geo_data/cities_ru.json
index 74dfd70..9b98fa3 100644
--- a/backend/apps/users/geo_data/cities_ru.json
+++ b/backend/apps/users/geo_data/cities_ru.json
@@ -1,24 +1,25 @@
-[
- { "country_code": "RU", "country_name": "Россия", "city": "Москва", "timezone": "Europe/Moscow" },
- { "country_code": "RU", "country_name": "Россия", "city": "Санкт-Петербург", "timezone": "Europe/Moscow" },
- { "country_code": "RU", "country_name": "Россия", "city": "Новосибирск", "timezone": "Asia/Novosibirsk" },
- { "country_code": "RU", "country_name": "Россия", "city": "Екатеринбург", "timezone": "Asia/Yekaterinburg" },
- { "country_code": "RU", "country_name": "Россия", "city": "Казань", "timezone": "Europe/Moscow" },
- { "country_code": "RU", "country_name": "Россия", "city": "Нижний Новгород", "timezone": "Europe/Moscow" },
- { "country_code": "RU", "country_name": "Россия", "city": "Самара", "timezone": "Europe/Samara" },
- { "country_code": "RU", "country_name": "Россия", "city": "Омск", "timezone": "Asia/Omsk" },
- { "country_code": "RU", "country_name": "Россия", "city": "Челябинск", "timezone": "Asia/Yekaterinburg" },
- { "country_code": "RU", "country_name": "Россия", "city": "Ростов-на-Дону", "timezone": "Europe/Moscow" },
- { "country_code": "RU", "country_name": "Россия", "city": "Уфа", "timezone": "Asia/Yekaterinburg" },
- { "country_code": "RU", "country_name": "Россия", "city": "Красноярск", "timezone": "Asia/Krasnoyarsk" },
- { "country_code": "RU", "country_name": "Россия", "city": "Воронеж", "timezone": "Europe/Moscow" },
- { "country_code": "RU", "country_name": "Россия", "city": "Пермь", "timezone": "Asia/Yekaterinburg" },
- { "country_code": "RU", "country_name": "Россия", "city": "Волгоград", "timezone": "Europe/Moscow" },
- { "country_code": "RU", "country_name": "Россия", "city": "Краснодар", "timezone": "Europe/Moscow" },
- { "country_code": "RU", "country_name": "Россия", "city": "Саратов", "timezone": "Europe/Saratov" },
- { "country_code": "RU", "country_name": "Россия", "city": "Тюмень", "timezone": "Asia/Yekaterinburg" },
- { "country_code": "RU", "country_name": "Россия", "city": "Иркутск", "timezone": "Asia/Irkutsk" },
- { "country_code": "RU", "country_name": "Россия", "city": "Владивосток", "timezone": "Asia/Vladivostok" }
-]
-
-
+[
+ { "country_code": "RU", "country_name": "Россия", "city": "Москва", "timezone": "Europe/Moscow" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Санкт-Петербург", "timezone": "Europe/Moscow" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Новосибирск", "timezone": "Asia/Novosibirsk" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Екатеринбург", "timezone": "Asia/Yekaterinburg" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Казань", "timezone": "Europe/Moscow" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Нижний Новгород", "timezone": "Europe/Moscow" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Самара", "timezone": "Europe/Samara" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Омск", "timezone": "Asia/Omsk" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Челябинск", "timezone": "Asia/Yekaterinburg" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Ростов-на-Дону", "timezone": "Europe/Moscow" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Уфа", "timezone": "Asia/Yekaterinburg" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Красноярск", "timezone": "Asia/Krasnoyarsk" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Воронеж", "timezone": "Europe/Moscow" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Пермь", "timezone": "Asia/Yekaterinburg" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Волгоград", "timezone": "Europe/Moscow" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Краснодар", "timezone": "Europe/Moscow" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Саратов", "timezone": "Europe/Saratov" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Тюмень", "timezone": "Asia/Yekaterinburg" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Иркутск", "timezone": "Asia/Irkutsk" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Владивосток", "timezone": "Asia/Vladivostok" },
+ { "country_code": "RU", "country_name": "Россия", "city": "Ульяновск", "timezone": "Europe/Samara" }
+]
+
+
diff --git a/backend/apps/users/management/__init__.py b/backend/apps/users/management/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/backend/apps/users/management/commands/__init__.py b/backend/apps/users/management/commands/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/backend/apps/users/profile_views.py b/backend/apps/users/profile_views.py
index 6b353f6..784de7e 100644
--- a/backend/apps/users/profile_views.py
+++ b/backend/apps/users/profile_views.py
@@ -922,11 +922,37 @@ class ClientManagementViewSet(viewsets.ViewSet):
# Раньше ClientSerializer считал статистику занятий через 3 отдельных запроса на каждого клиента (N+1).
# Здесь заранее аннотируем эти значения одним SQL-запросом.
from django.db.models import Count, Q
-
+
+ # Получаем ID студентов из принятых связей (MentorStudentConnection)
+ # Это нужно для случаев, когда связь создана, но ментор ещё не добавлен в client.mentors
+ accepted_connections = MentorStudentConnection.objects.filter(
+ mentor=user,
+ status=MentorStudentConnection.STATUS_ACCEPTED
+ ).values_list('student_id', flat=True)
+
+ # Получаем ID клиентов, у которых ментор уже добавлен в client.mentors
+ clients_with_mentor = Client.objects.filter(mentors=user).values_list('id', flat=True)
+
+ # Получаем ID клиентов из принятых связей, у которых ментор ещё не добавлен
+ clients_to_sync = Client.objects.filter(
+ user_id__in=accepted_connections
+ ).exclude(id__in=clients_with_mentor).values_list('id', flat=True)
+
+ # Синхронизация: добавляем ментора в client.mentors для клиентов с принятыми связями
+ # Используем bulk операцию для эффективности
+ if clients_to_sync:
+ clients_to_update = Client.objects.filter(id__in=clients_to_sync)
+ for client in clients_to_update:
+ client.mentors.add(user)
+
+ # Фильтруем клиентов: либо ментор в client.mentors, либо есть принятая связь
clients = (
- Client.objects.filter(mentors=user)
+ Client.objects.filter(
+ Q(mentors=user) | Q(user_id__in=accepted_connections)
+ )
.select_related('user')
.prefetch_related('mentors')
+ .distinct()
.annotate(
# Поля с суффиксом _annotated читает ClientSerializer (если присутствуют)
scheduled_lessons_annotated=Count(
diff --git a/backend/apps/users/templates/emails/base.html b/backend/apps/users/templates/emails/base.html
new file mode 100644
index 0000000..828c588
--- /dev/null
+++ b/backend/apps/users/templates/emails/base.html
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+ {% block title %}Uchill{% endblock %}
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+ |
+ {% block content %}{% endblock %}
+ |
+
+
+
+
+
+
+
+ |
+ С уважением, Команда Uchill
+
+ © {% now "Y" %} Uchill. Все права защищены.
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
diff --git a/backend/apps/users/templates/emails/mentor_invitation.html b/backend/apps/users/templates/emails/mentor_invitation.html
index 936bde8..e9c2cc2 100644
--- a/backend/apps/users/templates/emails/mentor_invitation.html
+++ b/backend/apps/users/templates/emails/mentor_invitation.html
@@ -1,36 +1,170 @@
-
-
-
-
-
-
-
-
-
-
Приглашение от ментора
-
-
-
Здравствуйте!
-
-
{{ mentor_name }} приглашает вас в качестве ученика на платформу.
-
- {% if set_password_url %}
-
Для начала работы установите пароль и подтвердите приглашение.
-
-
{{ set_password_url }}
- {% elif confirm_url %}
-
Подтвердите приглашение, чтобы начать занятия с ментором.
-
-
{{ confirm_url }}
- {% endif %}
-
-
-
С уважением,
Команда платформы
-
-
-
-
+
+
+
+
+
+
+ Приглашение от ментора - Uchill
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ Приглашение от ментора
+ |
+
+
+
+
+ |
+
+ Здравствуйте!
+
+ |
+
+
+
+
+ |
+
+ {{ mentor_name }} приглашает вас в качестве ученика на платформу Uchill.
+
+ |
+
+
+ {% if set_password_url %}
+
+
+ |
+
+ Для начала работы установите пароль и подтвердите приглашение.
+
+ |
+
+
+
+
+ |
+
+ |
+
+
+
+
+
+
+
+ |
+
+ {{ set_password_url }}
+
+ |
+
+
+ |
+
+
+ {% elif confirm_url %}
+
+
+ |
+
+ Подтвердите приглашение, чтобы начать занятия с ментором.
+
+ |
+
+
+
+
+ |
+
+ |
+
+
+
+
+
+
+
+ |
+
+ {{ confirm_url }}
+
+ |
+
+
+ |
+
+ {% endif %}
+
+ |
+
+
+
+
+
+
+
+ |
+ С уважением, Команда Uchill
+
+ © 2026 Uchill. Все права защищены.
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
diff --git a/backend/apps/users/templates/emails/mentor_invitation.txt b/backend/apps/users/templates/emails/mentor_invitation.txt
index 53bc610..847cef6 100644
--- a/backend/apps/users/templates/emails/mentor_invitation.txt
+++ b/backend/apps/users/templates/emails/mentor_invitation.txt
@@ -1,14 +1,14 @@
-Здравствуйте!
-
-{{ mentor_name }} приглашает вас в качестве ученика на платформу.
-
-{% if set_password_url %}
-Установите пароль и подтвердите приглашение по ссылке:
-{{ set_password_url }}
-{% elif confirm_url %}
-Подтвердите приглашение по ссылке:
-{{ confirm_url }}
-{% endif %}
-
-С уважением,
-Команда платформы
+Здравствуйте!
+
+{{ mentor_name }} приглашает вас в качестве ученика на платформу Uchill.
+
+{% if set_password_url %}
+Установите пароль и подтвердите приглашение по ссылке:
+{{ set_password_url }}
+{% elif confirm_url %}
+Подтвердите приглашение по ссылке:
+{{ confirm_url }}
+{% endif %}
+
+С уважением,
+Команда Uchill
diff --git a/backend/apps/users/templates/emails/password_reset.html b/backend/apps/users/templates/emails/password_reset.html
index bf18942..8f27f95 100644
--- a/backend/apps/users/templates/emails/password_reset.html
+++ b/backend/apps/users/templates/emails/password_reset.html
@@ -1,39 +1,146 @@
-
+
+
+ Восстановление пароля - Uchill
+
-
-
-
-
Восстановление пароля
-
-
-
Здравствуйте, {{ user_full_name }}!
-
-
Вы запросили восстановление пароля для вашего аккаунта. Нажмите на кнопку ниже, чтобы установить новый пароль.
-
-
-
-
Или скопируйте и вставьте эту ссылку в браузер:
-
{{ reset_url }}
-
-
-
⚠️ Важно: Ссылка действительна в течение 24 часов.
-
-
-
-
Если вы не запрашивали восстановление пароля, просто проигнорируйте это письмо. Ваш пароль останется без изменений.
-
-
-
-
С уважением,
Команда Lessoni
-
-
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ Восстановление пароля
+ |
+
+
+
+
+ |
+
+ Здравствуйте, {{ user_full_name }}!
+
+ |
+
+
+
+
+ |
+
+ Вы запросили восстановление пароля для вашего аккаунта. Нажмите на кнопку ниже, чтобы установить новый пароль.
+
+ |
+
+
+
+
+ |
+
+ |
+
+
+
+
+ |
+
+ Или скопируйте и вставьте эту ссылку в браузер:
+
+
+
+ |
+
+ {{ reset_url }}
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+ |
+
+ ⚠️ Важно: Ссылка действительна в течение 24 часов.
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+ Если вы не запрашивали восстановление пароля, просто проигнорируйте это письмо. Ваш пароль останется без изменений.
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+ |
+ С уважением, Команда Uchill
+
+ © 2026 Uchill. Все права защищены.
+
+ |
+
+
+ |
+
+
+ |
+
+
-
-
diff --git a/backend/apps/users/templates/emails/password_reset.txt b/backend/apps/users/templates/emails/password_reset.txt
index 477df58..dbd08b7 100644
--- a/backend/apps/users/templates/emails/password_reset.txt
+++ b/backend/apps/users/templates/emails/password_reset.txt
@@ -1,16 +1,12 @@
-Здравствуйте, {{ user_full_name }}!
-
-Вы запросили восстановление пароля для вашего аккаунта. Перейдите по ссылке для установки нового пароля:
-
-{{ reset_url }}
-
-Важно: Ссылка действительна в течение 24 часов.
-
-Если вы не запрашивали восстановление пароля, просто проигнорируйте это письмо. Ваш пароль останется без изменений.
-
-С уважением,
-Команда платформы
-
-
-
-
+Здравствуйте, {{ user_full_name }}!
+
+Вы запросили восстановление пароля для вашего аккаунта. Перейдите по ссылке для установки нового пароля:
+
+{{ reset_url }}
+
+Важно: Ссылка действительна в течение 24 часов.
+
+Если вы не запрашивали восстановление пароля, просто проигнорируйте это письмо. Ваш пароль останется без изменений.
+
+С уважением,
+Команда Uchill
diff --git a/backend/apps/users/templates/emails/student_welcome.html b/backend/apps/users/templates/emails/student_welcome.html
index 74166e1..0014089 100644
--- a/backend/apps/users/templates/emails/student_welcome.html
+++ b/backend/apps/users/templates/emails/student_welcome.html
@@ -1,40 +1,155 @@
-
+
+
+ Добро пожаловать на Uchill
+
-
-
-
-
Добро пожаловать!
-
-
-
Здравствуйте, {{ user_full_name }}!
-
-
Вас добавили на Lessoni. Для начала работы необходимо установить пароль для вашего аккаунта.
-
-
-
Ваш email для входа:
-
{{ user_email }}
-
-
-
-
-
Или скопируйте и вставьте эту ссылку в браузер:
-
{{ set_password_url }}
-
-
-
⚠️ Важно: Ссылка действительна в течение 7 дней.
-
-
-
-
С уважением,
Команда Lessoni
-
-
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ Добро пожаловать!
+ |
+
+
+
+
+ |
+
+ Здравствуйте, {{ user_full_name }}!
+
+ |
+
+
+
+
+ |
+
+ Вас добавили на Uchill. Для начала работы необходимо установить пароль для вашего аккаунта.
+
+ |
+
+
+
+
+
+
+
+ |
+
+ Ваш email для входа:
+
+
+ {{ user_email }}
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+ |
+
+
+
+
+ |
+
+ Или скопируйте и вставьте эту ссылку в браузер:
+
+
+
+ |
+
+ {{ set_password_url }}
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+ |
+
+ ⚠️ Важно: Ссылка действительна в течение 7 дней.
+
+ |
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+ |
+ С уважением, Команда Uchill
+
+ © 2026 Uchill. Все права защищены.
+
+ |
+
+
+ |
+
+
+ |
+
+
-
-
diff --git a/backend/apps/users/templates/emails/student_welcome.txt b/backend/apps/users/templates/emails/student_welcome.txt
index 6f3ee3a..cf95b34 100644
--- a/backend/apps/users/templates/emails/student_welcome.txt
+++ b/backend/apps/users/templates/emails/student_welcome.txt
@@ -1,17 +1,13 @@
-Здравствуйте, {{ user_full_name }}!
-
-Вас добавили на образовательную платформу. Для начала работы необходимо установить пароль для вашего аккаунта.
-
-Ваш email для входа: {{ user_email }}
-
-Перейдите по ссылке для установки пароля:
-{{ set_password_url }}
-
-Важно: Ссылка действительна в течение 7 дней.
-
-С уважением,
-Команда платформы
-
-
-
-
+Здравствуйте, {{ user_full_name }}!
+
+Вас добавили на Uchill. Для начала работы необходимо установить пароль для вашего аккаунта.
+
+Ваш email для входа: {{ user_email }}
+
+Перейдите по ссылке для установки пароля:
+{{ set_password_url }}
+
+Важно: Ссылка действительна в течение 7 дней.
+
+С уважением,
+Команда Uchill
diff --git a/backend/apps/users/templates/emails/verification.html b/backend/apps/users/templates/emails/verification.html
index 283f2df..1f2fa90 100644
--- a/backend/apps/users/templates/emails/verification.html
+++ b/backend/apps/users/templates/emails/verification.html
@@ -1,35 +1,131 @@
-
+
+
+ Подтверждение email - Uchill
+
-
-
-
-
Подтверждение email
-
-
-
Здравствуйте, {{ user_full_name }}!
-
-
Спасибо за регистрацию на Lessoni. Для завершения регистрации необходимо подтвердить ваш email адрес.
-
-
-
-
Или скопируйте и вставьте эту ссылку в браузер:
-
{{ verification_url }}
-
-
-
Если вы не регистрировались на нашей платформе, просто проигнорируйте это письмо.
-
-
-
-
С уважением,
Команда Lessoni
-
-
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ Подтверждение email
+ |
+
+
+
+
+ |
+
+ Здравствуйте, {{ user_full_name }}!
+
+ |
+
+
+
+
+ |
+
+ Спасибо за регистрацию на Uchill. Для завершения регистрации необходимо подтвердить ваш email адрес.
+
+ |
+
+
+
+
+ |
+
+ |
+
+
+
+
+ |
+
+ Или скопируйте и вставьте эту ссылку в браузер:
+
+
+
+ |
+
+ {{ verification_url }}
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+ Если вы не регистрировались на нашей платформе, просто проигнорируйте это письмо.
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+ |
+ С уважением, Команда Uchill
+
+ © 2026 Uchill. Все права защищены.
+
+ |
+
+
+ |
+
+
+ |
+
+
-
-
diff --git a/backend/apps/users/templates/emails/verification.txt b/backend/apps/users/templates/emails/verification.txt
index f797e4a..52ba6e8 100644
--- a/backend/apps/users/templates/emails/verification.txt
+++ b/backend/apps/users/templates/emails/verification.txt
@@ -1,15 +1,11 @@
-Здравствуйте, {{ user_full_name }}!
-
-Спасибо за регистрацию на нашей образовательной платформе. Для завершения регистрации необходимо подтвердить ваш email адрес.
-
-Перейдите по ссылке для подтверждения:
-{{ verification_url }}
-
-Если вы не регистрировались на нашей платформе, просто проигнорируйте это письмо.
-
-С уважением,
-Команда платформы
-
-
-
-
+Здравствуйте, {{ user_full_name }}!
+
+Спасибо за регистрацию на Uchill. Для завершения регистрации необходимо подтвердить ваш email адрес.
+
+Перейдите по ссылке для подтверждения:
+{{ verification_url }}
+
+Если вы не регистрировались на нашей платформе, просто проигнорируйте это письмо.
+
+С уважением,
+Команда Uchill
diff --git a/backend/apps/users/templates/emails/welcome.html b/backend/apps/users/templates/emails/welcome.html
index bfc81a7..75eb27a 100644
--- a/backend/apps/users/templates/emails/welcome.html
+++ b/backend/apps/users/templates/emails/welcome.html
@@ -1,31 +1,131 @@
-
+
+
+ Добро пожаловать на Uchill
+
-
-
-
-
Добро пожаловать!
-
-
-
Здравствуйте, {{ user_full_name }}!
-
-
Добро пожаловать на Lessoni! Ваш аккаунт успешно создан.
-
-
-
Ваш email для входа:
-
{{ user_email }}
-
-
-
Теперь вы можете войти в систему и начать пользоваться всеми возможностями платформы.
-
-
-
С уважением,
Команда Lessoni
-
-
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+
+
+ Добро пожаловать!
+ |
+
+
+
+
+ |
+
+ Здравствуйте, {{ user_full_name }}!
+
+ |
+
+
+
+
+ |
+
+ Добро пожаловать на Uchill! Ваш аккаунт успешно создан.
+
+ |
+
+
+
+
+
+
+
+ |
+
+ Ваш email для входа:
+
+
+ {{ user_email }}
+
+ |
+
+
+ |
+
+
+
+
+ |
+
+ Теперь вы можете войти в систему и начать пользоваться всеми возможностями платформы.
+
+ |
+
+
+
+
+ |
+
+ |
+
+
+ |
+
+
+
+
+
+
+
+ |
+ С уважением, Команда Uchill
+
+ © 2026 Uchill. Все права защищены.
+
+ |
+
+
+ |
+
+
+ |
+
+
-
-
diff --git a/backend/apps/users/templates/emails/welcome.txt b/backend/apps/users/templates/emails/welcome.txt
index b36e433..d103ec8 100644
--- a/backend/apps/users/templates/emails/welcome.txt
+++ b/backend/apps/users/templates/emails/welcome.txt
@@ -1,14 +1,10 @@
-Здравствуйте, {{ user_full_name }}!
-
-Добро пожаловать на нашу образовательную платформу. Ваш аккаунт успешно создан.
-
-Ваш email для входа: {{ user_email }}
-
-Теперь вы можете войти в систему и начать пользоваться всеми возможностями платформы.
-
-С уважением,
-Команда платформы
-
-
-
-
+Здравствуйте, {{ user_full_name }}!
+
+Добро пожаловать на Uchill! Ваш аккаунт успешно создан.
+
+Ваш email для входа: {{ user_email }}
+
+Теперь вы можете войти в систему и начать пользоваться всеми возможностями платформы.
+
+С уважением,
+Команда Uchill
diff --git a/backend/config/settings.py b/backend/config/settings.py
index cfc422f..09ce960 100644
--- a/backend/config/settings.py
+++ b/backend/config/settings.py
@@ -1,5 +1,5 @@
"""
-Django settings для Lessoni - образовательной платформы.
+Django settings для Uchill - образовательной платформы.
"""
import os
@@ -46,7 +46,7 @@ if os.getenv('SENTRY_DSN') and os.getenv('DEBUG', 'True') == 'False':
environment=os.getenv('SENTRY_ENVIRONMENT', 'production'),
# Релиз (версия приложения)
- release=os.getenv('SENTRY_RELEASE', 'lessoni@1.0.0'),
+ release=os.getenv('SENTRY_RELEASE', 'uchill@1.0.0'),
# Игнорировать определенные ошибки
ignore_errors=[