Build strategy

The one-secret protocol.

No contracts, no deploy scripts, no faucet. OUSD is already live — your app just moves it.

  1. 1
    Pick a chain

    Base is cheapest, Tempo is built for payments, Solana is fastest, Ethereum has the deepest liquidity.

  2. 2
    Add one secret

    PRIVY_APP_ID from dashboard.privy.io. Add your preview and published domains to Privy's allowed origins and turn on gas sponsorship for your chain.

  3. 3
    Paste the prompt

    Every idea page gives a prompt preset for your chain. One message builds the whole app.

  4. 4
    Get a little OUSD

    Through Stripe / Bridge / Privy, Coinbase, Visa, Mastercard, or Coinbase / Kraken / Uniswap. Demo with ≤ 1 OUSD.

  5. 5
    Prove it

    Every payment shows a link to the chain explorer. That link is your demo.

Chain notes

Base

ETH on Base (cheap). Turn on Privy gas sponsorship for Base so users never need ETH.

Proof links: https://basescan.org/tx/<hash>

Ethereum

ETH on L1 — the most expensive chain. Sponsor gas with Privy or warn users before every send.

Proof links: https://etherscan.io/tx/<hash>

Solana

SOL (fractions of a cent). Enable Privy Solana gas sponsorship or keep ~0.01 SOL in the user's wallet.

Proof links: https://solscan.io/tx/<hash>

Tempo

Fees are paid in stablecoins, no native gas coin. Use Privy `sponsor: true`.

Proof links: https://explore.tempo.xyz/receipt/<hash>

Sending OUSD

Base · Ethereum · Tempo (Privy)
import { encodeFunctionData, erc20Abi, parseUnits } from "viem";

const amount = parseUnits("1.00", decimals); // decimals read from the OUSD contract
await sendTransaction(
  { to: OUSD, data: encodeFunctionData({ abi: erc20Abi, functionName: "transfer", args: [to, amount] }), value: 0n, chainId },
  { address: wallet.address, sponsor: true },
);
Solana (SPL)
const mintInfo = await connection.getAccountInfo(OUSD_MINT);
const programId = mintInfo!.owner;           // Token or Token-2022
const mint = await getMint(connection, OUSD_MINT, "confirmed", programId);
const from = getAssociatedTokenAddressSync(OUSD_MINT, owner, false, programId);
const to = getAssociatedTokenAddressSync(OUSD_MINT, recipient, false, programId);
tx.add(
  createAssociatedTokenAccountIdempotentInstruction(owner, to, recipient, OUSD_MINT, programId),
  createTransferCheckedInstruction(from, OUSD_MINT, to, owner, amount, mint.decimals, [], programId),
);

Common traps

  • · Tempo explorer links use /receipt/, not /tx/, and native value transfers revert.
  • · Never hardcode decimals — read them from the token.
  • · Load Privy only in the browser (lazy + ClientOnly) or the page crashes.
  • · Never name a secret VITE_…; read it on the server in a route loader.
  • · Wait for confirmation before showing success.

Read the full OUSD skill →

RestrictionsOUSD is not available in the European Economic Area or sanctioned regions, and may not be used for gambling, lotteries, prediction markets, adult content, weapons and other prohibited uses. Read the full list ↗