New
Apps 1,262Makers 1,260This week 1,262
Promote your app−30%
Kova screenshot 1
0views in
the last 30 days

Kova

Dollar wallet and shop till on Monad with passkey wallets and gasless payments.

Built with Claude Code

by cybire1 · added Oct 29, 2026
no ratings0 comments

Kova: Tap. Paid. Anywhere.

Dollars for every phone.
A dollar account you open with Face ID. Pay a shop, send to a friend abroad, or pay a phone
with no apps and no internet. Every payment settles on Monad in about a second, and Kova pays the fee.

Try it at mykova.app · iOS on TestFlight · Live users · For reviewers · CI

A Kova wallet sends $1 to a phone number. A phone with no apps and no data gets a text, dials *384*53916#, and sees its balance.
A real run on Monad testnet: a Kova wallet pays a phone number, the phone gets a text, then dials Kova's USSD code (on Africa's Talking's simulator).

The problem

You live in London. Your grandmother lives in a village back home. She has a basic phone, no smartphone and no data. Sending her $50 today means agent fees, slow transfers, and a currency that loses value while it waits.

Stablecoins fixed the money, but not the experience. They still ask for an app, internet, a gas token, a seed phrase and a long address. Hundreds of millions of people have a phone but no internet, and most people never get past the seed phrase.

With Kova, you send dollars to her phone number. She gets a text. She dials a short code, enters her PIN, and checks or spends her dollars, with no app and no internet. You set her up once from your Kova app: her number, a PIN, a daily limit, and a code Kova texts to her phone.

We believe that if you solve a real problem, people use the product. This is the one we chose.

What it does

Kova home: balance, Pay, Send and Request
Pay in about a second
Scan a code or tap a till, approve with Face ID, paid. The fee is $0.00: Kova pays the gas. The passkey is the wallet, so there's no seed phrase.
Send to monad.nad: the name and the address it points to
Send to a phone number or a .nad name
Type +234…, ada.nad or just ada. Kova finds who it is, shows the address, and the money lands in about a second. Or send a link to anyone.
A feature phone showing Kova's USSD menu: Balance, Pay a till, Send to a phone, My payments
Dollars on any phone
No app, no data: a text when dollars arrive, then *384*53916# and a PIN to check the balance, pay a till or send to another phone.
A payment code shown with no signal
Pay with no signal
In a market or a basement, Face ID signs the payment on the phone and it travels as a code. Whichever phone gets signal first settles it on Monad.
Ada paid you privately, +$20.00, with a sealed note
Private payments
Turn on "Send privately" and the dollars go to a one-time address only the recipient can open. The name and note travel sealed, for them alone.
The Kova Card with a $50 daily limit
Limits for cards, people and AI agents
Every card, teammate or AI agent that spends from your account gets its own key and daily limit, kept in a contract on Monad. Claude can pay over MCP, within its limit.
More in Kova
  • Send by link, to anyone. Share a link on WhatsApp: "Ada sent you $20.00, about €18.40". The friend claims it with Face ID, or with email or Google (Privy), in under a second. The key lives only in the link (after the #), and an unclaimed link can be taken back.
  • Their own currency. Amounts show in naira, euros, pounds and more, beside the dollars.
  • Private notes. "For dinner" travels with the payment, sealed on the sender's phone for the two of them (X25519, XChaCha20-Poly1305). Kova stores text it can't read.
  • A shop inside the wallet. A stall page, a catalogue, a till (the phone becomes a terminal), orders from the table, a stamp card with no sign-up, and the day's takings live. Private takings pay each sale to a one-time address, so nobody can add up a shop's sales.
  • Kova for Business. Private payroll and supplier payments, each checked on Monad.
  • Deposits from other chains. MON on Monad and tokens from other networks convert into dollars through Relay. See setup and verification.
  • Naira in and out. Add money in naira and cash out to a Nigerian bank through Paystack (test mode on testnet).
  • From guest to Kova. Someone who paid a shop with email or Google can keep their change in a new Kova wallet, gas-free.
  • Also: Kova Travel (flights and hotels in dollars), "Snap your menu" (a photo becomes catalogue items), and spending insights. A US account number, a dollar card and savings are built behind partner keys and show "Request access" until a partner switches them on.

How it works for a phone with no internet

 your Kova wallet ──signs──▶ Kova API ──relayer pays gas──▶ Monad: AUSD lands in her pocket
                                │
 her phone ◀── text: "$1.00 arrived. Balance $9.25. Dial *384*53916#"   (Africa's Talking SMS)
 her phone ──dials *384*53916#──▶ Africa's Talking ──▶ Kova API: balance, pay a till, send
  • Each phone number gets a pocket: its own address on Monad, holding AUSD, with a PIN and a daily limit (at most $200). The pocket's key is sealed on Kova's server (AES-256-GCM), the PIN is hashed (scrypt), and three wrong PINs lock it for 15 minutes.
  • The wallet that set the pocket up can always take the dollars back, with no PIN, even if USSD is paused.
  • A spend is signed from the pocket as an EIP-3009 authorization and relayed like any other Kova payment. Each USSD session pays once, however many times the network resends a screen.
  • Sending to a number Kova doesn't know holds the dollars at a one-time address, texts an invite, and lets the sender take them back until they're claimed.
  • Code: ussd.ts, pockets.ts, phone-payments.ts, arrival-sms.ts.

Today this runs on Africa's Talking's simulator with test dollars. Next: a live USSD code per country, and cashing out to mobile money (M-Pesa, MTN MoMo) from the same menu.

How Kova uses Monad

  • Payments are signatures. The payer signs an EIP-3009 transferWithAuthorization for AUSD. Kova's relayer submits it and pays the gas, so nobody holds MON.
  • One round-trip to paid. The relayer estimates gas, counts its nonce locally, signs and sends with eth_sendRawTransactionSync, so the receipt comes back with the send: about 0.4 to 0.5 s on the server, about a second from tap to paid on a phone in Lagos.
  • Why Monad. Finality fast enough for a checkout line, and gas cheap enough for Kova to pay it for every user. That's what makes a dollar app with no gas token possible. It also makes privacy affordable: a fresh address for every private payment, and a transaction to spend each one.
  • Charges carry their reference on-chain. A checkout's reference rides in the authorization's nonce, so Kova's chain watcher settles a payment whoever submits it.
  • Limits live on Monad. KovaCard holds each spending key's daily limit, freeze and cosigner, so the limit is kept by the contract, not by Kova's database.
  • Names on Monad. ada.nad comes from Nad Name Service on Monad mainnet. A pasted address shows its own .nad name only when that name points back to it.
  • Privacy by permission. Private payments use ERC-5564 stealth addresses (stealth.ts), each posted to the standard announcer so any wallet can find its payments from the chain alone. The sender's memo is sealed for the recipient's viewing key. The amount is public; who it went to isn't.
  • Exchange rates from Chainlink CRE. A workflow (apps/rates) checks two FX sources against each other, reaches consensus and writes a signed report to KovaRates on Monad testnet. Mainnet uses a fixed reference table, labelled as such.

Who's using it

mykova.app/stats counts Kova's users live, straight from Kova's database on each network, and refreshes every minute. It shows people, payments, money moved, shops, links and where new people came from. It counts totals only, never who someone is.

On 23 October 2026:

Mainnet Testnet
People with a Kova wallet 12 162
Payments 0 36 ($402.55 in test dollars)
Shops open 2 21
Links sent 1 7 (4 claimed)

These counts include our own testing, and the page says so. A person is a wallet that did something only Kova wallets do: made its passkey backup, published a note key, took test dollars, paid a Kova charge, sent or claimed a link, or opened a shop. Kova's demo account, which App Review signs into, is left out. The numbers come from apps/api/src/routes/stats.ts, and anyone can read them at GET /v1/public/stats on each network's API.

Proof on Monad

Kova's API, relayer and contracts are live on mainnet. This week mykova.app runs the testnet build, with free test dollars, for the phone-payment demo.

Mainnet (chain 143)

What Link
AUSD (Agora), the dollar every payment moves 0x00000000eFE3…9012a
Kova's relayer, which pays everyone's gas 0x67d18542…7fa967
KovaCard, the contract behind every spending key 0x9bee9F2D…Ef325E
ERC-5564 announcer and ERC-6538 registry 0x55649E01…5564, 0x6538E6bf…6538
Gas-free $1.00 transfers through Kova's relayer 0x98b3d548…, 0x370e22dd…, 0xd7e2300f…

Testnet (chain 10143), one receipt per feature

Feature Receipt
$3.00 to a phone number with no apps, straight into its USSD pocket 0xe7957e6d…
$1.00 more to the same phone, arrived in 1.37 s 0xa77fb146…
A coffee, $4.50, with a $0.00 fee 0x6a52a3cf…
$20 to a friend abroad, arriving as ≈ €18.40 0xa92a1733…
$20 sent by link and claimed by a brand-new wallet in 0.7 s 0x7feaee54…
Paid with no signal, carried as a code, settled in 0.66 s 0x84a1ffae…
Ordered and paid from table 3, $7.75 in 0.76 s 0x61749899…
The sixth croissant, free with the stamp card: a $0.00 payment with its receipt 0x73001c6d…
A private send's announcement, with its sealed memo 0x62b66ba6…
Paid straight from a one-time address 0x969774c6…
Claude pays over MCP with its own key; the owner approves an ask-first payment 0x47c9e9f5…, 0xd9c89c96…
A teammate spends the owner's dollars within their limit 0xc7296af1…
Private payroll, each person paid at a one-time address 0x7726357c…
A Chainlink CRE rate report written to KovaRates 0x982e9045…
Testnet contracts and more receipts
What Link
AUSD (Agora) 0xa9012a05…5322dC
Kova's relayer 0x5868C3C3…771940
KovaRates 0xb5322DC6…C9e8e
A bakery sale, $6.50, at a Kova till 0x152be347…
A send from the web wallet, $2.50 0x3306403e…
$1.00 with a private note, web to phone, and $0.50 back 0xc3645812…, 0x3d43cd4d…
Two private payments gathered into one address, then spent 0x240552b3…, 0xcfdc9845…
ERC-5564's announcer, deployed by Kova at its canonical address 0x6438a00e…
An AI agent's key switched on; a Claude Code run paying 0xee1771f2…, 0xf7659c65…
A teammate's key switched on 0x155d853c…
More payroll, and a supplier payment 0x43935f81…, 0x2ab78661…, 0x94fb846d…
A CRE broadcast run 0xb5f7efae…

Architecture

flowchart LR
  subgraph People
    app["Kova app (iOS, Expo)"]
    web["mykova.app (Next.js)"]
    phone["Any phone (USSD, SMS)"]
  end
  subgraph Kova
    api["Kova API (Hono)"]
    db[("Postgres")]
    watcher["Chain watcher"]
    relayer["Relayer (pays gas)"]
  end
  subgraph Monad
    ausd["AUSD (EIP-3009)"]
    card["KovaCard (limits)"]
    rates["KovaRates"]
    nns["Nad Name Service"]
  end
  at["Africa's Talking"]
  cre["Chainlink CRE"]

  app -- "signed authorization" --> api
  web -- "server-side calls" --> api
  phone -- "*384*53916#" --> at -- "USSD callback" --> api
  api -- "texts" --> at -- "SMS" --> phone
  api --- db
  api --> relayer -- "transferWithAuthorization" --> ausd
  relayer --> card
  watcher -- "reads transfers" --> ausd
  watcher --- db
  cre -- "signed report" --> rates
  api -- "reads" --> rates
  app -- "looks up names" --> nns
  web -- "looks up names" --> nns
Path What it is
apps/mobile The Kova app (Expo, React Native): the wallet, and shop mode with the till. Installs with npm, outside the pnpm workspace.
apps/web mykova.app (Next.js): the web wallet (/wallet), shop mode (/dashboard), pay pages, stall pages and request links. Every API call is made server-side.
apps/api The Kova API (Hono on Node): checkout, relaying, the chain watcher, wallets, phone payments, USSD pockets, texts, shops and tills.
apps/card KovaCard, the contract behind every spending key (daily limit, freeze, cosigner), with Foundry tests.
apps/rates The Chainlink CRE workflow and the KovaRates contract (Foundry).
packages/monad Shared chain logic: networks and tokens, EIP-3009 authorizations, stealth addresses, sealed notes, the privacy router, spending keys, offline payments, phone payments and .nad names.
packages/db Postgres schema and migrations (Drizzl

Description taken from the repository README.

Ratings

–
0 ratings
5 0
4 0
3 0
2 0
1 0

Rate this app

Sign in to rate

Comments 0

Sign in to comment

No comments yet.

Related apps

#wallet · #payments · #crypto