Proposal for Plata

Born
Based
Luka
Core principle03/05

Make it happen.

Ivanyshyn

I found a gap in Plata's B2B and Collections flow as Revolut enters Mexico — so I designed, architected and built the system that closes it.

This site isn't a request for a role. It's a working prototype and an architecture, built to be reviewed, questioned and tested — the same way I'd want any engineer joining Plata to prove their thinking.

Three places where Plata's payment rails have room to move faster.

01

Collections conversion drop-offs

Repayment friction is costing Plata recoverable debt.

Mechanic
Remove friction at the moment of repayment with instant A2A/QR payment integration.
Metric to validate
Success rate, recovery performance.
Still open
Baseline conversion funnel in Collections, actual drop-off causes, current payment methods, measured uplift after integration.
02

Bypassing traditional acquiring

Every transaction routed through card rails costs more than it needs to.

Mechanic
Route through SPEI / DiMo (open-loop) or an internal ledger (closed-loop) to bring internal-transaction cost toward zero.
Metric to validate
Cost per transaction, acquiring cost avoided, net take rate.
Still open
Actual rail fees, settlement economics, regulatory constraints, the real share of volume that can move closed-loop.
03

Capturing SME merchants before Revolut does

The merchant relationship is up for grabs while Revolut Pay is still new to Mexico.

Mechanic
An A2A/QR acceptance layer for SMEs via SPEI/DiMo and closed-loop mechanics, so Plata owns the merchant relationship before Revolut Pay becomes the default.
Metric to validate
Active SME merchants, merchant acquisition rate, payment volume, merchant retention.
Still open
Revolut Pay's actual rollout pace in Mexico, SME pain points, merchant acquisition economics, Plata's distribution advantage, regulatory constraints.

Klaqo is not a claim that these are solved. It's the architecture that makes them testable.

A TWINT-style A2A/QR gateway, built the way Plata would need to run it.

Klaqo explores how account-to-account payments become fast enough for the point of sale, transparent enough for the customer, and reliable enough to sit next to Plata's existing ledger.

Two apps. One payment. Both live.

The merchant POS creates the request, the customer wallet authorizes it. Watch the flows here — or open either app and run it yourself.

Screen recording of Klaqo POS creating a QR payment request.
Screen recording of Klaqo Wallet: Scan & pay.
Wallet flows

Designed around the transaction lifecycle, not the screen.

The interface is only the visible layer. Reliability comes from controlled state transitions, idempotent requests, a balanced ledger and clear failure handling.

Step 01 of 05 · QR readyQR_DISPLAYED

The merchant asks for a payment.

The POS sends the amount with an idempotency key. In one serializable PostgreSQL transaction the API creates the payment intent, signs its QR and records the first events.

RecordsPAYMENT_INTENT_CREATEDQR_GENERATED
Guarantee
The POS sends the same request twiceOne payment intent: the first response is replayed
System path6 of 10 components
  1. 01Merchant POSimplemented

    Vue 3. Requests a payment with an idempotency key, shows the signed QR and polls its status every 1.5 s.

  2. 02Go APIimplemented

    chi on net/http. Authenticates merchant sessions and wallet tokens, validates input, rate-limits and tags every request with an ID.

  3. 05Idempotency recordsimplemented

    Stores each keyed request with a hash of its body and replays the stored response when it is retried.

  4. 03Payment state machineimplemented

    Moves a payment only along allowed transitions, under a row lock, inside one PostgreSQL transaction. Final states never change.

  5. 04Signed QRimplemented

    HMAC-signed payload with a 120-second expiry and a nonce. A changed, expired or mismatched code is rejected.

  6. 09Payment event logimplemented

    Every transition is written as an event in the same transaction: an ordered, auditable history of each payment.

Transaction truth

The frontend reflects state. It does not define it.

PostgreSQL is the source of truth. A retried request replays its first response, a final state never changes, and the POS only ever reads committed state — it polls every 1.5 seconds, so it cannot see a payment as settled before its ledger entries exist. Push updates over WebSocket or SSE are not built yet.

Final states
  • Settled
  • Failed
  • Expired
  • Cancelled

Reliability isn't a nice-to-have here. It's the Collections and merchant metrics.

Every guarantee below is visible in the transaction above — follow one to see where it acts.

  1. 01

    Idempotency

    A retried request replays its stored response instead of creating a second payment.

    No duplicate payments when a network call is retried.

    QR ready 
  2. 02

    Signed QR

    HMAC signature, 120-second expiry and a nonce; a changed or expired code is rejected.

    A customer can't be shown a tampered amount or merchant.

    Scanned 
  3. 03

    Authentication boundaries

    Merchant sessions and wallet tokens, stored as SHA-256 hashes; a wallet can only authorize for its own customer.

    Protects the recovery and merchant flows this is meant to fix.

    Authorization 
  4. 04

    Controlled transitions

    A payment moves only along allowed transitions, under a row lock; a degraded rail leaves it in processing, never half-done.

    Fewer ambiguous transactions and support cases.

    Rail processing 
  5. 05

    Double-entry ledger

    Every transfer posts balanced entries; PostgreSQL rejects an unbalanced one, and integration tests prove rollback and no overspending.

    Customer, merchant and operations resolve to one outcome.

    Settled 
  6. 06

    Failure visibility

    Failed, expired and cancelled stay distinct, each with its error code and its own event history.

    A measurable, debuggable recovery journey — not a black box.

    Scanned 
Luka Ivanyshyn at a lakeside table with a laptop covered in stickers
luka@klaqo — ~/how-i-work--:--

How I work.Five principles, no exceptions.

  1. Klaqo's architecture was built without internal documentation from Mexican payment systems to reference — the state machine and the mock SPEI rail exist because the problem didn't come pre-solved.

  2. The three opportunities above came from researching Plata's actual payment context and Mexican rail options — SPEI, DiMo — until a specific, testable mechanic emerged, not a generic “fintech idea.”

  3. From the first line of code to a Go state machine on PostgreSQL, a double-entry ledger and two live apps: one person, end to end.

  4. Instead of a CV in a general queue: a named opportunity, a working system, and a direct ask, sent straight to the people who'd decide. This site is the evidence for this one.

  5. Not a Figma concept: a running Go backend, a balanced ledger covered by integration tests, and two live apps a visitor can operate in 04.

Try itEvery sticker tells a story.Hover over a sticker on the laptop.

Every payment that just works was built by someone you never saw.

I built this to prove I can lead Plata's B2B payment expansion.

Let's schedule a technical review of the codebase and discuss how we can integrate this architecture into your ecosystem.