Платформа автоматизации маркетинга: десктоп → Telegram → веб
Платформа управления рекламными кампаниями для собственных рекламных проектов. Начинал в 2024 с десктопа на Tkinter для личного использования — вырос в полноценный продукт с 80+ функциями, Telegram-ботом и рабочим веб-приложением на Next.js + FastAPI с правами доступа по ролям и шифрованным хранилищем токенов.
Запуск одной кампании = 2 часа ручной работы
В закупке рекламы запуск одной кампании — это 9 связанных шагов: составить название по схеме (магазин, продукт, страна, специалист, ниша), подобрать лендинг и офферы в Keitaro, сделать короткую ссылку через Cutt.ly, прописать OG-теги, привязать Facebook Pixel и токен доступа, создать пост на странице в FB, добавить первые комментарии.
На каждом шаге легко ошибиться: имя ссылки повторяется с прошлой кампанией, не тот идентификатор пикселя, забытая UTM-метка — и учёт конверсий ломается, бюджет идёт в никуда. При запуске 5–10 рекламных наборов в день вся команда тратит больше времени на копирование и вставку, чем на работу с креативами.
Готовых решений нет: платные сервисы привязаны к одной партнёрской сети, а чужие внутренние инструменты заточены под чужие процессы. Нужен был инструмент, который понимает нашу структуру неймингов, наши интеграции и эволюционирует под потребности команды.
Три итерации, три интерфейса
Приложение на Tkinter для macOS — для себя
Python, Tkinter и родное меню правки macOS (отменить, вырезать, копировать, вставить). Личный рабочий инструмент: одна форма с автоподбором лендингов и офферов, проверкой полей, сохранением шаблонов и локальной историей в SQLite. ~2000 строк на Python, собиралось в .app-пакет.
Telegram-бот для команды — работа прямо в чате
aiogram 3 и конечный автомат состояний: пошаговый опрос всех полей кнопками прямо в переписке. Бизнес-логика переиспользована из десктопной версии через общие модули. Чтобы создать кампанию, не надо открывать ноутбук — специалист по рекламе работает прямо из чата с телефона.
Рабочее веб-приложение с правами доступа по ролям
Полностью переписан с нуля как полноценный сервис: Next.js 14 (App Router, TypeScript, Tailwind, shadcn/ui) + FastAPI (async SQLAlchemy 2 + Pydantic v2) + PostgreSQL 16 + Celery + Redis 7.
Шифрованное хранилище токенов на Fernet (AES-128-CBC + HMAC-SHA256) — в браузер токены не попадают никогда. Вход по JWT, пароли под bcrypt. Журнал каждого действия в базе. Развёрнуто через Docker compose на сервере Vultr, адрес сервера скрыт за Cloudflare.
Что внутри — топ-10 функций из 80+
Таблица с прямым редактированием, автонумерация постов, полоса прогресса рядом с каждой строкой, итог по каждой: успех или ошибка.
Fernet (AES-128-CBC + HMAC-SHA256), главный ключ в переменных окружения, отдельная роль vault-admin. Токены не выходят за пределы сервера.
«Вы обычно используете Hershey's с Kisses», подсказки по времени («14:00 — ваше обычное время публикации»).
Форма автосохраняется в БД. При сбое браузера/приложения — восстановление из последнего сохранения, кнопка «очистить черновик».
Красная или зелёная рамка поля, кнопка блокируется при совпадении. В пакетном режиме имя правится само (добавляет -2, -3 или случайное слово).
Группировка по стране и магазину, применение в одно нажатие, предпросмотр перед применением, импорт и экспорт JSON, шаблоном можно поделиться с командой.
Каждое изменение пишется со временем, поиск и фильтры (кампания, пост, объявления, ошибки), фильтр по датам, выгрузка в CSV или JSON, переход к кампании одним нажатием.
Хранятся последние 10 копий, копию можно сделать вручную кнопкой в меню, время последнего сохранения видно в строке состояния.
Предупреждение при попытке создать кампанию с тем же магазином, продуктом и страной, что у существующей; рядом показывается сравнение с прошлой версией.
Cmd+1/2/3 переключение табов, Cmd+N новая кампания, Cmd+H история, Cmd+Q панель быстрых действий. Полная навигация с клавиатуры.
Это моя личная разработка — внутренний инструмент, а не продукт на продажу. Показал тут не для того, чтобы продать эту программу, а как пример того, что я умею собирать в одиночку: продукт с тремя интерфейсами, выкладка в рабочую среду, права доступа по ролям, ~80 проработанных функций. В клиентских проектах тот же уровень внимания к деталям переношу на вашу задачу — инструменты подбираю под неё.
Технологии, на которых это собрано
- Next.js 14 (App Router)
- React 18 + TypeScript
- Tailwind CSS + shadcn/ui
- Компоненты Radix UI
- react-hook-form + Zod валидация
- Sonner для всплывающих уведомлений
- FastAPI 0.115 (async)
- SQLAlchemy 2 (async) и миграции Alembic
- Pydantic v2 для всех схем
- JWT (jose, HS256, 24h TTL)
- bcrypt для паролей
- Fernet (AES + HMAC) для хранилища токенов
- PostgreSQL 16 (pgcrypto, uuid-ossp)
- Celery 5 для фоновых задач
- Redis 7 как брокер очередей и кэш
- SQLite (десктоп / Telegram-версии)
- Docker compose, несколько сервисов
- Nginx (TLS, заголовки безопасности, блокировка карт исходников)
- Cloudflare DNS/CDN, адрес сервера скрыт
- Vultr VPS, Ubuntu 22.04
- Автоматические сертификаты Let's Encrypt
- Python 3 + Tkinter
- Родное меню правки macOS
- SQLite для локальной БД
- py2app для сборки .app
- aiogram 3 (async)
- Конечный автомат состояний
- Кнопки в сообщениях и обработка нажатий
- Keitaro API (кампании, лендинги, офферы)
- Facebook Graph API (посты, комментарии, страницы)
- Cutt.ly API (короткие ссылки)
- Приём вебхуков со статусами
- Pytest для серверной части
- Таблица журнала действий в базе
- Единая обработка ошибок
- Структурированное логирование
Что изменилось в работе
8× быстрее, с гарантией отсутствия дубликатов и валидацией всех полей
кампаний за один прогон — каждая настраивается отдельно прямо в таблице
за 10 этапов — от первой рабочей версии до полноценного сервиса
Системный эффект: платформа стала единым источником данных по всем рекламным запускам команды. Telegram-бот для специалистов в дороге, веб-приложение для офисной и совместной работы, десктоп для тех, кто предпочитает приложение на macOS. Все три используют один и тот же код бизнес-логики и одну общую базу кампаний, шаблонов и токенов.
Урок для клиентских проектов: правильная архитектура (разделение ответственности, общая бизнес-логика, несколько интерфейсов поверх неё) позволяет добавить новый интерфейс — мобильное приложение, интеграцию со Slack, голосового помощника — за неделю, не переписывая серверную часть.
Похожие кейсы
Swift/SwiftUI: первая версия за 9 недель — от старта до App Store
Приложение для iOS 17+: расписание и напоминания (24 ч / 1 ч / 10 мин), Speech Framework проверяет…
PWA для фитнес-студии: 1,2 МБ вместо 47 МБ у обычного приложения
Ставится на телефон как обычное приложение (PWA): работает без сети через Service Worker, уведомления на iOS…
Играбельная реклама для игры: цена установки −38%, установок +73%
Интерактивный мини-уровень на HTML5 через Cocos2d-js. 18 вариаций под 5 рекламных сетей (FB / TikTok /…
Аудит за 5 000 ₽ — с конкретным отчётом и сметой
Расскажу что внедрить в вашем бизнесе в первую очередь, какая будет окупаемость, и нужен ли вообще AI для вашей задачи (иногда — нет).
Или просто напишите свой вопрос — отвечу в течение 2 часов