tfpdev
All workCase 03 / 04
FintechPayments

Crypto-to-Card Platform

Users load crypto and spend it through virtual cards. The backend had to exist first: KYC, compliance, transactions, card issuance.

5 months
zero to live
300
users at launch
2k
transactions a month at launch
Region
Region withheld
Role
Backend engineer, finance → tech lead, backend
Duration
2024 – 2025 · ~1 year
Status
Handed off.
Team
1–2 front-end engineers, QA. No DevOps.
StackNode.jsC#RustPythonTelegram Bot APITelegram Wallet

What they needed

A payment backend from zero. Users deposit crypto, it becomes a balance, the balance is spent through a virtual card. Around that: a KYC flow, compliance checks, transaction processing and integration with more than one card issuer.

I joined as the backend engineer responsible for finance. When the other backend engineer left, I became tech lead for the backend. There was no DevOps. I wrote the deploy configs myself.

Details of the compliance and KYC setup stay with the client. What follows is the part I can talk about.

What I did

  1. Transactions and reconciliation first, everything else on top

    Deposits, balance changes and card transactions were built and reconciled against the issuer before anything user-facing got attention.

    Why

    At the time I understood money better than I understood architecture. I spent the design budget on the one part where a mistake cannot be undone.

  2. Move custody to Telegram Wallet

    We started with our own custody and a deposit provider. Deposits got stuck at the provider. When Telegram Wallet became viable we moved deposits there.

    Why

    Stuck deposits disappeared with the move. Custody is a liability. The fewer places money waits, the fewer support tickets you own.

  3. The card lives inside Telegram too

    A Python bot lets a user top up and move money without leaving Telegram.

    Why

    That is where the users already were.

  4. Double-spends happened. They got fixed.

    Early on, concurrent requests could spend the same balance twice. We found it, fixed it, and added the test.

    Why

    It is the one bug in a money system that costs real money every time it fires. Since then it is the first thing I test on any money path, before any feature.

Proof

5 months
zero to live
300
users at launch
2k
transactions a month at launch

Crypto in, card out.

Architecture
Crypto in, card out.reconcileCrypto depositown custody → TG WalletKYC · compliancegate, details withheldTelegram bottop up · transferBalance · transactionssingle write pathCard issuersmore than oneVirtual cardauthorizations

What I would do differently

  • Custody. Start with a wallet provider instead of running our own.

  • This was before I understood architecture the way I do now. The money logic held. The structure around it would look different today.

Stack

  • Node.js
  • C#
  • Rust
  • Python
  • Telegram Bot API
  • Telegram Wallet