Product architecture

From swipe to savings, in 480ms.

A walkthrough of how Runda connects to your bank, evaluates round-up rules, and allocates spare change into vaults — without ever holding your money.

Core flow

1. Card swipe

User makes a €4.60 purchase.

2. Bank webhook

Open Banking pushes the transaction.

3. Rules engine

Resolves €0.40 round-up + boosters.

4. Vault allocator

Routes change to active vaults.

5. Ledger

Double-entry record + audit log.

6. Notify

Push + in-app notification.

7. Reconciliation

Nightly settle with partner bank.

8. Insights

Surface progress to the user.

Rules engine
rule "weekend-booster" {
  when transaction.day in ["Sat", "Sun"]
  then roundup = baseRoundUp * 2
}

rule "coffee-penalty" {
  when transaction.category == "Coffee"
  then roundup += 1.00
}

rule "cap-daily" {
  when sumToday(roundups) >= 5.00
  then halt
}

Rules evaluate in priority order. The engine is deterministic, sandboxed, and emits an explanation per decision.

Data model

User

  • · id
  • · email
  • · country
  • · status

Transaction

  • · id
  • · amount
  • · merchant
  • · ts

RoundUp

  • · id
  • · txId
  • · amount
  • · ruleId

Vault

  • · id
  • · name
  • · target
  • · saved

Rule

  • · id
  • · trigger
  • · multiplier

Partner

  • · id
  • · type
  • · country
Decision flow — round-up evaluation
         ┌─────────────────────┐
         │  Transaction inbound │
         └──────────┬──────────┘
                    ▼
         ┌─────────────────────┐
         │   Is user active?   │── no ──▶ drop + log
         └──────────┬──────────┘
                    │ yes
                    ▼
         ┌─────────────────────┐
         │  Apply base round   │
         └──────────┬──────────┘
                    ▼
         ┌─────────────────────┐
         │  Evaluate user rules│◀──── rule chain
         └──────────┬──────────┘
                    ▼
         ┌─────────────────────┐
         │  Within daily cap?  │── no ──▶ truncate
         └──────────┬──────────┘
                    │ yes
                    ▼
         ┌─────────────────────┐
         │  Allocate to vaults │── proportional split
         └──────────┬──────────┘
                    ▼
         ┌─────────────────────┐
         │  Notify + ledger    │
         └─────────────────────┘
Tech & compliance

Open Banking

Tink + Nordigen

Region

EU-North primary

Encryption

AES-256 at rest

Compliance

PSD2 · GDPR

Ledger

Double-entry

SLOs

99.95% availability

Latency

p99 < 500ms

Audit

Immutable log