diff --git a/README.md b/README.md
index 6b12a7d..d841a07 100644
--- a/README.md
+++ b/README.md
@@ -205,6 +205,7 @@ docker compose -p ipam_control_006 up -d --build && venv/bin/python -m pytest -q
| 036 | Меню пользователя в шапке: логин с выпадающим списком | [план](docs/changes/036-user-menu/PLAN.md) · [итог](docs/changes/036-user-menu/SUMMARY.md) |
| 037 | Двухфакторная аутентификация TOTP, по выбору пользователя | [план](docs/changes/037-totp-2fa/PLAN.md) · [итог](docs/changes/037-totp-2fa/SUMMARY.md) |
| 038 | Тёмная тема UI | [план](docs/changes/038-dark-theme/PLAN.md) · [итог](docs/changes/038-dark-theme/SUMMARY.md) |
+| 040 | Название в UI: «IPAM Manager» | [план](docs/changes/040-brand-name/PLAN.md) · [итог](docs/changes/040-brand-name/SUMMARY.md) |
## Отчёты ревью
- [Ревью кодовой базы](docs/reviews/2026-09-26-codebase-review.md) (находки → изменения 011–023)
diff --git a/docs/changes/040-brand-name/PLAN.md b/docs/changes/040-brand-name/PLAN.md
new file mode 100644
index 0000000..ca9e5df
--- /dev/null
+++ b/docs/changes/040-brand-name/PLAN.md
@@ -0,0 +1,11 @@
+# Название в UI: «IPAM Manager» (изменение 040)
+
+## Context
+В `web/app.js` название приложения выводится как `ipam_manager` — в шапке и на экране входа (шаг пароля и шаг 2FA), всего 3 строки.
+Нужно «IPAM Manager», как в `
`, README и issuer TOTP. Атомарная правка, отдельный коммит.
+
+## Изменения
+- `web/app.js`: `ipam_manager` → `IPAM Manager` во всех трёх местах; в `web/` и `app/` других вхождений нет.
+
+## Проверка
+- `grep -c ipam_manager web/app.js` → 0; `node --check`; стенд отдаёт новый `app.js`.
diff --git a/docs/changes/040-brand-name/SUMMARY.md b/docs/changes/040-brand-name/SUMMARY.md
new file mode 100644
index 0000000..429285f
--- /dev/null
+++ b/docs/changes/040-brand-name/SUMMARY.md
@@ -0,0 +1,8 @@
+# Итог: название в UI — «IPAM Manager» (изменение 040)
+
+План: `PLAN.md`. В `web/app.js` три вхождения `ipam_manager` (шапка, экран входа — шаг пароля и шаг 2FA) заменены на «IPAM Manager».
+Других вхождений в `web/` и `app/` не было.
+
+## Проверки
+- `grep -c ipam_manager web/app.js` → 0; `node --check web/app.js` — чисто.
+- На стенде появится при ближайшей пересборке (вместе с изменением 039).
diff --git a/web/app.js b/web/app.js
index 92f5732..bcfdc94 100644
--- a/web/app.js
+++ b/web/app.js
@@ -160,7 +160,7 @@ function shell(active, content) {
{ label: "Светлая", value: "light", cls: curTheme === "light" ? "sel" : "" },
{ label: "Тёмная", value: "dark", cls: curTheme === "dark" ? "sel" : "" },
], "row-pop")}`;
- return `${I.globe()}ipam_manager
+ return `
${I.globe()}IPAM Manager
${themeBtn}${userMenu}
${content}
`;
@@ -872,13 +872,13 @@ ${fInput("code", "Код из приложения или код восстан
// ---- login
function loginScreen(err = "") {
if (pendingMfa) {
- return `
${I.globe()}ipam_manager
Вход
+ return `
${I.globe()}IPAM Manager
Вход
`;
}
- return `
${I.globe()}ipam_manager
Вход
+ return `
${I.globe()}IPAM Manager
Вход