Дата: 23 сентября 2026
Основание: код репозитория (веб: Next.js App Router, контур applyContourAction, Android Compose-клиент того же /api/contour).
Не проверялось в браузере в этом аудите. Часть сценариев (вход, каталог, сделка) подтверждалась ранее на локальном пилоте; текущий документ не считает UI «готовым» только по названию экрана.
Главная функция продукта: соединять арендодателя и арендатора, помочь найти вещь, договориться и вернуться за следующей арендой. Ориентир механики — BlaBlaCar: нашёл предложение → связался → организовал сделку в интерфейсе. SHARENTA при этом остаётся площадкой аренды вещей, а не поездок.
Платежи, SMS, внешний KYC и УКЭП не подключены — это честно отражено в UI (SettlementNotice, копирайт KYC). Этот план не предлагает подключать провайдеров, пока владелец продукта явно не решит иначе.
SHARENTA — рабочий городской пилот: публичный каталог, карта OSM, карточка юнита, заявка на даты, чат сторон, цепочка сделки (заявка → документы → подписи → фото выдачи → аренда → фото возврата → отзыв), кабинет с двумя рейками CRM, модерация объявлений и ручной KYC.
Слоган в шапке: «Найди. Возьми. Верни.»
Что уже является настоящим контуром, а не макетом:
/api/catalog, applyFilters) по названию, бренду, модели, описанию, характеристикам, категории, цене, рейтингу, городу, датам.canCreateBooking, BUSY_BOOKING_STATUSES, advisory lock в Postgres).completed: арендатор — о юните, владелец — об арендаторе.Что выглядит как продукт, но не является законченной пользовательской ценностью: тарифы PRO/MAX, реферальные выплаты, каналы push/email/telegram, «просмотры» в аналитике, сортировка «по расстоянию», процент ответов владельца, Android-цифры рефералки.
Легенда статуса:
| Метка | Значение |
|---|---|
| Работает | Есть UI + реальное действие в контуре / API |
| Частично | Есть каркас, но не закрывает сценарий |
| Маркетинг / заглушка | Экран или копирайт без соответствующей логики |
| Нет | В коде не найдено |
| Функция | Статус | Что может пользователь | Чего нет / проблема |
|---|---|---|---|
Главная лента / | Работает | Категории, карточки, «ещё», пустой город | Нет сортировки на самой главной; состояние фильтров общее с поиском |
Поиск /search | Работает | Запрос, AI-разбор фразы, фильтры, «свободен на выходные» | Пустой результат только «измените формулировку», без соседних городов и подписки |
Категории /categories | Работает | 10 категорий, лента категории | Подкатегории транспорта ведут в /search без фильтра |
Карта /map | Работает | Пины Leaflet, карточка снизу, диплинк ?id= | Нет геолокации пользователя, радиуса, фильтров на карте; лимит 120 |
| Фильтры | Работает | Категория, цена/день, рейтинг, доступность, «проверенные», даты, все города / город шапки, сорт | Нет бренда/модели как отдельных контролов (они есть в полнотексте); «по расстоянию» сортирует зашитый distanceKm, не GPS |
Карточка /listings/[id] | Работает | Фото, цена, залог, вкладки обзор/хар-ки/календарь/условия/отзывы, избранное, шаринг ссылки, AI по юниту, бронь | Нет блока «похожие»; бренд/модель не как отдельные поля UI; просмотры не пишутся |
Профиль владельца /users/[id] | Работает | Био, звёзды из отзывов, активные объявления, «написать» | responseRate — сидовое число, не считается по чатам; нет подписки на владельца |
Избранное /favorites | Работает | Сердце на карточке и PDP, гостевой список + claimGuestFavorites | Нет в нижней навигации, только кабинет |
| Недавно просмотренные | Нет | — | Поле listing.views есть, инкремента при открытии нет |
| Похожие / рекомендации | Нет как продукт | AI-текст «рядом ещё N похожих» | Нет карусели и фида |
| Сохранённый поиск | Нет | — | Есть только watchCity из пустого города |
| Подписка на появление в городе | Работает | Кнопка в CityEmptyState; при createListing уходит in-app notice | Нет управления подписками вне пустого экрана; нет query-алертов |
| Функция | Статус | Что может пользователь | Чего нет / проблема |
|---|---|---|---|
Регистрация / вход /login | Работает | Логин (почта или имя) + пароль, сессия cookie/Bearer | Нет OAuth, сброса пароля по почте (копирайт честный) |
Онбординг /welcome | Работает | Язык, слайды, роль, гость | Android стартует с ленты/демо, без этого потока |
Создание /landlord/create | Работает | 5 шагов: тип → фото → AI → цена/город → выдача → модерация | Нет календаря доступности; координаты всегда 55.752, 37.591 (Арбат); район по умолчанию «Арбат»; новые объявления помечаются verified: true в publishDraft без проверки |
Редактирование /cabinet/listings/[id] | Работает | Название, описание, цена, залог, фото, выдача, пауза, клик по дням календаря | Нет смены точки на карте; отклонённое нельзя явно «отправить снова на модерацию» отдельным статусом (правка есть, статус сам не едет в moderation) |
| Календарь доступности | Работает | PDP, бронь, редактирование, /cabinet/calendar | В создании объявления отсутствует; кабинетный календарь подсвечивает только start/end, не весь период |
| Функция | Статус | Что может пользователь | Чего нет / проблема |
|---|---|---|---|
Заявка /book/[id] | Работает | Даты + время получения/возврата, сообщение, итог = дни × pricePerDay | Гость выбирает даты, отправка после входа; KYC verified обязателен; своё объявление нельзя; сообщение заявки не копируется в чат |
| Подтверждение / отказ | Работает | Владелец: подтвердить → статус брони documents + пакет документов; отклонить → rejected | Нет встречного предложения и других дат; отказ терминальный |
| Instant book | Нет | — | Всегда requested → действие владельца |
Чат /messages | Работает | Текст, фото, системные статусы, привязка к listing, непрочитанные | Вопрос до заявки спрятан в иконке на карточке владельца; нет быстрых ответов |
Кабинеты /cabinet, /landlord | Работает | Единый аккаунт, переключатель роли, CRM две рейки, список броней | Дубли экранов (кабинет / landlord / CRM / finance / analytics) |
| Выдача / возврат | Работает | Фото + чеки; без них нельзя active / completed | Место и время передачи — свободный pickupNote, без точки на карте и подтверждения слота |
| Документы | Работает | Генерация при подтверждении, просмотр, подпись флагом в приложении | Не УКЭП; два хранилища (documents и dealDocuments) |
| Отзывы | Работает | После completed, один на автора/бронь, ответ владельца | Не обязательны; нет «забронировать снова» с карточки отзыва |
| Доставка | Частично | Enum meetup / pickup / delivery + заметка | Нет логистики, адреса, стоимости доставки |
Цепочка статусов брони (код): requested → documents (кнопка «Подтвердить») → signed → active → completed, либо rejected / cancelled / expired / noshow / unreturned.
Статус confirmed в типах есть, в живом пути почти не сохраняется.
| Функция | Статус | Что может пользователь | Чего нет / проблема |
|---|---|---|---|
| История аренд | Работает | /bookings, CRM | Нет CTA повторной заявки с теми же датами/юнитом |
| Уведомления | Частично | In-app список, бейдж, mark all read | Каналы push/email пишутся в аудит сделки, доставки нет; время всегда «только что» |
| Модерация | Работает | Админ approve/reject, опциональный AI-hint | — |
| KYC | Частично | Заметка ≥20 символов → админ вручную | Без админа новая регистрация не бронирует; OCR нет (копирайт честный) |
| Тикеты | Частично | Создать, админ меняет статус | Нет переписки по тикету; «чат поддержки» ведёт в обычные /messages |
| Жалобы | Работает | /security/report создаёт тикет; блок пользователя | — |
Буст /services | Частично | Покупка пишет purchases + boostedUntil, влияет на сорт | Нет оплаты; «+40% просмотров» — маркетинговая строка |
| PRO / MAX | Маркетинг | Чек покупки | Нет entitlements, кабинет компаний / филиалов / сотрудников отсутствует |
Рефералка /referral, /r/[code] | Частично | Код запоминается при регистрации; статистика 10% от покупок услуг, не аренды | Выводов денег нет; Android показывает зашитые 12 / 8 / 4250 ₽ |
| AI | Частично | Поиск, ассистент каталога, разбор фото, цена, брифинг сделки, модерация | Без AI_API_KEY — mock; не выдумывает объявления (это правильно) |
| Аналитика владельца | Частично | Сделки, избранное, отзывы из контура | views не считаются; «спрос» как отдельный продукт нет |
| Мультиединицы / почасовая / комплекты | Нет | Модель: 1 listing = 1 юнит, цена за сутки | Не предлагать, пока суточная модель не стабильна |
| Android | Частично | Лента, поиск, карта OSM, карточка, бронь, чат, кабинет, объявление, админ KYC/модерация/тикеты, ассистент | Нет CRM/finance/welcome; рефералка фейковая; city watch не виден |
Дубли, которые не надо плодить вторым контуром: избранное vs listing.favorites (счётчик); кабинет vs /landlord; буст «в ленте» и «в поиске» (один флаг); документы сделки vs legacy documents; чат с карточки, из брони и из профиля.
| Шаг | Сейчас | Улучшить | Не хватает |
|---|---|---|---|
| 1. Открывает SHARENTA | Онбординг / гость / лента «Рядом с вами»; город в шапке | Городской пилот на Vercel без Postgres эфемерен (не тема этого плана, но влияет на доверие) | — |
| 2. Категория или поиск | Главная, /search, /categories, шапка | Общее состояние query/filters путает при переходах | Подкатегории транспорта не фильтруют |
| 3. Место и период | Город шапки; даты в фильтрах и «выходные»; карта отдельно | Даты спрятаны в панели фильтров, не на первом экране поиска | Живой радиус / «рядом со мной»; сорт «по расстоянию» врёт |
| 4. Сравнивает выдачу | Карточки, цена, бейджи, нагрузка, рейтинг из отзывов | Нельзя открыть два юнита рядом | Нет сравнения, похожих, recently viewed |
| 5. Карточка | Полная PDP | CTA «Забронировать» сильнее, чем «спросить» | Похожие внизу |
| 6. Цена, условия, фото, владелец | Есть; владелец кликабелен; календарь вкладкой | distanceKm и район у новых объявлений фиктивные | Честный пин на карте у свежих юнитов |
| 7. Вопрос или заявка | Чат с иконки; бронь с опциональным message | Message не попадает в чат; вопрос не primary CTA | Явный «Написать владельцу» рядом с бронью |
| 8. Ответ владельца | In-app notice + чат, если владелец зашёл | Если владелец не в приложении — тишина | Push/email (зависимость от решения по каналам) |
| 9. Согласовать даты | Только новый запрос или отказ | Календарь на брони один месяц | Встречные даты, правка периода без новой заявки |
| 10. Подтвердить договорённость | Подпись флагом после документов | Статусы documents vs кнопка «Подтвердить» | Понятный чеклист «что дальше» одним языком |
| 11. Место и время передачи | Время в заявке; pickupNote если владелец заполнил | Легко пропустить | Подтверждённый слот + точка; напоминание в чат |
| 12. Пользуется и возвращает | Статусы active / complete / unreturned; фото | Арендатор меньше кнопок, чем владелец | Арендатору ясно, что делать в день возврата |
| 13. Отзыв | Ссылка после completed | Легко уйти, не оставив | Напоминание; повторный заказ с той же карточки |
| 14. Вернуться | История броней, избранное, профиль владельца | Надо искать вручную | Repeat CTA, подписка на владельца, похожие |
Узкое место сценария A: после «нашёл» следующий шаг — либо жёсткая заявка с KYC, либо спрятанный чат. Нет мягкого BlaBlaCar-шага «написать и договориться», а отказ владельца обнуляет путь.
| Шаг | Сейчас | Улучшить | Не хватает |
|---|---|---|---|
| 1. Регистрируется | Логин/пароль, роль | KYC не нужен, чтобы сдать, только чтобы взять | — |
| 2. Создаёт объявление | Нижняя вкладка «Сдать», мастер | 5 шагов нормальны | Календарь и карта в мастере |
| 3. Фото, описание, цена | Фото обязательны; AI предлагает, не публикует сам | Можно пропустить AI и застрять без названия до финала | Подсказки хар-к без AI (шаблоны категории) |
| 4. Локация и доступность | Текстовый город; выдача meetup/pickup/delivery | Координаты и район зашиты | Реальная точка; закрытые дни до модерации |
| 5. Публикует | status: moderation, в ленте не видно | verified: true на сыром юните вводит в заблуждение | Явный статус «на проверке» в кабинете уже есть — не ставить «Проверен» до модерации |
| 6. Получает обращения | Notice «новая заявка», CRM needsAction | Легко не заметить, если не открывать колокольчик | Список входящих на первом экране кабинета уже частично есть (actionDeals) — усилить, не дублировать новым inbox |
| 7. Отвечает на вопросы | Чат | Нет шаблонов | Быстрые ответы: «свободно», «залог», «где встреча» |
| 8. Подтверждает или альтернатива | Подтвердить / отклонить | Отклонить = тупик для арендатора | Предложить другие даты / короткий комментарий отказа |
| 9. Согласовывает передачу | patchDealFields (заметка, способ) пока документы готовы | Скрыто в Deal Workspace | Явный блок «когда и где отдаём» |
| 10. Передаёт | Фото выдачи → «Начать аренду» | — | — |
| 11. Получает обратно | Фото возврата | — | Напоминание в день endDate |
| 12. Завершает | «Завершить аренду» / «Не вернул» | — | — |
| 13. Получает отзыв | Арендатор может написать; владелец оценивает гостя | Не форсится | — |
| 14. Управляет и принимает новые | Пауза, цена, календарь, буст | Аналитика просмотров фейковая | Не строить второй кабинет; довести текущий |
Узкое место сценария B: объявление появляется «не там» на карте и без календаря, а на входящую заявку можно только да/нет.
publishDraft пишет lat/lng Арбата и distanceKm: 0.3 независимо от города.documents).Не проблемы этого плана (уже сделано или сознательно отложено): поиск по каталогу, антидаблбук, фото сделки, честный копирайт «деньги мимо платформы», модерация, избранное, city watch.
Правило: P1 — без этого трудно найти → связаться → договориться → арендовать. P2 — быстрее договариваются и возвращаются. P3 — рост бизнеса. Не включать то, что уже работает.
#### P1-1. Вопрос владельцу как равный шаг рядом с заявкой
openConversation с иконки; createBooking.message лежит на брони.createBooking создаёт/линкует conversation + user message; браузер: карточка → чат; бронь с текстом → тред содержит текст.#### P1-2. Ответ на заявку: другие даты или короткий отказ, не только «нет»
setBookingStatus confirm/reject.canCreateBooking.#### P1-3. Честная точка на карте и город при публикации
publishDraft hardcode lat/lng/district; город — текстовое поле.CITIES + ручной пин на карте или адрес → lat/lng; district не подставлять «Арбат», если город другой; distanceKm не показывать, пока нет гео пользователя (лучше скрыть, чем врать).listingInCity.#### P1-4. Доступность в мастере создания
unavailableDates через toggleListingDate после создания.createBooking.#### P1-5. Пустой поиск с следующим действием
EmptyState без CTA; CityEmptyState уже умеет соседей и watch.#### P1-6. Понятный статус заявки одним языком
confirmed; арендатор не видит «что делать завтра»./bookings/[id]: заявка → ответ владельца → подписи → фото выдачи → аренда → фото возврата → отзыв. Без новой state-машины, только UX поверх существующих статусов.canOwnerAct / canRenterCancel.#### P1-7. Снять ложные бейджи с нового объявления
verified: true при публикации; сорт «по расстоянию» по сиду.publishDraft + filters.sort === "distance" по distanceKm.verified только после модерации/KYC владельца (как решите в вопросах); скрыть или переименовать сорт, пока нет гео.#### P2-1. Похожие объявления на карточке
similarity для ранга поиска; AI-текст.status=active.#### P2-2. Недавно просмотренные + счётчик просмотров владельца
views сид/поле без инкремента.#### P2-3. Повторить аренду
/bookings история./book/[id] с теми же дефолтными длительностями, если юнит active.readBookDates).#### P2-4. Избранное заметнее; подписка на владельца — нет, если не решите иначе
/favorites работает.#### P2-5. Instant confirmation — только после решения PM
documents (или согласованный статус) без кнопки владельца; без флага — как сейчас.#### P2-6. Сохранённый поисковый запрос
watchCity.createListing после модерации.#### P2-7. Быстрые ответы владельца
#### P2-8. Честность Android-рефералки и сервисов
ReferralScreen MiniStat hardcoded; web referralStats().#### P2-9. Переписка по тикету поддержки
/messages.Не делать, пока P1 не закрыт. Кратко, чтобы не изобретать заново:
| ID | Задача | Зачем | Сейчас | Заметка |
|---|---|---|---|---|
| P3-1 | Права PRO (не новый кабинет) | Компании проката | Покупка без entitlements | Сначала решить, нужен ли PRO; иначе спрятать тарифы |
| P3-2 | Оплата буста | Продвижение | Буст уже ранжирует | Только после выбора провайдера PM |
| P3-3 | Want-ad «ищу вещь» | Спрос без оффера | City watch | Отдельный рынок; не дублировать watch |
| P3-4 | Комплекты / add-ons | Чек больше | Нет | Рано при 1 юнит = 1 listing |
| P3-5 | Почасовая / долгая ставка | Гибкость | Только сутки | Ломает календарь и итог; не смешивать |
| P3-6 | Несколько единиц / филиалы | Прокат | Нет | Другая модель инвентаря |
| P3-7 | Push/email | Вернуть к ответу | Каналы в аудите | Имеет смысл после P1-1, это продукт «достучаться», не Kafka |
| P3-8 | Реферальные выплаты | Рост | Учёт % от услуг | Без кассы платформы — только отчёт, как сейчас |
| P3-9 | Расширенный AI | Скорость листинга | Уже есть разбор фото и поиск | Не центр плана |
| P3-10 | Follow владельца | Возвращаемость | Нет | После P2-3, если избранного мало |
Не параллелить новый кабинет, новый мессенджер и PRO.
Android: повторять те же P1 на уже существующих экранах Compose, не поднимать отдельный продукт. Исключение — P2-8 сразу, это баг доверия.
P1-1 (чат)
├── P1-2 (другие даты в том же диалоге)
└── P2-7 (шаблоны)
P1-3 (пин)
└── P1-7 (distance имеет смысл только после пина / скрытия сорта)
P1-4 (календарь в create)
├── P1-2 (предложение дат)
└── P2-5 (instant book, если разрешите)
P1-5 (пустой поиск)
└── P2-6 (saved search)
P2-3 (repeat)
└── P3-10 (follow — опционально)
PRO / оплата / want-ad / hourly / multi-unit
└── ничего из P1; не начинать раньше решения PMСуществующие модули, на которые опираться, а не заменять: applyContourAction, canCreateBooking, useCatalogListings, CityEmptyState, DealWorkspace, watchCity, dual CRM.
См. поле «Готово когда» у каждой задачи. Общий критерий пилота сценария:
Новый арендатор без демо-карточек: находит юнит в своём городе → пишет владельцу или шлёт заявку с текстом в чате → владелец предлагает другие даты или подтверждает → обе стороны видят один следующий шаг → фото выдачи → фото возврата → отзыв → из истории можно запросить тот же юнит.
Новый арендодатель: публикует фото, цену, свою точку, закрытые дни → после модерации юнит на карте там, где указал → видит входящую заявку и отвечает не только «нет».
Регрессы, которые нельзя сломать: нет двойной брони, гость не читает чужие чаты, KYC-копирайт не обещает OCR, деньги аренды не «принимаются» UI, AI не выдумывает юниты.
Без этих ответов часть бэклога нельзя честно брать в работу.
/services, пока нет провайдера?CITIES / свободный ввод города мира? От этого зависит P1-3.listing.verified vs user.kyc).src/app/**, контур src/lib/contour.ts, типы, каталог, deal-engine, CRM, Android Store.kt / экраны.| Функция | Статус сейчас | Что требуется | Приоритет |
|---|---|---|---|
| Главная лента | Работает | Не дублировать; общее состояние фильтров не трогать без нужды | — |
| Поиск, фильтры, категории | Работает; транспорт-подкатегории пустые | Починить подкатегории вместе с поиском, не новым каталогом | P1-5 смежно |
| Карта | Работает | Честные пины новых юнитов | P1-3 |
| Карточка объявления | Работает | CTA «Написать»; похожие | P1-1, P2-1 |
| Профиль владельца | Работает | Не считать responseRate живым; follow — вопрос PM | P3/вопрос |
| Регистрация и вход | Работает | Не переделывать | — |
| Создание объявления | Работает без гео и календаря | Пин + закрытые дни; не ставить verified | P1-3, P1-4, P1-7 |
| Редактирование / пауза | Работает | Смена координат; resubmit rejected | P1-3, позже |
| Календарь доступности | Работает после публикации | Внести в мастер | P1-4 |
| Заявка на даты | Работает + KYC-гейт | Текст в чат | P1-1; KYC — вопрос 1 |
| Подтверждение / отказ | Работает, отказ терминальный | Другие даты | P1-2 |
| Instant book | Нет | Только после вопроса 2 | P2-5 |
| Чат | Работает, вторичен на PDP | Сделать основным каналом | P1-1 |
| Кабинеты / CRM | Работает, экраны дублируются | Не плодить третий кабинет | — |
| Выдача / возврат | Работает | Чеклист статусов | P1-6 |
| Документы и подпись | Работает как демо-флаг | Не имитировать УКЭП | — |
| Отзывы | Работает | Repeat с истории | P2-3 |
| Избранное | Работает, слабо видно | Вход в оболочке | P2-4 |
| История просмотров | Нет; views не считаются | Сессионные просмотры | P2-2 |
| Похожие | Нет UI | Блок на PDP | P2-1 |
| Подписка на поиск | Нет; есть city watch | Сначала пустой поиск | P1-5 → P2-6 |
| Уведомления | In-app | Не строить push без вопроса 7 | P3-7 |
| Модерация | Работает | — | — |
| KYC | Ручной, блокирует бронь | Решение PM | вопрос 1 |
| Тикеты | Без треда | Реплики | P2-9 |
| Android | Тот же контур, дыры | Не врать реферал; догонять P1 | P2-8 |
| PRO / компании | Маркетинг | Спрятать или entitlements | вопрос 4 / P3-1 |
| Буст | Ранжирование без оплаты | Честный копирайт уже есть; витрина — вопрос 3 | P3-2 |
| Реферал | Код и отчёт на вебе | Android совпасть; выплаты не выдумывать | P2-8 / P3-8 |
| AI поиск и листинг | Работает + mock | Не центр плана | P3-9 |
| Мультиединицы, почасовка, комплекты, want-ad | Нет | Не в этой волне | P3 |
| Доставка как логистика | Enum + заметка | Точка передачи в P1-3, не служба доставки | — |