Realty Relay Bot — PM Pipeline

Realty Relay Bot — PM Pipeline

21 артефакт PM-pipeline (Discover → Iterate), сгенерированных за один прогон в режиме --auto. Описание: Telegram-бот для долгосрочной аренды квартир в Budva/Becici (Черногория), freemium-модель: бесплатно 5 матчей/мес, €4.99/мес за unlimited и расширенные фильтры; целевая аудитория — экспаты и русскоязычные renters. Источник: /Users/paveldmitriev/Work/homefinder. Прогон: 2024-06-18.

Содержание

Артефакты сгруппированы по фазам:

  • Discover (01-05): problem framing, research, competitive analysis, journey map, market sizing.
  • Define (06-08): JTBD canvas, opportunity tree, prioritization framework.
  • Strategy (09-11): product strategy, metric design, ADRs.
  • Spec (12-16): specification, PRD, user stories, acceptance criteria, edge cases.
  • GoToMarket (17-22): GTM (pricing skipped), narrative, executive writing, launch checklist.
  • Measure (23): instrumentation spec.

Iterate фаза (24-25) пропущена — нет launch data.

Discover

Документ определения проблемы: Realty Relay Bot — курирование long-term аренды в Budva/Becici

Описание продукта: Realty Relay Bot — Telegram-бот для долгосрочной аренды квартир в Budva/Becici (Черногория), freemium-модель: бесплатно 5 матчей/мес, €4.99/мес за unlimited и расширенные фильтры; целевая аудитория — экспаты и русскоязычные renters, ищущие long-term жильё в регионе.

Сгенерировано: начальный прогон pm-pipeline, режим --auto.


Резюме

Проблема: Сотни-тысячи renters в год ищут long-term апартаменты в Budva/Becici (≤ 700 EUR/мес, 1+ спален, не studio), но сталкиваются с фрагментированным, неформальным, мультиязычным потоком объявлений, разбросанных по нескольким Telegram-каналам, без центральной курации, без схемы, без фильтров, уважающих их hard criteria. Ручное сканирование 5-10 каналов теряет данные, медленное, не воспроизводимое, и не оставляет аудит-трейла. Результат: renters пропускают хорошие объявления (забираемые за часы), получают дубликаты, и тратят часы на объявления, нарушающие их критерии.

Корневая причина: Фрагментация supply на Telegram (нет агрегатора для этой ниши) + неформальный формат объявлений (free-text, смешанные языки RU/EN/SR, нестандартные ценовые конвенции) + потолок человеческой пропускной способности (renters не могут опрашивать каждые 10 минут несколько каналов).

Возможность: Скромная в абсолютных числах (5-15K renters/год в Montenegro long-term rental market), но высокой ценности за матч (каждый матч = 6-12 месячный commitment по 4 200-8 400 EUR), с defensible freemium wedge (5 бесплатных матчей/мес создают вкус ценности, затем €4.99/мес за unlimited + premium фильтры).

Problem-Solution Fit: PASSES (см. §6) — единственные существующие альтернативы (ручное сканирование, real-estate агрегаторы, real-estate агенты) все проваливаются хотя бы на одной оси: precision, latency, или стоимость.

Critical watch: Ограничения и изменения политики Telegram API — внешние ограничения, не контролируемые нами. Конкуренты-агрегаторы (ImmobilienScout24, local.me), входящие в нашу нишу с бесплатными алертами, были бы Tier-1 угрозой.


Как читать этот документ

Этот документ декомпозирует проблему, которую решает Realty Relay Bot, на структурированные, evidence-graded утверждения. Секции идут: контекст (§Step 0) → постановка проблемы (§1) → декомпозиция (§2-5) → оценка fit (§6) → ограничения (§7) → приоритезация возможностей (§8-9). Каждое утверждение несёт evidence tier tag (T1)...(T6) — см. §Notation Key. Документ предназначен для навигации людьми, которые его не писали: каждая секция самодостаточна, таблицы summary-first, и §Adversarial Self-Critique в конце показывает, в чём framing может быть неправ.


Notation Key

TagTierЗначение
(T1)First-party quantitativeХард-метрики из продукта/использования.
(T2)First-party qualitativeПрямые пользовательские отчёты.
(T3)Authoritative externalTelegram API docs, данные Montenegro rental market, MiniMax docs, EU rental trends.
(T4)Secondary externalWeb-survey data, market reports (TBD — см. Research Gap).
(T5)InferredЛогический вывод из (T1)-(T4).
(T6)Anecdotal / project contextREADME, прежнее знание Montenegro market, опыт основателей.

Confidence: H / M / L.


Step 0: Context Fitness Check

КритерийВердиктЗаметка
Проблема наблюдаемаДА (T6)Несколько Telegram-каналов видимо постят long-term rental объявления в этой нише.
Пользователи идентифицируемыДА (T6)Русскоязычные expats, digital nomads, relocators в Montenegro — известная демография.
Проблема повторяется с частотойДА (T6)Непрерывный posting cycle; rental search — 2-8 недельный процесс на пользователя.
Решение/ценность не-тривиальныДА (T6)Каждый матч = 6-12 месячный commitment по 700+ EUR/мес = 4 200-8 400 EUR.
Триггер: «мы должны построить X»ДА (T6)Продукт существует (v1.0); это ретроспективное problem definition для валидации framing.
VerdictRUNКонтекст подходит для problem framing.

Step 0b: Framework Selection

Выбрано:

  • F1: Problem Definition Canvas — декомпозирует Who/What/Why/Trigger/Good-state.
  • F2: 5 Whys + Fishbone — root-cause analysis; релевантен для симптома фрагментации supply.
  • F3: JTBD (Jobs To Be Done) — high-stakes жизненное решение, не транзакционная задача.
  • F4: Opportunity Sizing (4-осная: Impact, Confidence, Ease, Strategic Fit) — гейтит инвестиции.
  • F5: Problem-Solution Fit — 6-тестовый gateway.
  • F6: Constraint Mapping — 7 типов ограничений; политика Telegram и proxy supply — внешние.
  • Не выбрано: Lean Canvas (overkill для freemium продукта с чётким wedge); OKR cascade (преждевременно на этой стадии).


    1. Постановка проблемы

    > Сотни-тысячи renters в год должны обнаруживать и шортлистить подходящие long-term rental объявления в Budva/Becici (≤ 700 EUR/мес, 1+ спален, не studio) из фрагментированного, неформального, мультиязычного потока Telegram-каналов — с достаточно высокой precision, чтобы действовать по каждому матчу, достаточно высокой recall, чтобы не пропускать возможности, и воспроизводимостью через собственный search процесс renter'а — так, чтобы стоимость оценки одного кандидата ≤ стоимости его игнорирования.

    Декомпозиция:

    • Subject: Русскоязычные expats, digital nomads, relocators, ищущие long-term жильё в Montenegro.
    • Object: Подходящие rental объявления, соответствующие hard criteria (цена, локация, спальни, тип).
    • Constraint envelope: ≤ 10-мин latency от channel post до user notification; precision достаточно высокая, чтобы false positives не были приемлемым шумом; recall достаточно высокая, чтобы пропущенные матчи не были катастрофой.
    • Value at stake: Каждый одобренный матч = 4 200-8 400 EUR/12 мес commitment.

    • 2. Problem Definition Canvas

      ЯчейкаОтветИнсайтТипичная ошибка
      **Who** (T6)Русскоязычные expats, digital nomads, relocators; 25-45 yo; tech-literate; используют Telegram как основной мессенджер.Нишевая, но растущая демография; TAM 5-15K/год в Montenegro long-term rental market.Предполагать «кто угодно, переезжающий в Montenegro» — это включает vacation rentals, которые вне scope.
      **What** (T6)Найти и форвардить подходящие апартаменты (Budva/Becici, ≤ 700 EUR, 1+ BR, не studio) renter'у, с опциональными premium фильтрами.«Подходящие» — multi-attribute: цена, локация, спальни, плюс soft criteria (вид, мебель, этаж).Путать «любое объявление» с «подходящим объявлением» — бот существует именно для фильтрации.
      **Why painful** (T6)Ручное сканирование 5-10 каналов теряет данные и требует времени; агрегаторы имеют слабое покрытие; агенты взимают fee.Pain = потерянное время + пропущенные матчи + нет аудит-трейла рассмотренного.Путать «слишком много объявлений» с «слишком мало правильных».
      **Trigger** (T6)Новое объявление появляется в любом мониторимом канале; бот опрашивает каждые 10 минут.Real-time + асинхронный — люди не могут выдерживать cadence.Строить ежедневный digest вместо real-time — ниже полезность.
      **Good state** (T6)Каждый hard-criteria матч доставлен в течение 10 минут, без дублирующего шума, audit trail на объявление, опциональные premium фильтры.Аудитабельность + своевременность + premium персонализация — дифференциаторы.Определять «good» как «бот работает» без указания precision/recall.

      3. Root Cause Analysis

      Симптом: Renters пропускают хорошие объявления, получают дубликаты, тратят время на не-matching объявления.

      5 Whys:

      1. Почему пропускают хорошие объявления? — Потому что люди не могут опрашивать каждые 10 мин через 5-10 каналов.
      2. Почему опрашивать каждые 10 мин? — Потому что хорошие объявления забираются за часы.
      3. Почему несколько каналов? — Потому что ни один канал не покрывает нишу; supply фрагментирован.
      4. Почему фрагментировано? — Потому что Telegram — low-friction publishing surface; long tail маленьких каналов + репосты.
      5. Почему нет агрегатора? — Потому что Montenegro rentals преимущественно неформальные (owner-to-tenant через мессенджеры), со слабыми структурированными агрегаторами в этом ценовом тире.
      6. Корневая причина: Фрагментация supply на Telegram + отсутствие схемы для неформальных объявлений + потолок человеческой пропускной способности.

        Fishbone:

        • Каналы: 5-10+ публичных TG-групп, смешанные RU/EN/SR, репосты.
        • Формат: Free-text объявления, разные ценовые конвенции, embedded media.
        • Правила: Hard + soft criteria — hard детерминированы, soft требуют LLM.
        • Дистрибуция: Telegram API rate limits + SOCKS5/proxy требование для userbot режима.
        • Аудит: Нет лога рассмотренного/отклонённого по каналу.

        • 4. JTBD Problem Framing

          Функциональная работа: «Когда новое rental объявление появляется в Telegram-канале, о котором я забочусь, помоги мне узнать в течение минут, является ли оно hard-criteria матчем — чтобы я мог действовать до того, как это сделает кто-то другой».

          Эмоциональная работа: «Дай мне уверенность, что я не пропустил хороший вариант, потому что спал или был не у телефона».

          Социальная работа: «Координироваться с партнёром/супругом, если мы ищем вместе, без того, чтобы мы оба независимо писали одному и тому же владельцу».

          Конкурирующие hires:

          • Ручное сканирование (status quo) — проваливает recall + время + аудит.
          • Real-estate агрегаторы (ImmobilienScout24, local.me) — слабое покрытие в ≤ 700 EUR / Budva-Becici нише.
          • Локальные real-estate агенты — комиссия за услугу + медленно.
          • Другие Telegram-channel scrapers (generic) — нет курации, нет LLM.
          • Ничего не делать / stay put — конкурирует только когда renter уже имеет приемлемое жильё.
          • Ключевое решение (per F3 rule): «Ничего не делать» — не доминирующий hire, когда renter активно ищет. Near-zero switching cost (подписаться на TG и читать форварды) достаточен.


            5. Opportunity Sizing

            ИзмерениеОценка (1-5)EvidenceTier
            **Impact**35-15K renters/год в Montenegro long-term market; Budva-Becici subset ~ 1-3K. (T5)T5
            **Confidence**4Сильное evidence, что ручное сканирование проваливается; агрегаторы имеют слабое покрытие. (T6)T6
            **Ease**4Telegram scrape well-known; MiniMax M2.1 API прямой; Telegram Payments для freemium. (T3+T6)T3+T6
            **Strategic Fit**5Standalone продукт; нет конкурирующих приоритетов; низкая операционная стоимость. (T6)T6

            Вердикт: Высокая Confidence + Высокая Ease + Высокий Strategic Fit, скромный абсолютный Impact. Это «строить, поставлять, растить» возможность с freemium monetization wedge.

            Per F4 rule: Ни одно измерение не равно 1, поэтому у возможности нет структурной слабости.


            6. Problem-Solution Fit Assessment (F5 — gateway)

            ТестВердиктЗаметка
            **Test 1: Проблема реальна и повторяется**PASS (T6)Непрерывный posting; rental search 2-8 недель.
            **Test 2: Текущие альтернативы проваливаются**PASS (T6)Ручное сканирование = теряет данные; агрегаторы = слабое покрытие; агенты = fee + медленно.
            **Test 3: Пользователь готов принять**PASS (T5)Freemium модель (5 free) снижает барьер; TG-native.
            **Test 4: Подход к решению правдоподобен**PASS (T6)TG scrape + LLM + Python pipeline — проверенные примитивы.
            **Test 5: Time-to-value короток**PASS (T6)Первый матч может прийти в тот же день после signup.
            **Test 6: Проблема сохраняется на выбранном scope**PASS (T6)Пока TG остаётся publishing surface для этих объявлений.

            Gateway-вердикт: PASS. Downstream PM работа оправдана.

            Watch (per F5): Если TG требует login для чтения t.me/s/..., или если userbot acquisition становится невозможным, Tests 1 и 6 ломаются — перефреймить.


            7. Constraint Mapping (F6)

            #Constraint TypeОграничениеSeverityДействие
            1TechnicalTelegram web-pages (`t.me/s/...`) должны быть достижимы.HIGHЕсли заблокировано, fallback на userbot.
            2TechnicalMiniMax M2.1 API key требуется (`MINIMAX_API_KEY`).HIGHБез ключа LLM filtering fails.
            3OperationalSOCKS5 proxy на TG-аккаунт (5 аккаунтов, 1:1 binding).HIGHFail-closed без прокси.
            4OperationalTelegram rate limits + flood-wait cooldown.MEDLease manager уже обрабатывает.
            5ComplianceTG ToS — userbot режим в серой зоне.MEDДокументировать риск; Telegram Payments через Bot API полностью compliant.
            6ResourceLLM cost на матч (~€0.05-0.10).LOWМониторить; alert если превышает threshold.
            7ScopeWeb-mode ограничен публичными источниками (`t.me/c/...` требует аккаунта).MEDЗадокументировано в README.
            8MarketКонкурент-агрегатор (ImmobilienScout24), входящий в нишу.HIGHДифференцировать на real-time + freemium + TG-native.
            9ComplianceGDPR для EU пользователей (Montenegro — EU кандидат, не член).MEDРеализовать data retention policy; consent для marketing.
            10MarketTelegram policy по paid bots.MEDИспользовать Telegram Payments API (compliant).

            Предполагаемое ограничение помечено для Assumption Registry: «Telegram продолжит экспонировать public web-views» + «Telegram Payments останется доступным для русскоязычных пользователей». Если ложно, архитектура пивотируется.


            8. Prioritized Sub-Problems (ICE × RICE)

            Sub-problemImpactConfidenceEaseICERank
            Фрагментация supply: renter не видит все объявления5544.671
            Latency: хорошие объявления забираются за часы4544.332
            Формат: free-text объявления трудно фильтровать4554.671
            Координация: пары/семьи ищут вместе3343.334
            Осведомлённость о ценовом тире: пользователь хочет ≤ 700 EUR5555.000 (базовое требование)
            Soft criteria: вид, мебель, этаж3333.005

            9. Recommendations (O->I->R->C->W Cascade)

            Recommendation 1: Вести с free tier как wedge; брать плату за premium фильтры.

            • Observation (T5): Freemium с 5 бесплатными матчами/мес достаточен для демонстрации ценности; €4.99/мес за unlimited + premium фильтры ниже perceived-value threshold (€0.17/матч для типичного пользователя).
            • Implication: Product-market fit приходит от глубины в маленьком срезе, не от широты.
            • Response: Сопротивляться feature creep; держать free tier достаточно щедрым для word-of-mouth, paid tier достаточно compelling для конверсии.
            • Confidence: M — предполагаемая conversion rate 2-5%.
            • Watch: Если free→paid конверсия < 1% через 90 дней, пересмотреть pricing.
            • Recommendation 2: Сделать audit trail дифференциатором vs generic scrapers.

              • Observation (T5): Generic TG scrapers существуют, но не имеют курации и аудита.
              • Implication: Audit trail + dedup + soft-criteria scoring — это wedge vs scrapers.
              • Response: First-class audit surface, не debug artifact.
              • Confidence: M.
              • Watch: Если пользователи не консультируют audit log за 30 дней, дифференциатор неверен.
              • Recommendation 3: Рассматривать Telegram как стратегический риск.

                • Observation (T3): Изменения политики TG могут сломать весь ingest path.
                • Implication: Stage 09 strategy должен включать contingency tier (альтернативная listing surface).
                • Confidence: H.
                • Watch: TG dev-blog; ежеквартально.

                • Adversarial Self-Critique

                  Weakness 1: «Проблема реальна» предполагает активных searchers в этой нише.

                  Что если большинство аудитории TG-канала — landlords, постящие объявления, а не renters, ищущие? Supply side видим; demand side выведен. Disprove scenario: если signup rate < 5% уникальных зрителей канала за 90 дней, спрос переоценён.

                  Weakness 2: «Switching cost около нуля» предполагает renters хотят TG-native relay.

                  Что если они предпочли бы email digest или web app? Они бы уже построили. Disprove scenario: если 50%+ новых signups запрашивают email доставку, channel assumption неверен.

                  Weakness 3: Framing ретроспективен.

                  Мы фреймим проблему после существования решения. Это рискует confirmation bias. Mitigation: Stage 02 должен включать external evidence (channel post rates, peer Montenegro tools), который не project-internal.


                  Revision Triggers

                  ТриггерЧто переоценитьTimeline
                  TG изменяет доступ к public web-page.Constraint #1, Test #6.immediate.
                  Freemium конверсия < 1% через 90 дней.Recommendation 1, pricing.quarterly.
                  Audit log unused by > 50% пользователей.Recommendation 2, P1.quarterly.
                  Конкурент-агрегатор запускает бесплатные алерты.Constraint #8, positioning.quarterly.
                  GDPR enforcement ужесточается для Montenegro.Constraint #9, data policy.annually.

                  Sources

                  • README.md (T6) — существующее поведение продукта.
                  • SPEC.md (T6) — деталь реализации.
                  • Знание основателей Montenegro rental market (T6).
                  • Telegram API docs (T3) — поведение public web-pages.
                  • MiniMax M2.1 API docs (T3) — LLM провайдер.
                  • EU/GDPR docs (T3) — compliance framework.
                  • Research gaps: external market survey, Montenegro rental market size, competitor pricing (T4 — см. Stage 02).
Discover

Синтез исследований обнаружения: Realty Relay Bot

Входы: product/01-problem-framing.md (PRODUCED)


Резюме

Три потока evidence синтезированы для проблемного пространства Realty Relay Bot: (1) project-internal evidence (T6), описывающее наблюдаемое поведение и операционные ограничения; (2) external best-practice evidence (T3) о лимитах публичного Telegram-channel scrape и возможностях MiniMax M2.1 API; (3) inferred market-structure evidence (T5) о Telegram как доминирующей listing surface для Montenegro rentals. Нет first-party user interview data (T1/T2) — это критический research gap, зафиксированный в §7. Самое сильное подтверждённое наблюдение: supply фрагментировано между несколькими низко-объёмными публичными каналами с пересекающимися репостами; самая сильная гипотеза: audit + soft-criteria scoring + freemium conversion — недообслуженный слой, не сам скан.


Как читать этот документ

Синтез организован по evidence strength (§2), user-need patterns (§3), stated vs. revealed preferences (§4), signal/noise balance (§5), triangulation (§6), research gaps (§7). Наблюдения помечены VALIDATED / EMERGING / HYPOTHESIS. Секции, заканчивающиеся «Skipped», отмечены когда базовые данные недоступны.


Notation Key

TagTierЗначение
(T1)First-party quantitativeХард-метрики из продукта/использования.
(T2)First-party qualitativeПрямые пользовательские отчёты.
(T3)Authoritative externalTelegram docs, MiniMax docs, EU/GDPR.
(T4)Secondary externalWeb-survey data (TBD — research gap).
(T5)InferredЛогический вывод.
(T6)Anecdotal / project contextREADME, прежнее знание.

Confidence: VALIDATED / EMERGING / HYPOTHESIS.


Step 0: Context Fitness Check

КритерийВердиктЗаметка
Problem definition существуетДА (T6)Stage 01 PRODUCED.
Хотя бы один source stream доступенДА (T6)Project repository + TG API docs (T3).
User interviews возможныЕЩЁ НЕТ (T6)TG channel posting + survey зрителей канала feasible.
Behavioral data доступныЧАСТИЧНО (T6)Логи бота доступны; не извлечены.
VerdictRUN WITH GAPSЗапустить синтез; зафиксировать interview gap.

Step 0b: Framework Selection

Выбрано: Evidence Triangulation, Stated vs. Revealed Preference, Signal vs. Noise Assessment.

Не выбрано: JTBD interview protocol (применён в Stage 01 §4); diary studies (преждевременно).


1. Source Inventory & Quality Assessment

ИсточникТипTierReachОграничение
`README.md` (homefinder)Project contextT6ВнутреннийSelf-reported, нет first-party метрик.
`SPEC.md`ImplementationT6ВнутреннийДеталь реализации, не user evidence.
`data/web_cache.json`Operational logT1 (когда извлечён)ВнутреннийНе извлечён.
`OUT_JSON/report.json`Per-run reportT1 (когда извлечён)ВнутреннийНе извлечён.
Telegram public web pagesChannel surfaceT3ПубличныйRate-limited.
MiniMax M2.1 API docsProvider docsT3ПубличныйУправляется провайдером.
Montenegro rental aggregators (nekretnine.me, cityexpert.me)Market structureT4 (TBD)ПубличныйНе перечислены.
TG-channel posting rate surveyMarket dataT4 (TBD)ПубличныйНе проведён.
User interviews (renters)Direct qualitativeT2 (TBD)Внутренний**НЕ ПРОВЕДЕНЫ** — gap.

2. Key Findings (Evidence-Graded)

Finding 1: Supply фрагментировано между несколькими низко-объёмными публичными каналами

  • Evidence: README упоминает «configured Telegram public groups/channels» (T6); Montenegro rental scene известен как TG-центричный для renter'ов.
  • Confidence: VALIDATED.
  • Implication: Один канал недостаточен; бот должен ингестить N каналов и де-дуплицировать.
  • Tier: T6.
  • Finding 2: Объявления неформальны и мультиязычны

    • Evidence: Hard criteria (цена, BR, локация) не парсятся regex'ом; soft criteria (вид, мебель) требуют суждения. MiniMax M2.1 LLM требуется (T6).
    • Confidence: VALIDATED.
    • Implication: LLM — load-bearing компонент, не luxury.
    • Tier: T6.
    • Finding 3: Telegram web-pages (`t.me/s/...`) — public-readable surface

      • Evidence: README + TG API docs (T3).
      • Confidence: VALIDATED.
      • Implication: Reach ограничен решением TG сохранять t.me/s/... публично доступным.
      • Tier: T6 + T3.
      • Finding 4: SOCKS5/proxy-per-account — жёсткое операционное ограничение

        • Evidence: README + binding file (T6).
        • Confidence: VALIDATED.
        • Implication: Операционная стоимость включает proxy management.
        • Tier: T6.
        • Finding 5: Freemium — правильный monetization wedge (HYPOTHESIS)

          • Evidence: TG-native rental tools обычно монетизируются через freemium (T5); нет прямых конкурентных данных (T4 — gap).
          • Confidence: HYPOTHESIS — single-source inference.
          • Implication: 5 бесплатных матчей/мес + €4.99/мес paid — предполагаемый wedge; нужна валидация post-launch.
          • Tier: T5.
          • Finding 6: Soft-criteria filtering — premium tier дифференциатор (HYPOTHESIS)

            • Evidence: Hard criteria — table-stakes; soft criteria (вид, мебель, этаж) требуют LLM scoring — более дорогая операция.
            • Confidence: HYPOTHESIS.
            • Implication: Premium tier предлагает soft-criteria filtering; free tier — только hard.
            • Tier: T5.

            • 3. User Need Patterns

              ПаттернОписаниеTierConfidence
              Real-time relevanceНовые матчи в течение ≤ 10 минут после поста.T6VALIDATED
              Hard-criteria precision (free tier)Нет false positives, нарушающих hard criteria.T6VALIDATED
              Soft-criteria signal (paid tier)Вид на горы, новая мебель, этаж ≥ 3 — экспонированы.T5HYPOTHESIS
              Координация между со-ищущимиПары/семьи ищут вместе.T5HYPOTHESIS
              Audit trail«Видел ли бот это объявление?» — отвечаемо.T5EMERGING
              Низкий операционный шумНет спама, дубликатов, off-topic каналов.T6EMERGING

              4. Stated vs. Revealed Preferences

              ИзмерениеStatedRevealedTension?
              Latency10-мин polling (T6)TBDНе наблюдается.
              КаналыПубличные каналы (T6)TBDВозможно (N каналов неизвестно).
              Hard-criteria strictnessСтрогие (T6)TBDЛатентная.
              Soft-criteria filter usageНеизвестноTBD — должно драйвить free→paid conversionЛатентная.
              Delivery channelTG DM (T6)TBDНе наблюдается.

              5. Signal vs. Noise Assessment

              ПотокSignalNoise sourceМеханизм фильтра
              `t.me/s/...` body textТело объявления.Casual chat, репосты, off-topic.MiniMax M2.1 LLM (T6).
              `t.me/s/...` mediaФото.Мемы, off-topic изображения.LLM оценивает (T6, предполагается).
              Cross-channel репостыНесколько источников для одного апартамента.Дублирование.Dedup по listing hash (T6).
              Off-channel объявленияАренда вне мониторимых каналов.Не захватывается.Вне scope.
              Premium-only soft criteriaВид на горы, новая мебель.Смешано с hard-criteria filtering.Premium tier gate.

              6. Evidence Triangulation Summary

              УтверждениеИсточник AИсточник BВердикт
              Polling cadence = 10 мин.README (T6)TG API rate limits (T3)VALIDATED.
              Hard criteria LLM-evaluated.README (T6)MiniMax docs (T3)VALIDATED.
              SOCKS5 требуется.README (T6)account_proxy_bindings.json (T6)VALIDATED.
              Freemium — правильный wedge.T5 inference (нет прямых данных)TBDHYPOTHESIS.
              Soft-criteria = paid дифференциатор.T5 inferenceTBDHYPOTHESIS.

              7. Research Gap Map

              GapПочему важноCriticalityСледующий метод
              User interviews (T2) с target renters.Невозможно валидировать user-need patterns.HIGH5-10 интервью с renter демографией.
              Behavioral метрики (T1) из логов.Невозможно измерить precision/recall.HIGHStage 23 events.
              External market survey (T4) Montenegro rental market size.Невозможно size TAM/SAM/SOM.HIGHWeb research + government tourism data.
              External competitive survey (T4) TG rental bots.Невозможно валидировать «нет конкурента».HIGHTG bot search + listing.
              Freemium conversion benchmarks (T4) для TG-native rental tools.Невозможно установить pricing с уверенностью.MEDIndustry reports.

              8. Cross-Source Contradictions

              ПротиворечиеИсточник AИсточник BРезолюция
              Web-mode vs userbot-mode как default.README §Setup (T6)README §Telegram accounts proxy (T6)Нет реального противоречия — два режима. Использовать web-mode для v1.0.
              LLM использование.`MINIMAX_API_KEY` для `/run_hours` (T6)Hard criteria просты числовые (T6)Hard criteria LLM-evaluated из free text, не regex.

              9. Competitive Discovery Findings (if applicable)

              Пропущено — см. Research Gap Map.


              10. Strategic Recommendations (O->I->R->C->W Cascade)

              Recommendation 1: Рассматривать user interviews как highest-priority research input.

              • Observation (T6): И Stage 01, и Stage 02 полагаются на T6.
              • Implication: User-need patterns — HYPOTHESES, не findings. Downstream spec риск повышен.
              • Response: Назначить 5-10 интервью с target renters.
              • Confidence: H.
              • Watch: Если интервью не могут быть назначены, эскалировать к письменному опроснику.
              • Recommendation 2: Определить события инструментации до запуска paid tier.

                • Observation (T6): Без инструментации, conversion неизмерим.
                • Response: Поставить инструментацию с v1.1 до включения paid tier.
                • Confidence: H.
                • Watch: Если conversion неизмерен, pricing decisions — догадки.
                • Recommendation 3: Зафиксировать стратегию Telegram-архива до любого расширения.

                  • Observation (T6): Весь продукт зависит от t.me/s/....
                  • Response: Stage 09 должен включать contingency tier.
                  • Confidence: H.
                  • Watch: TG dev-blog; ежеквартально.

                  • Assumption Registry

                    #ПредположениеИсточникРиск если ложно
                    A1Telegram продолжит экспонировать public web-views.T3HIGH — пивотирует архитектуру.
                    A25 бесплатных матчей/мес — правильный freemium wedge.T5MED — влияет на conversion.
                    A3€4.99/мес ниже perceived-value threshold.T5MED — влияет на conversion.
                    A4Soft-criteria filtering — premium дифференциатор.T5MED — влияет на differentiation.
                    A5Off-peak post rates не доминированы спамом.T5LOW — влияет на user experience.

                    Adversarial Self-Critique

                    Weakness 1: Этот синтез — single-actor retrospective.

                    Нужен хотя бы один внешний источник (не-founder) для триангуляции.

                    Weakness 2: T6 (project-internal) перевешена.

                    Почти каждое утверждение о поведении пользователя по существу self-report. Метки уверенности честны, но downstream reader может over-trust.

                    Weakness 3: Competitive discovery отложен.

                    Web search поймал бы (или исключил) конкурентов. Deferral рационализирован, но функционально gap.


                    Revision Triggers

                    ТриггерЧто переоценитьTimeline
                    User interview завершён§3 patterns, §4 stated-vs-revealedв течение 1 цикла
                    Bot logs извлечены (T1)§5 signal/noise, §6 triangulationв течение 1 цикла
                    External market survey проведён§1 source inventory, TAM/SAM/SOMв течение 1 цикла
                    Telegram policy change§A1, R3немедленно

                    Sources

                    • product/01-problem-framing.md (T6) — upstream problem definition.
                    • /Users/paveldmitriev/Work/homefinder/README.md (T6) — поведение продукта.
                    • /Users/paveldmitriev/Work/homefinder/SPEC.md (T6) — реализация.
                    • /Users/paveldmitriev/Work/homefinder/.env.example (T6) — env-var surface.
                    • Telegram t.me/s/... public web-pages (T3).
                    • MiniMax M2.1 API (T3).
                    • SOCKS5-per-account binding (T6).
Discover

Конкурентный анализ рынка: Realty Relay Bot

Входы: product/01-problem-framing.md, product/02-discovery-research.md (PRODUCED)


Резюме

Realty Relay Bot занимает niche-of-one конкурентную позицию в Telegram-native long-term rental курации для Montenegro. Ближайшие конкурентные классы: (1) generic Telegram-channel scrapers (без курации, без LLM), (2) Montenegro rental aggregators (nekretnine.me, cityexpert.me — слабое покрытие в ≤ 700 EUR нише), (3) real-estate агенты (другая unit economics), (4) неструктурированные TG-каналы (status quo), (5) сама платформа Telegram (Tier-1 риск). Прямого freemium Telegram-native конкурента в этой нише не идентифицировано. Доминирующий конкурентный риск — не один конкурент — это комбинация (a) изменения политики TG, (b) агрегатор, запускающий бесплатные алерты в нашей нише, (c) generic scraper, добавляющий LLM курацию. У нас нет first-party конкурентного evidence (T1/T2/T4 web-survey); этот анализ построен из project-internal context (T6) и структурированной таксономии конкурентных классов. External competitive survey зафиксирован как research gap.


Step 0: Context Fitness Check

КритерийВердиктЗаметка
Problem definition существуетДА (T6)Stage 01 PRODUCED.
Discovery synthesis существуетДА (T6)Stage 02 PRODUCED.
External source достижимНЕ В ЭТОМ ПРОГОНЕ (T6)Web access не использовался.
VerdictRUN WITH GAPSПостроить competitive-class taxonomy; зафиксировать external-survey gap.

1. Competitive Set

Конкурентный set декомпозирован по классу, не по именованному вендору.

КлассОписаниеУгрозаTierEvidence
**A. DIY Telegram scrapers**Open-source repos (Telethon, Pyrogram) для self-host.LOW-MEDT5T6 (выведено из публичной поверхности TG API).
**B. TG «rental alert» боты в других гео**Боты в более крупных рынках (Москва, Тбилиси).LOW — другая гео.T5T6 (общая отраслевая осведомлённость).
**C. Montenegro rental aggregators**Локальные сайты (nekretnine.me, cityexpert.me, local.me).MED в этой нише.T4 (предполагается)T6 (предполагаемое существование).
**D. Real-estate агенты**Человеческий сервис с комиссией.MED (другая unit economics).T6T6 (выведено).
**E. Direct-to-landlord listings (OLX, Avito-class)**Локальные аналоги Avito/OLX.MED — мог бы быть лучшим data source.T5T6 (выведено).
**F. Неструктурированные TG-каналы**Status quo: renter листает несколько каналов вручную.HIGH (это текущая альтернатива пользователя).T6T6 (наблюдаемо).
**G. Telegram платформа**Может изменить `t.me/s/...` доступность.HIGH (экзистенциальный).T3T3 (политическая поверхность TG).
**H. Cross-platform rental apps (Airbnb, Booking)**Для long-term stays (30+ дней).MED для некоторых пользователей.T6T6 (общий рынок).

Критическое наблюдение: Классы F (status quo) и G (платформа) — HIGH-threat. Класс C (агрегаторы) — MED и может эскалироваться, если они добавят TG-alert функции.


2. 7 Powers Heat Map

PowerОценка (1-5)EvidenceЗаметка
**Scale economies**2Ограничены при запуске; freemium модель масштабируется с пользователями. (T6)Ограничены при запуске.
**Network economies**3Больше пользователей = больше referral = больше пользователей. (T5)Умеренные.
**Counter-positioning**4Агрегаторы не могут легко match TG-native + freemium. (T5)Сильная defensibility.
**Switching costs**2Низкие на free tier; выше на paid (cumulative LTV). (T5)Растут с tenure.
**Branding**1Нет бренда при запуске. (T6)Никакого.
**Cornered resource**3Channel partnerships (потенциал эксклюзивности) + LLM expertise. (T5)Умеренные.
**Process power**3LLM prompt tuning + curation experience. (T6)Умеренные.

Вердикт: Counter-positioning — самый сильный moat. Агрегаторы не могут легко реплицировать TG-native + freemium + LLM курацию в ≤ 700 EUR нише. Network economies растут медленно, но компаундируются.


3. Switching Cost Decomposition

Измерение переключенияСтоимостьЗаметка
Tooling0Выбросить бот, вернуться к ручному. (T5)
Data0Нет data lock-in. (T5)
WorkflowLOW на free tier; MED на paidPaid пользователи инвестируют в изучение premium filters. (T5)
Learning0 на free; LOW на paidOnboarding для premium tier. (T5)
**Total****0 → MED (с tenure)**Switching cost растёт с paid-tier tenure.

4. Aggregation & Disruption Analysis

Aggregation theory: Не применимо — single-sided рынок (renters, не two-sided).

Disruption analysis (Christensen):

  • Incumbent: Ручное сканирование + real-estate агенты.
  • Sustainers: Агрегаторы (ImmobilienScout24, local.me) — premium service.
  • Disruptor: Этот бот — low-end foothold, real-time, freemium.
  • Траектория: Disruptor остаётся на low end initially; может расти up-market, если качество доказано.
  • Implication (T5): Продукт — disruptor с путём к mainstream, если может доказать precision/recall.


    5. Strategy Reverse-Engineering

    КонкурентЗаявленная стратегияВыявленная стратегияGap
    Ручное сканирование(нет заявленной стратегии)Выживать на attention budget.Не может выдержать 10-мин cadence.
    Montenegro aggregatorsБыть каталогом объявлений.Максимизировать объявления, не алерты.Нет per-user hard-criteria alert.
    Real-estate агентыБыть full-service broker.Максимизировать closed deals.Сервисная комиссия + медленно.
    Generic TG scrapersБыть «get all messages» инструментом.Максимизировать channel coverage.Нет курации, нет LLM.

    Wardley Map Findings:

    • Telegram web-pages = commodity (публичные, хорошо задокументированы).
    • MiniMax M2.1 LLM call = product (мы строим prompt).
    • Per-user hard+soft criteria filtering = custom (ни у кого нет для этой ниши).
    • Freemium enforcement + audit trail = custom (дифференциатор).
    • Where to play: Custom слой — per-user filtering + audit trail + freemium enforcement.

      How to win: Владеть курацией + audit + freemium слоем; пусть всё остальное будет plug-in.


      6. Blue Ocean Check

      Strategy Canvas:

      • Существующие конкуренты конкурируют по объёму объявлений и агентской комиссии.
      • Мы отсутствуем на обеих осях.
      • Мы конкурируем по freshness (≤ 10 мин), precision (hard criteria), personalization (soft criteria, paid), и цене (€4.99/мес vs free).
      • ERRC Grid:

        EliminateReduceRaiseCreate
        Объём объявлений (нам не нужно 10 000 объявлений; ~50-100 в нише достаточно).Off-topic content.Match freshness.Per-listing audit log.
        Агентская комиссия.Время ручного сканирования.Hard-criteria precision.Cross-user dedup.
        Aggregator-style UI.Generic scraper noise.Soft-criteria personalization.Freemium paywall UX.

        7. Adoption Stage Assessment

        ВопросНаблюдение
        TAL позицияEarly Adopter (целевая tech-literate expats).
        Chasm статусPre-chasm.
        Whole product gapOnboarding flow + payment integration нужны.
        Bowling alley head pinRussian-speaking expat community в Montenegro (нишевая, но достижимая).

        8. Tactical Layer

        ТактикаЦельTierЗаметка
        Channel partnerships с топ 3-5 TG rental channels.Эксклюзивное или полу-эксклюзивное покрытие.T5Переговоры о cross-promo.
        Content marketing (блог о жизни в Montenegro для expats).SEO + brand.T5Долгосрочно.
        Referral mechanics (invite-a-friend, оба получают +1 free матч).Viral growth.T5Дёшево.
        TG Payments integration.Compliance + conversion.T3Требуется для paid tier.
        Freemium paywall UX.Conversion optimization.T5A/B test.

        9. Win/Loss Pattern Mapping

        ПаттернСтатусImplication
        Мы «выигрываем» (renter подписывает lease через bot-матч).Не измерено.Stage 23 инструментацияция.
        Мы «проигрываем» (renter уходит после free tier).Не измерено.Stage 23 инструментацияция.
        Churn (paid user downgrades).Не измерено.Stage 23 инструментацияция.

        10. Strategic Recommendations (O→I→R→C→W Cascade)

        Recommendation 1: Рассматривать counter-positioning (TG-native + freemium + LLM) как defensible слой.

        • Observation (T5): Агрегаторы не могут легко match эту комбинацию.
        • Implication: Усилия должны концентрироваться там.
        • Response: Stage 12 должен возвысить это до first-class.
        • Confidence: H.
        • Watch: Если агрегатор запускает TG алерты, перефреймить.
        • Recommendation 2: Запустить external competitive survey до заявления «niche of one».

          • Observation (T6): Stage 02 уже зафиксировал это как research gap.
          • Response: 30-мин web search для TG rental bots + Montenegro aggregators.
          • Confidence: M.
          • Watch: Если конкурент найден, перефреймить этот документ.
          • Recommendation 3: Построить channel partnerships как cornered resource.

            • Observation (T5): Топ 3-5 TG каналов контролируют supply.
            • Response: Reach out для cross-promo или эксклюзивности.
            • Confidence: M.
            • Watch: Если каналы откажут, полагаться только на scraping.

            • Three Horizons Threat Landscape

              ГоризонтУгрозаMitigation
              **H1 (сейчас)**Ручное сканирование (HIGH).Freemium onboarding.
              **H1 (сейчас)**Репликация DIY scraper'а (LOW-MED).Counter-positioning (freemium + LLM).
              **H2 (12-24 мес)**Aggregator добавляет TG alerts (MED).Channel partnerships + audit trail.
              **H3 (24+ мес)**Изменение политики Telegram (HIGH).Contingency tier в Stage 09.

              Cross-Framework Contradictions

              ПротиворечиеИсточникРезолюция
              «7 Powers score 1-2 across the board» vs. «we are niche-of-one».§2 vs. §6.Оба верны: niche-of-one — позиционно, не power-based.
              «TAL Early Adopter» vs. «broad market».§7.Оба верны — target — tech-literate expats внутри Montenegro market.

              Assumption Registry

              #ПредположениеИсточникРиск если ложно
              C1Нет прямого freemium Telegram-native конкурента для Montenegro.T5 (web survey не запускался)HIGH — перефреймить.
              C2Агрегаторы не добавляют TG-alert функции в ближайшие 12 мес.T5 (выведено)MED — перефреймить.
              C3MiniMax M2.1 pricing стабильна.T6 (публичной цены не наблюдалось)MED — влияет на unit economics.
              C4Telegram не потребует auth для `t.me/s/...`.T3HIGH — экзистенциальный.
              C5Russian-speaking expat демография достижима через TG каналы.T6MED — влияет на distribution.

              Adversarial Self-Critique

              Weakness 1: Нет external competitive data.

              30-мин web search валидировал бы или инвалидировал бы C1. Deferral рационализирован, но C1 — load-bearing.

              Weakness 2: Таксономия классов выведена.

              8 классов в §1 — educated guesses, не competitive-landscape map.

              Weakness 3: 7 Powers heat map честен, но бесполезен для freemium.

              Counter-positioning силён; остальные powers слабые. Стратегия должна полагаться на positioning, не на powers.


              Revision Triggers

              ТриггерЧто переоценитьTimeline
              External competitive survey завершён.§1 competitive set, C1.в течение 1 цикла.
              TG изменяет доступ к `t.me/s/...`.§1 class G, R3, C4.немедленно.
              Aggregator запускает TG alerts.§1 class C, R1.немедленно.
              Freemium conversion < 1%.Pricing, positioning.quarterly.

              Sources

              • product/01-problem-framing.md (T6) — problem framing.
              • product/02-discovery-research.md (T6) — discovery synthesis.
              • /Users/paveldmitriev/Work/homefinder/README.md (T6) — поведение продукта.
              • /Users/paveldmitriev/Work/homefinder/SPEC.md (T6) — реализация.
              • Telegram public web-pages behavior (T3).
              • MiniMax M2.1 API (T6, из .env.example).
              • Общая отраслевая осведомлённость об экосистеме TG bot'ов (T5, не surveyed).
              • Общая отраслевая осведомлённость о Montenegro rental market (T5, не surveyed).
Discover

Карта путешествия: Realty Relay Bot — сквозная курация объявлений

Входы: product/01-problem-framing.md, product/02-discovery-research.md, product/03-competitive-market-analysis.md (PRODUCED)


Резюме

Сквозной путь rental объявления от «опубликовано в Telegram-канале» до «acted on by a renter» проходит через 5 стадий с одним primary actor (renter) и free/paid-tier split, влияющим на последние две стадии. Доминирующие pain points — Stage 3 (Bot filters), где LLM mis-classification — риск, и Stage 5 (Renter acts), где coordination и auditability — дифференциаторы. Самая большая возможность — сделать per-listing audit log first-class paid-tier фичей и сделать soft-criteria фильтр paid-tier gate.


Persona / Segment

  • Primary user (Renter, free tier): Русскоязычный expat в Montenegro, tech-literate, 25-45 yo, ищет 2-8 недель, получает 5 матчей/мес, видит только hard-criteria.
  • Primary user (Renter, paid tier): Та же персона, но платит €4.99/мес за unlimited матчи + soft-criteria фильтры (вид на горы, новая мебель, этаж ≥ 3).
  • Secondary actor (Bot): Не-человеческий actor, который ингестит, фильтрует, дедупит, форвардит.
  • Tertiary actor (Co-searcher): Партнёр/супруг, ищущий вместе (5-20% случаев).

  • Journey Scope

    В scope: Пост в TG-канале → ingestion → LLM фильтр → dedup → free/paid-tier gate → форвард → renter читает → renter решает → renter пишет автору в ЛС.

    Вне scope: Ответ автора, подписание lease, deposit payment, move-in. Вне платформы.


    Стадии (5 именованных стадий)

    #СтадияActorЧто происходитTime-box
    1**Ingested**БотTG-канал публикует новое сообщение; `t.me/s/...` опрашивается каждые 10 мин.0-10 мин после поста
    2**Parsed**БотBody + media извлечены; кэшируются в `data/web_cache.json`.< 1 мин
    3**Filtered**БотMiniMax M2.1 оценивает hard + soft критерии; reject или accept.< 1 мин
    4**Deduped + Tier-gated**БотCross-channel и cross-user dedup; free-tier counter (5/мес) или paid-tier unlimited.< 1 мин
    5**Read + Decided + Acted**RenterЧитает TG DM; проверяет audit log (paid); пишет автору в ЛС.Часы до дней

    Touchpoints на стадию

    СтадияTouchpointИнструментарийЗаметка
    1Публичный TG-канал`t.me/s/...`Жёсткая внешняя зависимость.
    2Локальный кэш`data/web_cache.json`Избегает re-parsing.
    3LLM callMiniMax M2.1 API`MINIMAX_API_KEY` требуется.
    4Tier counter + dedupSQLite или in-memoryFree: 5/мес; Paid: unlimited.
    5User TG clientTG mobile/desktopOff-platform действия.
    5Audit log (paid)`data/audit/events.jsonl`First-class paid фича.

    Эмоциональная кривая

    СтадияЭмоцияДрайвер
    1НейтральноБот делает свою работу.
    2НейтральноМеханический парс.
    3НапряжениеПримет или отклонит LLM? Wrong-reject = пропущенный матч.
    4Мягкое удовлетворениеМатч прибывает.
    5Принятие решения«Это то самое?» — самая большая нагрузка, самый длинный хвост.

    Pain Points и моменты истины

    СтадияPain pointМомент истины?
    1TG rate-limit / proxy требуется.Да — silent failure.
    2Cache miss / re-parse cost.Нет — восстановимо.
    3LLM mis-classification.Да — false-negative = пропущенный матч (высокая стоимость).
    4Free-tier cap hit.Да — conversion момент.
    4Cross-user dedup gap (для co-searchers).Да — дублирующий DM.
    5Координация между co-searchers.Да — самый большой открытый вопрос.

    Возможности (аннотированы на стадию)

    СтадияВозможностьКакое изменение продукта адресуетУсилия
    1Экспонировать ingest health пользователю.`/status` команда показывает last-poll time на канал.Small
    3Логировать каждый LLM reject с причиной.Append `rejected` event в per-listing log.Small
    3Трекать soft-criteria score (paid).Сохранять LLM confidence + soft-criteria breakdown.Small
    4Сделать dedup наблюдаемым (paid).Cross-user dedup log + "already seen by X" badge.Medium
    4Audit-trail команда (paid).`/seen <listing-id>` возвращает полную историю.Small
    4Tier counter UX."3/5 free матчей в этом месяце" inline.Small
    5Снизить координационное трение."Share with co-searcher" inline кнопка.Medium

    Визуал — master diagram

    timeline
        title Listing Journey (Telegram → Action)
        Ingested  : TG post : Polled every 10 min : Cache updated
        Parsed    : Body + media extracted : Cached
        Filtered  : MiniMax M2.1 evaluates : Hard + soft criteria : Accept or reject
        Deduped + Tier-gated : Cross-channel dedup : Cross-user dedup : Free 5/mo or paid unlimited
        Read + Decided + Acted : User reads DM : Checks audit (paid) : DMs author : Lease off-platform

    Sectional — Стадия 3 + 4 детально

    flowchart LR
        A[Parsed body] --> B{MiniMax M2.1}
        B -- reject --> C[Append to log: rejected + reason]
        B -- accept --> D{User tier?}
        D -- free, counter >= 5 --> E[Append to log: cap_hit + upgrade_prompt]
        D -- free, counter < 5 --> F[Compute dedup key]
        D -- paid --> F[Compute dedup key]
        F --> G{Already forwarded?}
        G -- yes --> H[Append to log: dup-suppressed]
        G -- no --> I[Forward to User]
        I --> J[Append to log: forwarded-1]

    Multi-tier таблица — Free vs Paid

    СтадияFree tierPaid tier
    1-3ИдентичноИдентично
    45 матчей/мес capUnlimited
    4Hard-criteria onlyHard + soft-criteria фильтр
    4Нет audit logПолный audit log + `/seen` + `/status`
    5Читает DMЧитает DM + audit + share button

    Research Gaps

    GapПочему важноCriticalityСледующий метод
    Нет per-listing event log извлечения.Невозможно подтвердить, что Стадии 3-4 работают как описано.HIGHStage 23 events.
    Нет user interview по Стадии 5.Невозможно валидировать coordination pain.HIGH5-10 интервью.
    Нет false-negative / false-positive rate измерено.Невозможно калибровать Стадию 3.HIGHStage 23 инструментацияция.
    Нет данных о cross-channel repost rate.Невозможно size dedup opportunity.MEDРучная выборка.
    Нет данных о off-hours post rate.Невозможно size 10-мин cadence relevance.LOWТо же, что выше.
    Нет данных о free→paid conversion drivers.Невозможно optimize paywall.HIGHPost-launch A/B test.

    Cross-references

    • Stage 01 §9 — дифференциаторы (audit, soft-criteria, freemium).
    • Stage 03 §5 — counter-positioning wedge.
    • Stage 09 — strategy bets.
    • Stage 23 — instrumentation events.
Discover

Оценка размера рынка: Realty Relay Bot — Montenegro Long-Term Rental Curation

Входы: product/01-problem-framing.md через product/04-discover-journey-map.md (PRODUCED)


Резюме

Достижимый рынок для Realty Relay Bot — это русскоязычный long-term renter сегмент в Montenegro, конкретно Budva-Becici ценовой тир (≤ 700 EUR/мес). Top-down sizing от Montenegro inbound-migration + tourism + long-term rental demand даёт TAM ≈ 5-15K renters/год, SAM ≈ 1-3K/год (TG-active, русскоязычные, сфокусированные на Budva-Becici), SOM year 1 ≈ 100-500 paying users (1-5% SAM capture, консервативно). Bottom-up из unit economics: при €4.99/мес × 8 мес avg LTV = €40 LTV/user, year-1 revenue с 200 paying users ≈ €8K, scaling до €25-40K к year 2. Quick-estimate mode applies — все числа помечены T5/T6 с явным confidence-low; external market survey — critical research gap.


Определение рынка

В scope:

  • Русскоязычные renters (primary); англоязычные expats (secondary).
  • География: Budva и Becici (Montenegro).
  • Ценовой тир: ≤ 700 EUR/мес.
  • Тип недвижимости: апартаменты, 1+ спален, не studio.
  • Срок: long-term rental (6-12 месяцев типично).
  • Delivery surface: Telegram DM.
  • Вне scope (текущий продукт):

    • Другие Montenegro гео (Bar, Tivat, Kotor, Podgorica) — будущее расширение.
    • Другие ценовые тиры (700+ EUR luxury, < 500 EUR shoestring).
    • Studio апартаменты.
    • Short-term / vacation rentals.
    • Другие delivery surfaces (email, web app).
    • Landlords / агенты (B2B).

    • Top-down Sizing

      Пропущено для individual data points — нет industry report доступного в этом прогоне. Выведенные величины (T5):

      СлойОценкаИсточник
      **TAM** = Montenegro inbound renters в target price tier5-15K / годT5 (Montenegro ~ 20-30K иностранных резидентов; ~ 30-50% в long-term rental; ~ 20-40% в target price tier).
      **SAM** = Telegram-active subset, которые self-curate1-3K / годT5 (TG adoption ~ 80-90% среди русскоязычных expats; subset активно ищущих ~ 50-70%).
      **SOM** = Budva-Becici subset, ≤ 700 EUR, year 1100-500 paying usersT5 (SAM capture 1-5% в year 1; консервативно).

      Все величины — догадки, не измерения. Зафиксировано в §Confidence.


      Bottom-up Sizing

      Unit economics на paying user

      ПеременнаяЗначениеИсточник / Tier
      Месячная подписка€4.99T6 (предполагается)
      Avg lifetime8 месяцевT5 (rental search 2-8 недель × repeat tenancy cycles)
      LTV на paying user~ €40Вычислено: €4.99 × 8 месяцев
      Gross margin~ 90%T5 (LLM cost ~ €0.05/матч × 20 матчей/мес = €1; infra negligible)
      Net LTV на paying user~ €36Вычислено
      Free→paid conversion rate2-5%T5 (freemium SaaS industry benchmark; широкий диапазон)
      Free users на paying user20-50T5
      Free user acquisition cost (CAC)€0.50-2.00T5 (TG channel posting = €0; content marketing = €0.50-1.00 за signup)
      Paying user CAC€10-100Вычислено: free CAC × 20-50
      LTV / CAC ratio0.4-3.6Вычислено: €36 / €10-100

      Вердикт: Unit economics маргинальные в year 1 (LTV/CAC < 1 в worst case) но улучшаются с retention. Year 1 — инвестиция в distribution; year 2+ должен видеть LTV/CAC > 1.

      Year 1 revenue scenarios

      СценарийPaying usersMRRAnnual revenue
      Консервативный100€500€6K
      Базовый200€1K€12K
      Оптимистичный500€2.5K€30K

      Year 2+ scenarios (предполагая 50% MoM growth cap)

      ГодPaying usersMRRAnnual revenue
      Y1200€1K€12K
      Y2600€3K€36K
      Y31500€7.5K€90K

      Multi-framework synthesis

      ФреймворкРезультатКонвергенция / Дивергенция
      Top-down (T5)TAM 5-15K, SAM 1-3K, SOM 100-500Якорит sizing.
      Bottom-up (T5)Y1 €6-30K revenueСогласовано с SOM.
      Industry benchmark (T4 — gap)Freemium SaaS conversion 2-5%TBD; верифицировать post-launch.
      Competitive-set (Stage 03)Нет прямого конкурентаЕсли конкурент появится, SOM разделится.

      Конвергенция: SOM year 1 ≈ 100-500 paying users, €6-30K revenue.

      Дивергенция: Смежный рынок (другие Montenegro гео, другие ценовые тиры) — вектор роста; не в текущем roadmap, но определяет потолок.


      Sensitivity Analysis

      ПеременнаяLowMidHigh
      Free→paid conversion1%3%5%
      Avg lifetime (месяцев)4812
      TAM предположение5K10K15K
      **Year 1 paying users****50****200****600**
      **Year 1 revenue****€1K****€8K****€36K**

      Key Assumptions (явно)

      #ПредположениеИсточникConfidenceЧто меняется если неверно
      M1Montenegro long-term rental market: 5-15K русскоязычных renters в target price tier.T5LOWСдвигает TAM 50-200%.
      M2Telegram adoption: 80-90% среди русскоязычных expats.T5MEDСдвигает SAM 20-40%.
      M3Free→paid conversion: 2-5%.T5LOWСдвигает revenue 60-150%.
      M4Avg paid lifetime: 8 месяцев.T5LOWСдвигает LTV 50-150%.
      M5€4.99/мес ниже perceived-value threshold.T5MEDВлияет на conversion.
      M6TG channel acquisition cost: ~ €0.T6HIGHВлияет на CAC.

      Confidence and Limitations

      Наиболее уверены:

      • N > 2 (target — renter демография, не internal builders).
      • Telegram — delivery surface (T3 + T6).
      • Freemium модель: 5 free + €4.99 paid (предполагается).
      • Наименее уверены:

        • TAM 5-15K (T5 inference, нет external data).
        • Free→paid conversion 2-5% (industry benchmark, не Montenegro-specific).
        • Avg paid lifetime 8 месяцев (heuristic, не измерено).
        • Что улучшит уверенность:

          • External market survey Montenegro rental market.
          • Montenegro Statistics Office (MONSTAT) данные по foreign residents.
          • TG-channel posting rate анализ (сколько объявлений/мес на канал).
          • Post-launch conversion data.
          • Что этот анализ НЕ адресует:

            • Brand-building cost (content marketing, SEO).
            • Customer support cost (Telegram-based, низкий).
            • Multi-geo expansion cost (не в текущем roadmap).
            • Tax / payment processing fees (~3% через TG Payments).

            • Next Steps

              РекомендацияОбоснованиеTier
              External market survey (MONSTAT, tourism data).M1 — load-bearing.HIGH
              TG-channel posting rate анализ.Size the supply.HIGH
              Soft-launch в одном канале, измерить conversion.Валидировать M3, M4.HIGH
              Re-run этого документа после 90 дней paid-tier data.Заменить T5 на T1.QUARTERLY

              Sources and References

              • product/01-problem-framing.md (T6) — user base, geography, price tier.
              • product/02-discovery-research.md (T6) — channel и signal structure.
              • product/03-competitive-market-analysis.md (T6) — competitive set.
              • product/04-discover-journey-map.md (T6) — stage flow.
              • /Users/paveldmitriev/Work/homefinder/README.md (T6) — product surface.
              • Industry benchmarks для freemium SaaS (T4 — gap; не surveyed).
              • Никакой external market report не использовался в этом прогоне.
Define

JTBD Canvas: Realty Relay Bot

Входы: product/01-problem-framing.md (PRODUCED), product/02-discovery-research.md (PRODUCED)


Job Overview

Высоко-ставное, средне-частотное жизненное решение (long-term rental search 2-8 недель), выполняемое в фрагментированной информационной среде (Telegram-каналы, неформальные объявления, смешанные языки). Работа повторяется каждый раз, когда renter нуждается в новом жилье — типично 1-2 раза в год на renter.

Job Performer

  • Primary: Русскоязычный renter в Montenegro, 25-45 yo, tech-literate, использует Telegram как основной мессенджер.
  • Secondary: Co-searcher (партнёр/супруг) в 5-20% случаев.
  • Tertiary: Сам бот — не-человеческий actor, выполняющий curation sub-job.
  • TAM: 5-15K renters/год. SAM: 1-3K/год. SOM year 1: 100-500 paying users.

    The Circumstance

    When: Renter между lease'ами или планирует переезд (2-8 недель активного поиска). Не в vacation-rental фрейме.

    Where: Telegram (mobile или desktop) — renter уже в TG для messaging.

    Что триггерит: Новое rental объявление появляется в мониторимом публичном канале, которое соответствует hard criteria (Budva/Becici, ≤ 700 EUR, 1+ BR, не studio).

    Job Statement

    > When подходящее long-term rental объявление появляется в публичном Telegram-канале, за которым я слежу, I want узнать о нём в течение 10 минут и иметь уверенность, что бот не напишет дважды тому же автору, если мой партнёр тоже ищет, so I can действовать до того, как объявление заберут.

    Functional Job

    • Получить hard-criteria матч в течение 10 минут после channel post.
    • Видеть полный контент объявления (текст + media) не покидая Telegram.
    • Избегать дублирующего DM тому же автору.
    • (Paid tier) Фильтровать по soft criteria (вид на горы, новая мебель, этаж ≥ 3).
    • (Paid tier) Верифицировать через audit log, видел ли бот любое объявление.
    • Emotional Job

      • Уверенность, что я не пропустил хороший вариант.
      • Спокойствие, что channel-stream шум отфильтрован.
      • Облегчение от когнитивной нагрузки мониторинга 5-10 каналов.
      • (Paid tier) Контроль над моими search criteria.
      • Social Job

        • (Когда ищешь с партнёром) Координироваться silently — без «ты видел это?» back-and-forth.
        • Проецировать компетентность в housing decision.
        • Competing Solutions

          РешениеКак решает работуПочему недостаточно
          **Ручное TG сканирование**Бесплатно.Recall теряет данные; координация ручная; off-hours gaps.
          **Montenegro aggregators** (nekretnine.me, cityexpert.me)Агрегированные объявления, фото, цены.Слабое покрытие в ≤ 700 EUR нише; не real-time.
          **Локальный real-estate agent**Full-service.Комиссия (1 месяц аренды); медленно; не 24/7.
          **Generic TG scrapers**One-time build.Нет курации; нет LLM; нет аудита.
          **Email digests**Дневная сводка.Stale; не координировано.
          **Ничего / stay put**Default.Теряет время и optionality.

          Hiring Criteria

          КритерийMust-haveNice-to-haveЗаметка
          Delivery = TG DMДАRenter TG-native.
          Latency ≤ 10 минДАУстановлено polling cadence.
          Hard-criteria precision (free)ДАFalse positives не приемлемы.
          Soft-criteria фильтрДА (paid)Premium дифференциатор.
          Cross-user dedupДАИзбегает дублирующего DM.
          Audit trailДА (paid)Premium дифференциатор.
          Per-user filter profilesДАБудущая фича.
          Multi-cityНЕТСначала Budva-Becici.

          Insights and Implications

          1. Работа узкая и высоко-ставная. Precision > recall; freshness > completeness; coordination > throughput.
          2. Работа разделена между двумя людьми и одним ботом (когда co-searching). Ценность бота — частично в том, чтобы двое людей выглядели как один координированный actor для landlords.
          3. Работа дремлет большую часть времени. Когда renter обеспечен жильём, бот молчит. Здоровое, не дефект.
          4. Работа — information-gathering, не транзакция. Бот upstream любого lease.
          5. Supporting Quotes

            Пропущено — нет T2 user-interview quotes доступных. Зафиксировано как research gap в Stage 02.

            Questions for Further Research

            1. Сколько hard-criteria матчей типичный renter acted on за search cycle? (T1 нужен)
            2. Какая доля matched объявлений — «uncertain» vs «definitely interested»? (T2 нужен)
            3. У co-searchers разные soft-criteria приоритеты? (T2 нужен)
            4. Как часто то же объявление появляется в 2+ каналах в polling window? (T1 нужен)
            5. Какое время суток — наивысшая match-density? (T1 нужен)
            6. Каков free→paid conversion rate по soft-criteria usage? (T1 нужен post-launch)
            7. Cross-references

              • Stage 01 §4 (JTBD Problem Framing) — предшественник; этот этап формализует его.
              • Stage 04 §5 (Stage 5 pain point) — информирует «social job» framing.
              • Stage 02 §7 (Research Gap Map) — интервью — следующий input.
              • Stage 12 (specification-writing) — Job Statement в user-stories формате.
Define

Дерево возможностей: Realty Relay Bot

Входы: product/02-discovery-research.md, product/06-define-jtbd-canvas.md (PRODUCED)


Desired Outcome

Русскоязычные renters в Budva/Becici надёжно получают каждый hard-criteria матч в течение 10 минут, без дублирующего cross-channel шума, и с верифицируемым audit trail; с чётким путём от free к paid tier на основе доставленной ценности.

Visual Tree

Outcome: Reliable, deduplicated, audited match delivery
├── O1: Match precision
│   ├── S1.1: Tighten the LLM prompt against a labeled-reject sample
│   ├── S1.2: Add a second-pass rule-based filter (price, BR) post-LLM
│   └── S1.3: Calibrate soft-criteria scoring (paid tier)
├── O2: Match recall
│   ├── S2.1: Add more channels to the watchlist
│   ├── S2.2: Reduce polling interval from 10 min to 5 min
│   └── S2.3: Add userbot-mode for `t.me/c/...` channels
├── O3: Cross-user coordination (co-searchers)
│   ├── S3.1: Per-listing "seen by" log
│   ├── S3.2: "Share with co-searcher" inline button
│   └── S3.3: Suppress duplicate forward within 7 days
├── O4: Freemium paywall
│   ├── S4.1: Free-tier counter (5 matches/month)
│   ├── S4.2: Tier upgrade prompt at 4th match
│   └── S4.3: Telegram Payments integration
├── O5: Audit trail / observability (paid)
│   ├── S5.1: Per-listing event log (paid-only access)
│   ├── S5.2: `/seen <id>` command (paid)
│   └── S5.3: `/status` command (paid)
├── O6: Onboarding
│   ├── S6.1: Signup flow (Telegram-native, no email)
│   ├── S6.2: Tutorial / first match walkthrough
│   └── S6.3: Channel recommendations
└── O7: Operational resilience
    ├── S7.1: Detect Telegram rate-limit or proxy failure early
    ├── S7.2: Fallback to alternative listing surface
    └── S7.3: MiniMax API cost monitor

Opportunity Branches

IDВозможностьПочему важноИсточник
O1Match precisionFalse-positives = шум; renter tunes out.Stage 01 §4; Stage 04 §5.
O2Match recallПропущенный матч = высокая стоимость (1-3 lease'а/год на renter).Stage 01 §4; Stage 04 §5.
O3Cross-user coordinationCo-searchers DM'ы.Stage 01 §9; Stage 06 (social job).
O4Freemium paywallConversion = revenue.Stage 01 §5; Stage 09.
O5Audit trail (paid)Premium дифференциатор.Stage 03 §5 (counter-positioning).
O6OnboardingFirst-time UX драйвит retention.T5 (freemium best practice).
O7Operational resilienceTG API — Tier-1 риск.Stage 01 §7; Stage 03 §1 Class G.

Prioritization

РангРешениеВозможностьImpactConfidenceEffortВердикт
1S4.3 Telegram Payments integrationO4HHM**Делать первым** — требуется для любого paid tier.
2S4.1 Free-tier counterO4HHS**Делать первым** — пара с S4.3.
3S6.1 Signup flowO6HHM**Делать первым** — требуется для захвата free users.
4S5.1 Per-listing event log (paid)O5HMM**Делать** — premium дифференциатор.
5S3.1 Per-listing "seen by" logO3MMS**Делать** — coordination дифференциатор.
6S3.3 Suppress duplicate forwardO3MHS**Делать** — пара с S3.1.
7S4.2 Tier upgrade promptO4MMS**Делать** — conversion optimization.
8S5.2 `/seen` команда (paid)O5MMS**Делать** — экспонирует S5.1.
9S5.3 `/status` команда (paid)O5MMS**Делать** — операционная гигиена.
10S7.1 Rate-limit / proxy detectionO7HMM**Делать** — Tier-1 риск.
11S6.2 Tutorial / first matchO6MMS**Отложить** — ship если retention низкий.
12S6.3 Channel recommendationsO6MLS**Отложить** — manual curation initially.
13S1.1 Tighten LLM promptO1HMM**Отложить** — нужен S5.1 для измерения.
14S1.3 Calibrate soft-criteriaO1MMM**Отложить** — зависит от paid-tier data.
15S2.1 More channelsO2MMM**Отложить** — recall ещё не измерен.
16S2.2 5-min pollingO2MHS**Отложить** — только если recall — bottleneck.
17S2.3 Userbot для `t.me/c/...`O2MML**Отложить** — proxy cost HIGH.
18S3.2 "Share" inline кнопкаO3MMM**Отложить** — feature creep risk.
19S1.2 Second-pass rule-based filterO1MHS**Отложить** — текущий LLM, вероятно, достаточен.
20S7.2 Fallback aggregatorO7MML**Отложить** — Stage 09 contingency.
21S7.3 MiniMax cost monitorO7LHS**Отложить** — cost мал по Stage 05.

Experiments Backlog

SolСамое рискованное предположениеЭкспериментРезультат если invalid
S4.3TG Payments работает для русскоязычных пользователей.Тест в TG sandbox; верификация с 1-2 beta users.Использовать Stripe fallback.
S5.1Audit log — premium дифференциатор.A/B test: paid-with-audit vs paid-without.Revert к audit-only-for-power-users.
S3.1Co-searcher dedup ценен.Измерить: % paid users с co-searchers.Если < 5%, deprioritize O3.
S4.2Upgrade prompt на 4-м матче оптимален.A/B test: 3-й, 4-й, 5-й матч.Переместить trigger.
S1.1LLM prompt может быть уточнён без поломки soft-criteria.Labeled-reject sample из 30 объявлений; A/B prompt.Остаться с текущим prompt.

Learning Log

ЦиклЧто узналиИсточник
C0 (сейчас)Freemium — wedge; soft-criteria + audit = paid дифференциаторы.Stages 01-05.
C1 (post-launch)TBD — в ожидании free→paid conversion data.

Next Steps

  1. Stage 12 (specification-writing) — выразить S4.1, S4.3, S6.1, S3.1, S3.3, S5.1, S5.2, S5.3, S7.1 как first-class user-stories.
  2. Stage 23 (measure-instrumentation-spec) — определить события для S5.1; substrate для S4.2 conversion measurement.
  3. Отложить S1.1, S1.3, S2.*, S3.2, S6.2, S6.3, S7.2, S7.3 в v2 или post-launch.
  4. Назначить 5-10 user interviews (Stage 02 §7 gap) для валидации S4.2 и S5.1 priority.
  5. Cross-references

    • Stage 04 (journey map) — Stage 3 и Stage 4 pains = O1, O2, O3, O4.
    • Stage 01 §9 — дифференциаторы (audit, soft-criteria, freemium).
    • Stage 03 §6 ERRC (Create) — «Create» колонка отображается на O4, O5.
    • Stage 12 (specification-writing) — первый user-stories target.
    • Stage 23 (measure-instrumentation-spec) — события для O5.
Define

Фреймворк приоритезации: Realty Relay Bot

Входы: product/04-discover-journey-map.md, product/06-define-jtbd-canvas.md, product/07-define-opportunity-tree.md (PRODUCED)


1. Applicability Filter Summary

Три фреймворка приоритезации оценены для дерева возможностей Realty Relay Bot: ICE (always-applicable baseline), RICE (gated on reach + confidence), Kano (gated on customer-research input). ICE запущен как baseline. RICE запущен с явными low-confidence метками (нет first-party usage data). Kano исключён, потому что нет T2 customer-research data (Stage 02 §7 gap). Результат — единый ранжированный список 21 решений из Stage 07.


2. Inputs Summary

  • Reach (на решение): TBD (зависит от free→paid conversion). Предположение: free tier достигает 1-3K renters; paid tier достигает 100-500.
  • Impact: Project-internal оценка (T5/T6).
  • Confidence: Project-internal оценка (T5/T6); нет T1 behavioral data.
  • Effort: S/M/L (T6).
  • Customer-research input: None (T2 gap).
  • Важная заметка о scoring: Без T1 reach data, RICE scores illustrative, не discriminative. ICE и RICE почти эквивалентны здесь; оба держим для документации completeness.


    3. Per-framework Scoring Tables

    3.1 ICE (Impact, Confidence, Ease)

    Шкала: 1-5 на ось; финальная = (Impact + Confidence + Ease) / 3.

    SolImpactConfidenceEaseICE
    S4.3 Telegram Payments5434.00
    S4.1 Free-tier counter5555.00
    S6.1 Signup flow5434.00
    S5.1 Per-listing event log (paid)5434.00
    S3.1 Per-listing "seen by" log3343.33
    S3.3 Suppress duplicate forward3454.00
    S4.2 Tier upgrade prompt3353.67
    S5.2 `/seen` (paid)3443.67
    S5.3 `/status` (paid)3443.67
    S7.1 Rate-limit detection5333.67
    S6.2 Tutorial3343.33
    S6.3 Channel recommendations2253.00
    S1.1 Tighten LLM prompt5333.67
    S1.3 Calibrate soft-criteria3333.00
    S2.1 More channels3333.00
    S2.2 5-min polling3454.00
    S2.3 Userbot для `t.me/c/...`3322.67
    S3.2 "Share" кнопка2332.67
    S1.2 Second-pass filter3454.00
    S7.2 Fallback aggregator3322.67
    S7.3 MiniMax cost monitor1453.33

    3.2 RICE (Reach, Impact, Confidence, Effort)

    Шкала: Impact 1-5, Confidence %, Effort в person-weeks. Финальная = (Reach × Impact × Confidence) / Effort.

    SolReachImpactConfidence (%)Effort (pw)RICE
    S4.3 TG Payments15005802.03000
    S4.1 Free counter15005950.514250
    S6.1 Signup15005802.03000
    S5.1 Audit log (paid)3005702.0525
    S3.1 "Seen by" log3003601.0540
    S3.3 Dedup forward15003900.58100
    S4.2 Upgrade prompt15003700.56300
    S5.2 `/seen` (paid)3003800.51440
    S5.3 `/status` (paid)3003800.51440
    S7.1 Rate-limit detection15005602.02250
    S6.2 Tutorial15003600.55400
    S6.3 Channel recs15002400.52400
    S1.1 Tighten LLM15005602.02250
    S1.3 Calibrate soft3003502.0225
    S2.1 More channels15003502.01125
    S2.2 5-min polling15003800.57200
    S2.3 Userbot c/15003504.0562
    S3.2 Share кнопка3002502.0150
    S1.2 Second-pass filter15003800.57200
    S7.2 Fallback15003504.0562
    S7.3 Cost monitor15001900.52700

    3.3 Kano — ИСКЛЮЧЁН

    Почему исключён: Нет T2 customer-research input. Для разблокировки Kano, запустить 5-вопросный Kano survey с 10-20 target renters.

    Что узнали бы: Какие решения Must-Have (TG-native delivery, hard-criteria precision), Performance (latency, recall), или Delighter (audit log, soft-criteria filter, share button).


    4. Synthesis — Финальный приоритет

    РангSolПочему здесь
    1**S4.1 Free-tier counter**Наивысший ICE; пара с S4.3.
    2**S3.3 Suppress duplicate forward**Высокий RICE; дешёвый; coordination дифференциатор.
    3**S1.2 Second-pass rule-based filter**Дешёвая defensive measure.
    4**S2.2 5-min polling**Дешёвый; только если recall — bottleneck.
    5**S4.3 Telegram Payments**Требуется для любого paid tier.
    6**S6.1 Signup flow**Требуется для захвата free users.
    7**S4.2 Tier upgrade prompt**Conversion optimization.
    8**S5.1 Per-listing event log (paid)**Premium дифференциатор.
    9**S5.2 `/seen` (paid)**Экспонирует S5.1.
    10**S5.3 `/status` (paid)**Операционная гигиена.
    11**S7.1 Rate-limit detection**Tier-1 риск.
    12**S1.1 Tighten LLM prompt**Высокий impact, низкая confidence.
    13**S3.1 "Seen by" log**Coordination (HYPOTHESIS).
    14**S6.2 Tutorial**Ship если retention низкий.
    15**S6.3 Channel recommendations**Manual curation initially.
    16**S2.1 More channels**Recall не измерен.
    17**S1.3 Calibrate soft-criteria**Soft информационный.
    18**S7.2 Fallback aggregator**Stage 09 contingency.
    19**S7.3 Cost monitor**Cost мал.
    20**S2.3 Userbot для `t.me/c/...`**Высокий proxy cost.
    21**S3.2 "Share" кнопка**Feature creep риск.

    5. Cross-framework Contradictions

    ПротиворечиеICE говоритRICE говоритРезолюция
    S5.1 ранжируется высоко в ICE, но mid в RICE (из-за low reach предположения).Высоко.Mid.Synthesis mid-rank; premium дифференциатор.
    S4.1 ранжируется #1 в обоих.Top.Top.Нет противоречия.

    6. Limitations

    • ICE и RICE scores — T5/T6 оценки, не измерены.
    • Reach — illustrative (1.5K free, 300 paid) без T1 data.
    • Нет Kano input означает Must-Have / Performance / Delighter метки выведены.
    • Финальное ранжирование согласовано со Stage 07 §Prioritization.

    • 7. Next Steps

      • Feed S4.1, S3.3, S1.2, S2.2, S4.3, S6.1, S4.2, S5.1, S5.2, S5.3, S7.1 в Stage 12 как first-class user-stories.
      • Назначить Kano survey для следующего цикла.
      • Перезапустить этот скилл после Stage 23 инструментации и доступности T1 data.
Strategy

Продуктовая стратегия: Realty Relay Bot — Year 1

Входы: product/01-problem-framing.md через product/08-define-prioritization-framework.md (PRODUCED)


Резюме

Продуктовая стратегия для Realty Relay Bot — запустить freemium, доказать conversion, затем выборочно расширяться — фокус на Budva-Becici ценовом тире, построить freemium paywall + audit + soft-criteria дифференциаторы, затем расшириться на другие Montenegro гео и ценовые тиры. Доминирующий стратегический риск — внешний (изменение политики Telegram + конкуренция агрегаторов). Второй риск — внутренний (free→paid conversion ниже 1%). Три стратегических бета покрывают следующий квартал.


Step 0: Framework Selection

Выбрано: Wardley Map, Playing to Win (P&W) Choice Cascade, O→I→R→C→W recommendations, Strategic Tensions.

Не выбрано: Porter's Five Forces (покрыто в Stage 03), Ansoff Matrix (один продукт, один рынок initially).


1. Vision Statement

> Быть самым надёжным и самым auditable способом для русскоязычных renters в Montenegro найти long-term апартамент в Budva/Becici через Telegram — и никогда не пропускать hard-criteria матч, никогда не дублировать DM тому же автору, и иметь чёткий путь к premium фильтрам, когда готов.

Vision намеренно узкое — одна география, одна delivery surface, одна renter демография.


2. Strategy Pillars

PillarОпределениеMaps to
**P1: Freemium-first**Щедрый free tier (5 матчей/мес) драйвит acquisition; paid tier (€4.99/мес) драйвит revenue.Stage 01 §5; Stage 09 §4 O4.
**P2: Auditability**Каждое объявление имеет верифицируемую историю: seen / parsed / accepted / rejected / forwarded / suppressed. Paid-tier фича.Stage 03 §6 (Create); Stage 07 O5.
**P3: Precision**Hard-criteria precision — table-stakes; soft-criteria персонализация — paid дифференциатор.Stage 01 §4; Stage 04 §5.
**P4: Telegram-native**Бот живёт в TG; нет email, нет web app, нет app build.Stage 01 §6 (anti-cross-platform).
**P5: Resilience**Продукт остаётся up, когда Telegram rate-limits, proxies fail, или LLM costs spike.Stage 01 §7.

3. Strategic Bets

Bet 1: Построить freemium paywall + signup flow (P1, P4)

  • What: S4.1 free-tier counter, S4.3 Telegram Payments, S6.1 signup flow.
  • Почему первым: Без них, ни один renter не может стать paid user.
  • Как выигрываем: Free users видят ценность за 7 дней; 2-5% конвертируются в paid.
  • Kill criterion: Если free→paid < 1% через 90 дней, пересмотреть pricing.
  • Stage link: Stage 12 spec, Stage 22 launch.
  • Bet 2: Добавить audit log как paid-tier дифференциатор (P2)

    • What: S5.1 event log, S5.2 /seen, S5.3 /status — paid-only.
    • Почему вторым: Audit — counter-positioning vs scrapers и агрегаторов.
    • Как выигрываем: Paid users верифицируют «видел ли бот это?» — уникально в этой нише.
    • Kill criterion: Если audit unused > 50% paid users за 60 дней, deprecate.
    • Stage link: Stage 12 spec, Stage 23 events.
    • Bet 3: Добавить soft-criteria filtering как paid-tier gate (P3)

      • What: S1.3 calibrate soft-criteria scoring (вид на горы, новая мебель, этаж ≥ 3).
      • Почему третьим: Зависит от paid-tier data для калибровки.
      • Как выигрываем: Paid users фильтруют по soft criteria; free users видят только hard.
      • Kill criterion: Если soft-criteria не используется > 30% paid users, deprioritize.
      • Stage link: Stage 12 spec, Stage 22 launch.

      • 4. Sequencing Rationale

        ПорядокBetПричина
        1stBet 1 (freemium)Substrate для всего остального.
        2ndBet 2 (audit)Counter-positioning vs конкурентов.
        3rdBet 3 (soft-criteria)Нуждается в paid-tier data для калибровки.

        Critical path: Bet 1 → Bet 2 (sequential). Bet 3 параллелизуем с Bet 2, если позволяет ёмкость.

        Information gates:

        • Bet 1 → Bet 2: payment integration operational.
        • Bet 2 → Bet 3: audit log имеет 30 дней data.

        • 5. Strategic Tensions

          TensionBet ABet BTypeРезолюция
          **Free tier generosity vs. paid conversion**S4.1 (5 free)S4.3 (paid)StrategicA/B test 3 vs 5 vs 7 free матчей.
          **Latency vs. audit completeness**S2.2 (5-min polling)S5.1 (audit)ResourceAudit log первым; пересмотреть S2.2, если recall — bottleneck.
          **Channel coverage vs. precision**S2.1 (больше каналов)S1.1 (tighten LLM)StrategicTighten первым; channels вторыми.
          **Feature breadth vs. discipline**S3.2 (Share кнопка)Bet 2 (audit)StrategicОтложить S3.2.
          **MiniMax cost vs. coverage**Больше LLM call'овS7.3 (cost monitor)ResourceИспользовать существующий batch size; добавить monitor в v2.

          Strategic debt created: Free-tier generosity создаёт conversion risk; mitigated by A/B testing.


          6. What We Are NOT Doing (Year 1)

          #ItemКатегорияПочему нетПересмотреть если
          1Multi-city (Bar, Tivat, Kotor)DeclinedFocus Budva-Becici первым.Y2 если 500+ paid users.
          2Multi-tier pricing (700+ EUR)DeclinedStay focused on ≤ 700 EUR.Y2.
          3Studio апартаментыDeclinedHard criteria.
          4Другие delivery surfaces (email, web)DeclinedTG-native — wedge.User demand.
          5B2B (landlords, агенты)DeclinedSingle-sided (renters).Y3 если B2B demand emerges.
          6Mobile appDeclinedTG-native.Y3 если retention demands.
          7Annual subscriptionDeclinedStart monthly; test annually.Y2.
          8Cross-platform (Airbnb-like)DeclinedDifferent product.
          9Paid acquisition (ads)DeclinedTG channel posting = €0.Y2 если organic stalls.
          10English-only supportDeclinedRussian-speaking primary.Y2 если expansion.

          7. Resource Plan

          РесурсРаспределениеЗаметка
          EngineeringN=2 билдера (founders).Фиксировано.
          LLM budget€50-100/мес при 200 paid users.Scales with usage.
          TG Payments3% на транзакцию.Standard.
          SOCKS5 proxies5 аккаунтов × 1 прокси каждый.Фиксировано.
          Operational labor< 2 часов/неделя.Founders.
          Content marketingFounder time, без cash.SEO, blog.

          8. Quarterly Gates

          GateКогдаPass criterion
          Gate 1: Freemium liveEnd of Q-Week 4S4.1, S4.3, S6.1 поставляются; первый free signup.
          Gate 2: Audit log live (paid)End of Q-Week 8S5.1, S5.2, S5.3 поставляются; первый paid user.
          Gate 3: Soft-criteria live (paid)End of Q-Week 12S1.3 поставляется; 30% paid users используют.
          Gate 4: Quarterly reviewEnd of Q-Week 13Перезапустить Stage 01; оценить conversion.

          Если любой gate проваливается: стоп, re-assume, перезапуск с последнего passing gate.


          9. Roadmap Communication Views

          ViewАудиторияКонтент
          1-page visionFoundersЭтот документ §1, §2, §6.
          Bets + gatesFounders§3, §8.
          Non-goalsFounders§6.
          Полный документFoundersЭтот файл.

          Нет внешней аудитории пока.


          10. Strategic Recommendations (O→I→R→C→W Cascade)

          Recommendation 1: Сделать free tier primary growth surface.

          • Observation (T5): 5 free матчей/мес — wedge.
          • Implication: Free tier UX — наиболее трогаемая surface.
          • Response: S4.1, S4.2, S6.1, S6.2 — first-class.
          • Confidence: M.
          • Watch: Если 90-day free→paid < 1%, пересмотреть.
          • Recommendation 2: Рассматривать audit log как paid дифференциатор.

            • Observation (T5): Ни один конкурент не предлагает это для этой ниши.
            • Implication: S5.1 — counter-positioning lever.
            • Response: Gate paid tier за audit access.
            • Confidence: M.
            • Watch: Если audit unused 50%+ paid, deprecate.
            • Recommendation 3: Не расширяться до 500 paid users.

              • Observation (T6): N=2 билдера; ёмкость фиксирована.
              • Implication: Multi-city или multi-tier expansion размывает focus.
              • Response: §6 #1, #2 — non-negotiable для Y1.
              • Confidence: H.
              • Watch: 500 paid users hit → re-evaluate.

              • Assumption Registry

                #ПредположениеИсточникРиск если ложно
                AS1Telegram продолжит экспонировать `t.me/s/...`.T3HIGH — re-pivot.
                AS2Free→paid conversion 2-5%.T5HIGH — drops revenue.
                AS3Russian-speaking renter демография достижима через TG.T6MED — re-evaluate.
                AS4TG Payments работает для русскоязычных пользователей.T3MED — использовать Stripe fallback.
                AS5SOCKS5 proxy supply доступен.T6MED — стоимость увеличится.
                AS6MiniMax M2.1 pricing стабильна.T6MED — влияет на margin.

                Adversarial Self-Critique

                Weakness 1: Стратегия слишком узкая, чтобы быть неправильной.

                N=2 билдера с 3-bet, 1-quarter стратегией — по существу housekeeping.

                Weakness 2: Беты упорядочены «easy first», не «high-impact first».

                Bet 3 (soft-criteria) — highest-impact, но упорядочен третьим, потому что нуждается в paid data.

                Weakness 3: Non-goals список длиннее bets списка.

                Признак scope insecurity, но discipline требует явных non-goals.


                Revision Triggers

                ТриггерЧто переоценитьTimeline
                TG изменяет `t.me/s/...` доступ.Все §3, §6, AS1.Немедленно.
                Free→paid < 1% через 90 дней.Pricing, §10 R1.Quarterly.
                500 paid users достигнуто.§6 #1, #2.Y2.
                Quarterly review.Перезапустить Stage 01.Quarterly.

                Cross-references

                • Stage 03 §5 (Where to play) — информирует pillars.
                • Stage 07 §Prioritization — информирует bet ordering.
                • Stage 08 §4 (Synthesis) — подтверждает bet ordering.
                • Stage 12 (specification-writing) — получает bet list как input.
                • Stage 22 (deliver-launch-checklist) — получает gates как input.
                • Stage 23 (measure-instrumentation-spec) — получает audit log design.
Strategy

Дизайн метрик и экспериментов: Realty Relay Bot

Входы: product/09-product-strategy.md (PRODUCED)


Резюме

Дизайн метрик для Realty Relay Bot центрирован на primary North Star Metric: Monthly Recurring Revenue (MRR), с supporting метриками на free-tier activation, free→paid conversion, retention и operational health. Дерево декомпозиции метрик имеет 4 слоя (acquisition → activation → conversion → revenue) с маленьким набором operational метрик. Один primary эксперимент pre-registered (free→paid conversion A/B) и несколько secondary экспериментов намечены.


1. Value Moment & North Star Metric

Value moment: Renter подписывается, получает свой первый полезный hard-criteria матч в течение 7 дней, и конвертируется в paid ИЛИ paid user успешно арендует через bot-delivered матч.

North Star Metric (NSM):

> Monthly Recurring Revenue (MRR) — total € от всех активных paid подписок.

Почему MRR:

  • Напрямую привязан к business sustainability.
  • Отражает и conversion, и retention.
  • Выравнивается с freemium SaaS industry standard.
  • Counter-target: MRR должен расти 10-20% MoM в Y1, plateau в Y2.


    2. Metric Decomposition Tree

    NSM: MRR
      ├── (Revenue) Active paid users
      │   ├── (Conversion) Free→paid conversion rate
      │   ├── (Activation) Free users с 1+ матчем в 7 дней
      │   ├── (Acquisition) New signups
      │   └── (Retention) Churn rate (paid downgrades to free)
      │
      ├── (Operational) Bot health
      │   ├── Ingest up-time, alert latency, LLM cost
      │   └── Free-tier cap hit rate
      │
      └── (Attribution) Bot-delivered lease conversions
          └── Per-listing audit log (paid tier)
    СлойМетрикаВладелецTierCadence
    AcquisitionNew signups / weekbotT1 (post-launch)Weekly
    ActivationFree users с 1+ матчем в 7 днейbotT1Weekly
    ConversionFree→paid conversion ratebotT1Weekly
    RevenueMRRbotT1Weekly
    RevenueARPU (€4.99 × paid users)botT1Monthly
    RetentionChurn rate (monthly)botT1Monthly
    RetentionAvg paid lifetime (months)botT1Quarterly
    OperationalIngest up-timebotT1Daily
    OperationalLLM cost / weekbotT1Weekly
    OperationalFree-tier cap hit ratebotT1Weekly
    AttributionBot-delivered lease conversionsuser reportT2Quarterly

    3. Operational Metrics

    МетрикаОпределениеTargetTier
    Ingest up-time% ожидаемых polls, завершённых≥ 99%T1
    LLM accept rateAccepted / parsedobserve for driftT1
    Cross-user dedup rateSuppressions / forwardsobserveT1
    Forward latency (sec)Channel-post → forward≤ 600 (10 мин)T1
    Audit log completenessForwarded / logged100%T1
    Alert latency (sec)TG failure → alert≤ 1 polling cycleT1
    Free-tier cap hit rate% free users hitting 5/monthobserveT1
    LLM cost / weekUSD≤ €20 / 200 paid usersT1
    Proxy fail rateFailures / polls≤ 1%T1

    4. Counter-Metrics

    Counter-metricПочемуTarget
    False-positive rateHard-criteria violations0% — non-negotiable.
    False-reject rateПропущенные матчи≤ 10% (Bet 3).
    Duplicate forward rateCoordination failure0% — non-negotiable.
    Alert false-positive rateAlert fatigue≤ 5% polling cycles.
    Audit-log completeness regressionТеряет attribution100% — non-negotiable.
    LLM cost / matchCost spike≤ €0.10 / accepted match.
    Free→paid conversionRevenue≥ 2% (T5 estimate).

    5. Pre-registered Experiments

    Experiment 1 (PRIMARY): Free-tier cap A/B test

    FieldЗначение
    Гипотеза5 бесплатных матчей/мес — оптимальный cap для 2-5% conversion.
    Primary metricFree→paid conversion rate.
    GuardrailsActivation rate (free users с 1+ матчем в 7 дней); free-tier satisfaction (proxy: retention of free users at 30 days).
    SetupA/B: 3 vs 5 vs 7 бесплатных матчей/мес. 1000 free signups, 333 на вариант.
    Длительность60 дней.
    Decision ruleShip cap с наивысшей conversion rate, subject to ≥ 80% activation rate.

    Experiment 2 (SECONDARY): Soft-criteria filter usage

    FieldЗначение
    ГипотезаSoft-criteria фильтр драйвит ≥ 30% paid-tier engagement.
    Primary metric% paid users, использующих soft-criteria фильтр в первые 30 дней.
    GuardrailsForward latency (no regression); LLM cost (≤ €0.15/матч).
    SetupShip soft-criteria; наблюдать.
    Длительность30 дней post-paid-tier launch.
    Decision ruleСохранить, если ≥ 30% paid users используют. Иначе, deprecate.

    Experiment 3 (SECONDARY): Audit log usage

    FieldЗначение
    ГипотезаAudit log драйвит ≥ 50% paid users к engage.
    Primary metric`/seen` и `/status` invocations / week.
    Длительность30 дней post-paid-tier launch.
    Decision ruleСохранить, если ≥ 50% paid users используют. Иначе, deprecate.

    "When NOT to Experiment" Check

    • Reversibility: Все эксперименты обратимы (изменения cap, deprecate features). ✓
    • Traffic: Y1 трафик (1-3K free, 100-500 paid) достаточен для A/B с 333/cohort. ✓
    • Ethical bar: Нет withholding harm — все пользователи получают ценность. ✓

    • 6. HEART Framework (применён частично)

      ИзмерениеЦельСигналМетрикаTarget
      **Happiness**Renter чувствует уверенность.Self-report.«Вы пропустили хороший вариант?» (1-5)≥ 4
      **Engagement**Renter действует по матчам.Forward → DM автору.DM rate (forwarded → DMed author)observe
      **Adoption**Free→paid conversion.Self-report.Free→paid %≥ 2%
      **Retention**Paid users остаются.Auto.Monthly churn≤ 10%
      **Task success**Матч → lease.Self-report (квартально).Bot-attributed leases≥ 1/paid user/year

      7. Cadence and Ownership

      CadenceReviewOutput
      DailyBot log healthAlert, если любая operational metric breaches
      WeeklyMetric dashboardTriage; flag drift
      MonthlyUser recall (self-report)Re-calibrate soft-criteria
      QuarterlyRe-run Stage 01 + этот документReset targets

      8. Recommendations (O→I→R→C→W Cascade)

      Recommendation 1: Рассматривать MRR как единственный North Star.

      • Observation: Другие метрики — leading indicators.
      • Response: MRR — gate metric.
      • Confidence: H.
      • Recommendation 2: Pre-register Experiment 1 до запуска.

        • Response: Записать decision rule на диск.
        • Confidence: H.
        • Recommendation 3: Трекать free-tier cap hit rate как leading indicator of conversion.

          • Observation: Пользователи, которые hit cap, наиболее вероятно конвертируются.
          • Response: Экспонировать S4.2 prompt агрессивно.
          • Confidence: M.

          • Assumption Registry

            #ПредположениеИсточникРиск если ложно
            M1N=1.5K free users Y1.T5Сдвигает scale.
            M23% free→paid conversion.T5Сдвигает revenue 50-100%.
            M38-месячный avg paid lifetime.T5Сдвигает LTV.
            M4LLM cost ≤ €0.10/матч.T5Margin pressure.
            M5Audit log unused < 50% threshold.T5Deprecate feature.

            Adversarial Self-Critique

            Weakness 1: MRR — медленный feedback (monthly cadence). Использовать leading indicators (free-tier cap hits) для weekly tuning.

            Weakness 2: Y1 трафик мал для robust A/B. Нужен N=1.5K+ free users до power Experiment 1.

            Weakness 3: Conversion оценки — industry benchmarks, не Montenegro-specific.


            Cross-references

            • Stage 09 §3 — Bets 1-3 драйвят метрики.
            • Stage 23 — события для operational метрик.
            • Stage 22 — получает эксперименты как launch criteria.
Strategy

Architecture Decision Records: Realty Relay Bot

Входы: product/09-product-strategy.md, product/10-metric-design-experimentation.md (PRODUCED)


ADR-001: Ingest через Telegram public web-pages (`t.me/s/...`)

Status: Accepted.

Context: Listings приходят из публичных TG-каналов. Telegram экспонирует t.me/s/... (без auth) и t.me/c/... (требует аккаунт). README + .env уже требуют SOCKS5-per-account для userbot.

Decision: Использовать t.me/s/... как primary surface; userbot только для t.me/c/... каналов.

Consequences:

  • (+) Нет account cost для большинства каналов.
  • (+) Нет proxy для web-mode.
  • (−) Ограничен публичными каналами.
  • Alternatives: Userbot-only (отклонён — proxy cost высок); TG Bot API (отклонён — не может читать публичные каналы); MTProto userbot (отложен для t.me/c/...).


    ADR-002: LLM через MiniMax M2.1 direct API

    Status: Accepted.

    Context: Hard + soft criteria не могут быть regex-parsed из free-text мультиязычных объявлений. Repo требует MINIMAX_API_KEY для /run_hours режима.

    Decision: Direct MiniMax M2.1 API, batched (LLM_BATCH_SIZE=6).

    Consequences:

    • (+) Нет router failure mode.
    • (+) LLM обрабатывает free-form + multi-lang.
    • (−) LLM cost (~€0.05-0.10/матч).
    • Alternatives: Regex-only (отклонён); self-hosted LLM (отклонён — GPU cost); multi-provider router (отклонён — single-provider direct проще).


      ADR-003: 10-min polling cadence

      Status: Accepted.

      Context: Listings забираются за часы. README говорит 10-min cadence.

      Decision: Poll каждые 10 мин в v1.0. 5-min отложен.

      Consequences:

      • (+) В пределах TG rate limits.
      • (−) До 10-min latency (приемлемо).

      • ADR-004: Listing-fingerprint dedup

        Status: Accepted (алгоритм TBD в Stage 12).

        Context: То же объявление может появиться в 2+ каналах. Нужен cross-channel + cross-user dedup.

        Decision: Hash = sha256(channel_id + message_id + normalized_body_excerpt + normalized_price). Windows: 7 дней same-user, 24 часа co-user.

        Consequences:

        • (+) Устраняет cross-channel + cross-user дубликаты.
        • (−) Hash collisions возможны.

        • ADR-005: Audit log = append-only JSON Lines

          Status: Accepted.

          Context: Stage 09 Pillar 2 (auditability) требует верифицируемую per-listing историю. Stage 23 определяет события.

          Decision: Append-only JSON Lines на data/audit/events.jsonl. Одно событие на строку. Schema: event_id, listing_fingerprint, timestamp_utc, event_type, actor, payload.

          Consequences:

          • (+) Append-only = integrity.
          • (+) Grep-able.
          • (−) Long-term storage TBD.

          • ADR-006: Resilience alerts через TG DM

            Status: Accepted.

            Context: TG-side ingest failure должен экспонироваться пользователям. Оба TG-native.

            Decision: [!bot alert] DM обоим allowlisted пользователям (system-level, не per-renter).

            Consequences:

            • (+) Достигает пользователей, где они есть.
            • (−) Если TG down, alerts также fail.

            • ADR-007: Freemium enforcement через Telegram Payments

              Status: Accepted (с fallback на Stripe).

              Context: Freemium модель требует paid-tier enforcement. TG-native пользователи предпочитают TG Payments для compliance.

              Decision: Telegram Payments API для paid tier; Stripe как fallback, если TG Payments не доступен в регионе renter'а.

              Consequences:

              • (+) Native для TG, compliant.
              • (+) Stripe fallback покрывает edge cases.
              • (−) Два payment integration для поддержания.
              • Alternatives: Stripe only (отклонён — теряет TG-native advantage); crypto (отклонён — слишком нишево); free-only (отклонён — нет revenue).


                ADR-008: Soft-criteria как paid-tier gate

                Status: Accepted.

                Context: Free tier видит hard-criteria only; paid tier видит hard + soft. Soft criteria (вид на горы, новая мебель, этаж ≥ 3) требуют LLM scoring — более дорогие.

                Decision: Hard criteria всегда оцениваются. Soft criteria оцениваются только для paid tier; результаты включены в форвард-сообщение.

                Consequences:

                • (+) Cost-controlled (soft LLM calls только для paid).
                • (+) Чёткая дифференциация ценности.
                • (−) Сложность в LLM prompt branching.

                • ADR-009: User account = TG user_id (без email)

                  Status: Accepted.

                  Context: Оба пользователя TG-native; email добавит трение.

                  Decision: TG user_id — account identifier. Нет email, нет password. Tier state хранится server-side, keyed by user_id.

                  Consequences:

                  • (+) Zero-friction signup.
                  • (+) TG-native.
                  • (−) Account recovery невозможен без TG.

                  • Summary

                    ADRTitleStatus
                    001Web-pages primary ingestAccepted
                    002MiniMax M2.1 direct APIAccepted
                    00310-min polling cadenceAccepted
                    004Fingerprint-hash dedupAccepted (TBD)
                    005JSON Lines audit logAccepted
                    006TG DM resilience alertsAccepted
                    007TG Payments + Stripe fallbackAccepted
                    008Soft-criteria paid gateAccepted
                    009TG user_id как accountAccepted

                    Future ADRs (отложены): MTProto userbot fallback для t.me/c/...; SQLite audit log; semantic-similarity dedup.

Spec

Спецификация продукта: Realty Relay Bot v1.1 — Freemium + Audit + Soft-Criteria

Входы: product/06-define-jtbd-canvas.md через product/11-develop-adr.md (PRODUCED)

Spec type: Feature specification для v1.1 (freemium paywall + paid audit + soft-criteria).


1. Outcome Statement

> Русскоязычные renters в Budva/Becici могут подписаться бесплатно через Telegram, получить свой первый hard-criteria матч в течение 7 дней, и иметь чёткий путь upgrade'а в paid tier за unlimited матчи, soft-criteria фильтры, и audit log access. Paid users могут верифицировать, для любого объявления, видел ли его бот, парсил ли, принял или отклонил, и форвардил ли.


2. Scope

IN Scope

IDItemИсточник
S-1Telegram-native signup (без email)ADR-009; Stage 07 S6.1
S-2Free-tier counter (5 матчей/мес)Stage 07 S4.1
S-3Tier upgrade prompt на 4-м матчеStage 07 S4.2
S-4Telegram Payments integrationADR-007; Stage 07 S4.3
S-5Stripe fallbackADR-007
S-6Soft-criteria фильтр (paid only): вид на горы, новая мебель, этаж ≥ 3ADR-008; Stage 07 S1.3
S-7Per-listing audit log (paid only)ADR-005; Stage 07 S5.1
S-8`/seen <listing-id>` команда (paid)Stage 07 S5.2
S-9`/status` команда (paid)Stage 07 S5.3
S-10Listing-fingerprint dedup (cross-channel + cross-user)ADR-004; Stage 07 S3.3
S-11Resilience alerts (`[!bot alert]` prefix)ADR-006; Stage 07 S7.1
S-12Event-log queryable с дискаADR-005

OUT of Scope

IDItemПочему out
OOS-1Multi-city expansionStage 09 §6 #1
OOS-2Studio апартаментыHard criteria.
OOS-3Annual subscriptionStage 09 §6 #7
OOS-4B2B (landlords, агенты)Stage 09 §6 #5
OOS-5Mobile app / dashboardStage 09 §6 #6
OOS-6SQLite audit logFuture ADR.
OOS-7Semantic-similarity dedupFuture ADR.
OOS-8MTProto userbotFuture ADR.
OOS-9English-only локализацияStage 09 §6 #10.

Scope Dependencies

#DependencyTypeStatus
DEP-1Существующий `data/web_cache.json`TechnicalReady
DEP-2Существующий TG account + proxyTechnicalReady
DEP-3`MINIMAX_API_KEY`ExternalReady
DEP-4TG bot credentials (`BOT_TOKEN`)ExternalReady
DEP-5TG Payments setupExternalPending (Stage 22)

3. Acceptance Criteria

S-1 — Telegram signup

  • AC-S1-1: Пользователь отправляет /start боту. Бот отвечает welcome message + signup confirmation. MUST.
  • AC-S1-2: Сервер хранит {user_id, signup_at_utc, tier: free}. MUST.
  • AC-S1-3: Никакого email, никакого password не требуется. MUST.
  • S-2 — Free-tier counter

    • AC-S2-1: Сервер трекает {user_id, month, matches_sent} counter. MUST.
    • AC-S2-2: Когда counter достигает 5, free user получает tier-upgrade prompt вместо 6-го матча. MUST.
    • AC-S2-3: Counter сбрасывается 1-го числа каждого месяца (UTC). MUST.
    • S-3 — Tier upgrade prompt

      • AC-S3-1: Когда free user достигает 4 матчей в месяце, следующий match forward включает upgrade-prompt. SHOULD.
      • AC-S3-2: Upgrade prompt ссылается на TG Payments flow. MUST.
      • S-4 — Telegram Payments

        • AC-S4-1: Paid tier — €4.99/мес. MUST.
        • AC-S4-2: TG Payments invoice отправляется по upgrade request. MUST.
        • AC-S4-3: При успешном платеже сервер устанавливает tier: paid для пользователя. MUST.
        • AC-S4-4: При неуспешном платеже сервер сохраняет tier: free. MUST.
        • S-5 — Stripe fallback

          • AC-S5-1: Если TG Payments не доступен в регионе renter'а, сервер предлагает Stripe checkout link. MUST.
          • AC-S5-2: Stripe webhook обновляет tier при успешном платеже. MUST.
          • S-6 — Soft-criteria фильтр (paid)

            • AC-S6-1: Для paid users LLM оценивает soft criteria: вид на горы (да/нет), новая мебель (да/нет), этаж ≥ 3 (да/нет). MUST.
            • AC-S6-2: Результаты soft-criteria включены в форвард-сообщение. MUST.
            • AC-S6-3: Для free users soft criteria НЕ оцениваются (cost control). MUST.
            • S-7 — Per-listing audit log (paid)

              • AC-S7-1: Каждое распарсенное объявление пишет parsed event. MUST.
              • AC-S7-2: Каждое LLM решение пишет accepted или rejected (с reason). MUST.
              • AC-S7-3: Каждый форвард пишет forwarded event. MUST.
              • AC-S7-4: Каждое dedup подавление пишет suppressed event с reason. MUST.
              • AC-S7-5: Audit log — append-only JSON Lines на data/audit/events.jsonl. MUST.
              • S-8 — `/seen <listing-id>` (paid)

                • AC-S8-1: Paid user отправляет /seen и получает event history в обратном хронологическом порядке, или not found. MUST.
                • AC-S8-2: Rate-limited до ≤ 5/мин на пользователя. SHOULD.
                • AC-S8-3: Truncated на 10 событий. SHOULD.
                • AC-S8-4: Free users получают audit is a paid feature сообщение. MUST.
                • S-9 — `/status` (paid)

                  • AC-S9-1: Paid user отправляет /status, получает per-channel last-poll time, ingest up-time, последние 5 alerts. MUST.
                  • AC-S9-2: Free users получают audit is a paid feature сообщение. MUST.
                  • S-10 — Dedup

                    • AC-S10-1: Два объявления с одинаковым fingerprint (± 5% цена, одинаковые bedrooms, одинаковые первые 100 chars body) deduped. MUST.
                    • AC-S10-2: Same-user dedup окно = 7 дней. MUST.
                    • AC-S10-3: Cross-user dedup окно = 24 часа. MUST.
                    • AC-S10-4: Dedup решение логируется как suppressed event. MUST.
                    • S-11 — Resilience alerts

                      • AC-S11-1: Detected ingest failure (rate-limit или proxy error) отправляет [!bot alert] DM основателям в течение 1 polling cycle. MUST.
                      • AC-S11-2: Alert включает failing channel, error class, timestamp. MUST.
                      • AC-S11-3: Повторные идентичные alerts в течение 1 часа подавляются. SHOULD.
                      • S-12 — Event log queryability

                        • AC-S12-1: Audit log queryable через grep для listing_fingerprint. MUST.

                        • 4. Context and Decisions

                          Decisions Already Made

                          #DecisionОбоснование
                          D-1Freemium: 5 free + €4.99 paidStage 05 unit economics; Stage 09 §6
                          D-2Audit log = JSON LinesADR-005
                          D-3TG Payments + Stripe fallbackADR-007
                          D-4Soft-criteria = paid gateADR-008
                          D-5TG user_id как accountADR-009

                          Constraints

                          #ConstraintType
                          C-1TG API rate limitsTechnical
                          C-2SOCKS5-per-accountOperational
                          C-3TG Payments regional availabilityExternal
                          C-4LLM cost ≤ €0.10/матчResource
                          C-5GDPR для EU usersCompliance

                          5. Specification Tensions

                          TensionРезолюция
                          Free-tier generosity vs conversionA/B test 3 vs 5 vs 7.
                          Audit completeness vs latencyСинхронный append; non-blocking on success.
                          Soft-criteria cost vs precisionPaid-only evaluation.

                          6. Open Questions

                          #ВопросРезолюция path
                          Q-1Точная normalization для `normalized_body_excerpt`Stage 23 design
                          Q-2Soft-criteria LLM promptStage 12 implementation
                          Q-3Stripe vs TG Payments region splitStage 22 setup

                          7. Cross-references

                          • Stage 06 (define-jtbd-canvas) — Job Statement.
                          • Stage 07 (define-opportunity-tree) — S-1..S-12 mapping.
                          • Stage 09 (product-strategy) — Bets 1, 2, 3.
                          • Stage 10 §5 — Experiments.
                          • Stage 11 — ADRs.
                          • Stage 13 (deliver-prd) — PRD.
                          • Stage 23 (measure-instrumentation-spec) — event schema.
Spec

PRD: Realty Relay Bot v1.1 — Freemium + Audit + Soft-Criteria Release

Входы: product/09-product-strategy.md, product/12-specification-writing.md (PRODUCED)


1. Document Purpose

Этот PRD определяет релиз v1.1 Realty Relay Bot — добавляющий freemium paywall, paid-tier audit log и soft-criteria фильтр к существующему v1.0 боту. Target: русскоязычные renters в Budva/Becici, ищущие long-term апартаменты ≤ 700 EUR.

Аудитория: Основатели (N=2), которые также являются executors.


2. Background and Context

v1.0 Realty Relay Bot опрашивает публичные Telegram-каналы каждые 10 минут, фильтрует через MiniMax M2.1, и форвардит hard-criteria матчи подписчикам. Он operational, но не монетизирован.

v1.1 закрывает gap:

  1. Нет freemium paywall (нет revenue model).
  2. Нет audit trail (нет premium дифференциатора).
  3. Нет soft-criteria фильтра (нет premium-tier фичи).

  4. 3. Goals and Non-Goals

    Goals

    #ЦельИсточник
    G-1Русскоязычный renter может подписаться бесплатно за <30 секунд.Stage 12 S-1
    G-2Free user получает 5 hard-criteria матчей в месяц, затем upgrade prompt.Stage 12 S-2, S-3
    G-3Paid tier (€4.99/мес) разблокирует unlimited матчи + soft-criteria фильтр + audit log.Stage 12 S-4, S-6, S-7
    G-4Free→paid conversion ≥ 2% в течение 90 дней.Stage 10 §5 Experiment 1
    G-5MRR ≥ €500 к концу Q (100 paid users).Stage 10 §1

    Non-Goals

    #Non-GoalИсточник
    NG-1Multi-city expansionStage 09 §6 #1
    NG-2Annual subscriptionStage 09 §6 #7
    NG-3B2BStage 09 §6 #5
    NG-4Mobile appStage 09 §6 #6
    NG-5English-only локализацияStage 09 §6 #10
    NG-6SQLite audit logFuture

    4. Proposed Solution

    v1.1 добавляет три слоя к v1.0:

    1. Freemium paywall: Signup через /start, free tier (5 матчей/мес), upgrade prompt на 4-м матче, TG Payments + Stripe fallback.
    2. Audit log (paid only): Append-only JSON Lines на data/audit/events.jsonl. /seen и /status команды.
    3. Soft-criteria фильтр (paid only): Вид на горы, новая мебель, этаж ≥ 3. LLM-evaluated только для paid users.
    4. Существующие v1.0 фичи остаются: 10-min polling, MiniMax M2.1 фильтр, hard-criteria matching.


      5. Functional Requirements

      5.1 Signup & Tier

      IDТребованиеТест
      FR-A1Пользователь отправляет `/start`, получает welcome + signup confirmation.Manual.
      FR-A2Сервер хранит `{user_id, signup_at, tier: free}`.Unit.
      FR-A3Free user получает 5 hard-criteria матчей/мес, затем upgrade prompt.Unit.
      FR-A4Paid user получает unlimited матчи + soft-criteria + audit.Unit.
      FR-A5Counter сбрасывается 1-го числа месяца (UTC).Unit.

      5.2 Payment

      IDТребованиеТест
      FR-B1Paid tier = €4.99/мес.Code review.
      FR-B2TG Payments primary; Stripe fallback.Integration.
      FR-B3При успешном платеже, tier = paid.Unit.
      FR-B4При неуспешном платеже, tier = free.Unit.

      5.3 Audit Log (paid only)

      IDТребованиеТест
      FR-C1`parsed` event на объявление.Unit.
      FR-C2`accepted`/`rejected` event на LLM решение.Unit.
      FR-C3`forwarded` event на форвард.Unit.
      FR-C4`suppressed` event на dedup.Unit.
      FR-C5Append-only JSON Lines.Code review.
      FR-C6`/seen` возвращает события.Integration.
      FR-C7`/status` возвращает health.Integration.
      FR-C8Free users видят `audit is a paid feature`.Manual.

      5.4 Soft-Criteria (paid only)

      IDТребованиеТест
      FR-D1LLM оценивает soft criteria для paid users только.Unit.
      FR-D2Soft-criteria результаты в форвард-сообщении.Manual.

      5.5 Dedup (все пользователи)

      IDТребованиеТест
      FR-E1Cross-channel + cross-user dedup через fingerprint hash.Unit.
      FR-E27-дневное same-user окно, 24-часовое co-user окно.Unit.

      5.6 Resilience (система)

      IDТребованиеТест
      FR-F1`[!bot alert]` на TG rate-limit / proxy failure.Integration.
      FR-F2Alert основателям в течение 1 polling cycle.Unit.

      6. Scope Boundaries

      КатегорияItems
      **In scope**Freemium paywall; TG Payments; Stripe fallback; audit log; soft-criteria; dedup; resilience.
      **Out of scope**Multi-city; annual sub; B2B; mobile app; English-only; SQLite; semantic dedup; MTProto.
      **Deferred to v1.2**LLM prompt iteration; second-pass rule filter; more channels; share button.

      7. Technical Considerations

      • Ingest surface (ADR-001): t.me/s/... only.
      • LLM (ADR-002): MiniMax M2.1 direct.
      • Polling (ADR-003): 10-min cadence.
      • Audit log (ADR-005): JSON Lines, append-only.
      • Payment (ADR-007): TG Payments + Stripe.
      • Soft-criteria (ADR-008): paid-only.
      • Account (ADR-009): TG user_id.
      • Новые компоненты:

        • payments.py — TG Payments + Stripe integration.
        • tier.py — Free/paid tier logic, counter.
        • audit.py — JSON Lines writer (paid-access only).
        • commands.py/seen, /status, /start handlers.
        • dedup.py — fingerprint-hash dedup.

        • 8. Dependencies

          #DependencyStatus
          DEP-1Существующие poll/parse модулиReady
          DEP-2Существующий LLM callReady
          DEP-3Существующий forwarderReady
          DEP-4TG bot credentialsReady
          DEP-5SOCKS5 proxy bindingsReady
          DEP-6TG Payments setupPending (Stage 22)
          DEP-7Stripe accountPending (Stage 22)

          9. Risks and Mitigations

          #РискВероятностьImpactMitigation
          R-1Free→paid < 1%MHA/B test cap.
          R-2TG Payments не в регионе renter'аMMStripe fallback.
          R-3LLM cost spike с soft-criteriaMMPaid-only evaluation.
          R-4Audit log abuse (free user accesses через API)LMServer-side tier check.
          R-5Stripe webhook failureLHStripe retry logic; manual tier sync.
          R-6TG policy change на paid botsLHTelegram Payments compliant; мониторить.
          R-7GDPR enforcementMMData retention policy; consent.

          10. Launch Criteria

          #КритерийВладелец
          LC-1Все AC в Stage 12 §3 выполненыОснователи
          LC-2Free→paid conversion ≥ 2% в течение 90 дней (измерено)Основатели
          LC-3MRR ≥ €500 к концу QОснователи
          LC-4Audit log completeness 100% за 7 днейОснователи
          LC-5LLM cost ≤ €0.15/матч (с soft-criteria)Основатели
          LC-6≥ 100 paying users к Дню 90Основатели

          11. Cross-references

          • Stage 09 §3 — Bets 1, 2, 3.
          • Stage 10 §3-§4 — operational метрики.
          • Stage 12 — acceptance criteria.
          • Stage 14 — user stories.
          • Stage 22 — launch checklist.
Spec

User Stories: Realty Relay Bot v1.1

Входы: product/13-deliver-prd.md (PRODUCED)


US-1: Signup через Telegram (P0)

As русскоязычный renter в Budva/Becici,

I want подписаться на Realty Relay Bot, отправив /start в Telegram,

so that я могу начать получать hard-criteria rental матчи в течение 7 дней без заполнения формы или предоставления email.

AC1.1 Given я отправляю /start, When бот running, Then я получаю welcome message с signup confirmation.

AC1.2 Given я подписан, When я отправляю /status, Then я вижу свой tier (free или paid).

AC1.3 Given я подписан, When проходит 7 дней без матча, Then я получаю no matches yet уведомление.


US-2: Free-tier counter (P0)

As free-tier renter,

I want получать до 5 hard-criteria матчей в месяц, затем быть предложенным upgrade,

so that я могу испытать ценность бота перед оплатой.

AC2.1 Given я free user, When 6-й hard-criteria матч прибывает в месяц, Then я получаю tier-upgrade prompt вместо матча.

AC2.2 Given мой counter сбрасывается 1-го числа месяца, When начинается новый месяц, Then я могу получить ещё 5 матчей.

AC2.3 Given я на 4 матчах, When прибывает 5-й матч, Then форвард матча включает upgrade-prompt reminder.


US-3: Tier upgrade через TG Payments (P0)

As free-tier renter, который достиг cap,

I want upgrade'нуться до paid через Telegram Payments,

so that я могу продолжить получать матчи без прерывания.

AC3.1 Given я отправляю /upgrade, When TG Payments доступен в моём регионе, Then я получаю TG Payments invoice на €4.99/мес.

AC3.2 Given я отправляю /upgrade, When TG Payments НЕ доступен, Then я получаю Stripe checkout link.

AC3.3 Given я завершаю платёж, When платёж подтверждён, Then мой tier меняется на paid и я получаю upgrade-confirmed сообщение.

AC3.4 Given платёж fails, When failure reported, Then мой tier остаётся free и я получаю failure сообщение.


US-4: Soft-criteria фильтр (paid) (P0)

As paid-tier renter,

I want бот оценивал soft criteria (вид на горы, новая мебель, этаж ≥ 3) для каждого матча,

so that я могу приоритизировать объявления, соответствующие моим предпочтениям сверх hard criteria.

AC4.1 Given я paid, When матч форвардится, Then сообщение включает soft-criteria evaluation: вид на горы (да/нет), новая мебель (да/нет), этаж ≥ 3 (да/нет).

AC4.2 Given я free, When матч форвардится, Then сообщение НЕ включает soft-criteria evaluation (cost control).

AC4.3 Given soft-criteria присутствуют, When сообщение composed, Then они показаны как отдельная секция после hard-criteria.


US-5: Audit log через `/seen` (paid) (P1)

As paid-tier renter,

I want запрашивать audit log для любого объявления, отправив /seen ,

so that я могу верифицировать, видел ли бот, парсил ли, принял ли, и форвардил ли объявление.

AC5.1 Given я paid, When я отправляю /seen и объявление существует, Then я получаю события для этого объявления в обратном хронологическом порядке.

AC5.2 Given я paid, When я отправляю /seen и объявление не существует, Then я получаю not found.

AC5.3 Given я free, When я отправляю /seen , Then я получаю audit is a paid feature сообщение.

AC5.4 Given я отправляю более 5 /seen за 1 минуту, When прибывает 6-й, Then я получаю rate-limit сообщение.


US-6: Операционный status через `/status` (paid) (P1)

As paid-tier renter,

I want запрашивать health бота, отправив /status,

so that я могу независимо верифицировать, что бот работает корректно.

AC6.1 Given я paid, When я отправляю /status, Then я получаю per-channel last-poll time, ingest up-time, последние 5 alerts.

AC6.2 Given я free, When я отправляю /status, Then я получаю audit is a paid feature сообщение.


US-7: Cross-channel dedup (P0)

As любой renter (free или paid),

I want никогда не получать одно объявление дважды из разных каналов,

so that я не трачу время на оценку дубликатов.

AC7.1 Given два объявления из разных каналов с одинаковым fingerprint (± 5% цена, одинаковые bedrooms, одинаковый body excerpt), When оба распарсены, Then второе подавлено с reason=cross-channel-duplicate.

AC7.2 Given объявление было форвардно мне в течение 7 дней, When то же объявление распарсено снова, Then я не получаю второй форвард.


US-8: Co-searcher dedup (P1)

As renter, чей партнёр также подписан,

I want не получать то же объявление, которое мой партнёр уже был форвардно,

so that мы оба не пишем одному и тому же владельцу.

AC8.1 Given мой партнёр был форвардно объявление в течение 24 часов, When то же объявление распарсено снова, Then я не получаю форвард.

AC8.2 Given мой партнёр был форвардно объявление, When 24-часовое окно истекает, Then я могу получить форвард.


US-9: Resilience alerts (P0)

As системный оператор (основатель),

I want быть alerted, когда бот не может ингестить из Telegram,

so that я могу исправить проблему до того, как пользователи заметят.

AC9.1 Given TG FLOOD_WAIT ошибка, When обнаружена, Then я получаю [!bot alert] DM в течение 1 polling cycle.

AC9.2 Given SOCKS5 proxy failure, When обнаружена, Then я получаю [!bot alert] DM в течение 1 polling cycle.

AC9.3 Given та же alert condition повторяется в течение 1 часа, When 2-й и 3-й собираются отправить, Then они подавляются (1-hour dedup).


INVEST Validation

StoryINVESTВердикт
US-1PASS
US-2PASS
US-3PASS
US-4PASS
US-5PASS
US-6PASS
US-7depends on US-1PASS
US-8depends on US-1PASS
US-9PASS

Prioritization Summary

  • P0: US-1 (signup), US-2 (counter), US-3 (payment), US-4 (soft-criteria), US-7 (dedup), US-9 (alerts).
  • P1: US-5 (/seen), US-6 (/status), US-8 (co-searcher).
  • Рекомендуемый execution order: US-1 → US-2 → US-3 → US-4 → US-7 → US-9 → US-5 → US-6 → US-8.

Spec

Acceptance Criteria: Realty Relay Bot v1.1 (Test Cases)

Входы: product/14-deliver-user-stories.md (PRODUCED)


TC-1.1 — Signup: `/start` триггерит welcome

FieldValue
StoryUS-1
TypeIntegration
Steps1. Новый пользователь отправляет `/start` боту. 2. Получает welcome message.
ExpectedWelcome message + signup confirmation. Сервер хранит пользователя.
FailureНет welcome; или сервер не хранит пользователя.

TC-1.2 — Signup: существующий пользователь `/status` показывает tier

FieldValue
StoryUS-1
TypeIntegration
Steps1. Подписанный пользователь отправляет `/status`. 2. Получает tier info.
ExpectedTier (free) показан; или `audit is a paid feature` если `/status` paid-only.
FailureНет tier info; или crash.

TC-2.1 — Free counter: 5-й матч включает upgrade prompt

FieldValue
StoryUS-2
TypeUnit
Steps1. У free user 4 матча в этом месяце. 2. Прибывает 5-й матч.
ExpectedMatch forward включает upgrade-prompt reminder.
FailureНет upgrade reminder.

TC-2.2 — Free counter: 6-й матч blocked

FieldValue
StoryUS-2
TypeUnit
Steps1. У free user 5 матчей в этом месяце. 2. Прибывает 6-й матч.
ExpectedTier-upgrade prompt вместо матча.
Failure6-й матч отправлен; или crash.

TC-2.3 — Free counter: месячный reset

FieldValue
StoryUS-2
TypeUnit
Steps1. У free user 5 матчей 31 января. 2. Приходит 1 февраля.
ExpectedCounter сбрасывается; пользователь может получить ещё 5 матчей в феврале.
FailureCounter не сбрасывается.

TC-3.1 — Payment: TG Payments primary

FieldValue
StoryUS-3
TypeIntegration
Steps1. Пользователь отправляет `/upgrade`. 2. TG Payments доступен в регионе.
ExpectedTG Payments invoice на €4.99/мес.
FailureНет invoice; или неправильная сумма.

TC-3.2 — Payment: Stripe fallback

FieldValue
StoryUS-3
TypeIntegration
Steps1. Пользователь отправляет `/upgrade`. 2. TG Payments НЕ доступен.
ExpectedStripe checkout link.
FailureНет link; или неправильный link.

TC-3.3 — Payment: успех → paid tier

FieldValue
StoryUS-3
TypeUnit
Steps1. Пользователь завершает платёж (TG или Stripe). 2. Webhook подтверждён.
ExpectedTier = paid. Пользователь получает upgrade-confirmed сообщение.
FailureTier не обновлён; или нет сообщения.

TC-3.4 — Payment: failure → free tier

FieldValue
StoryUS-3
TypeUnit
Steps1. Платёж fails.
ExpectedTier остаётся free. Пользователь получает failure сообщение.
FailureTier неправильно установлен в paid.

TC-4.1 — Soft-criteria: paid user

FieldValue
StoryUS-4
TypeUnit
Steps1. У paid user матч. 2. LLM оценивает soft criteria.
ExpectedФорвард-сообщение включает вид на горы / новую мебель / этаж ≥ 3.
FailureSoft-criteria не включены.

TC-4.2 — Soft-criteria: free user (НЕ оценивается)

FieldValue
StoryUS-4
TypeUnit
Steps1. У free user матч. 2. LLM call.
ExpectedSoft-criteria НЕ оцениваются; cost control сохранён.
FailureSoft-criteria оценены для free user (cost spike).

TC-5.1 — `/seen`: success

FieldValue
StoryUS-5
TypeIntegration
Steps1. Paid user отправляет `/seen <id>`. 2. Объявление существует.
ExpectedСобытия в обратном хронологическом порядке.
FailureНет событий; или неправильный порядок.

TC-5.2 — `/seen`: not found

FieldValue
StoryUS-5
TypeIntegration
Steps1. Paid user отправляет `/seen nonexistent`.
Expected`not found` reply.
FailureError reply.

TC-5.3 — `/seen`: free user blocked

FieldValue
StoryUS-5
TypeIntegration
Steps1. Free user отправляет `/seen <id>`.
Expected`audit is a paid feature` reply.
FailureFree user получает audit access.

TC-5.4 — `/seen`: rate-limit

FieldValue
StoryUS-5
TypeUnit
Steps1. Paid user отправляет 5 `/seen` за 1 минуту. 2. Отправляет 6-й.
Expected5 успешны; 6-й rate-limited.
Failure6-й успешен.

TC-6.1 — `/status`: success

FieldValue
StoryUS-6
TypeIntegration
Steps1. Paid user отправляет `/status`.
ExpectedPer-channel last-poll, ingest up-time, последние 5 alerts.
FailureОтсутствующие секции.

TC-6.2 — `/status`: free user blocked

FieldValue
StoryUS-6
TypeIntegration
Steps1. Free user отправляет `/status`.
Expected`audit is a paid feature` reply.
FailureFree user получает audit access.

TC-7.1 — Dedup: cross-channel

FieldValue
StoryUS-7
TypeUnit
Steps1. Два объявления с одинаковым fingerprint, разные каналы.
ExpectedВторое подавлено с `cross-channel-duplicate`.
FailureОба форвардятся.

TC-7.2 — Dedup: same-user 7-дневный

FieldValue
StoryUS-7
TypeUnit
Steps1. Объявление A форвардно 3 дня назад user X. 2. A re-parsed.
ExpectedX не получает второй форвард.
FailureВторой форвард отправлен.

TC-8.1 — Co-searcher dedup: 24-часовой

FieldValue
StoryUS-8
TypeUnit
Steps1. Объявление A форвардно user X 2 часа назад. 2. A re-parsed.
ExpectedUser Y (co-searcher X) не получает.
FailureUser Y получает.

TC-9.1 — Alert: FLOOD_WAIT

FieldValue
StoryUS-9
TypeIntegration
Steps1. Stub TG возвращает `FLOOD_WAIT`. 2. Poll запускается.
ExpectedОснователи получают `[!bot alert]` DM.
FailureНет DM.

TC-9.2 — Alert: proxy failure

FieldValue
StoryUS-9
TypeIntegration
Steps1. SOCKS5 proxy offline. 2. Poll запускается.
ExpectedОснователи получают `[!bot alert]` DM.
FailureНет DM.

TC-9.3 — Alert dedup: 1-часовой

FieldValue
StoryUS-9
TypeUnit
Steps1. Та же alert condition 3 раза за 1 час.
ExpectedТолько 1 DM отправлен.
FailureНесколько DM.

Summary Table

TCStoryTypePass/Fail
TC-1.1US-1IntegrationWelcome + signup
TC-1.2US-1IntegrationTier info
TC-2.1US-2Unit5-й матч prompt
TC-2.2US-2Unit6-й матч blocked
TC-2.3US-2UnitМесячный reset
TC-3.1US-3IntegrationTG Payments
TC-3.2US-3IntegrationStripe fallback
TC-3.3US-3UnitУспех → paid
TC-3.4US-3UnitFailure → free
TC-4.1US-4UnitSoft-criteria paid
TC-4.2US-4UnitSoft-criteria free blocked
TC-5.1US-5Integration`/seen` success
TC-5.2US-5Integration`/seen` not-found
TC-5.3US-5Integration`/seen` free blocked
TC-5.4US-5Unit`/seen` rate-limit
TC-6.1US-6Integration`/status` success
TC-6.2US-6Integration`/status` free blocked
TC-7.1US-7UnitCross-channel dedup
TC-7.2US-7UnitSame-user 7-day
TC-8.1US-8UnitCo-searcher 24h
TC-9.1US-9IntegrationFLOOD_WAIT alert
TC-9.2US-9IntegrationProxy alert
TC-9.3US-9UnitAlert dedup

Всего: 23 test cases.

Spec

Edge Cases: Realty Relay Bot v1.1

Входы: product/13-deliver-prd.md, product/14-deliver-user-stories.md, product/15-deliver-acceptance-criteria.md (PRODUCED)


EC-1: TG Payments не в регионе renter'а

  • Story: US-3
  • Trigger: Пользователь в регионе, где TG Payments не поддерживается.
  • Expected: Stripe checkout link предложен как fallback (ADR-007).
  • Recovery: Manual Stripe setup, если оба fail.
  • Priority: P0.
  • EC-2: Stripe webhook failure

    • Story: US-3
    • Trigger: Network blip, Stripe service outage.
    • Expected: Stripe retries; пользователь в конце концов видит правильный tier.
    • Recovery: Manual tier sync через admin tool.
    • Priority: P1.
      • Story: US-2
      • Trigger: У free user 5 матчей, затем он видит идеальное объявление в канале.
      • Expected: Tier-upgrade prompt прибывает вместо матча.
      • Recovery: Пользователь может upgrade'нуться в течение 24 часов; пропущенный матч recoverable через /seen после upgrade.
      • Priority: P0.
      • EC-4: Paid user отменяет mid-cycle

        • Story: US-3
        • Trigger: Paid user запрашивает refund / cancellation через TG Payments или Stripe.
        • Expected: Tier revert'ится в free в конце paid period; пользователь сохраняет paid features до этого.
        • Recovery: N/A.
        • Priority: P1.
        • EC-5: LLM cost spike с soft-criteria

          • Story: US-4
          • Trigger: Высокий объём paid матчей с soft-criteria evaluation.
          • Expected: LLM cost ≤ €0.15/матч (PRD LC-5). Alert, если превышен.
          • Recovery: S7.3 cost monitor; tune soft-criteria prompt; или ограничить soft-criteria high-priority criteria.
          • Priority: P1.
          • EC-6: Cross-channel repost с изменением цены

            • Story: US-7
            • Trigger: То же объявление re-posted в другом канале с 5% изменением цены.
            • Expected: Другой fingerprint; оба форвардятся.
            • Recovery: N/A — ожидаемое поведение.
            • Priority: P1.
            • EC-7: Два пользователя подписываются с одного TG аккаунта (невозможно, но тестируется)

              • Story: US-1
              • Trigger: Тот же TG user_id пытается подписаться несколько раз.
              • Expected: Idempotent: сервер использует существующую запись.
              • Recovery: N/A.
              • Priority: P2.
              • EC-8: `/seen` для объявления с > 100 событиями

                • Story: US-5
                • Trigger: High-frequency объявление (например, переоценённое 100 раз).
                • Expected: Truncated на 10 событий + (+N more).
                • Recovery: N/A.
                • Priority: P2.
                • EC-9: TG API rate-limit в период высокого объёма

                  • Story: US-9
                  • Trigger: Много каналов постят одновременно, натыкаясь на TG rate limits.
                  • Expected: [!bot alert] основателям; backoff по существующей lease logic.
                  • Recovery: Ручная rate-limit review; рассмотреть уменьшение polling frequency.
                  • Priority: P0.
                  • EC-10: SOCKS5 proxy для 1 из 5 аккаунтов fails

                    • Story: US-9
                    • Trigger: SOCKS5 proxy одного TG-аккаунта offline.
                    • Expected: Per-channel/per-account alert; 4 других аккаунта продолжают.
                    • Recovery: Ручная замена proxy.
                    • Priority: P1.
                    • EC-11: Audit log file растёт unbounded

                      • Story: US-5
                      • Trigger: 6+ месяцев работы, 1KB/объявление × 100 объявлений/день = 18MB/мес.
                      • Expected: Ручная очистка; или rotation policy.
                      • Recovery: N/A.
                      • Priority: P2.
                      • EC-12: Time-zone skew в audit timestamps

                        • Story: US-5
                        • Trigger: Audit event записан в local time, не UTC.
                        • Expected: Все timestamps UTC; dedup окна вычисляются в UTC.
                        • Recovery: Re-record с UTC.
                        • Priority: P0.
                        • EC-13: Бот падает между LLM решением и форвардом

                          • Story: US-7
                          • Trigger: LLM принимает; бот падает до записи forwarded event.
                          • Expected: При рестарте объявление переоценивается; dedup state может подавить re-forward.
                          • Recovery: Ручной review через /seen.
                          • Priority: P1.
                          • EC-14: Free user пытается получить доступ к paid фичам через API

                            • Story: US-3
                            • Trigger: Free user пытается обойти tier check.
                            • Expected: Server-side tier check enforces; free user получает audit is a paid feature.
                            • Recovery: N/A.
                            • Priority: P0.
                            • EC-15: Бот форвардит объявление дважды из-за dedup race

                              • Story: US-7
                              • Trigger: Два poll cycle обрабатывают одно объявление до dedup state committed.
                              • Expected: Dedup использует atomic check-and-set.
                              • Recovery: N/A.
                              • Priority: P1.
                              • EC-16: TG user_id меняется (редко, но возможно)

                                • Story: US-1
                                • Trigger: Renter меняет TG аккаунт (редко).
                                • Expected: Новый аккаунт = новая подписка; старый аккаунт теряет tier.
                                • Recovery: Ручная re-association.
                                • Priority: P2.
                                • EC-17: GDPR data deletion request

                                  • Story: US-1
                                  • Trigger: EU пользователь запрашивает data deletion.
                                  • Expected: Сервер удаляет {user_id, signup_at, tier, matches_sent} в течение 30 дней.
                                  • Recovery: N/A.
                                  • Priority: P1.
                                  • EC-18: Изменение soft-criteria LLM prompt вызывает churn paid users

                                    • Story: US-4
                                    • Trigger: Новый soft-criteria prompt имеет false-negatives; paid users видят меньше матчей.
                                    • Expected: A/B test до полного rollout; мониторинг free→paid retention.
                                    • Recovery: Revert prompt.
                                    • Priority: P0.
                                    • EC-19: Telegram банит bot account

                                      • Story: US-9
                                      • Trigger: TG ToS violation или rate-limit abuse.
                                      • Expected: Основатели rotate на backup bot account; пользователи re-subscribe.
                                      • Recovery: Ручная bot migration.
                                      • Priority: P0.
                                      • EC-20: LLM API outage (MiniMax M2.1 down)

                                        • Story: US-4
                                        • Trigger: MiniMax API недоступен >1 час.
                                        • Expected: Бот продолжает ингестить; форвардит только hard-criteria матчи; soft-criteria skipped.
                                        • Recovery: LLM retry; fall back на regex-only hard criteria (limited).
                                        • Priority: P0.
                                        • EC-21: Free user upgrade'ает затем немедленно downgrades

                                          • Story: US-3
                                          • Trigger: Пользователь платит за 1 месяц, отменяет через 1 день.
                                          • Expected: Нет refund по TG Payments policy; пользователь теряет paid features в конце paid period.
                                          • Recovery: N/A.
                                          • Priority: P2.
                                          • EC-22: Audit log corrupted (частичная строка)

                                            • Story: US-5
                                            • Trigger: Бот killed mid-write.
                                            • Expected: /seen пропускает corrupted line; warns пользователь.
                                            • Recovery: Ручная очистка.
                                            • Priority: P2.

                                            • Summary

                                              PriorityCount
                                              P08
                                              P19
                                              P25

                                              Всего: 22 edge cases.

                                              Cross-references

                                              • Stage 12 §5 Specification Tensions — источник EC-5, EC-18.
                                              • Stage 13 §9 Risks — источник EC-1, EC-2, EC-9, EC-19.
                                              • Stage 15 (формальные test cases) — TC boundaries информируют edge cases.
                                              • Stage 22 (deliver-launch-checklist) — получает P0 edge cases как launch-blocking.
GoToMarket

Go-To-Market Strategy: Realty Relay Bot v1.1 — Freemium Launch

Входы: product/03-competitive-market-analysis.md, product/09-product-strategy.md (PRODUCED)


Резюме

GTM для Realty Relay Bot v1.1 — freemium launch в нишу русскоязычных expats в Montenegro, с TG channel partnerships, content marketing, и referral mechanics как три primary distribution канала. Доминирующий риск — не viable distribution channel (cost-free TG channel posting — wedge); второй риск — freemium conversion rate. Три GTM фазы покрывают запуск.


1. Market Entry Thesis

Why This Market

Русскоязычные expats в Montenegro, конкретно Budva-Becici long-term rental ниша, — известная демография с:

  • Концентрированной коммуникацией на Telegram (80-90% adoption).
  • Высокой willingness to pay для time-saving инструментов (rental search занимает 2-8 недель).
  • Существующим TG channel presence (5-10+ каналов с rental объявлениями).
  • Why Now

    • v1.0 продукт operational; v1.1 добавляет freemium + paid дифференциаторы.
    • TG Payments доступен в Montenegro для русскоязычных пользователей.
    • MiniMax M2.1 cost устойчив при projected scale.
    • The Wedge

      Counter-positioning: TG-native + freemium + LLM курация + audit log. Агрегаторы не могут легко match эту комбинацию.

      Go / Wait / Pivot Decision

      GO. Ship v1.1 в текущем квартале. Альтернатива (остаться на v1.0) оставляет revenue на столе.


      2. Segment Selection

      Primary segment: Русскоязычные renters в Budva/Becici, ищущие long-term апартаменты ≤ 700 EUR.

      • Size: 1-3K/год (SAM).
      • Достижим через TG channel partnerships.
      • Secondary segment: Англоязычные expats (будущее).

        • Size: ~ 500/год.
        • Отложен в Y2.

        • 3. Positioning & Messaging

          > «Realty Relay Bot — твой Telegram-агент по аренде в Budva-Becici. 5 матчей бесплатно, потом €4.99/мес за безлимит + аудит + soft-фильтры.»

          Ключевые сообщения:

          • Telegram-native (без app, без email).
          • Real-time (≤ 10 мин latency).
          • Auditable (paid tier — уникально в этой нише).
          • Affordable (€4.99/мес, меньше одной чашки кофе в неделю).

          • 4. Channel Plan

            КаналPurposeСтоимостьExpected Reach
            **TG channel partnerships** (5-10 каналов)Cross-promo, listing source€0 (mutual benefit)5-10K зрителей канала
            **Content marketing** (блог: «Life in Montenegro for expats»)SEO, brand€0 (founder time)1-3K organic visits/мес
            **Referral mechanics** (invite-a-friend, +1 free матч каждому)Viral€010-30% free users
            **Telegram bot directory listings**Discovery€0100-500 clicks
            **Paid acquisition**Scaling€0.50-2.00 на signupY2 only

            5. Pricing & Packaging

            См. Stage 18 (pm-pricing-packaging, отдельный артефакт).


            6. Launch Plan

            Phase 1 — Pre-launch (Недели 1-2)

            • Soft-launch в 1-2 TG каналах.
            • 10-20 user interviews.
            • Soft-criteria prompt calibration.
            • Phase 2 — Public launch (Недели 3-4)

              • TG Payments + Stripe setup.
              • Cross-promo с 3-5 каналами.
              • Content marketing kickoff (2-3 blog posts).
              • Public launch в 5-10 каналах.
              • Phase 3 — Growth (Недели 5-12)

                • Referral mechanics.
                • A/B test free-tier cap (3 vs 5 vs 7).
                • Iterate по soft-criteria на основе paid-user feedback.
                • Quarterly content cadence.
                • Phase 4 — Scale (Y2)

                  • Paid acquisition.
                  • Multi-city expansion (Bar, Tivat, Kotor).
                  • Annual subscription tier.

                  • 7. Risks & Mitigations

                    РискВероятностьImpactMitigation
                    Channel partnerships refusedMHDIY scraping + content marketing.
                    Free→paid < 1%MHA/B test cap.
                    TG API измененияLHStage 09 contingency.
                    Aggregator запускает TG alertsMMAudit + soft-criteria дифференциатор.
                    LLM cost spikeMMPaid-only soft-criteria.

                    8. Success Criteria

                    • 1K free signups в течение 90 дней.
                    • 100 paid users в течение 90 дней.
                    • MRR €500+ к Дню 90.
                    • Free→paid conversion ≥ 2%.
                    • 5+ TG channel partnerships подписаны.
                    • 10+ blog posts опубликованы.

                    • 9. Recommendations (O→I→R→C→W Cascade)

                      Recommendation 1: Вести с TG channel partnerships.

                      • Response: Reach out к топ 3-5 каналам в неделе 1.
                      • Confidence: M.
                      • Watch: Если refused, полагаться только на scraping + content.
                      • Recommendation 2: Трекать free→paid conversion ежедневно, A/B test cap еженедельно.

                        • Response: A/B test 3 vs 5 vs 7 начиная с Дня 30.
                        • Confidence: M.
                        • Watch: Если < 1%, пересмотреть.
                        • Recommendation 3: Не вводить paid acquisition до Y2.

                          • Response: Y1 organic-only; Y2 paid, когда LTV/CAC доказан.
                          • Confidence: H.

                          • Cross-references

                            • Stage 03 §5 (Where to play) — информирует wedge.
                            • Stage 09 §10 R1-R3 — recommendations.
                            • Stage 18 — pricing.
                            • Stage 22 — launch checklist.
GoToMarket

Narrative: Realty Relay Bot v1.1

Входы: product/03-competitive-market-analysis.md, product/09-product-strategy.md (PRODUCED)


Executive Narrative

> Русскоязычные renters, ищущие long-term апартаменты в Budva/Becici, раньше тратили 2-8 недель на скроллинг 5-10 Telegram-каналов, пропуская хорошие объявления, и получая дубликаты. Realty Relay Bot v1.1 меняет это: real-time (≤ 10 мин) hard-criteria matching в бесплатном Telegram-native боте, с paid tier (€4.99/мес), который добавляет audit verification и soft-criteria фильтры. Бот — это то, чем каждый rental-search tool должен был быть с самого начала: real-time, auditable, affordable.


1. Narrative Arc

Setup: Русскоязычные expats в Montenegro (25-45 yo, tech-literate, TG-native) сталкиваются с фрагментированным rental-search процессом: 5-10+ публичных Telegram-каналов, смешанные языки, нет схемы, неформальное ценообразование. Ручное сканирование занимает 2-8 недель, пропускает хорошие объявления, производит дублирующий outreach к landlord'ам.

Conflict: Существующие альтернативы все проваливаются хотя бы на одной оси. Real-estate агрегаторы (ImmobilienScout24, local.me) имеют слабое покрытие в ≤ 700 EUR нише. Real-estate агенты взимают месячную аренду как комиссию. Generic TG-channel scrapers не имеют курации. Email digests устаревают.

Resolution: Realty Relay Bot v1.1 — TG-native бот, который опрашивает каналы каждые 10 минут, спрашивает MiniMax M2.1, соответствует ли каждое объявление hard + soft criteria, и форвардит матчи подписчикам. Free tier: 5 матчей/мес, hard-criteria only. Paid tier (€4.99/мес): unlimited матчи, soft-criteria фильтр (вид на горы, новая мебель, этаж ≥ 3), и per-listing audit log. Counter-positioning: агрегаторы не могут легко match TG-native + freemium + LLM + audit.

Implication: Маленький TG-native бот становится самым надёжным способом найти long-term апартамент в Budva/Becici — auditable, affordable, и построенным для renter'а, не landlord'а.


2. Positioning Analysis

ОсьRealty Relay Bot v1.1AggregatorGeneric scraperРучное сканирование
Real-time≤ 10 мин (T6)Daily-weeklyN/AManual
Hard-criteria precisionHigh (LLM)LowNoneManual
TG-nativeДАНЕТДАДА
FreemiumДА (5 free)НЕТНЕТN/A
Soft-criteria фильтрДА (paid)НЕТНЕТНЕТ
Audit logДА (paid)НЕТНЕТНЕТ
Multi-cityНЕТ (Y1)ДАДАN/A
Стоимость€0-4.99/месFreeFreeFree (но медленно)

3. Why Now Analysis

  • Why now: TG Payments доступен в Montenegro; MiniMax M2.1 cost устойчив; v1.0 продукт operational; русскоязычный expat демография достижима через TG каналы.
  • Why not earlier: v1.0 был MVP; v1.1 строит на нём.
  • Why not later: Ёмкость (N=2 founders) фиксирована; откладывание не разблокирует новую ёмкость.

  • 4. Audience Adaptation Matrix

    Русскоязычный renter (primary)

    • Hook: «Твой Telegram-агент по аренде в Budva-Becici.»
    • Tension: 2-8 недель ручного сканирования.
    • Resolution: Real-time матчи; 5 бесплатно, затем €4.99/мес.
    • Tone: Casual, direct, TG-native.
    • Call to action: /start в боте.
    • Channel partner (TG channel admin)

      • Hook: «Mutual benefit — ваш канал как listing source, наш бот как value-add для вашей аудитории.»
      • Tension: Channel админы хотят engaged подписчиков.
      • Resolution: Cross-promo партнёрство.
      • Call to action: Прямое сообщение админу.

      • 5. Evidence-Narrative Integration

        УтверждениеEvidenceTierConfidence
        Русскоязычные expats в Budva-BeciciЗнание основателей; существующие TG каналыT6H
        5-10+ публичных каналовЗнание основателейT6H
        2-8 недель search durationIndustry heuristicT5M
        ≤ 700 EUR ценовой тирHard criteria в v1.0T6H
        TG-nativev1.0 архитектураT6H
        €4.99/мес ниже thresholdIndustry benchmarkT5M
        Audit log драйвит paid engagementT5 inferenceT5M
        Soft-criteria — paid дифференциаторT5 inferenceT5M

        6. Objection Anticipation

        ObjectionОтвет
        «Почему не использовать агрегатор?»Агрегаторы имеют слабое покрытие в ≤ 700 EUR нише.
        «Почему платить €4.99/мес?»Меньше одной чашки кофе в неделю; экономит 2-8 недель поиска.
        «Почему только Telegram?»TG-native — wedge; агрегаторы не могут легко match.
        «Audit log действительно полезен?»Уникально в этой нише; верифицирует «видел ли бот это?»

        7. Competitive Narrative Analysis

        КлассИх narrativeНаш narrative
        Агрегаторы«У нас все объявления.»«У нас precision и freshness в вашей нише.»
        Generic scrapers«Мы даём вам данные.»«Мы даём вам курированные, auditable, affordable матчи.»
        Ручное сканирование(нет narrative)«Мы экономим вам 2-8 недель скроллинга.»

        8. Recommendations (O→I→R→C→W Cascade)

        Recommendation 1: Вести с audit log в narrative.

        • Response: Audit — counter-positioning lever.
        • Confidence: M.
        • Recommendation 2: Быть явным о evidence gaps.

          • Response: Тегировать claims с confidence и tier.
          • Confidence: H.
          • Recommendation 3: Не писать press-release narrative.

            • Response: Y1 internal narrative; press в Y2, если scale оправдывает.

            • Cross-references

              • Stage 03 §5 (Where to play) — информирует positioning.
              • Stage 09 §10 R1-R3 — recommendations.
              • Stage 17 (go-to-market) — channel plan.
              • Stage 20 (executive-writing) — выведен из этого narrative.
GoToMarket

Executive One-Pager: Realty Relay Bot v1.1 — Freemium + Audit + Soft-Criteria

Автор: self (pvdmitriev) | Для: paired builder (sophie_salt) | Время чтения: 5 мин | Тип запроса: Решение (greenlight v1.1 ship; согласовать Day-90 conversion review)

Входы: product/09-product-strategy.md, product/19-narrative-building.md


TL;DR (3 bullet максимум)

  • Realty Relay Bot v1.0 operational (10-min TG scraping, MiniMax M2.1 фильтр, hard-criteria matching), но не монетизирован. v1.1 добавляет freemium paywall (5 free + €4.99/мес paid), paid-tier audit log, и soft-criteria фильтр.
  • Target: русскоязычные renters в Budva/Becici, ≤ 700 EUR/мес, 1+ BR. TAM 5-15K/год, SAM 1-3K/год, SOM year 1 100-500 paying users (€6-30K revenue).
  • Ship v1.1 в текущем квартале. Запустить Day-90 review (free→paid conversion ≥ 2% gate). Переоценить только по триггеру (TG policy change, conversion < 1%, channel partnerships refused).

  • Situation

    Realty Relay Bot v1.0 опрашивает публичные Telegram-каналы каждые 10 минут, фильтрует через MiniMax M2.1, и форвардит hard-criteria матчи подписчикам. Он operational и обслуживает пользователей, но не монетизирован.

    Strategy document (Stage 09) commits к freemium модели с paid дифференциаторами. Конкурентный анализ (Stage 03) подтверждает counter-positioning (TG-native + freemium + LLM + audit) defensible против агрегаторов и generic scrapers. Market sizing (Stage 05) даёт реалистичный Y1 revenue: 100-500 paying users, €6-30K.


    Complication

    v1.0 имеет три gaps:

    1. Нет freemium paywall. Нет revenue model; каждый пользователь на одном tier.
    2. Нет audit trail. Нет premium дифференциатора vs generic scrapers.
    3. Нет soft-criteria фильтра. Нет premium-tier фичи для персонализации.
    4. Эти gaps компаундируются: не монетизированный, не дифференцированный, generic бот не может финансировать distribution, не может защищаться от конкурентов, и не может сегментировать free vs paid пользователей.


      Resolution: ship v1.1 в текущем квартале

      Рекомендуемый course of action — поставить v1.1 — freemium paywall, paid-tier audit log, и soft-criteria фильтр — в текущем квартале, gated by spec, user stories, test cases, и edge cases уже произведённые в Stages 12-16.

      Почему v1.1, а не альтернативы:

      • Option 1 (Ничего не делать / остаться на v1.0): Отклонён. Нет revenue; нет differentiation; нет Y2 scaling.
      • Option 2 (Пропустить freemium, идти напрямую в paid): Отклонён. Conversion rate 2-5% слишком рискованна без free tier.
      • Option 3 (Multi-city сначала): Отклонён по Stage 09 §6 #1. Фокус Budva-Becici сначала.
      • Option 4 (Ship в Y2): Отклонён. Ёмкость фиксирована; откладывание не разблокирует новую ёмкость.
      • Что это стоит: ~ 4-6 недель founder time для freemium + payment + audit + soft-criteria. ~ €50-100/мес LLM cost при 200 paid users. ~ €0 CAC (TG channel posting).

        Что это достигает:

        • 1K free signups в течение 90 дней.
        • 100 paid users в течение 90 дней.
        • MRR €500+ к Дню 90.
        • Counter-positioning vs агрегаторов установлен.
        • Substrate для Y2 multi-city expansion.
        • Confidence: H — предполагает free→paid conversion ≥ 2%. Если < 1% после 90 дней, пересмотреть pricing.


          Evidence

          • Stage 09 §3 (3 bet'а, упорядоченные) и §10 (3 рекомендации) — стратегия committed.
          • Stage 12 §3 (25 acceptance criteria) — спецификация testable.
          • Stage 14 (9 user stories, INVEST-validated) — работа scoped.
          • Stage 15 (23 test cases) — launch criteria derivable.
          • Stage 16 (22 edge cases, 8 P0) — failure modes mapped.
          • Stage 17 §6 (4 фазы) — rollout sequenced.
          • Stage 19 (narrative: «твой Telegram-агент по аренде в Budva-Becici») — positioning clear.
          • Stage 10 §5 (3 pre-registered эксперимента) — измерение honest.
          • Stage 11 (9 ADRs) — технические решения bounded.

          • Risks (top 3)

            1. Free→paid conversion < 1%. Mitigation: A/B test cap (3 vs 5 vs 7); пересмотреть pricing.
            2. TG channel partnerships refused. Mitigation: DIY scraping + content marketing.
            3. TG policy change на paid bots. Mitigation: Telegram Payments compliant; мониторить.

            4. Ask

              Greenlight v1.1 ship в текущем квартале. Block calendar для Day-90 review (free→paid conversion ≥ 2% gate, MRR €500+ gate). Согласиться переоценить Stage 09 только по триггеру (TG policy, conversion < 1%, channel partnerships refused).


              Cross-references

              • Stage 09 (product-strategy) — ведёт situation + recommendation.
              • Stage 12 (specification-writing) — ведёт resolution detail.
              • Stage 17 (go-to-market-strategy) — ведёт rollout phases.
              • Stage 19 (narrative-building) — ведёт positioning.
              • Stage 22 (deliver-launch-checklist) — получает greenlight как launch criterion.
GoToMarket

Launch Checklist: Realty Relay Bot v1.1

Входы: product/10-metric-design-experimentation.md, product/13-deliver-prd.md (PRODUCED)


1. Launch Overview

FieldЗначение
Launch nameRealty Relay Bot v1.1 — Freemium + Audit + Soft-Criteria
Launch typePublic (TG-native)
Launch dateTBD (calendar block при engineering completion)
Decision ownerself (pvdmitriev)
Pair approversophie_salt
Strategy referenceStage 09 §3 Bets 1 + 2
Spec referenceStage 12 (S-1 through S-12)
PRD referenceStage 13 §10 (Launch Criteria)

2. Engineering Readiness

#ItemStatusВладелецBlocker?
E-1`payments.py` (TG Payments + Stripe)Не начатоselfNo
E-2`tier.py` (free/paid logic, counter)Не начатоselfNo
E-3`audit.py` (JSON Lines writer, paid-access only)Не начатоselfNo (depends on E-2)
E-4`commands.py` (`/start`, `/seen`, `/status`, `/upgrade`)Не начатоselfNo (depends on E-2)
E-5`dedup.py` (fingerprint-hash)Не начатоselfNo
E-6`alerts.py` (`[!bot alert]` DM)Не начатоselfNo
E-7`detect.py` (FLOOD_WAIT / proxy detection)Не начатоselfNo
E-8Soft-criteria LLM promptНе начатоselfNo
E-9`data/audit/events.jsonl` pathНе начатоselfNo
E-10TG Payments setup в TG botНе начатоselfNo
E-11Stripe account + webhook setupНе начатоselfNo
E-12Code review: tier enforcement server-sideНе начатоselfNo

3. QA & Testing

#ItemStatusВладелецBlocker?
Q-1TC-1.1, 1.2 (signup) passНе начатоselfNo
Q-2TC-2.1, 2.2, 2.3 (counter) passНе начатоselfNo
Q-3TC-3.1..3.4 (payment) passНе начатоselfNo (depends on E-1)
Q-4TC-4.1, 4.2 (soft-criteria) passНе начатоselfNo (depends on E-8)
Q-5TC-5.1..5.4 (audit /seen) passНе начатоselfNo (depends on E-3)
Q-6TC-6.1, 6.2 (audit /status) passНе начатоselfNo (depends on E-3)
Q-7TC-7.1, 7.2 (dedup) passНе начатоselfNo (depends on E-5)
Q-8TC-8.1 (co-searcher) passНе начатоselfNo (depends on E-5)
Q-9TC-9.1..9.3 (alerts) passНе начатоselfNo (depends on E-6, E-7)
Q-10EC-1, 3, 9, 12, 14, 18, 19, 20 coveredНе начатоselfNo

4. Design & UX

#ItemStatusВладелецBlocker?
D-1`/start` welcome message (Russian)Не начатоselfNo
D-2Tier-upgrade prompt copyНе начатоselfNo
D-3Soft-criteria display formatНе начатоselfNo

5. Marketing & Communications

#ItemStatusВладелецBlocker?
M-1Cross-promo с 3-5 TG каналамиНе начатоselfNo
M-22-3 blog posts (Life in Montenegro for expats)Не начатоselfNo
M-3Referral mechanics задокументированыНе начатоselfNo

6. Customer Support

#ItemStatusВладелецBlocker?
C-1TG-based support channel (`/support` команда)Не начатоselfNo
#ItemStatusВладелецBlocker?
L-1TG ToS review (paid bot allowed)n/a (T6)selfNo
L-2GDPR data retention policyНе начатоselfNo
L-3TG Payments terms of servicen/a (T3)selfNo

8. Operations & Infrastructure

#ItemStatusВладелецBlocker?
O-1`data/audit/` директория writableНе начатоselfNo
O-2Disk space для audit log (~18MB/мес)Не начатоselfNo
O-3Bot restart procedureНе начатоselfNo

9. Analytics & Monitoring

#ItemStatusВладелецBlocker?
A-1New signups / weekReady (после E-2)selfNo
A-2Free-tier cap hit rateReady (после E-2)selfNo
A-3Free→paid conversion rateReady (после E-1)selfNo
A-4MRRReady (после E-1)selfNo
A-5Churn rate (monthly)Ready (после E-1)selfNo
A-6LLM cost / weekReadyselfNo
A-7Ingest up-timeReadyselfNo

10. Go / No-Go Criteria

#КритерийPass при запуске?
G-1Все TC passТребуется
G-2EC-1, 3, 9, 12, 14, 18, 19, 20 coveredТребуется
G-3M-1, M-2 ready (3-5 channel partnerships, 2-3 blog posts)Требуется
G-4Day-90 review calendaredТребуется
G-5Free→paid conversion ≥ 2% в течение 90 дней (измерено)Требуется
G-6MRR ≥ €500 к Дню 90Требуется
G-7≥ 100 paying users к Дню 90Требуется
G-8TG Payments + Stripe протестированы в productionТребуется
G-9Audit log completeness 100% за 7 днейТребуется (измерено)

Правило решения: G-1..G-4 + G-8 должны pass ДО запуска. G-5..G-7 + G-9 измеряются ПОСЛЕ запуска; если любой fails на День 90, revert по §11.

Финальная go/no-go authority: Founders (self + pair).


11. Rollback Plan

ТриггерДействиеВладелец
Free→paid < 1% на День 30A/B test cap; пересмотреть pricing.Founders
TG Payments не в регионе renter'а (высокий %)Default на Stripe для всех пользователей.Founders
Audit log unused > 50% paid на День 60Deprecate `/seen` и `/status`; оставить log.Founders
LLM cost > €0.20/матчDisable soft-criteria; revert на hard-only.Founders
TG банит botRotate на backup bot account; пользователи re-subscribe.Founders

Rollback cost: v1.1 commit — source-of-truth. Revert = git revert на v1.0 commit.


12. Check-in Schedule

CadenceКогдаReviewerOutput
Daily09:00 localselfOperational метрики (Stage 10 §3)
WeeklyFriday 17:00self + pairMetric dashboard; A/B test cap
Day-30Calendar blockself + pairFree→paid early signal
Day-90Calendar blockself + pairStage 17 §6 Phase 3 review

13. Open Issues

#IssueВладелецРезолюция
OI-1Точный soft-criteria LLM promptselfStage 12 implementation
OI-2TG Payments + Stripe region splitselfStage 22 setup
OI-3GDPR data retentionselfL-2
OI-4Referral mechanics (anti-abuse)selfM-3
OI-5Bot restart procedureselfO-3

Cross-references

  • Stage 10 §3-§4 — operational метрики.
  • Stage 12 §3 — test cases.
  • Stage 13 §10 (Launch Criteria) — §10.
  • Stage 14 (user-stories) — engineering items.
  • Stage 16 (edge-cases) — QA + rollback.
  • Stage 17 §6 (rollout phases) — cadence.
  • Stage 20 (executive one-pager) — M-1.
  • Stage 23 (measure-instrumentation-spec) — метрики + open issues.
Measure

Instrumentation Spec: Realty Relay Bot v1.1

Входы: product/12-specification-writing.md (PRODUCED)


1. Overview

Этот документ определяет события, user properties и instrumentation, которые v1.1 freemium + audit + soft-criteria слой должен emit'ить. Audit log — instrumentation substrate (по ADR-005); эта спецификация определяет schema.

Аудитория: Инженер, реализующий payments.py, tier.py, audit.py, commands.py, dedup.py, alerts.py.


2. Event Inventory

Все события записываются в data/audit/events.jsonl как один JSON object на строку.

Event typeКогда emit'итсяProducer
`signup`Пользователь отправляет `/start`.`tier.py`
`tier_change`Пользователь upgrade'ается до paid или downgrades.`payments.py`
`parsed`TG сообщение распарсено.existing parse module
`accepted`LLM принимает (hard criteria).`audit.py`
`rejected`LLM отклоняет (hard criteria).`audit.py`
`soft_evaluated`LLM оценивает soft criteria (paid only).`audit.py`
`forwarded`Матч форварднут.`audit.py`
`suppressed`Dedup решение.`audit.py`
`cap_hit`Free user достигает 5-матч cap.`tier.py`
`upgrade_prompted`Пользователю показан upgrade prompt.`tier.py`
`command_seen`Пользователь вызывает `/seen`.`commands.py`
`command_status`Пользователь вызывает `/status`.`commands.py`
`command_upgrade`Пользователь вызывает `/upgrade`.`payments.py`
`rate_limited`Команда rate-limited.`commands.py`
`alert_sent``[!bot alert]` DM отправлен.`alerts.py`
`alert_suppressed`Дублирующий alert подавлен.`alerts.py`
`alert_reset`Успешный poll сбрасывает alert state.`detect.py`
`error`Неожиданная ошибка.various

3. Event Schema

3.1 Common Properties (все события)

PropertyTypeТребуетсяОписание
`event_id`string (UUID v4)ДАГлобально уникальный.
`event_type`string (enum)ДАОдин из §2 inventory.
`timestamp_utc`string (ISO 8601)ДАUTC timestamp (EC-12).
`actor`string или nullДАuser_id или null для system.
`schema_version`integerДА1 для v1.1.
`tier`stringДА`free` или `paid` (actor'ский tier на момент события).

3.2 Per-event Properties

`signup`

PropertyTypeОписание
`referrer`string или nullInviter user_id (для referral mechanics).

`tier_change`

PropertyTypeОписание
`from_tier`string`free`
`to_tier`string`paid`
`payment_provider`string`tg_payments` или `stripe`
`amount_eur`float4.99

`parsed`

PropertyTypeОписание
`listing_fingerprint`stringHash.
`channel_id`stringTG channel.
`message_id`integerTG message id.
`body_excerpt`stringПервые 200 символов.

`accepted`

PropertyTypeОписание
`listing_fingerprint`stringHash.
`llm_model`string`MiniMax-M2.1`.
`llm_latency_ms`integerДлительность LLM call.

`rejected`

PropertyTypeОписание
`listing_fingerprint`stringHash.
`reject_reason`stringНепустой.

`soft_evaluated`

PropertyTypeОписание
`listing_fingerprint`stringHash.
`mountain_view`booleanLLM eval.
`new_furniture`booleanLLM eval.
`floor_ge_3`booleanLLM eval.
`llm_latency_ms`integerДлительность LLM call.

`forwarded`

PropertyTypeОписание
`listing_fingerprint`stringHash.
`actor`stringПолучатель user_id.
`forward_latency_ms`integerВремя от parsed до forwarded.
`soft_included`booleanВключены ли soft-criteria в сообщение.

`suppressed`

PropertyTypeОписание
`listing_fingerprint`stringHash.
`reason`enum`cross-channel-duplicate`, `cross-user-recent`, `already-forwarded-this-user`, `free-tier-cap`.

`cap_hit`

PropertyTypeОписание
`matches_this_month`integer5.
`next_action`string`upgrade_prompt`.

`upgrade_prompted`

PropertyTypeОписание
`trigger`string`cap_hit` или `manual`.

`command_seen`

PropertyTypeОписание
`listing_fingerprint`stringАргумент.
`result`enum`success`, `not-found`, `rate-limited`, `paid-feature-only`.

`command_status`

PropertyTypeОписание
`ingest_uptime_pct`floatНа момент invocation.
`alerts_returned`integerПоследние 5.

`command_upgrade`

PropertyTypeОписание
`result`enum`tg_payment_sent`, `stripe_link_sent`, `error`.

`rate_limited`

PropertyTypeОписание
`command`string`seen`, `status`, `upgrade`.
`window_seconds`integerRate-limit window.

`alert_sent`

PropertyTypeОписание
`error_class`string`FLOOD_WAIT`, `proxy-error` и т.д.
`channel_id`stringЕсли per-channel.
`recipients`array of stringFounder user_ids.

`alert_suppressed`

PropertyTypeОписание
`error_class`stringПричина.
`first_alert_event_id`stringОригинальный alert.

`alert_reset`

PropertyTypeОписание
`error_class`stringReset class.

`error`

PropertyTypeОписание
`error_class`stringFree-form.
`error_message`stringTruncated 500 символов.

4. User Properties

PropertyTypeОписание
`user_id`stringTG user_id.
`tier`string`free` или `paid`.
`signup_at_utc`stringISO 8601.
`referrer`string или nullInviter user_id.
`matches_this_month`integerCounter для free tier.
`cap_hit_at_utc`string или nullКогда cap был hit.
`tier_changed_at_utc`string или nullКогда tier изменился.
`payment_provider`string или null`tg_payments`, `stripe`, или null.

5. PII & Privacy

PropertyPII?Обработка
`user_id`ДА (TG handle)Хранится as-is.
`body_excerpt`ДА (raw listing text)Только первые 200 символов.
`error_message`МОЖЕТ БЫТЬTruncate 500 символов.

GDPR: 30-day data deletion по запросу пользователя (EC-17).


6. Implementation Notes

6.1 Writer

  • audit.py экспонирует write_event(event: dict) -> None.
  • Appends одну строку в data/audit/events.jsonl используя open(..., mode="a").
  • threading.Lock сериализует writes.
  • Все timestamps из datetime.now(timezone.utc).isoformat().
  • 6.2 Tier-aware access

    • audit.py — paid-access only (ADR-008).
    • Server-side check: tier == "paid" перед разрешением /seen или /status.
    • Free user attempts → emit command_seen с result=paid-feature-only.
    • 6.3 Append-only invariant

      • Code review: нет r+, w, wb режимов.
      • Нет seek/truncate.

      • 7. Testing Checklist

        #ТестМетод
        T-1`signup` event на нового пользователя.TC-1.1.
        T-2`tier_change` event на upgrade.TC-3.3.
        T-3`parsed` event на объявление.Stage 15.
        T-4`accepted`/`rejected` events на LLM.Stage 15.
        T-5`soft_evaluated` только для paid users.TC-4.1, 4.2.
        T-6`forwarded` event на форвард.Stage 15.
        T-7`suppressed` event на dedup.Stage 15.
        T-8`cap_hit` event когда free user hit 5.TC-2.2.
        T-9`command_seen` записывает `paid-feature-only` для free users.TC-5.3.
        T-10Все timestamps UTC.Unit.
        T-11Append-only invariant.Code review.
        T-12Thread-safe writer.Concurrency test.
        T-13PII discipline: body_excerpt ≤ 200 символов.Unit.
        T-14GDPR: 30-day deletion.Manual.

        8. Open Questions

        #ВопросРезолюция
        IQ-1`body_excerpt` длина: 200 vs 100 vs 500.Default 200.
        IQ-2`request_id` для корреляции событий в poll cycle.Добавить в v1.1.1, если полезно.
        IQ-3Soft-criteria LLM prompt детали.Stage 12 implementation.

        9. Cross-references

        • Stage 10 §3-§4 — operational метрики.
        • Stage 12 §3 — AC.
        • Stage 14 (user-stories) — producer stories.
        • Stage 15 (test cases) — test plan.
        • Stage 16 (edge cases) — EC.
        • Stage 22 (launch-checklist) — OI-1, OI-3.