Marketing-Ops Platform: десктоп → Telegram → веб
Платформа управления рекламными кампаниями для собственного перформанс-стека. Начинал в 2024 с Tkinter-десктопа для личного использования — вырос в полноценный продукт с 80+ фичами, Telegram-ботом и production web-приложением на Next.js + FastAPI с multi-user RBAC и encrypted token vault.
Запуск одной кампании = 2 часа ручной работы
В медиабайинге запуск одной рекламной кампании — это 9 связанных шагов: составить нейминг (Store/Product/GEO/Buyer/Vertical), подобрать landing+offers в Keitaro, создать short-URL через Cutt.ly, прописать OG-теги, привязать Facebook Pixel и Access Token, создать пост на FB-странице, добавить комментарии-затравки.
На каждом шаге легко ошибиться: alias повторяется с прошлой кампанией, неправильный pixel-ID, забытая UTM-метка — и атрибуция ломается, бюджет идёт в никуда. При запуске 5–10 связок в день вся команда тратит больше времени на копи-пасту, чем на работу с креативами.
Готовых решений нет: коммерческие SaaS привязаны к одной CPA-сетке, кастомные internal-tool заточены под жёсткие процессы. Нужен был инструмент, который понимает нашу структуру неймингов, наши интеграции и эволюционирует под потребности команды.
Три итерации, три интерфейса
Tkinter native macOS app — для себя
Python + Tkinter + нативное macOS Edit-меню (Undo/Cut/Copy/Paste). Личный продуктовый инструмент: одна полная форма с авто-подбором landings/offers, валидацией, сохранением шаблонов, локальной историей в SQLite. ~2000 строк Python, paketовался в .app-bundle.
Telegram-бот для команды — chat-based UX
aiogram 3 + FSM-state machine: пошаговый опрос всех полей через inline-кнопки. Один и тот же бизнес-логический код переиспользован из десктопа через shared-модули. Создание кампании не требует открывать ноут — байер прямо из чата с телефона.
Production web-app с multi-user RBAC
Полный переписан с нуля как production-grade SaaS: Next.js 14 (App Router, TypeScript, Tailwind, shadcn/ui) + FastAPI (async SQLAlchemy 2 + Pydantic v2) + PostgreSQL 16 + Celery + Redis 7.
Encrypted token vault на Fernet (AES-128-CBC + HMAC-SHA256) — frontend никогда не видит raw API-токены. JWT-аудит с bcrypt-паролями. Audit log каждого действия в БД. Развёрнуто через Docker compose на Vultr VPS, origin-IP скрыт за Cloudflare.
Что внутри — топ-10 функций из 80+
Editable-таблица, автонумерация постов, side-by-side прогресс-бар, results-table с success/error для каждой строки.
Fernet (AES-128-CBC + HMAC-SHA256), master-key из ENV, отдельная роль vault-admin. Токены не покидают backend.
«Вы обычно используете Hershey's с Kisses», time-based hints («14:00 — ваше обычное время постинга»).
Форма автосохраняется в БД. При сбое браузера/приложения — восстановление из последнего сохранения, кнопка «очистить черновик».
Красная/зелёная рамка поля, кнопка disabled при коллизии. Auto-fix в batch (добавление -2, -3 или случайного слова).
Группировка по GEO/Store, quick-apply, preview перед применением, импорт/экспорт JSON, возможность поделиться шаблоном между командой.
Action logger с timestamp на каждое изменение, поиск/фильтр (Campaign/Post/Ads/Error), date-range filter, экспорт в CSV/JSON, click-to-jump к кампании.
Backup manager хранит последние 10 копий локально, manual-backup кнопкой в меню, индикатор времени последнего сохранения в status-bar.
Warning при попытке создать кампанию с теми же Store+Product+GEO как у существующей, side-by-side compare с предыдущей версией.
Cmd+1/2/3 переключение табов, Cmd+N новая кампания, Cmd+H история, Cmd+Q quick-actions panel. Полная клавиатурная навигация.
Это только топ-10 из ~80 фич. Полный feature-list (toast notifications, inline validation, smart empty states, status bar с online indicator, quick-actions floating panel, repeat-last-campaign, copy-last-Cutt.ly, sessions с пересохранением, editable batch table, multi-campaign session, performance hints на основе истории, etc.) — предоставлю на созвоне с архитектурными деталями.
Production-grade технологии
- Next.js 14 (App Router)
- React 18 + TypeScript
- Tailwind CSS + shadcn/ui
- Radix UI primitives
- react-hook-form + Zod валидация
- Sonner для toast-уведомлений
- FastAPI 0.115 (async)
- SQLAlchemy 2 async + Alembic migrations
- Pydantic v2 для всех схем
- JWT (jose, HS256, 24h TTL)
- bcrypt для паролей
- Fernet (AES + HMAC) для vault
- PostgreSQL 16 (pgcrypto, uuid-ossp)
- Celery 5 для async tasks
- Redis 7 для broker + cache
- SQLite (десктоп / Telegram-версии)
- Docker compose, multi-service
- Nginx (TLS, security headers, source-map blocking)
- Cloudflare DNS/CDN, origin-IP скрыт
- Vultr VPS, Ubuntu 22.04
- Let's Encrypt SSL automation
- Python 3 + Tkinter
- Native macOS Edit-меню
- SQLite для локальной БД
- py2app для .app-bundle
- aiogram 3 (async)
- FSM state machine
- inline-кнопки + callback handlers
- Keitaro API (campaigns, landings, offers)
- Facebook Graph API (posts, comments, pages)
- Cutt.ly API (short URLs)
- Webhook handlers для статусов
- Pytest для backend
- Audit-log таблица в БД
- Централизованный ErrorHandler
- Структурированное логирование
Что изменилось в воркфлоу
8× быстрее, с гарантией отсутствия дубликатов и валидацией всех полей
кампаний за один прогон с editable-таблицей и индивидуальной настройкой
через 10 фаз итеративной разработки от MVP до production-SaaS
Системный эффект: платформа стала единым source-of-truth для всех рекламных запусков команды. Telegram-бот для байеров в дороге, web-app для офисной работы и team-collaboration, десктоп для тех, кто предпочитает native macOS. Все три используют один и тот же код для бизнес-логики и одну общую базу данных кампаний/шаблонов/токенов.
Урок для клиентских проектов: правильная архитектура (separation of concerns, shared business logic, multi-frontend) позволяет добавить новый интерфейс — мобильное приложение, Slack-интеграция, голосовой ассистент — за неделю, не переписывая backend.
Аудит за 5 000 ₽ — с конкретным отчётом и сметой
Расскажу что внедрить в вашем бизнесе в первую очередь, какая будет окупаемость, и нужен ли вообще AI для вашей задачи (иногда — нет).
Или просто напишите свой вопрос — отвечу в течение 2 часов