Перейти до вмісту
sp1le.tech
EN
У розробці 2026 Мультитенантний B2B SaaS

ReplyDeck

Платформа, де організація-клієнт тримає власний парк Telegram-акаунтів, стежить за публічними чатами на предмет формулювань, якими говорять її покупці, і перетворює збіги на кваліфіковані ліди з історією комунікації. Вона в розробці й ще нікому не відкрита - тому тут нема на що клікнути.

Python · FastAPI · PostgreSQL Публічного посилання поки немає: щоб щось показати, потрібен власний акаунт.

Обмеження

Багато окремих організацій-клієнтів, у кожної власні Telegram-акаунти й власні секрети, і все це на одному скромному VPS - без жодного витоку між ними. І черговий по системі теж один: я.

Рішення

  • 4 записи
  • кожен - із ціною

Журнал рішень

Одна база Postgres, і кожен шлях до даних проходить через модуль-вартовий тенантності

Замість
Окрема база чи схема на кожного клієнта
Тому що
Один сервер, один бекап, один прогін міграцій. Схема-на-клієнта множить експлуатацію на кількість клієнтів, а експлуатую я сам.
Ціна рішення
Ізоляція стала властивістю мого коду, а не рушія. Саме тому правила тенантності мають окремий тестовий модуль, а не перевіряються на око.

Сесійні ключі клієнтів зашифровані на диску, зі скриптом ротації та пунктом у ранбуці

Замість
Сесійні рядки у відкритих колонках
Тому що
Витік бекапа з відкритими сесіями віддає не рядки в таблиці, а живі Telegram-акаунти чужих людей.
Ціна рішення
Ротація стає справжньою операцією зі справжнім сценарієм відмови: втратив майстер-ключ - втратив разом із ним і сесії.

Власний клієнт Vertex AI приблизно на сотню рядків

Замість
SDK від вендора
Тому що
SDK тягне велике дерево залежностей і власні пінування версій заради кількох HTTP-викликів з авторизацією.
Ціна рішення
Ретраї, оновлення токена й формати помилок тепер на мені, і чейнджлог API читаю теж я.

Інтерфейс сховища з реалізаціями для диска, S3 та Azure Blob - написаний до того, як знадобився

Замість
Писати файли на VPS і розібратися потім
Тому що
Переїзд з одного сервера - те, на чому вмирають маленькі SaaS. Визначити шов заздалегідь коштувало днів; вбудовувати його під працюючим сервісом коштує тижнів.
Ціна рішення
Три гілки коду під тестами там, де перший рік витягнула б одна.

Цифри

  • заміряно, не округлено

Масштаб

13 825
рядків застосунку
7 697
рядків тестів
57
тестових модулів
110
HTTP-маршрутів
29
моделей даних
25
міграцій

Стек

  • Python
  • FastAPI
  • PostgreSQL
  • Alembic
  • Telethon
  • aiogram
  • Vertex AI
  • S3 / Azure Blob
  • Sentry
  • systemd
  • nginx
  • Docker

Ретро

  • написано після, не до

Що змінив би

Я назвав його Sonar і зібрав навколо цієї назви лендинг, оферту й домен раніше, ніж відкрив реєстр торгових марок. SonarSource володіє маркою SONAR для софту, тож продукт став ReplyDeck до того, як зустрів першого платного клієнта. Урок дешевий лише тому, що вивчений рано: спочатку реєстр, потім домен. Що лишив би точно як є: вартовий тенантності з окремим тестовим модулем, бо ізоляцію, яка живе в коді застосунку, треба доводити, а не припускати.

Далі

Контакти

  • Інженер-програміст повного циклу

Почнімо розмову

Напишіть, що ви будуєте і що заважає. Відповідаю особисто, зазвичай того ж дня.

stasyukdmitriy2602@gmail.com Telegram @decimal128 LinkedIn github.com/sp1le