[2026-05-18] business coaching: сессия 1 W20 — лендинг до 20.05, страх публичности как реальный блок

This commit is contained in:
Alexey Martemyanov
2026-05-18 14:27:24 +06:00
parent 749c9f6340
commit 8bf7e11fca
5 changed files with 146 additions and 27 deletions
+3 -2
View File
@@ -95,8 +95,8 @@ related:
| Цель | Шкала | Комментарий |
|------|-------|-------------|
| Первый платящий клиент | 1/10 | Нет ни одного |
| Понимание что делать следующим | 2/10 | Есть фреймворк its_capitan, нет конкретного плана |
| Маркетинг AI-психолога | 1/10 | Заморожен, есть стратегия на бумаге |
| Понимание что делать следующим | 4/10 | Есть план до Алматы, конкретное действие на среду |
| Маркетинг AI-психолога | 2/10 | Лендинг запланирован на 20.05 |
| Использование DDG-данных | 1/10 | Никогда не применял |
---
@@ -116,3 +116,4 @@ related:
| Дата | Тема | Ключевые инсайты |
|------|------|-----------------|
| 2026-05-18 | Вводная | Паттерн «контейнер» в бизнес-контексте; DDG-поисковик как конкурентное преимущество; цель — break-even на первом проекте |
| 2026-05-18 | Сессия 1 — AI-психолог | Маркетинг уходит в postpone в реальном времени; реальный блок — страх публичности, не отсутствие навыка; договорённость: лендинг + пост в X до среды 20.05 |
+78
View File
@@ -0,0 +1,78 @@
---
created: '2026-05-18'
updated: '2026-05-18'
tags:
- business
- coaching
- sessions
- w20-2026
related:
- '[[personal/business/profile]]'
---
# Бизнес-сессия — 2026, неделя 20
> Первая рабочая сессия. 2026-05-18. Формат: GROW + WOOP, внешний наблюдатель.
---
## OSKAR на входе
| Цель | Шкала (до) | Шкала (после) |
|------|-----------|---------------|
| Первый платящий клиент | 1/10 | 1/10 |
| Понимание что делать следующим | 2/10 | 4/10 |
| Маркетинг AI-психолога | 1/10 | 2/10 |
| Использование DDG-данных | 1/10 | 1/10 |
---
## Контекст сессии
Запрос: «волшебный пендель» + понять стоит ли продолжать AI-психолога. Быстро выяснилось что решение уже принято — нужен не анализ, а движение.
---
## Ключевые наблюдения
### 1. Маркетинг уходит в postpone в реальном времени
Человек описывает план действий и самостоятельно замечает как маркетинг перемещается в конец очереди. Добавляет: «мне от этого спокойнее». Механизм избегания описан в момент срабатывания.
### 2. Очередь перед маркетингом
Сформирована цепочка: проверить приложение → TestFlight → друзья → фидбек → итерации → публичный маркетинг → платящий клиент. В цепочке отсутствует параллельность — всё последовательно, маркетинг в конце.
### 3. Реальный блок — не технический
«Нет канала», «нет аудитории», «нет плана» — перечислены как препятствия. При давлении все оказались устранимы за один день. Реальный блок: «я не писатель и не продажник». При уточнении: умеет, но это «очень много работы» и страшно делать публично.
### 4. Формула «вот настрою — и заживу»
DDG-проект как текущая отговорка. Человек сам называет это «ADHD профиль». После DDG следующая отговорка уже ждёт в очереди — это озвучено и принято.
### 5. ООО и Apple Dev — уточнение
Получать деньги как физлицо из КР/РФ через App Store нельзя. ООО в Алматы (июнь) — необходимо для монетизации. TestFlight и Individual Developer аккаунт ($99) — можно без ООО, для беты.
---
## WOOP
| Шаг | Содержание |
|-----|-----------|
| Wish | Лендинг «private beta» + первый публичный пост |
| Outcome | Люди знают что строится, можно собирать интерес до запуска |
| Obstacle | «Я не писатель и не продажник» — страх публичности, не отсутствие навыка |
| Plan (if-then) | Среда 2026-05-20: сделать лендинг + первый пост в X (старый аккаунт, обновить bio) |
---
## Договорённости
- [ ] **Среда 20.05** — лендинг «private beta / coming soon» + первый пост в X
- [ ] Сегодня вечером — проверить приложение на себе (запланированная сессия)
- [ ] До Алматы (июнь) — составить конкретный план действий по ООО + App Store Organization account
- [ ] Зарегистрировать Apple Developer Individual ($99) — для TestFlight беты, без ООО
---
## Открытые вопросы
- Как «оживить» старый X аккаунт — стратегия первых постов (разобрать отдельно)
- Нужен ли отдельный TG канал или стартовать с X
- Параллельный маркетинг vs последовательный — пока выбран последовательный, это риск
@@ -1,4 +1,11 @@
# 🧠 Маркетинговая стратегия AI-приложения рефлексии
> **⚡ Обновление 2026-05-18 (коуч-сессия):**
> Маркетинг запускается ПАРАЛЛЕЛЬНО с доработкой продукта — не после.
> Первый шаг: лендинг «private beta / coming soon» + тизер-пост в X → **до 20.05 (среда)**.
> X: старый аккаунт (@alexey martemianov) — обновить bio, не создавать новый.
> ООО в Алматы (июнь) нужно для получения денег через App Store. TestFlight — без ООО, Individual Apple Dev $99.
> Apple Developer Individual аккаунт регистрировать сейчас.
**"Marketing First" — органический рост без платной рекламы**
> Исследование подготовлено автоматически | Май 2026
+32 -11
View File
@@ -32,20 +32,41 @@ PGS и ASS (SSA) субтитры вызывают **burn-in** — Jellyfin ре
## Решение: конвертация PGS → SRT
Для всей библиотеки конвертировать PGS-субтитры в SRT через `pgsrip`:
Установка через uv (arm64/aarch64 совместимо):
```bash
# Установка
pip install pgsrip
# Конвертация одного файла (MKV с PGS)
pgsrip film.mkv --language rus
# Массовая конвертация
find /media -name "*.mkv" | xargs -I{} pgsrip "{}" --language rus
~/.local/bin/uv tool install pgsrip
sudo apt-get install -y libgl1 libglib2.0-0 tesseract-ocr tesseract-ocr-rus tesseract-ocr-eng
```
После конвертации: внешние `.srt` файлы Jellyfin читает без транскода.
Скрипт конвертации:
```
/srv/dev-disk-by-uuid.../docker/media-pipeline/pgs-to-srt.sh
```
```bash
# один файл
pgs-to-srt.sh /media/movies/Film.mkv
# вся директория
pgs-to-srt.sh /media
```
Логи: `/srv/.../docker/media-pipeline/pgs-to-srt.log`
Скрипт:
- Скипает файлы без PGS-дорожек (S_HDMV)
- Скипает если .srt уже есть рядом
- Пишет лог с timestamp
После конвертации Jellyfin читает внешние `.srt` без транскода.
## Transmission completion hook
Хук `/config/on-download-complete.sh` (монтируется в контейнер `:ro`) после завершения загрузки:
1. Запускает media-pipeline sync
2. Запускает pgs-to-srt.sh для скачанного файла/директории
Лог: `/srv/.../docker/media-pipeline/download-complete.log`
## Итог по субтитрам
@@ -217,7 +217,7 @@ All resolved on GitHub. Fixed in later commits on the `#4544` branch.
**Fix:** Removed `isChatPath` conditional from `NewTabDaxDialogFactory.createFinalDialog` — both factories now always use standard EOJ message + `daxDialogsEndOfJourneyNewTabUnique` pixel. Deleted test `testWhenChatPathEOJState_AndFinalDialogAppears_ThenFiresDuckAIExperimentFinalDialogPixel` (tested dead code); simplified remaining final-dialog tests.
**State:** ✅ Fixed in `alex/demo-tracker-blocking-onboarding` working tree (2026-05-18). Not yet committed.
**State:** ✅ Fixed and committed (2026-05-18). GitHub thread resolved on GitHub.
---
@@ -229,7 +229,7 @@ All resolved on GitHub. Fixed in later commits on the `#4544` branch.
**Fix:** `if contextualOnboardingLogic.chatPathPhase == .trackerToEOJ { delegate?.tabDidRequestNewTab(self) }` in `didTapDismissContextualOnboardingAction` (`TabViewController.swift:4206`).
**State:** ✅ Fix in `alex/demo-tracker-blocking-onboarding` (landed via PR #4584 merge, 2026-05-18). GitHub thread on PR #4544 still open — needs resolving.
**State:** ✅ Fix landed via PR #4584 merge. GitHub thread **resolved** on GitHub.
---
@@ -241,7 +241,19 @@ All resolved on GitHub. Fixed in later commits on the `#4544` branch.
**Fix:** Resolved by removing the dead branch from `NewTabDaxDialogFactory` (see r3234446893 entry above). Both factories now symmetric.
**State:** ✅ Fixed in `alex/demo-tracker-blocking-onboarding` working tree (2026-05-18). Not yet committed.
**State:** ✅ Fixed and committed (2026-05-18). GitHub thread resolved on GitHub.
---
### ✅ PR #4544 — Bugbot (r3257196584): Chat-path subscription promo unreachable after EOJ dismissal
**Source:** [Bugbot r3257196584 on PR #4544](https://github.com/duckduckgo/apple-browsers/pull/4544#discussion_r3257196584), `NewTabPageViewController.swift:355-374` and `DaxDialogs.swift:407-419`.
**Issue:** In `finishDismissal` (inside `showDuckAIOnboardingCompletionDialog`), `nextHomeScreenMessageNew()` was called while `browsingFinalDialogShown` was still `false`. `peekNextHomeScreenMessageExperiment()` took the chat-path branch (not the `finalDaxDialogSeen` branch) and returned `nil`. The else branch then called `daxDialogsManager.dismiss()` which atomically set `browsingFinalDialogShown = true` and `isDismissed = true`, making `isEnabled = false`. Any subsequent call returned `nil` unconditionally — subscription promo was unreachable.
**Fix:** Call `setFinalOnboardingDialogSeen()` before `nextHomeScreenMessageNew()` in `finishDismissal`. Added `setFinalOnboardingDialogSeen()` to `NewTabDialogSpecProvider` protocol; added stub to `MockNewTabDialogSpecProvider`.
**State:** ✅ Fixed and committed (2026-05-18). GitHub thread still **open** — needs resolving.
---
@@ -389,23 +401,23 @@ All resolved on GitHub. Fixed in later commits on the `#4544` branch.
> Threads in GitHub order.
### 🔴 PR #4668 — Bugbot (OnboardingIntroViewModel.swift:473): Hardcoded debug `return`
### PR #4668 — Bugbot (OnboardingIntroViewModel.swift:473): Hardcoded debug `return`
**Source:** Bugbot on PR #4668, `OnboardingIntroViewModel.swift:473`
**Issue:** A hardcoded `return .treatmentB` debug shortcut bypasses the feature flag in `resolveDuckAIQueryExperimentCohortID()`. Must be removed before shipping.
**Issue:** Hardcoded `return .treatmentA` bypasses feature flag in `resolveDuckAIQueryExperimentCohortID()`.
**State:** 🔴 [OPEN] on GitHub. Same item appears on PR #4855 (Bugbot line 473). Not yet removed on #4668 branch.
**State:** ⭕ Removed and pushed on #4668 branch. GitHub thread still open — needs resolving.
---
### 🔴 PR #4668 — Bugbot (FeatureFlag.swift:635): Commented-out `Config(...)` line
### PR #4668 — Bugbot (FeatureFlag.swift:635): Commented-out `Config(...)` line
**Source:** Bugbot on PR #4668, `FeatureFlag.swift:635`
**Issue:** `defaultValue: .enabled` override was added to `unifiedToggleInput` for testing, plus the old `// Config(...)` line still sits underneath as dead commented-out code. Both need to be removed before merging.
**State:** 🔴 Still in code on the `#4668` branch. NOT fixed. GitHub thread NOT resolved.
**State:** ⭕ TODO — still in code on `#4668` branch. Deferred until main PR (#4544) is done.
---
@@ -415,27 +427,27 @@ All resolved on GitHub. Fixed in later commits on the `#4544` branch.
**Issue:** Method added to `BrowserChromeDelegate` protocol and implemented, but no caller exists.
**State:** 🔴 [OPEN] on GitHub. See also BrowserChromeManager item below — same root issue.
**State:** 🔴 [OPEN] on GitHub. Deferred until #4544 is done — see BrowserChromeManager item below for full detail.
---
### 🔴 PR #4668 — aataraxiaa (FeatureFlag.swift:635): Commented-out config line
### PR #4668 — aataraxiaa (FeatureFlag.swift:635): Commented-out config line
**Source:** [aataraxiaa review comment on PR #4668](https://github.com/duckduckgo/apple-browsers/pull/4668), `FeatureFlag.swift:635`
**Issue:** Same commented-out `Config(...)` dead code flagged by Bugbot above. aataraxiaa also requests it be removed.
**State:** 🔴 [OPEN] on GitHub. Not yet fixed.
**State:** ⭕ TODO — GitHub thread [OPEN]. Deferred until #4544 is done.
---
### 🔴 PR #4668 — Bugbot (BrowserChromeManager.swift:43): New protocol method no callers
### 🔴 PR #4668 — Bugbot (BrowserChromeManager.swift:43) `r3234513817`: New protocol method no callers
**Source:** Bugbot on PR #4668, `BrowserChromeManager.swift:43`
**Issue:** `embedInUnifiedInputEditingAreaIfActive` added to `BrowserChromeDelegate` protocol and implemented in `BrowserChromeManager`, but no caller exists anywhere in the codebase.
**Issue:** `embedInUnifiedInputEditingAreaIfActive` added to `BrowserChromeDelegate` protocol and implemented, but no caller exists. The NTP's `embedDialogInEditingState` and `showDuckAIOnboardingCompletionDialogInUTI` both embed by casting `parent as? MainViewController` directly instead of going through this protocol method. Additionally the **implementations differ**: the protocol method pins to `navigationBarContainer.bottomAnchor`, while actual NTP embedding pins to `coordinator.viewController.view.bottomAnchor`. So simply adding a caller is not enough — implementations must be aligned first.
**State:** On `sr-feedback` branch commit `82bb0f71e3` removed `embedDialogInEditingState` dead code; the protocol method may now be entirely unreachable. **Needs verification on #4668 branch.** GitHub thread NOT resolved. → Either add a caller or remove the method and its implementation.
**State:** 🔴 [OPEN] on GitHub. Deferred until #4544 is done. Fix = align implementations + wire caller, or remove the protocol method entirely.
---