Skip to content
sp1le.tech
UA
In development 2026 Multi-tenant B2B SaaS

ReplyDeck

A platform where a customer organisation runs its own fleet of Telegram accounts, watches public chats for the language its buyers actually use, and turns matches into qualified leads with an outreach trail attached. It is in development and has not been opened to anyone yet, which is why there is nothing to click here.

Python · FastAPI · PostgreSQL No public link yet: it needs an account of its own to show anything.

Constraint

Many separate customer organisations, each with its own Telegram accounts and its own secrets, all on one modest VPS - with nothing leaking sideways between them. And I am the only person on call for it.

Decisions

  • 4 records
  • each with its bill

Decision record

One Postgres database, with every query path forced through a tenancy guard module

Instead of
A database or a schema per tenant
Because
One box, one backup, one migration run. Schema-per-tenant multiplies operational work by the number of customers, and I am the operator.
Costs me
Isolation is now a property of my code instead of the engine. That is exactly why the tenancy rules have their own test module rather than being trusted by inspection.

Tenant session keys encrypted at rest, with a rotation script and a runbook step

Instead of
Session strings in plaintext columns
Because
A leaked backup of plaintext sessions does not hand over rows, it hands over live Telegram accounts belonging to somebody else.
Costs me
Rotation becomes a real operation with a real failure mode: lose the master key and the sessions are gone with it.

A hand-written Vertex AI client, roughly a hundred lines

Instead of
The vendor SDK
Because
The SDK drags in a large dependency tree and its own version pins for what amounts to a handful of authenticated HTTP calls.
Costs me
Retries, auth refresh and error shapes are mine to maintain, and I read the API changelog myself.

A storage interface with local disk, S3 and Azure Blob implementations, written before it was needed

Instead of
Writing files to the VPS and dealing with it later
Because
The move off a single box is what kills small SaaS products. Defining the seam early cost days; retrofitting it under a running service costs weeks.
Costs me
Three code paths to keep tested where one would have carried the first year.

Numbers

  • measured, not rounded

Size of the thing

13 825
lines, application
7 697
lines, tests
57
test modules
110
HTTP routes
29
data models
25
migrations

Stack

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

Retro

  • written after, not before

What I would change

I named it Sonar and built a landing page, an offer and a domain around that name before opening the trademark register. SonarSource owns SONAR for software, so the product became ReplyDeck before it met a single paying customer. A cheap lesson only because it was learned early: the register comes before the domain. The thing I would keep exactly as it is: the tenancy guard with its own test module, because isolation that lives in application code has to be proven, not assumed.

Next

Contact

  • Full-cycle software engineer

Start a conversation

Tell me what you are building and what is in the way. I answer personally, usually the same day.