Inspiration

Many of us are first- or second-generation immigrants who grew up watching our families send money across borders to support relatives back home. We remember family members visiting transfer counters, comparing exchange rates, and realizing that a portion of their hard-earned money was disappearing through fees and unfavorable conversions. As we looked deeper, we realized this wasn't simply a problem of providers overcharging, but of outdated financial infrastructure.

Traditional remittance providers rely on pre-funded accounts across countries to ensure liquidity, tying up billions of dollars and passing the costs of maintaining that liquidity and settling transactions onto customers. Through friends and connections in the Philippines, we saw these same challenges affecting migrant workers who spend long hours supporting families back home, only to lose a meaningful share of every paycheck to transfer costs.

We believe remittances shouldn't be expensive because the infrastructure behind them is outdated. Rather than building another transfer service, we want to solve the problem at its source by rethinking how liquidity is managed and how financial institutions settle across borders.

What it does

  1. Match. Users post a transfer request (for example, "send 200 in currency A to a mobile wallet" or "pay a tuition bill in currency B from currency A"). The app pairs opposite flows at an agreed rate. No wallet, stablecoin, or fees are involved at this stage.
  2. Compare. Before committing, users see side-by-side options (fully matched, partly matched, or routed entirely via stablecoin), each showing the exact amount the recipient gets and every fee.
  3. Settle the matched portion locally. Each side of the match is paid through its own domestic payment rail, such as a bank transfer or mobile money. No ramp fees apply to this portion.
  4. Settle the remainder through the blockchain. Any unmatched balance is routed via a stablecoin: a local anchor on-ramp, a transfer on the Stellar network, then an anchor off-ramp in the destination country.
  5. Receive. Recipients get their funds in their local currency and payment method, whether a mobile money deposit or a payment to an institution, along with a receipt showing the final fees and exchange rate.

How we built it

Tandem began with a simple question: why move money across borders when opposing transactions could be settled locally?

We first noticed that Stellar's network already makes crypto transfers cheap and fast. So what else is stopping more people from using it? Two things: the high friction of setting up wallets, and the cost of converting to and from cash.

We built Tandem around the idea of trading some time delay for greater savings, with users in full control of how long they're willing to wait to secure more matches.

Frameworks and tools

  • Smart contract: Rust and soroban-sdk, deployed to Stellar Testnet with the Stellar CLI. It runs when the timer runs out. It makes alternative payment routes more secure, prevents double payments, and keeps settlement records so everyone receives the money they're owed.
  • Server: Python, FastAPI, and SQLite. SQLite tracks orders, and the matching algorithms are written in Python.
  • Front end: React, Vite, and Tailwind CSS.
  • Stellar infrastructure: Soroban RPC, Horizon, and the Stellar Expert explorer, used to verify Testnet transactions.
  • Fee comparison: research comparing our service with current options for international transfers, compiled in a spreadsheet.
  • Testing: 500+ unit, smart contract, and randomized transaction tests on Testnet.

Challenges we faced

Testing on Testnet

Although we tested our algorithms internally, we also built tests that run directly on Testnet. Setting up the contract's keys, using account keys funded with Friendbot, and verifying results in the hard-to-read Stellar Expert explorer was a challenge. Along the way we noticed that:

  • Raw amounts on the Stellar network are stored as integers with 7 decimal places, so 1 unit of a token is 10,000,000 raw units.
  • When a transaction is fully matched, nothing gets sent on Stellar.

Balancing savings and transfer speed

Designing a user-controlled timer was difficult, because the timer length affects which matches can form and how much has to be sent on the blockchain.

Accomplishments that we're proud of

  • We built for a documented problem. Remittance providers pre-fund accounts in each country and settle with each other internationally, even when money is moving both ways at once. That tied-up liquidity becomes a cost, and it lands on the people sending small amounts home every month. Tandem attacks that cost at its source by removing cross-border movement from the matched portion entirely, rather than adding another layer on top of the existing rails.
  • Partial fills actually work. The engine can fill one 500 USDC request against a 200 and a 300, and it writes a separate match record for each fill. The contract then settles those records individually. This was the hardest part of the design and the part easiest to fake, so we made sure to build a functional version.
  • Nothing can get stuck in escrow. Every request carries an explicit deadline. Whatever has not been matched or settled by then is refunded pro rata to the sender, with no manual intervention and no support ticket.
  • No FX exposure on the matched portion. Because no conversion happens between currencies, there is no spread to pay and no rate that can move between sending and receiving. The unmatched remainder still converts, but it converts once, through a single visible USDC leg, instead of being priced into an opaque quote on the full amount.
  • We picked our target demographic with data. Roughly $1.64 billion flows from the UAE to the Philippines each year, around 900,000 to 1 million Filipino workers live in the UAE, Stellar USDC cash-out already reaches the Philippine side, and both countries have licensed USDC frameworks. That research changed what we built, not just how we described it.
  • We say clearly what is real and what is simulated. Escrow, matching, partial fills, refunds, and the cross-border USDC leg run on Testnet. Local fiat disbursement of matched amounts needs licensed payout partners in each country, so we simulate that and label it as simulated. We would rather be accurate than impressive.

What we learned

Learning thorough details about the Stellar system

We needed a deeper understanding of how Stellar actually works beyond the basics of sending payments. We studied how anchors operate, since they are the bridges between USDC on Stellar and real-world cash or bank accounts. Understanding fees, reserve requirements, and network limits helped us design Tandem to integrate with Stellar's current infrastructure and stay reliable at scale.

Current global trends in our problem space

We also studied the broader trends shaping how money moves, such as the global shift toward cashless infrastructure, the growth of mobile wallets and instant payment systems, and the rising use of stablecoins for cross-border payments. At the same time, we looked at the counter-trend: many regions, especially remote or lower-income ones, still depend heavily on physical cash, which affected how we designed the last mile.

Tracking regulatory developments, including stablecoin rules and money-transmitter requirements in different countries, was also essential, since they determined where and how Tandem could legally operate. Following these trends helped us time our expansion and choose partners and corridors wisely.

Blockchain products and how they move money and improve liquidity

Finally, we learned more about existing blockchain-based products and how they solve the problems of cross-border payments. This meant studying stablecoins like USDC, on- and off-ramp providers, decentralized exchanges, and liquidity pools, and understanding how each reduces settlement time, lowers fees, and makes it easier to convert between currencies. We also examined how other companies in this space built their products and where they struggled, so we could learn from their successes and avoid their mistakes. This helped us decide which tools to build on, which to partner with, and how Tandem's netting model could complement blockchain liquidity rather than compete with it.

What's next for TANDEM

Expanding into B2B

We see significant potential for Tandem in B2B, since businesses regularly send large payments to overseas manufacturers and suppliers. Because these transfers are so large and frequent, even a small reduction in fees would add up to major savings over time. Businesses also tend to have predictable, recurring payment corridors, which will improve two-way liquidity, since a company paying a supplier in one direction can be matched with another company moving funds the opposite way.

Partnering with banks and financial service organizations

We also see strong potential in partnering with institutions such as banks and MoneyGram to improve liquidity for recipients converting USDC to cash. These partners already have established cash-out networks and regulatory standing, so working with them would make the last mile faster and more reliable. This would let Tandem serve domestic users, and it would give the platform more transaction volume to net against, which strengthens the core model.

Building infrastructure for remote areas

Another opportunity is investing in the infrastructure needed for Tandem to work in more remote regions, where most transactions are still made in physical cash and access to banks or digital payment tools is limited. Reaching these communities would expand Tandem's market well beyond the major urban corridors and serve people who are often underserved by existing remittance providers.

Built With

Share this project:

Updates

Submission history