Проекты04 / 05
Часы одного стилиста превратились в продукт: платная воронка в Telegram, которая принимает деньги и фотографии, бренд-сайт, на котором останавливается скролл, и клуб по подписке.
la-abramova.com

- Клиент
- LA Abramova, персональный стилист в Риге
- Объём
- Telegram-бот, админ-панель, сайт, страницы клуба
- Период
- Май 2024 – октябрь 2026
- Стек
- PHP, Symfony, PostgreSQL, Stripe, S3, Telegram Bot API, Next.js, Tailwind
- Онлайн
- la-abramova.com
Стилист продаёт часы, а часы заканчиваются. Аудитория живёт в соцсетях и Telegram, а не на странице записи. Отсюда три задачи: заставить одну услугу продавать себя саму, дать бренду страницу, на которой человек перестанет скроллить, и построить доход, не зависящий от календаря.
Это заняло два с половиной года и три продукта, а самое важное изменение не было техническим. Первая версия доверяла выбор цветотипа клиента модели. Выпущенный продукт вернул решение эксперту.
- 01
Платная воронка внутри Telegram
@FauvismBot ведёт клиента от «как вас зовут» через тур по сезонам к догадке о собственном цветотипе, а затем к Stripe Checkout. Сначала деньги: обработчик фото не запустится без завершённого платежа. Потом 15–20 фотографий, которые хранятся отдельно по каждому клиенту.
- 02
Стол стилиста
Админ-панель для одного человека: открыть заказ, посмотреть фото прямо в нём, выбрать один из 24 цветотипов, при необходимости добавить комментарий, нажать Fulfill. Результат доставляет бот. Платежи доступны только для чтения, заказы удалить нельзя.
- 03
Сайт со своим голосом
Четыре услуги с ценами, лукбук и один маршрут в Telegram. Ключевое слово первого экрана само пишется помадой через SVG-фильтр турбулентности; пятно света за мышью подсвечивает фото; над всем кликабельным работает курсор-губы. Статический экспорт Next.js, без сервера, без CMS.
- 04
Клуб, который купили, а не написали
Первая версия работала на готовой платформе для курсов и в Telegram-группе. Свою LMS намеренно не писали. В сентябре 2026 сайт перестроили вокруг House of Image, ежемесячного клуба с двумя ведущими, и 24 октября клуб открылся.
Как это устроено
Внимание
- Соцсети
- Бренд-сайтодин маршрут в Telegram
Воронка
- Telegram-ботобучение, потом догадка
- Stripe Checkoutвебхук, а не редирект
Материал
- 15–20 фотографийтолько после оплаты
- S3по клиентам
Эксперт
- Стол стилистаодин из 24 типов
- Результат в Telegramв течение 2 дней

То, что обычно не попадает в портфолио. Всё это было на самом деле, и всё это есть в истории коммитов.
Сбой 01
AI, которому, вероятно, так и не показали фото
- Симптом
- Первый прототип работал. Отправляешь селфи, получаешь уверенный ответ: сезон, названные цветовые образцы, советы по одежде и макияжу.
- Причина
- Перечитываю этот код ради этой страницы: он загружает селфи на Imgur, а потом вставляет URL в обычный текстовый промпт. Картинки в вызове нет, а API не скачивает ссылки из текста. Значит, модель, скорее всего, вообще не видела лица и отвечала по одним словам. Заново я это не запускал; это прочтение кода.
- Решение
- Переписывание не починило вызов. Оно убрало модель из решения: 15–20 фотографий и эксперт, выбирающий из 24 типов там, где у прототипа их было четыре. Продукт стал лучше, когда в него добавили человека. Уверенный JSON-ответ не доказывает, что модель хоть на что-то посмотрела.
Сбой 02
Бот, который принимал каждое сообщение и молчал
- Симптом
- После переезда на Heroku /start, судя по всему, оставался без ответа. Восстановлено по логу коммитов: в ночь на 3 апреля 2025, файрволы в 01:44, семь строк логирования в 02:09.
- Причина
- Входящие апдейты маршрутизировались в асинхронную очередь, а деплой состоял из одного веб-процесса. Очередь никто не читал. Вебхук принимал каждый апдейт, и тот ждал вечно. Молчаливый успех — худший из возможных режимов отказа.
- Решение
- Воркер добавили в 02:18:55 и убрали через 2 минуты 7 секунд, а сообщения переехали на
sync. Одно слово в конфиге. Отладочные логи удалили в 02:22.
Сбой 03
Четырнадцать нумерованных исправлений, потом одна строка
- Симптом
- Деплой одного Telegram-бота на AWS занял 17 коммитов в марте 2025: от «fix deploy github» до номера 14, Dockerfile, nginx, ECR, EC2 через SSH, RDS. Права на env-файл прошли путь 600, 644, 600, 777, 640.
- Причина
- Инфраструктура была намного тяжелее нагрузки: одно вебхук-приложение с низким трафиком. Больше половины всех коммитов бэкенда, 27 из 52, ушло на то, чтобы доставить его в продакшен.
- Решение
- Однострочный Procfile 2 апреля и через две минуты «Remove docker stuff»: 12 файлов, −511 строк. Исправлением стало удаление системы.
Сбой 04
Две цены, один продукт
- Симптом
- Май 2025, коммит с заголовком «Fix Old hardcoded priceID». Цена изменилась, а бот всё ещё списывал старую.
- Причина
- ID цены в Stripe был захардкожен в PHP, а запись о продукте редактировалась в админке. Два источника правды для одного числа.
- Решение
- ID переехал в конфигурацию. Честная часть: цена в админке по-прежнему питает только внутреннюю запись, а с карты списывается то, что говорит Stripe. Та же ловушка ждёт любую функцию «редактировать цены в админке» перед хостед-чекаутом.
Сбой 05
Запуск за строительной лентой
- Симптом
- Перестроенный сайт надо было запускать, пока клуб не готов, а его страницы не могли показывать цены и ссылки.
- Причина
- Клуб затрагивает навигацию, первый экран, тизер, целую страницу и то, можно ли поисковикам её индексировать. Пять мест, и одно легко забыть.
- Решение
- Всем этим управляет одна константа
CLUB_OPEN; в закрытом состоянии — жёлтая лента и «в разработке». У неё намеренно явный типboolean, иначе TypeScript выводит литерал и объявляет открытую ветку недостижимой. Открытие клуба через 32 дня стало однострочным коммитом.
- коммитов за 29 месяцевтри репозитория, один автор
- цветотипасезоны прототипа против подтипов стилиста
- фотографий на заказсобирает бот после оплаты
- коммита в первый день сайта15 апреля 2025, с 00:32 до 14:24
- строк убрало исправлениеDocker и EC2 ушли, пришла одна строка Procfile
- строка, чтобы открыть клубчерез 32 дня после запуска за лентой
Пульс проекта
Каждый коммит в репозиториях проекта на одной линии. Чем выше столбик, тем жарче было.
- Прототип на GPT: 286 строк на Python
- Переписанная версия на Symfony доходит до Stripe
- Docker и EC2 убраны, один Procfile добавлен
- Сайт за один присест
- Первый клуб и его страница
- Перестройка: новая арт-дирекция, четыре услуги
- Открытие House of Image
Сервисному бизнесу не нужна сначала платформа. Ему нужен один платный путь, который работает от начала до конца, а ту часть, которую никто другой не сделает, по-прежнему делает эксперт. Всё остальное можно купить, арендовать или добавить позже. Если вы продаёте собственные часы, с этого я бы и начал.
Или спросите о нём цифровой разум