FundIf: Making Money Programmable

The Inspiration

I wanted to solve a specific human problem: "Put your money where your mouth is."

We often want to fund things contingent on reality. I might want to donate to a political candidate, but only if they win the primary. I might want to fund a neighborhood party, but only if the city approves the permit. Traditional crowdfunding doesn't allow this—it collects money upfront regardless of the outcome. I built FundIf to create a "conditional commitment" layer for the internet.

How it Works

FundIf acts as a trustless middleman.

  1. Commit: You deposit USDC into a campaign.
  2. Wait: The funds sit in a smart contract escrow.
  3. Resolve: An Oracle checks the real world. Did the event happen?
    • Yes: Funds go to the creator.
    • No: You get a 100% refund.

Why Base was the only choice

I needed a chain that felt invisible. On Ethereum Mainnet, paying $15 in gas to commit $20 is a non-starter. Base offered two critical features that made this app possible:

  1. Smart Wallets & Passkeys: I didn't want users fumbling with seed phrases. Onboarding had to feel like logging into Gmail.
  2. Paymasters: The "conditional" nature of the app means users might get refunded. If they had to pay gas to deposit and pay gas to refund, they would lose money even if they got their principal back. Base's native Paymaster support allowed me to subsidize these interactions, making the experience risk-free for the user.

Built With

  • api
  • base-l2-(mainnet-&-sepolia)
  • basenames-/-l2-resolver
  • edge
  • foundry
  • framer-motion
  • mockoracle
  • multicall
  • next.js-14+
  • onchainkit
  • polymarket
  • polymarket-gamma-api
  • solidity-0.8.30
  • supabase-storage
  • tailwind-css-v4
  • typescript
  • usdc-(openzeppelin-ierc20)
  • viem
  • wagmi-v2
  • zod
Share this project:

Updates