Единый источник истины для развития продукта от текущего состояния (v1.0.77) до запуска на массовую аудиторию (1M+ пользователей). Документ строится по ролям, экранам, функциям и спринтам.
Дата составления: 2026-05-29 · Версия документа: 1.0
| Роль | Зона ответственности | Решает вопросы |
|---|---|---|
| PM (Product Manager) | Стратегия, приоритеты, метрики, R&D | Что строим и зачем · в каком порядке · что измеряем |
| PO (Product Owner) | Бэклог, спринт-планирование, acceptance | Что войдёт в ближайший спринт · готов ли инкремент |
| UX/UI Designer | Паттерны, иерархия, motion, доступность | Как это выглядит и ведёт себя · WCAG |
| Engineering Frontend | Реализация, build, performance, тесты | Как это собрано · скорость · стабильность |
| Trust & Content Editor | Корректность данных (виза/налог/медицина), свежесть, верификация | Какие источники · кто проверяет · когда обновляем |
| Privacy & Compliance | GDPR, privacy-claims, юрисдикции, opt-in/opt-out | Что собираем · от кого согласие · как удалить |
| Growth & Marketing | Активация, retention, SEO/SSG, дистрибуция | Откуда трафик · что отвращает · что удерживает |
| Data & Analytics | Телеметрия, воронки, A/B-эксперименты | Что произошло · почему · сработала ли гипотеза |
| AI/ML Engineer | Реальный LLM, prompt engineering, серверный прокси | Где AI добавляет ценность · как недорого |
| DevOps / SRE | Vercel, CI/CD, мониторинг, стоимость инфры | Зелёный ли деплой · сколько стоит · масштаб |
| Accessibility | WCAG 2.2 AA, клавиатура, screen reader, контраст | Доступно ли всем · регулярный аудит |
| Localization Lead | RU/EN и далее · копирайт · юридические нюансы по регионам | На каком языке · кто переводит · что меняется по локали |
| Customer Success (с запуска) | Жалобы, гайды, обновления, community | Где спотыкаются юзеры · что им помочь сейчас |
Для каждого пункта плана ниже помечены владельцы.
- Premium-типографика (Lora), благородный dark theme — выше среднего по рынку
- Architecture-on-the-edge: статика на Vercel CDN → масштабируется по concurrency до 100K+ trivially
- Privacy-first by design: данные только в localStorage
- Sprint 7 закрыт: esbuild build, CI (GitHub Actions), 10 smoke + 15 unit, RC_LOG
- Sprint 8 закрыт: pull-to-refresh защита, единый счётчик, wrap-ряды, единый scroll-model, install-кнопка, реальные настройки + тема
- Card-stacking на всех экранах — плоская иерархия, нет primary action
- Информация без цели — метрики и числа без объяснения «зачем мне это»
- Нет journey-сигнала — какой шаг следующий
- Параллельные источники истины — Today и Wellbeing независимо ведут чек-ин
- Кнопки-обманки —
window.claudeв QnA, пустыеonClick={() => {}} - Нет аналитики — слепота на проде
- Данные асимметричны — 16 городов в атласе, 3 с глубокими досье
- AI-позиционирование не совпадает с реальностью (keyword search ≠ LLM)
Формат: JTBD (зачем юзеру) → владельцы → текущее → целевое → конкретные правки → зависимости.
- JTBD: «Я открыл приложение — что мне делать сегодня?»
- Владельцы: PM, UX, Engineering
- Текущее: 7-9 карточек стеком, пульс из 5 колец, приоритет-задача, климат, финансы, чек-ин, AI-эмбед. Плотный дашборд.
- Целевое: ОДИН primary action на экране · hero countdown · одна следующая задача · одна insight-карточка · остальное (пульс, климат, финансы) — drill-down через tap.
- Правки:
- 🔴 «детали →» в подвале пульса (
:216) — сделать кликабельным или убрать (выглядит как ссылка) - 🔴 Тап по конкретному кольцу пульса → детальный экран этой метрики, а не общий Profile
- 🟡 Hero countdown укрупнить, остальное свернуть в expandable
- 🟡 Action Loop: чёткое «Сегодня важно: …» с одним действием
- 🔴 «детали →» в подвале пульса (
- Зависимости: Design System (Sprint 9), IA-решение (Sprint 10)
- JTBD: «Какие города реально подходят мне?»
- Владельцы: PM, UX, Content Editor, Data
- Текущее: 16 локаций в plain-листе, фильтры (море/влажность/AQI/ЖКТ/EU), match-score рассчитывается, шорт-лист.
- Целевое: Journey-aware ранкинг с объяснением «почему этот город подходит ВАМ» (атопия + гастро + бюджет). Деление: «Топ для тебя» (3) → «Похожие» (5) → «Все» (collapsed). Бейджи глубины данных (полное досье / только сводка).
- Правки:
- 🟡 Бейдж «глубокое досье / краткая сводка» на карточках (3 vs 13 локаций)
- 🟡 На каждой карточке — 1-2 строки объяснения «совпало по: атопия, бюджет, безвиз»
- 🟡 Сортировка по умолчанию = «match для меня», а не общий score
- Зависимости: Content pipeline (15+ городов с глубокими досье), Design System
- JTBD: «Подходит ли мне ЭТОТ город?»
- Владельцы: Content Editor, UX, Engineering
- Текущее: 13 секций (климат, виза, налоги, медицина, гастро, расходы, школы, ВНЖ, права, риски, …). Длинная страница с табами.
- Целевое: Hero-summary (топ-3 риска и топ-3 плюса под МОЙ профиль) → секции через tab/sheet, не «полотно».
- Правки:
- 🔴
:443«детали →» корзины →nav.goto('basket', { id: l.id }) - 🔴
:509«веса →» → открыть Compare с weights sheet - 🔴
:508«по весам семьи Π» → «по вашим весам» (личный артефакт)
- 🔴
- Зависимости: —
- JTBD: «Между 2-3 городами — что выбрать?»
- Владельцы: UX, Engineering
- Текущее: Hero «лидер сейчас» + swipe-cards по каждому городу + weights sheet + gastro-справочник + devil's advocate.
- Целевое: Без больших изменений — лучший экран сейчас. Добавить экспорт сравнения (PDF/share).
- Правки: 🟡 export to PDF/image для шаринга (Growth-канал)
- Зависимости: —
- JTBD: «Какой город лучше для моей атопии/СРК?»
- Владельцы: Content Editor, Trust, UX
- Текущее: Каталог болезней (атопический дерматит, СРК, ринит, экзема рук), для каждой — top-3/bot-3 локаций по climate-score.
- Целевое: Сохранить как есть. Добавить отдачу профильных болезней юзера в Today как insight.
- Правки:
- 🟢
:117defensive fallback «Функция скоринга не загружена» — мёртвая ветка, убрать - 🟡 Расширить каталог: эндокрин (диабет 1/2 типа), кардио (гипертония)
- 🟢
- Зависимости: Trust-валидация PMID-источников
- JTBD: «Что мне делать в следующие 12 месяцев?»
- Владельцы: PM, UX
- Текущее: Kanban с 6 swimlanes (Документы / Жильё / Логистика / Финансы / Здоровье / ЖКТ) + рекомендации под профиль + редактор задач.
- Целевое: Плоский kanban → timeline с вехами. Горизонтальная ось «T-12 → T-0 → T+3», swimlanes — drill-down. Добавить генерацию задач под выбранный город из его досье (если в досье требуется апостиль свидетельства — задача появляется автоматически).
- Правки:
- 🟡 «РАЗДЕЛ 04» → убрать (жаргон)
- 🟡 «T-9 мес» → human render (как уже сделано на Today)
- 🟡 Timeline-view (toggle с Kanban)
- 🟡 Auto-generate задач из profile.targetCity досье
- Зависимости: Design System, Content schema v2 (досье хранят рекомендуемые задачи)
- JTBD: «У меня вопрос, нужен ответ в контексте моей ситуации»
- Владельцы: PM (позиционирование), AI/ML, Content Editor
- Текущее: Smart keyword search по 307 Q&A с loc-boost и audience-boost. Источники, кнопки «В план» и «Добавить в базу».
- Целевое (P2): Реальный Claude API через серверный прокси (Vercel Edge Function), RAG по досье + профилю. Honest позиционирование сейчас.
- Правки:
- 🟡 Сейчас: переименовать «AI-Компаньон» → «Поиск по базе знаний» (честность)
- 🟡 Потом (Sprint 15): Claude API через прокси с rate-limit и prompt caching
- Зависимости: AI/ML стратегия · бюджет на API · серверный прокси
- JTBD: «Прямой поиск по конкретной теме (визы, банки, налоги)»
- Владельцы: UX, Content Editor
- Текущее: 307+ Q&A по 13 категориям, профильная подсветка «для меня», кнопка «Спросить AI».
- Целевое: Убрать кнопку-обманку до настоящего AI. Сделать ленивую загрузку (P0-bandwidth fix).
- Правки:
- 🔴 «Спросить AI» (
:108) → удалить кнопку ИЛИ заменить на честный response из той же базы поиска. Сейчас всегда «Claude API недоступен» — обман пользователя. - 🟡 Lazy-load qna.js (вынести из бандла — 310 KB gzip!)
- 🔴 «Спросить AI» (
- Зависимости: Performance refactor (Sprint 11)
- JTBD: «Я в каком состоянии физически и эмоционально? Как мне помочь себе?»
- Владельцы: PM, UX, Engineering
- Текущее: 6 фаз релокации с инструментами, ежедневный чек-ин (6 шкал), журнал, дневник пары, симптом-трекер, рефлексия. Параллельно с Today чек-ином — отдельный store.
- Целевое: Единый источник истины для чек-ина. Today пишет в
checkin:log, Wellbeing читает оттуда же и показывает историю. Один scale model. - Правки:
- 🔴 АРХИТЕКТУРНАЯ: Объединить
checkin:log(Today) иwb:mood/wb:history(Wellbeing). Today — quick entry. Wellbeing — extended journal по тем же датам. - 🟡 Phase auto-detect из daysLeft, не выбор пользователя
- 🔴 АРХИТЕКТУРНАЯ: Объединить
- Зависимости: Engineering refactor (один store, миграция данных существующих юзеров)
- JTBD: «Сколько мне это будет стоить и хватит ли денег?»
- Владельцы: PM, Engineering, Trust
- Текущее: Monte Carlo 12-60 мес, транзит капитала, ROI-калькулятор, FX-курс из заглушки.
- Целевое: Реальный FX из надёжного источника (cbr.ru через Edge Function с кешем 1h).
- Правки:
- 🟡 FX endpoint:
vercel.jsonrewrite/api/fx→ Edge Function проксирует cbr.ru/openexchange, кеш 1h - 🟡 Убрать «заглушка» Tag когда реальный курс есть
- 🟡 FX endpoint:
- Зависимости: DevOps (Edge Function)
- JTBD: «Кто я в этом приложении · мои данные · контроль»
- Владельцы: PM, UX, Privacy
- Текущее: Identity, family, health, finance, privacy actions, multi-profile, danger zone. Карточка «О приложении» + Диагностика.
- Целевое: Чистый разделение «кто я» (identity) от «как работает приложение» (Settings). Карточку Диагностика — за debug-флаг (не показывать обычным юзерам).
- Правки:
- 🔴 Шестерёнка ⚙ топбара (
:72) —onClick={() => {}}→nav.goto('settings') - 🟡 Toggle питомцев (
:204) — однонаправленный (только убрать). Сделать двунаправленным или вынести в форму «добавить питомца». - 🟡
alert/prompt→ Sheet'ы (:57,59,305,315,433,437) — нативные диалоги выпадают из дизайна. - 🟡 Диагностика — спрятать за
?debug=1или long-press на версии. Обычный юзер видит «6 ошибок» — подрыв доверия.
- 🔴 Шестерёнка ⚙ топбара (
- Зависимости: Design System (Sheet pattern), Privacy review
- JTBD: «Настроить под себя приложение»
- Владельцы: UX
- Текущее: Тема (тёмная/светлая), курс ₽/$, язык-инфо. Реализовано в Sprint 8.
- Целевое: Добавить язык RU/EN переключатель когда есть локализация. Add notifications opt-in (когда web-push реализуем).
- Правки: —
- Зависимости: Localization, Notifications
- JTBD: «Все мои сертификаты, апостили, выписки в одном месте — экспорт когда надо»
- Владельцы: PM, UX, Privacy
- Текущее: Зарегистрирован маршрут
/docs, заглушка «Vault для апостилей». В UI нет точки входа. План уже считает «Документы 0/3» в swimlanes Plan — обещание есть, реализации нет. - Целевое: Полноценный Document Vault. Список документов с категориями (визы, медицина, образование), статусом (нужно / в процессе / готово), сроками, файлами (превью + ссылка). Файлы НЕ хранятся (privacy-first) — только метаданные и пользовательская ссылка на свой Google Drive / Telegram saved messages.
- Правки:
- 🟡 Sprint 14: реализовать ScreenDocs полноценно с категориями и связью с Plan
- Связь: задача в Plan «Апостиль свидетельства» → линк на Documents → запись с превью статуса
- Зависимости: Plan schema extension, Privacy review (что хранить локально)
- JTBD: «Расскажи приложению о себе за 2 минуты — чтобы получить персональную ценность»
- Владельцы: UX, PM, Growth
- Текущее: 8 шагов (welcome, name, tags, family, health, finance, target, ready). Drafts persist в localStorage. Install-кнопка на welcome.
- Целевое: Сократить required-шаги до 2 (name + tags), остальное opt-in после первого «Сегодня». Добавить opt-in аналитики как явный шаг (privacy-first прозрачность).
- Правки:
- 🟡 Перенести family/health/finance/target из required-стэка в «можно потом» через Today-CTA
- 🟡 Шаг «согласие на анонимную телеметрию» с понятным объяснением (Privacy)
- 🟡 Анимация прогресс-бара плавнее, copy теплее
- Зависимости: Analytics integration
- Целевое: Единые паттерны для всех экранов. Сейчас разнобой.
- Правки: Design System включает:
<Empty icon title sub action>,<Skeleton>,<ErrorBoundary>— уже есть, формализовать в DS.
- Владельцы: Engineering, DevOps
- Текущее: SW network-first, manifest, install-prompt, update-flow.
- План:
- Web Push notifications (P2) — для критичных обновлений визовых правил по target-city
- Background sync (P3) — отложенные действия при offline
- Текущее: Локальные логи 200 событий,
?logs=1viewer, watchdog. - План:
- Opt-in upload-эндпоинт для crash-репортов (Sprint 13, аналитика)
- Скрыть UI диагностики за
?debug=1(Sprint 8.2)
- Текущее: dark/light через
data-theme, Settings + toggle на Today. - План:
prefer-color-scheme: media-queryдля авто-detect при первом старте- High-contrast mode (Accessibility, P3)
- Текущее: только RU.
- План (P3, Sprint 15-16):
- Вынести строки из JSX в
app/i18n/{ru,en}.json - Хук
useT(key)с fallback на RU - Settings → переключатель RU/EN
- EN-копи — Marketing/Localization Lead с релевантной аудиторией (англоязычные релоканты в РФ)
- Вынести строки из JSX в
- Владельцы: AI/ML, DevOps, PM
- Текущее: keyword search + кнопка-обманка
window.claude. - План (Sprint 15):
- Vercel Edge Function
/api/ai→ проксирует Anthropic API (key в env) - Rate-limit per session (10/hour free, расширение в premium)
- Prompt caching через Anthropic prompt-cache feature → 80%+ экономии стоимости
- RAG: контекст из выбранного города + профиля (анонимный)
- Honest output: «AI-ответ может содержать ошибки, не юридический совет» disclaimer
- Vercel Edge Function
- Владельцы: Engineering, Trust
- Текущее: хардкод
window.FXsnapshot. - План (P2):
- Edge Function
/api/fx→ cbr.ru или openexchangerates, кеш 1h - Источник + дата обновления видны в UI
- Fallback на снапшот при ошибке API
- Edge Function
- Владельцы: UX, Engineering
- Текущее: удалён схематичный MiniMap.
- План (P2):
- MapLibre GL JS с self-hosted vector tiles (или ProtoMaps free tier) — works на RU-сетях
- Пины городов из досье, кластеризация, цветовая кодировка по match-score
- Только на Atlas как опциональный toggle (default = list)
- Владельцы: Privacy, Engineering, PM
- Текущее: только локально (localStorage).
- План (P3, после публичного запуска):
- E2E-зашифрованный sync через короткий код (как Bitwarden / Signal). Юзер вводит код на втором устройстве — получает копию профиля.
- Альтернатива: только manual JSON export/import (как сейчас) + QR-код для быстрого переноса.
- Владельцы: Engineering, Growth
- Текущее: нет.
- План (P3, после достижения retention baseline):
- Opt-in после первой недели использования
- События: «свежее обновление по визе для [твой город]», «новая задача по плану», «месяц до переезда»
- Privacy: только локальные триггеры или анонимные топики
- Владельцы: Data, Privacy, DevOps
- Текущее: ноль аналитики.
- План (Sprint 13):
- Self-hosted Plausible ИЛИ собственный Edge endpoint
/api/track - События без PII (см. taxonomy ниже)
- Opt-in по умолчанию
false, активация через явный шаг онбординга или Settings - Event taxonomy:
app.boot— version, platformonboarding.step_complete— step_id, durationonboarding.complete— total_duration, steps_skippedscreen.view— screen_idaction.task_complete— laneaction.shortlist_change— countaction.compare_view— countaction.dossier_open— city_idaction.install_prompt— outcome (accepted/dismissed)error.boundary— screen, message_hash (без stack-trace с PII)
- Воронки:
- F1 Activation: install → onboarding_complete → 1st task complete (D0)
- F2 Decision: shortlist≥2 → compare → target_city_set
- F3 Retention: D7, D14, D30 return
- Dashboard: простой self-hosted, доступ только PM
- Self-hosted Plausible ИЛИ собственный Edge endpoint
- Владельцы: Data, PM
- Текущее: нет.
- План (P3, после стабильной базы метрик):
- Простой
experiments.jsonс deterministic hash от user-id (анонимный uuid из localStorage) - Аналитика записывает variant_id в каждом событии
- Тестировать: копирайт CTA, порядок onboarding-шагов, дефолтные веса
- Простой
- Владельцы: Content Editor, Trust
- Текущее: 3 полных досье (Кобулети, Поморие, Ереван), 13 в индексе с краткой сводкой.
- План (Sprint 14, параллельно):
- Приоритет следующих 7: Тбилиси, Белград, Будапешт, Алматы, Ташкент, Лиссабон, Стамбул
- Каждое досье — следовать
recuest.mdшаблону + AJV-валидация (CI блокирует если поля missing) - Freshness-аудит раз в квартал (
npm run audit:freshness) - Source tier уже реализован (official / community / secondary) — поддерживать
- Владельцы: Accessibility, UX
- Текущее: базовый aria-label на IconBtn, не аудировалось.
- План (P3):
- WCAG 2.2 AA audit (контраст, keyboard nav, screen reader)
- Focus management в Sheet'ах
- Динамические aria-live для async-загрузки
- Skip-link на Today
- Владельцы: Engineering, DevOps
- Текущее: bundle 1.6 МБ (~460 KB gzip), Time-to-Interactive ~3-4s на 4G.
- План:
- Sprint 11: lazy-load qna.js (вынести из бандла) → −310 KB первой загрузки
- Sprint 11: code-split по экранам (когда перейдём на ES modules)
- Sprint 11:
minify: trueв build.mjs для prod - Sprint 11: иммутабельные хеши в именах ассетов (
app.[hash].bundle.js) - Sprint 12: Web Vitals мониторинг через RC_LOG
- Tokens: typography scale, spacing scale (4/8/12/16/24/32/48), elevation, motion timings, semantic colors
- Component library audit: инлайн-стили → классы, канонизация Card/Button/Input/Pill/Sheet/Tag
- Motion-язык: 3 durations, 1 easing, стандартные переходы
- Empty/Loading/Error templates: один паттерн
- Icon-set: финализировать
- 4 таба вместо 5: Сегодня / Атлас / План / Я. AI — FAB или контекстный, не отдельный таб
- Journey-сценарии: Just exploring / Have a city / Comparing / In execution / Settled
- Primary action per screen
- 🔴 Все кнопки-обманки убрать: пустые
onClick,window.claude - 🔴 Личные следы убрать: «Π», «$2400» в
index.js:502 - Жаргон на Plan: «РАЗДЕЛ 04» → удалить, «T-X» → human
- Диагностика → за
?debug=1
- JTBD юзера: «Гуглю "переезд в Тбилиси", нахожу нас»
- Каждый город → статическая HTML-страница с мета-тегами, OG-image, structured data (schema.org Place)
- Google индексирует → органический трафик = главный канал на 1M
- Что бесплатно: атлас, базовое сравнение, план, чек-ин, чат с базой
- Premium ($5-10/мес): реальный AI без лимитов, экспорт планов в PDF, sync между устройствами, приоритетная поддержка по визам
- B2B (отдельно): «релокация-сервис» белого лейбла для HR-отделов компаний (зарплата AI-агента ниже стоимости найма консультанта)
| Категория | Метрика | Цель (3 мес) | Цель (12 мес) |
|---|---|---|---|
| Activation | % завершивших онбординг | 60% | 75% |
| Activation | % выбравших target_city за 7 дней | 30% | 50% |
| Engagement | D7 retention | 25% | 40% |
| Engagement | D30 retention | 10% | 20% |
| Value | Avg # городов в шорт-листе | 2.5 | 3.5 |
| Value | % открывших полное досье | 40% | 60% |
| Performance | TTI на 4G (p75) | < 4s | < 2.5s |
| Performance | Crash-free sessions | 99% | 99.9% |
| Trust | NPS proxy (если опросим) | +20 | +40 |
| Growth | Органический трафик (% от total) | 20% | 60% |
| Sprint | Название | Содержание | Владельцы | Критерий выхода |
|---|---|---|---|---|
| 8.2 | Cleanup критических багов | QnA AI-кнопка, шестерёнка Profile, 2 пустые кнопки location, «Π/$2400», Plan-жаргон, Диагностика за ?debug=1 |
Eng, UX | Все 🔴 из аудита закрыты |
| 9 | Design System | Tokens, компонент-аудит, motion, empty/loading/error patterns | UX, Eng | DS-doc + storybook-like reference |
| 10 | IA & Navigation | 4 таба, FAB-AI, journey-mapping | PM, UX | Карта navigation утверждена |
| 11 | Performance | lazy qna.js, minify, immutable hashes, Web Vitals в RC_LOG | Eng, DevOps | TTI 4G < 4s, bundle < 200KB initial |
| 12 | Today + Атлас redesign | Primary action, progressive disclosure, journey-aware атлас | UX, Eng | Юзер-тесты с 5+ человек |
| 13 | Аналитика | Self-hosted Plausible или Edge endpoint, event taxonomy, dashboards | Data, DevOps, Privacy | Воронки видны в dashboard |
| 14 | Документы + Контент | ScreenDocs полноценный · 7 новых городских досье | UX, Content | 10 городов с глубокими досье |
| 15 | Real AI (Claude) | Edge Function-прокси, rate-limit, prompt caching, RAG | AI/ML, DevOps | AI-чат отвечает на 50 тест-вопросах |
| 16 | SEO/SSG + EN | Static city pages, OG-images, EN-локализация core-flow | Growth, Localization, Eng | Google индексирует, EN core working |
| 17 | Freemium + B2B | Stripe-интеграция, Premium-фичи, B2B-pitch deck | PM, Eng | Первая платная подписка |
Параллельно постоянно: Trust-валидация данных, freshness-аудит, a11y, security review.
| Риск | Митигация |
|---|---|
| Vercel Hobby лимиты (100 GB/мес) | Sprint 11 lazy + Pro plan ($20/мес) |
| Anthropic стоимость на масштабе | Sprint 15 prompt caching + rate-limit + freemium-лимит |
| RU-сети блокируют CDN | Уже решено self-host (vendor/), для карты MapLibre — self-host tiles |
| Корректность визовых данных (юр. ответственность) | Trust Editor + disclaimer «не юридический совет» везде |
| AI hallucinations | Disclaimer + ссылки на источники + ручная проверка топ-100 ответов |
- 1.0 (2026-05-29) — первая версия, основана на аудите v1.0.77