Здесь простым языком собраны новые версии приложения Ведамрита: что добавили, что улучшили и какие баги исправили.
текущая версия
1.63
12 мая 2026 г.
Версия 1.63 — мои задачи на Дом-дашборде
У каждого пользователя в /app появились личные задачи — простой список с галочками. Поставить можно самому (кнопка «+» на Доме), и Амрита будет создавать задачи из чата (этот канал готовится отдельной фичей). На Дом-дашборде — карточка задач со счётчиком активных и просроченных, а под ней — до пяти ближайших задач.
Новая карточка «Задачи» на Дом-экране — над плитками. Показывает количество активных, отдельно — просрочённых (красным).
Список первых пяти открытых задач с круглой галочкой; тап на галочку — задача отмечена как сделано (зелёный градиент iOS); тап на крестик — удаление.
Кнопка «+» открывает iOS-26 шторку с полями: что сделать, когда (datetime-local), подробности.
Задачи помечены источником: «Своя» (от пользователя) или «Амрита» (с синей пилюлей и иконкой Sparkles).
Просроченные задачи (status=pending, dueAt в прошлом) подсвечиваются iOS-red и попадают в общий счётчик «просрочено».
Backend: новый модуль `TasksModule` + таблица `user_tasks` (id, user_id, source, title, description, status, priority, due_at, completed_at, origin_message_id, meta). Endpoints: GET/POST /api/app/tasks, PATCH /api/app/tasks/:id, POST /api/app/tasks/:id/complete, POST /api/app/tasks/:id/reopen, DELETE /api/app/tasks/:id.
все версии
Новые версии сверху
1.63
Версия 1.63 — мои задачи на Дом-дашборде
У каждого пользователя в /app появились личные задачи — простой список с галочками. Поставить можно самому (кнопка «+» на Доме), и Амрита будет создавать задачи из чата (этот канал готовится отдельной фичей). На Дом-дашборде — карточка задач со счётчиком активных и просроченных, а под ней — до пяти ближайших задач.
Новая карточка «Задачи» на Дом-экране — над плитками. Показывает количество активных, отдельно — просрочённых (красным).
Список первых пяти открытых задач с круглой галочкой; тап на галочку — задача отмечена как сделано (зелёный градиент iOS); тап на крестик — удаление.
Кнопка «+» открывает iOS-26 шторку с полями: что сделать, когда (datetime-local), подробности.
Задачи помечены источником: «Своя» (от пользователя) или «Амрита» (с синей пилюлей и иконкой Sparkles).
Просроченные задачи (status=pending, dueAt в прошлом) подсвечиваются iOS-red и попадают в общий счётчик «просрочено».
Backend: новый модуль `TasksModule` + таблица `user_tasks` (id, user_id, source, title, description, status, priority, due_at, completed_at, origin_message_id, meta). Endpoints: GET/POST /api/app/tasks, PATCH /api/app/tasks/:id, POST /api/app/tasks/:id/complete, POST /api/app/tasks/:id/reopen, DELETE /api/app/tasks/:id.
1.62
Версия 1.62 — регистрация в /app без обязательного плана
Кнопка «Зарегистрироваться» на экране входа /app теперь открывает iOS-26 шторку с теми же полями, что собирает мастер персонального плана: имя, email, пароль, дата/время/город рождения. Регистрация создаёт аккаунт и заводит вас в чат, но не запускает генерацию персонального навыка — это можно сделать позже из вкладки «Навыки» в удобный момент.
Новая шторка регистрации iOS-26: liquid glass, поля с blue-акцентами, кнопки в синем градиенте, ошибки в iOS-red.
Поля как в мастере персонального плана: имя, email, пароль + повтор, дата рождения, время рождения, город рождения.
Кнопка «Определить по геолокации» — браузер запрашивает доступ, координаты подставляются автоматически (с таймзоной).
Сам POST /auth/register не вызывает api.post(/app/skills/.../program) — план не генерируется. Юзер сам выберет навык в каталоге, когда захочет.
Экран входа /app тоже переведён на холодную палитру iOS-26: brand-знак «वे» в blue→indigo, поля на материале lq, кнопка «Войти» в iOS-blue.
1.61
Версия 1.61 — Дом-дашборд и отдельная вкладка «Чат»
Приложение /app теперь открывается на новом Дом-экране — спокойный обзор того, что важно сейчас. Чат с Амритой перешёл на отдельную вкладку (четвёртую, между «Сообществами» и «Профилем»). Нижняя навигация стала пятиколоночной: Дом / Навыки / Сообщества / Чат / Профиль.
Новый Дом-дашборд: приветствие по имени и четыре плитки 2×2 — превью чата с Амритой и счётчиком непрочитанных, активная практика дня (или приглашение выбрать первый навык), баланс кредитов, сообщества.
Плитки — синий iOS-blue для чата, зелёно-мятный для практики, золотой для кредитов, фиолетовый для сообществ. Каждая — на материале lq, с stagger-анимацией появления (50–100 мс между плитками).
Под плитками — карточка-приглашение включить push-уведомления, если они ещё не подключены. Скрывается, когда уведомления уже работают.
Чат — теперь отдельная вкладка с иконкой MessageCircle. Тап на «Чат» возвращает в ленту переписки с Амритой и автоматически скроллит к последнему сообщению.
Нижняя навигация перестроена на 5 колонок: Дом (дашборд) · Навыки · Сообщества · Чат · Профиль. Активная вкладка по-прежнему перетекает springом через layoutId.
Переведено на четырёх языках (русский, English, हिन्दी, Bahasa Indonesia) — заголовки плиток, CTA-кнопки и приветствие.
1.60
Версия 1.60 — лендинг и публичные страницы в iOS 26
Главная vedamrita.org, каталог /skills, лендинги отдельных навыков и страница входа /login переведены в дизайн-систему Vedakala (iOS 26 Liquid Glass) — единый язык с приложением /app. Также переодеты служебные страницы /app/install, /app/handoff и /app/push-guide.
Главная vedamrita.org: aurora-фон, все стеклянные карточки и pill-чипы на материале lq, акценты в iOS-blue/indigo, шапка с brand-плашкой «वे» в холодном градиенте.
Каталог /skills: фильтр-кнопки и поиск на lq, активная категория — синяя; пустое состояние и ошибки в новой ink-шкале.
Лендинг навыка /skill/[slug]: 2000+ строк UI переодеты целиком — герой, разделы практики, AI-чат, формы регистрации, CTA-кнопки.
/login: голубая+индиго аура вместо тёплых пятен, форма на lq-thick, кнопка входа в iOS-blue градиенте, ошибки в iOS-red.
/app/install, /app/handoff, /app/push-guide: единый стеклянный шейп, brand «वे» на blue→indigo с iOS-26 свечением, CTA-кнопки — синие iOS-градиенты.
1.59
Версия 1.59 — видимые micro-interactions в /app
Чат /app получил живые анимации, которые видно сразу. Активная вкладка нижней навигации перетекает между плитками одним springом (layoutId). Кнопка отправки сообщения мягко морфирует между микрофоном, отправкой и спиннером с лёгким разворотом иконки. JumpToBottom прилетает снизу и улетает обратно — а не «моргает». Шторки профиля и вложений теперь slide-up на iOS-spring, фон фейдится. Шапка и pinned-practice панель плавно появляются после открытия чата.
Bottom dock: активная плитка теперь использует layoutId — синий пилл перетекает между вкладками одним spring-движением (320/30), а не появляется/исчезает скачком.
Кнопка Send: морфинг между микрофон → отправка → спиннер через AnimatePresence (180ms с iOS-кривой и поворотом ±12°). Цвет тоже перетекает: фиолетовый при пустом поле → синий при наборе.
JumpToBottom: появляется springом снизу (scale 0.7 → 1, y 12 → 0), badge с непрочитанными — отдельной мини-анимацией. Уходит обратно когда листаешь к дну.
ProfileSheet и AttachmentSheet: backdrop с blur-fade за 220ms; листы выезжают снизу spring-ом (380/38). Закрытие — спокойно уезжает обратно, а не «исчезает».
Шапка чата плавно сходит сверху с задержкой 50ms, pinned-practice панель — с задержкой 120ms (Emil-стиль stagger, без явных delays на каждый элемент).
Press-feedback iconок таб-бара: scale 0.96 c тёплой пружиной (460/26) — пальцем ощущается, глазом не отвлекает.
1.58
Версия 1.58 — полировка анимаций по канону Emil Kowalski
Прошлись по чату /app в соответствии с философией Emil Kowalski. Кнопки и иконки в нижнем таб-баре теперь слегка проседают при нажатии (как в iOS), а не «улетают». Easing-кривые на всех CSS-переходах унифицированы в сильный iOS-out (Emil). Spring-настройки именованы и согласованы между навигацией и индикаторами — UI звучит в один тон.
BottomTabBar: press-feedback с scale 0.86 → 0.96. Это не «провал», а отзывчивость — кнопка едва проседает, как iOS-таб-бар.
Easing: добавлены CSS-токены `--ease-out`, `--ease-in-out`, `--ease-drawer` (Emil-канон). `.press` теперь использует cubic-bezier(0.23,1,0.32,1) — заметно жёстче и быстрее даёт ощущение «иконка услышала тап».
JumpToBottom и pinned-practice кнопки: убраны бесконтрольные `transition` (= transition: all), заменены на точные `transition-transform 200ms ease-out` — теперь анимируется только то, что нужно, без layout-jank.
Spring-токены: в `styles/tokens.ts` добавлены именованные пресеты `enter`, `layout`, `tap`, `scroll` — все компоненты с layoutId-индикаторами и whileTap-иконками теперь зовут токены, а не свои случайные числа.
Pinned-practice кнопка стала проседать заметнее (0.985 → 0.97) — было слишком тонко, на пальце не чувствовалось.
1.57
Версия 1.57 — шторки в iOS 26, звук и вибрация в чате
Профильная шторка, лист вложений и таб «Сообщества» полностью переехали в материал iOS 26: liquid glass, ink-шкала, синий акцент. Отправка и приход сообщения теперь сопровождаются деликатным звуковым сигналом и микро-вибрацией; пуш-уведомления вибрируют там, где это поддерживает платформа.
Шторка профиля — единая стеклянная панель iOS 26: аватар на blue→indigo-градиенте, строки настроек на материале lq, кнопка «Выйти» в красно-фиолетовом iOS-градиенте.
Лист вложений: иконки на холодных iOS-градиентах (зелёный/оранжевый/синий/индиго/жёлтый), карточки в холодной гамме.
Таб «Сообщества» и кнопка «Создать сообщество» — на материале lq, аватары групп — в iOS-blue.
Звук: при «Отправить» — короткий восходящий пик; при приходе сообщения от Амриты — двухтоновый сигнал. Реализовано через WebAudio (без MP3-ассетов).
Вибрация: 8 мс на отправку, 10-40-10 мс на приход (там, где navigator.vibrate доступен — Android/Chrome). iOS Safari/PWA вибрацию через JS не даёт, это ограничение Apple.
Web-push на пуш-уведомлении: vibrate=[60,30,60,30,120] и renotify=true — Android покажет с вибрацией, iOS-PWA проиграет дефолтный системный звук уведомления.
1.56
Версия 1.56 — pin-to-bottom в чатах + QR-страницы в iOS 26
Лента чата с Амритой и QR-страницы пожеланий/навыков перестают самоскроллиться, когда вы листаете выше: новые сообщения приходят, но позиция чтения не сбивается. Чтобы быстро спрыгнуть к последнему сообщению, появилась стеклянная кнопка справа. QR-страницы получили тот же холодный материал iOS 26, что и /app.
В чате /app: автоскролл вниз только если вы и так у дна. Если вы листаете выше — Амрита печатает в фоне, экран не дёргается.
iOS-26 кнопка «вниз» в правом нижнем углу — поднята выше композера/CTA, кликаемая, со счётчиком непрочитанных в /app.
Страница пожелания /wish/{id}/qr и страница навыка /skill/{slug}/qr — теперь в холодной палитре Vedakala: liquid glass, blue→indigo акценты, ink-шкала текста.
Все три чата работают по одному правилу скролла: «я листаю — экран спокоен; я у дна — авто-следую».
Пузырь пользователя в QR-чатах — синий iOS-градиент с белым текстом, пузыри Амриты — настоящий liquid glass.
1.55
Версия 1.55 — /app в холодной палитре Vedakala
Веб-приложение /app перекрашено в буквальную палитру Vedakala: холодный aurora-фон (blue/pink/mint/peach), iOS-blue градиенты на главных действиях, ink-шкала текста — почти чёрная. Тёплые золото-шафрановые акценты убраны в пользу единого языка с проектом Vedakala.
Фон /app: холодный четырёхпятенный градиент iOS 26 (голубой/розовый/мятный/тёплый кремовый акцент).
Брендовый знак «वे» в шапке — теперь градиент blue→indigo как в логотипе Vedakala, с круглым световым бликом.
Композер сообщений переведён на материал lq-thick: круглые стеклянные касания, кнопка отправки в iOS-blue (или indigo→purple для голоса).
Пузыри сообщений: пользовательские — синий iOS-градиент с белым текстом; пузыри Амриты — настоящий liquid glass без тёплой охры.
Bottom dock: активная вкладка — иконка на iOS-blue градиенте; неактивные — стеклянные с синей пиктограммой.
Pinned practice bar и кнопки действий («Готово», «Включить уведомления») переодеты в iOS-blue.
1.54
Версия 1.54 — приложение /app в материале iOS 26
Веб-приложение /app переведено на дизайн-систему Vedakala: настоящий liquid glass с двойным внутренним бликом и кромкой-рефракцией, согласованная ink-шкала текста, мягкие радиусы. Тёплая палитра Веды (золото, шафран, слива) сохранена и звучит спокойнее на этом материале.
Новый материал поверхностей: liquid glass с specular highlight и lensing edge — кромка ловит свет, как в iOS 26.
Свежий фон-аврора: четыре мягких радиальных пятна (золото/шафран/роза/мёд) поверх кремовой основы.
Шапка чата теперь — единая стеклянная плашка с правильной типографической ink-шкалой и тонкой кромкой.
Кнопки «уведомления» и «профиль» в шапке стали круглыми стеклянными касаниями iOS 26 (44×44).
Индикатор «Амрита печатает» переведён на материал lq и нейтральный текст вместо тёплого охра-золота.
1.53
Версия 1.53 — главная страница в каноне шастр
Главная страница vedamrita.org переписана в едином стиле «Духовного Прагматизма»: сиддханта писаний обращена в конкретный разговор с Амритой, без маркетинговой воды. Изменения видны во всех четырёх языках сайта одновременно.
Опора на сиддханту: каждый блок ссылается на авторитет шастр, а не на «общую мудрость».
Явно перечислены шесть источников Амриты: Бхагавад-гита, Шримад-Бхагаватам, Чайтанья-чаритамрита, Упадешамрита, Шри Ишопанишад, Чанакья-нити — с краткой характеристикой каждой.
Аудитория «для кого» переформулирована через язык садханы: для тех, кто читает Гиту/Бхагаватам — без перевода терминов в маркетинг.
Тагалайн в футере: «Шастры в живом разговоре».
Переведено и согласовано на четырёх языках: русский, English, हिन्दी, Bahasa Indonesia.
1.52
Версия 1.52
Админка: broadcast push, воронка онбординга, топ юзеров, Telegram-связки.
Раздел `/admin/broadcast` — массовая рассылка web-push на сегмент: все активные / только с подключенным Telegram / только без TG. Указываешь заголовок, текст, URL для перехода — отправка с подтверждением. Возвращает аудиторию и количество попыток отправки.
Раздел `/admin/funnel` — воронка онбординга: для каждого типа квеста (`telegram_link`, `profile_name`, `profile_birth`, `profile_city`) показывает счётчики pending/completed/skipped и конверсию в %.
Раздел `/admin/top` — топ-30 юзеров по балансу и топ-30 по тратам за последние 30 дней (с разделением списанное/пополненное).
Раздел `/admin/telegram` — список всех привязок юзеров к боту `@vedamrita_bot` с username, chat_id, статусом, датой verify.
Backend: новые endpoints `/api/admin/push/broadcast`, `/api/admin/telegram-links`, `/api/admin/users/top/balance`, `/api/admin/users/top/spending`. Публичный метод `AppPushService.sendDirect(userId, payload)`.
В NAV админки добавлены пункты «Broadcast», «Воронка», «Топ», «TG».
1.51
Версия 1.51
Cron-tracker реальный, refund в credits, AI-анализ диалога.
`CronTrackerService` стал глобальным (`@Global` модулем), и существующие cron-задачи в `QuestsService` (раз в минуту watch TG verifications, раз в сутки remind sweep) теперь обёрнуты через `cronTracker.wrap()` — `/admin/cron` показывает реальные данные (количество запусков, длительность, статус, ошибки).
`/admin/credits` — у каждой debit-транзакции (delta < 0, кроме самих refund'ов) появилась кнопка «refund», которая через `POST /api/admin/credits/transactions/:id/refund` возвращает кредиты пользователю одним кликом.
`/admin/messages/conversation/:userId` — кнопка «AI-анализ»: backend через `gpt-4o-mini` проходит по последним 200 сообщениям диалога и возвращает JSON с суммаризацией на 3 строки, темами, тоном, тревожными флагами (суицид/насилие/депрессия — выводятся красной плашкой). Endpoint `POST /api/admin/users/:id/analyze`. Один запрос ≈ $0.001-0.005 в зависимости от длины диалога.
1.50
Версия 1.50
Админка: профиль 360°, ручная отправка сообщения от Амриты, заметки админа, refund одной кнопкой, cron-дашборд.
Раздел `/admin/users/<id>` — карточка профиля 360°: основные факты (баланс, score, последние действия), Telegram-связка, push-устройства, активные квесты, сгенерированные программы, последние транзакции — всё на одном экране.
«Отправить сообщение от Амриты вручную» прямо из карточки юзера: создаётся `kind=text, role=assistant, meta.module=admin_manual` + автоматически летит web-push. Полезно для саппорта и расследований.
Заметки админов на юзере (видны только админам, не юзеру). Новая таблица `user_admin_notes`, миграция `sql/20260505_user_admin_notes.sql`. Добавление и удаление прямо в карточке.
Refund одной кнопкой: `POST /api/admin/credits/transactions/:id/refund` использует `CreditsService.refundIfPossible`. UI кнопки появится в следующей итерации, endpoint уже готов.
Раздел `/admin/cron` — список cron-задач с количеством запусков, длительностью последнего выполнения, статусом ok/fail. Используется in-memory `CronTrackerService` (последние 100 запусков). Обновляется каждые 15 секунд.
В NAV админки добавлен пункт «Cron».
1.49
Версия 1.49
Большой апдейт админки: лента сообщений, диалоги, кредиты, push, программы.
Раздел `/admin/messages` — лента всех сообщений из чатов с фильтрами по email, роли (`user`/`assistant`/`system`), kind (`text`/`voice`/`quest`/...), `meta.module`, локали, диапазону дат и поиску по тексту. Пагинация по 50, ссылка «Диалог →» на каждой строке открывает полную беседу с этим пользователем.
Раздел `/admin/messages/conversation/:userId` — chronological просмотр диалога юзер↔Амрита bubble-стилем. Голосовые сообщения проигрываются прямо во встроенном плеере. Вверху ссылка на профиль 360°.
Раздел `/admin/credits` — таблица всех `credit_transactions` с фильтром по `reason`, агрегаты по причинам начислений/списаний (плашки кликабельны как быстрый фильтр), общая сумма балансов.
Раздел `/admin/push` — все web-push подписки всех юзеров: устройство (User-Agent), локаль, статус active/disabled, даты создания и последнего обновления. Сверху три плашки со сводкой.
Раздел `/admin/skill-programs` — список всех персональных программ навыков всех юзеров с фильтром по статусу (`draft`/`generating`/`active`/`completed`/`failed`), цветными бейджами и поиском.
Backend: добавлены 9 admin endpoints под `/api/admin/*` (messages, credits, push, quests, skill-programs, user 360°), вынесенные в отдельный `AdminInsightsService` + `AdminInsightsController` для чистоты.
В NAV админки добавлены пункты «Чаты», «Кредиты», «Push», «Программы».
1.48
Версия 1.48
Готовая программа навыка теперь приходит и в Telegram — с кнопкой возврата прямо к этой карточке в чате.
Когда фоновая генерация программы навыка завершается (`state=ready` в `app-chat.service.ts:finishSkillProgram`), помимо появления карточки в `/app` и web-push уведомления, юзеру с verified Telegram-связкой автоматически уходит сообщение от `@vedamrita_bot`: «Я закончила собирать тебе персональную практику навыка „X“. Открыть?» с inline-кнопкой «Открыть в Ведамрите».
Кнопка ведёт на `https://vedamrita.org/app?skill=<programId>` — фронт читает query-параметр при загрузке `/app`, авто-прокручивает к карточке этой программы и подсвечивает её золотым ring-эффектом на 3.5 секунды.
Текст сообщения переведён на ru/en/hi/id; локаль берётся из `program.locale`. Если у юзера TG не подключён — этап молча пропускается, web-push при этом отрабатывает как обычно.
Новый публичный метод `MessengersService.notifySkillReady(userId, skillTitle, programId, locale)` — точка интеграции для будущих фоновых процессов, которым нужно дёрнуть юзера в TG (например, ежедневные напоминания о практике, реминды о незавершённых днях).
1.47
Версия 1.47
Починили самостоятельное удаление аккаунта и Telegram-бот.
Применена пропущенная миграция `sql/20260505_russian_compliance.sql` — таблица `user_consent_events` теперь есть в проде. До этого `DELETE /api/auth/me` (самостоятельное удаление аккаунта пользователем) падал с 500 при попытке зачистки истории согласий, и операция фактически не работала. Теперь возвращает 200, аккаунт удаляется корректно.
Telegram-бот `@vedamrita_bot` снова принимает обновления. Webhook был зарегистрирован на нерабочий домен `vedamrita.ru/api/webhooks/telegram` (домен 301-редиректит на `.org`, Telegram через redirect не ходит). Перевешен на `https://vedamrita.org/api/webhooks/telegram`, добавлен обязательный `secret_token` (`TELEGRAM_WEBHOOK_SECRET` в .env) — чужие POST'ы на webhook теперь отбиваются 403.
1.46
Версия 1.46
Запустили цепочку онбординг-квестов: первый шаг — подключение Telegram с подарком 200 кредитов.
Новый тип сообщений в чате — `quest`-карточки с особым визуальным стилем (тёплая золотая карточка с подарком, не похожая на обычные сообщения от Амриты). При первом заходе в `/app` создаются недостающие онбординг-квесты в зависимости от состояния профиля юзера.
Первый квест — `telegram_link`: подключение Telegram через `@vedamrita_bot`. После успешной верификации `verifiedAt` в `user_messengers` автоматически кладётся 200 кредитов на счёт через `credit_transactions` (новый `reason=quest_reward`), а в чат прилетает благодарственное сообщение от Амриты.
Дополнительные квесты заполнения профиля — `profile_name` / `profile_birth` / `profile_city` (по 50 кредитов каждый), хук на `PATCH /api/auth/me` автоматически закрывает их когда соответствующее поле становится непустым.
Автоматический реминд: cron `0 11 * * *` (Europe/Moscow) проходит по всем pending-квестам и, если прошло >48 часов с последнего напоминания, создаёт новую quest-карточку в чат + push-уведомление. Лимит — 2 напоминания, после чего квест переводится в `skipped`.
Новые endpoints: `GET /api/app/quests` (список квестов юзера), `POST /api/app/quests/:id/start-telegram` (получить linkCode + ссылку на бота), `POST /api/app/quests/:id/skip` (вручную помечает skipped).
Тексты квестов и наград написаны на ru/en/hi/id в негромком, ведическом стиле — без рекламной патетики.
Новая таблица `user_quests` (миграция `sql/20260505_user_quests.sql`); UNIQUE на `(user_id, type)` исключает дубли. Защита от двойного начисления — поле `reward_claimed_at`.
1.45
Версия 1.45
Сменили голос приветственного голосового от Амриты — стало мягче и ровнее на русском.
Welcome voice (`module=amrita_welcome`) теперь генерируется голосом `coral` (OpenAI `gpt-4o-mini-tts`) вместо `shimmer`. shimmer обучен преимущественно на английском и заметно «спотыкался» на русской просодии и ударениях; coral держит русский тембр ровнее при тех же стилевых инструкциях («тёплая, мягкая старшая сестра»).
Голос управляется ENV-переменной `OPENAI_TTS_VOICE` в `backend/.env` (текущее значение — `coral`) и продублирован дефолтом в `backend/src/app-chat/app-chat.service.ts` — если переменная когда-нибудь потеряется при чистом деплое, регрессии не будет.
Существующие сгенерированные welcome-mp3 (со старым голосом) не перегенерируются — защита от дублей в `maybeQueueOnboardingVoiceMessage` остаётся прежней. Новый голос услышат только новые пользователи.
Появилась индексируемая публичная страница карточки-пожелания: `/wish/<code>` (и `/en|hi|id/wish/<code>`) с текстом, фоновой картинкой, 4-абзацным размышлением, JSON-LD `CreativeWork`, корректным `og:image` и кнопками «Открыть чат» / «Создать персональный портрет». До этого `/wish/<code>` возвращал 404 — это били 2336 ссылок в sitemap.
Skill landing получил блок «Похожие навыки» (6 карточек) на основе нового публичного `GET /api/skills/<slug>/related?locale=&limit=`. Логика: сначала тот же `category`, затем сортировка по пересечению `tags`, fallback на любой не-archived из других категорий.
На skill landing и wish detail добавлены **видимые** breadcrumbs (`<nav aria-label="Breadcrumbs">`) — Google рендерит rich-сниппет хлебных крошек только когда в DOM есть и `BreadcrumbList` JSON-LD, и видимая хлебная крошка.
Файл `app/not-found.tsx` — брендовый 404 с локализованными «Страница не найдена» / «Page not found» / «पृष्ठ नहीं मिला» / «Halaman tidak ditemukan» и CTA на главную и каталог навыков. До этого Next отдавал дефолтный английский 404 на любой неизвестный URL — это считалось thin content и било SEO.
В layout добавлена JSON-LD схема `Person` для Амриты — `knowsAbout` перечисляет источники (Гита, Бхагаватам, Чанакья-нити, ведическая астрология). Поисковики начнут ассоциировать имя «Амрита/Amrita/अमृता» с брендом.
OG-картинки skill landing увеличены до 1200×900 — это формат который Google Discover принимает в карусель.
`manifest.webmanifest` теперь динамический и зависит от локали (BCP-47 `lang`, локализованные `description` и `shortcuts.name`).
`lastmod` в sitemap для главной и `/skills` берётся как максимум `updatedAt` по всему контенту, для статических legal-страниц — фиксированная дата деплоя. Раньше всё было `new Date()` и поисковики могли решить что sitemap «шумит».
1.43
Версия 1.43
Подключили Google Tag Manager (GTM-K53B482G) на все страницы сайта.
GTM-инициализатор живёт в `<head>` каждой публичной и приватной страницы (главная, навыки, кабинет, /app, /admin, /login — все 4 локали), `<noscript>`-iframe — сразу после `<body>`, как и просит официальная Google-инструкция.
ID счётчика читается из `NEXT_PUBLIC_GTM_ID`; если переменная пустая — теги не вставляются. Файл `frontend/.env.production` уже содержит `NEXT_PUBLIC_GTM_ID=GTM-K53B482G`.
CSP в nginx (`/etc/nginx/snippets/security-headers.conf`) расширена под GTM/GA4/Yandex.Metrica: в `script-src` добавлены `googletagmanager.com`, `google-analytics.com`, `analytics.google.com`, `mc.yandex.ru`, `mc.yandex.com`, `yastatic.net`; в `frame-src` — `googletagmanager.com` (для noscript-iframe) и `mc.yandex.ru/com`.
Через GTM теперь можно подключать GA4, Google Ads, Yandex.Metrica, события e-commerce и conversion-теги без выкладки кода — все управляется в интерфейсе GTM.
1.42
Версия 1.42
Включили полноценный мультиязычный SEO под Яндекс и Google.
Добавили `/robots.txt` и `/sitemap.xml` с автогенерацией: ~1300 URL (216 навыков × 4 локали + 584 карточек × 4 локали + статика), у каждой записи `hreflang` на все 4 версии и `x-default`.
Метаданные `<title>`, `description`, `og:locale`, `og:title`, `og:description` и `<html lang>` теперь зависят от текущей локали (ru/en/hi/id) — раньше нерусские страницы отдавали русские мета-теги.
Skill landing-страницы получили `alternates.languages` со всеми 4 локалями, JSON-LD `Article` + `BreadcrumbList` + `FAQPage`, и собственный `opengraph-image` с заголовком навыка и категорией.
В layout добавлен JSON-LD `Organization` + `WebSite` (с `SearchAction`).
Поля верификации Yandex.Webmaster / Google Search Console + Yandex.Metrica / GA4 подключаются через env-переменные `NEXT_PUBLIC_YANDEX_VERIFICATION`, `NEXT_PUBLIC_GOOGLE_VERIFICATION`, `NEXT_PUBLIC_YANDEX_METRICA_ID`, `NEXT_PUBLIC_GA4_ID` (на админке/кабинете/`/app`/`/login` счётчики не подключаются).
Backend пушит обновления навыков и карточек в IndexNow (Yandex + Bing) — для этого ключ хранится в `INDEXNOW_KEY` и публикуется по `/<key>.txt`.
1.41
Версия 1.41
Перенесли инфраструктуру на новый dedicated-сервер DigitalOcean (Amsterdam).
Vedamrita теперь работает на новой машине DigitalOcean (AMS3, Ubuntu 24.04 LTS, 4 vCPU / 8 GB RAM / 154 GB NVMe), что должно слегка снизить задержку для европейских и российских пользователей.
Перенесены все данные: пользователи, навыки, программы, корпус знаний, истории чата, кредиты, согласия, audit-лог, файлы storage (turbo / app-voice / knowledge / generated-videos).
Усилены systemd-правила автозапуска (`Restart=always`, `RestartSec=5`): сервисы lk-frontend, lk-backend, astro поднимаются после краша или ребута без ручного вмешательства.
Включён swap 4 GB и UFW (firewall: открыты только 22/80/443).
Выпущен новый SSL-сертификат Let's Encrypt для vedamrita.org / www.vedamrita.org с автообновлением через certbot.timer.
1.40
Версия 1.40
Добавили РФ-compliance слой для трафика из России.
На сайте появились страницы политики ПДн, cookies/storage и удаления данных, а юридические ссылки и cookie-баннер показываются только для российского трафика.
В публичных wizard регистрации для skill QR и wish QR добавлены обязательные согласия на политику и обработку персональных данных для пользователей из России.
Backend сохраняет историю согласий в `user_consent_events`, пишет audit trail с версией документа, IP и страной и поддерживает self-service удаление аккаунта через `DELETE /api/auth/me`.
Для production добавлен SQL-файл `backend/sql/20260505_russian_compliance.sql` и документирован заголовок `X-Veda-Country`.
Удалён временный admin API модуль `video` и внутренний loopback-сервис `video-engine`.
Публичные demo-файлы reels и служебные артефакты видеогенерации больше не раздаются с сайта.
Из документации и production-конфигов убраны ссылки на video-engine и его env-переменные.
1.38
Версия 1.38
Добавили self-hosted video-engine для автоматической сборки reels.
Появился новый admin API модуль `video`: можно создать задачу на рендер, посмотреть статус и забрать готовый MP4/preview.
Backend теперь сохраняет video_jobs в MySQL и сам превращает prompt + список клипов в детерминированный render_spec.
Добавлен отдельный подпроект `/srv/lk-platform/video-engine` на Node.js + ffmpeg/ffprobe для loopback-рендера вертикальных видео 9:16.
Готовые ролики сохраняются в `/srv/lk-platform/storage/generated-videos`, превью — в `previews/`, временные файлы — в `tmp/`.
1.37
Версия 1.37
Исправили язык голосовых сообщений в чате Амриты.
Распознавание голосовых теперь получает правильный язык пользователя для ru/en/hi/id, а не сваливается в русский для всех неанглийских локалей.
Ответ Амриты после голосового сообщения теперь принудительно формируется на языке текущей локали пользователя, включая случаи неуверенного распознавания.
Служебный текст голосового сообщения в чате тоже локализован для всех четырёх языков.
1.36
Версия 1.36
Перевели страницу инструкции Push на все языки Ведамриты.
Страница `/app/push-guide` теперь использует общий i18n и показывает инструкцию на ru/en/hi/id.
Ссылка «Вернуться в чат» и переходы на push-guide из приложения сохраняют текущую локаль пользователя.
Тексты определения устройства, инструкций iPhone/iPad и Android больше не остаются русскими на локализованных URL.
1.35
Версия 1.35
Долокализовали первое знакомство с Амритой и форму QR-пожеланий.
Welcome voice (`module=amrita_welcome`) теперь генерируется на языке текущего пользователя для ru/en/hi/id.
Первое hero-сообщение в `/app` создаётся на языке пользователя, а не всегда на русском.
В регистрационной форме страницы пожелания переведены шаги, поля, placeholder пароля, повтор пароля, дата/время/место рождения и кнопка автоопределения.
Добавлена команда `npm run wishes:pdf` для сборки карточек 70×120 мм, 300 DPI.
Каждая карточка собирается как двухстраничный PDF: лицевая сторона — закреплённая картинка пожелания, оборот — тёмно-синий фон, золотая рамка, текст пожелания и QR.
QR-код ведёт на короткую страницу `/wish/:publicCode/qr` с учётом языка (`/en`, `/hi`, `/id`) и рисуется белыми круглыми модулями на тёмном фоне.
Скрипт формирует финальный ZIP со структурой `ru/eng/hi/ind`, внутри `bg/support`, внутри отдельные PDF-файлы карточек.
1.33
Версия 1.33
Уточнили сценарий первого сообщения на QR-странице пожелания.
На `/wish/:publicCode/qr` текст пожелания теперь сразу виден как уже отправленное сообщение пользователя.
Пауза и typing-индикатор начинаются после пожелания, перед первым ответом Амриты.
Первое предложение комментария Амриты появляется примерно через 3-4 секунды, следующие сообщения сохраняют паузу 4-5 секунд.
1.32
Версия 1.32
Голосовое знакомство Амриты теперь приходит при первом входе в чат.
Welcome voice (`module=amrita_welcome`) больше не зависит от первой подписки на навык.
При первом открытии `/app` backend ставит голосовое знакомство в очередь, если оно ещё не отправлялось этому пользователю.
Frontend короткое время опрашивает чат после входа, чтобы голосовое появилось без ручной перезагрузки страницы.
Защита от дублей оставлена: повторно `amrita_welcome` одному пользователю не генерируется.
1.31
Версия 1.31
Доработали QR-чат карточек пожеланий по живому сценарию.
Для карточек добавлен короткий публичный код: QR-ссылки теперь выглядят как `/wish/100001/qr`, а не как длинный UUID.
Из QR-чата убрана иллюстрация карточки: первым сообщением показывается только текст пожелания.
Шапка больше не выводит техническую категорию (`support`, `БГ`), а чат показывает комментарий строго по одному предложению с паузами 4-5 секунд.
Перед первым сообщением виден индикатор набора примерно 3-4 секунды.
CTA и регистрационный мастер переписаны под знакомство с Амритой, без упоминаний навыков и персонального плана; авторизованный пользователь сразу уходит в `/app`.
1.30
Версия 1.30
У карточек пожеланий появилась QR-страница с чат-сценарием Амриты.
Добавлен публичный маршрут `/wish/:id/qr` с поддержкой локалей (`/en/wish/:id/qr`, `/hi/...`, `/id/...`).
Страница открывается как чат: сначала сообщение пользователя с пожеланием, затем комментарий показывается частями с паузами и индикатором набора.
Финальное сообщение мягко знакомит человека с Амритой и приглашает продолжить диалог.
Нижний CTA запускает тот же сбор профиля, что и QR-навыки: имя, email, пароль, дата/время/место рождения; для существующих пользователей спрашиваются только недостающие birth-данные.
После регистрации или дозаполнения профиля запускается построение AI-астропортрета (`POST /api/me/astro-profile`) и пользователь переходит в чат `/app` на выбранном языке.
1.29
Версия 1.29
Начали генерацию мистических изображений для карточек пожеланий.
Для wish_cards добавлены поля image_url, image_has_text, image_check_notes и image_checked_at.
Иллюстрации генерируются через OpenAI gpt-image-2 по фиксированному tarot-промпту: тёмный luxury blue, медальон достижений, древние ведические конструкции, без текста.
После генерации отдельный validator на gpt-5.4-mini проверяет, что на картинке нет букв, слов, цифр, водяных знаков и читаемых надписей.
Добавлены CLI-команды `npm run wishes:images` и `npm run wishes:images:validate`; картинки сохраняются в `/wish-card-images/...` и привязываются ко всем локалям карточки.
1.28
Версия 1.28
Комментарии к карточкам пожеланий переведены на все поддерживаемые языки.
Все 146 русских комментариев переведены на английский, хинди и индонезийский через OpenAI gpt-5.4-mini.
Теперь у всех 584 карточек (`ru`, `en`, `hi`, `id`) заполнено поле commentary.
Перевод сохраняет смысл, обращение ко второму лицу, мягкий терапевтичный тон и структуру из 4 абзацев.
Добавлена CLI-команда `npm run wishes:commentary:translate` для повторных и инкрементальных переводов комментариев.
1.27
Версия 1.27
Каждая карточка пожелания теперь сопровождается тёплым комментарием.
Все 146 русских карточек получили личный комментарий из 4 абзацев — мягкий, человеческий, светский тон.
Тексты сгенерированы через OpenAI gpt-5.5 по фиксированному системному промпту (без религиозной лексики, без эзотерики, без клише «всё будет хорошо»).
В админке появилось редактируемое поле «Комментарий» и колонка-индикатор «есть/нет».
Карточки пожеланий теперь доступны на четырёх языках.
Все 146 русских карточек переведены на английский, хинди и индонезийский.
Перевод выполнен через OpenAI gpt-5.4-mini с сохранением тёплого личного тона.
В каталоге wish_cards теперь 584 строки (146 × 4 локали), категория и порядок сортировки сохранены.
Добавлена CLI-команда `npm run wishes:translate` для повторных и инкрементальных переводов.
1.25
Версия 1.25
Добавили карточки пожеланий по мотивам «Бхагавад-гиты» в новой категории «БГ».
Создана новая категория карточек «БГ» (80 уникальных фраз).
Существующие карточки категории «support» (66 шт.) сохранены без изменений.
Всего в каталоге wish_cards теперь 146 карточек.
1.24
Версия 1.24
Загрузили новый набор поддерживающих карточек пожеланий.
В каталоге wish_cards теперь 66 уникальных тёплых пожеланий-поддержек.
Каждая строка из присланного списка добавлена как отдельная карточка (категория «support»).
Старые карточки очищены, новые подняты при перезапуске backend.
1.23
Версия 1.23
Полностью очистили каталог карточек пожеланий перед загрузкой нового списка.
Все карточки пожеланий удалены из таблицы wish_cards.
Стартовый seed карточек пуст: автоматическое восстановление старого набора отключено.
Готовы загрузить новый список, как только он будет передан.
1.22
Версия 1.22
Карточки пожеланий пересобраны: в каталоге остался только духовный набор (300 фраз).
Удалены прежние карточки encouragement, оставлен только spiritual-набор.
В seed теперь 300 уникальных русских фраз духовной направленности.
Добавлен админ-эндпоинт /api/admin/wish-cards/reset-to-seed для контролируемого пересева.
1.21
Версия 1.21
Добавили админ-инструмент для управления карточками пожеланий.
В админке появился раздел «Пожелания» с поиском и фильтрами.
Можно создавать, редактировать, отключать и удалять карточки пожеланий.
Добавлены admin API-эндпоинты /api/admin/wish-cards для CRUD.
1.20
Версия 1.20
Добавили ежедневный push-ремайндер практики на 09:00 МСК для пользователей с незавершённым днём навыка.
Каждое утро в 09:00 (Europe/Moscow) backend отправляет push-напоминание открыть /app и завершить текущий день практики.
Ремайндер уходит независимо от открытия нового дня: если день не завершён, пользователь всё равно получает утренний push.
После выката выполнена ручная разовая отправка ремайндера по текущим активным подпискам для немедленной проверки.
1.19
Версия 1.19
Добавили отписку от навыков в разделе «Навыки» и исправили цикл переадресаций для /en/app, /hi/app и /id/app.
Во вкладке «Навыки» теперь можно отписаться от навыка: программа ставится на паузу, ежедневные сообщения по ней больше не отправляются, карточка исчезает из списка активных.
Добавлена кнопка отписки как в списке навыков, так и в деталке навыка.
Исправлен редирект-луп в PWA-маршрутах локалей: /en/app, /hi/app, /id/app теперь открываются без ошибки «слишком много попыток переадресации».
1.18
Версия 1.18 — карты, картинки навыков и пояснения
Обновили визуальную часть навыков и печатных материалов: единый стиль иллюстраций, готовые колоды для печати и свежие тексты-объяснения к картинкам.
Все 216 иллюстраций навыков обновлены: стиль «сакральных линий» с шагами практики; картинки согласованы с сутью вопроса.
Собраны и выложены печатные колоды (3×72 карты + бонусы) на русском, английском, хинди и индонезийском.
Бонусные карточки переведены и сверстаны на четырёх языках.
Для хинди на обороте печатных карт подключены шрифты с деванагари.
Текст «объяснение картинки» у навыков перезаполняется под новый рисунок.
1.17
Главная страница теперь объясняет сервис
Лендинг полностью переписан и переведён на 4 языка.
Hero объясняет позиционирование Амриты как ИИ-наставницы.
Добавлены секции «Не просто чат-бот», «Как это работает», блок источников и FAQ.
Полные переводы для русского, English, हिन्दी и Bahasa Indonesia.
Контекст i18n определяет локаль по URL → query → cookie.
1.16
Версия 1.16 — запиненные практики стали удобнее
Закреплённый бар незавершённых практик в шапке чата стал адаптивнее и показывает количество.
В круглой иконке появился красный бейдж со счётчиком незавершённых практик.
Дополнительная пилюля 1/N показывает текущую позицию из общего числа.
Добавлена кнопка-стрелка для переключения между несколькими практиками.
Бар стал компактнее на маленьких экранах.
Иконки платёжных методов отображаются в окне пополнения и инвойсе.
1.15
Версия 1.15 — мультиязычность сайта и приложения
Добавили полноценную поддержку 4 языков для App: русский, английский, हिन्दी, Bahasa Indonesia.
Модалка выбора языка при первом визите с автоопределением по браузеру.
Сохранение языка в cookie и localStorage на 2 года.
App полностью переведён на 4 языка.
Локализованные редиректы для /app и /login.
1.14
Версия 1.14 — пополнение кредитов криптой
В профиле появилось полноценное пополнение баланса через USDT TRC-20, BTC и ETH.
Пакеты пополнения: 100, 300, 1000 и 3000 кредитов.
Автопересчёт валюты по языку пользователя.
К сумме автоматически добавляется 4% сетевой комиссии.
Уникальная сумма для матчинга инвойсов и автоначисление через blockchain watcher.
1.13
Версия 1.13 — голосовое приветствие Амриты
При первой подписке на навык приходит голосовое приветствие Амриты на языке пользователя.
Добавлено первое приветственное голосовое сообщение.
Убрано лишнее системное сообщение про подгрузку истории чата.
Исправлено поведение длинной строки birth-данных в профиле.
1.12
Версия 1.12 — каталог навыков и скролл деталей
Каталог навыков стал компактнее, появился фильтр по категориям и исправлен скролл в карточке навыка.
Каталог показывает все 216 навыков.
Добавлен фильтр по категориям с количеством доступных навыков.
Поиск и фильтр работают вместе с корректным empty-state.
Починен скролл до нужного сообщения в деталке навыка.
1.11
Версия 1.11 — новый раздел «Навыки»
Раздел «Навыки» переделан под карточки и отдельный экран деталей с быстрым переходом в чат.
Компактные карточки навыков с круговым прогрессом.
Выделение непрочитанных/незавершённых навыков.
Отдельный экран деталей навыка.
Кнопка быстрого перехода к последнему сообщению в чате.
1.10
Версия 1.10 — стабильнее в чате
Починили внезапные ошибки Too Many Requests в чате Амриты.
Лимиты считаются отдельно по пользователю.
Спокойные chat-endpoints выведены из общего жёсткого лимита.
Фронт добавляет аккуратные ретраи с возрастающей паузой.
1.9
Версия 1.9 — навыки, баланс и тон беседы
Большое обновление: раздел «Навыки», кредитный баланс и более тонкая настройка диалога с Амритой.
Добавлен раздел «Навыки» с каталогом и подпиской.
Ограничение: один навык = одна программа на пользователя.
Добавлен кредитный баланс, история и пополнение.
Амрита адаптирует тон под vaishnav_score.
1.8
Версия 1.8
Полностью отключили дублирование практик в Telegram.
Ежедневные практики приходят только в приложение /app.
Старые программы переведены на доставку в /app.
1.7
Версия 1.7
Усилили безопасность.
Закрыт прямой доступ к внутренним сервисам.
Включены security-заголовки (CSP, HSTS и др.).
Ограничены попытки входа: 5 в минуту с IP.
Закрыта публичная документация API в продакшне.
1.6
Версия 1.6
Добавили закрепление невыполненной практики в чате.
Если день не выполнен, показывается закреплённое напоминание.
По нажатию чат возвращает к нужному сообщению.
1.5
Версия 1.5
Пофиксили ошибку входа в приложение.
При неверном пароле ошибка показывается на месте без лишних редиректов.
1.4
Версия 1.4
Упростили вход в приложение и убрали лишний переход на главную.
Со страницы входа убрана ссылка возврата на главную.
После входа пользователь сразу попадает в приложение.
1.3
Версия 1.3
Немного улучшили кнопку отправки голосового сообщения.
Во время записи голосового кнопка отправки стала зелёной.
1.2
Версия 1.2
Улучшили голосовые сообщения и индикатор ответа в чате приложения.
У голосовых сообщений появилась длительность рядом со временем отправки.
Индикатор «Пишет сообщение» отображается в шапке и ленте.
1.1
Версия 1.1
Добавили публичную страницу истории обновлений приложения.
В подвале главной страницы появилась ссылка Whats News App.
На отдельной странице видны текущая версия и история релизов.
1.0
Версия 1.0
Сбросили версию и завели публичную историю обновлений Ведамриты.