Friends Pay

A wallet that enables groups of friends to seamlessly manage shared expenses using cryptocurrency.

Friends Pay

Created At

ETHOnline 2025

Project Description

FriendsPay - Web3 Group Payment Platform

A decentralized application (dApp) that enables groups of friends to seamlessly manage shared expenses using cryptocurrency. Built on Base blockchain with USDC as the primary currency. 🌟 Features Core Functionality

Group Creation: Create shared wallets with multiple participants
Equal Split Management: All deposits and expenses are automatically split equally
Deposit Funds: Each participant deposits their share in USDC
Make Payments: Any participant can make payments from the shared wallet
QR Code Payments: Generate QR codes for easy wallet address sharing
Group Settlement: Archive groups and distribute remaining funds equally
Transaction History: View all group activities on the blockchain

Payment Integration

Fiat On/Off Ramp: Buy USDC with credit card, bank transfer via Transak
Multi-Payment Methods: Credit card, bank transfer, Apple Pay, Google Pay
Global Support: Works in 160+ countries

Technical Features

PWA Support: Install as a mobile app with offline capabilities
Base Network: Built on Base L2 for fast, cheap transactions
USDC Native: Stable cryptocurrency pegged 1:1 to USD
Wallet Connect: Support for all major Web3 wallets via RainbowKit

How it's Made

FriendsPay was built as a decentralized group payment platform that combines Web3 infrastructure with a seamless Web2-style user experience. The stack is split into two core layers — smart contracts (backend logic on Base blockchain) and a Next.js frontend (for the user interface and interactions).

On the smart contract side, I used Solidity with Hardhat to develop and test three main contracts:

SharedWallet.sol handles deposits, payments, and group settlements with equal-split logic.

GroupFactory.sol acts as a contract factory for deploying new group wallets dynamically, ensuring scalability.

MockUSDC.sol was added for local testing without requiring live token transfers.

Contracts are deployed on Base Sepolia (testnet) and later on Base Mainnet. Base was chosen for its low fees and EVM compatibility, making transactions fast and cheap compared to mainnet Ethereum. The app uses USDC for price stability, avoiding volatility issues that come with typical crypto-based group payments.

The frontend is built using Next.js 15 (App Router) and TypeScript, designed as a PWA (Progressive Web App) for installability and offline access. I integrated wagmi and viem for blockchain interactions, and RainbowKit for wallet connection (supporting MetaMask, Coinbase Wallet, etc.). Styling is handled with TailwindCSS, which keeps the UI clean and modular.

For payments, I integrated Transak’s fiat on/off ramp — allowing users to buy or sell USDC using credit/debit cards, Apple Pay, or bank transfers in 160+ countries. This bridged the Web2-to-Web3 gap effectively, letting even non-crypto users onboard easily. QR-based payments were implemented for a simple merchant-facing solution while preparing for future integrations like MoonPay or BitPay.

From a “hacky” standpoint, I implemented temporary ESM tweaks in the Hardhat test configuration to support modern imports with TypeScript and custom mock deployment scripts for simulating group transactions locally. I also built an equal-split logic entirely on-chain using pure Solidity (no external oracles or off-chain calculations), which ensures full transparency and trustless operation.

Overall, the system ties together Base L2, Next.js, wagmi, RainbowKit, and Transak — resulting in a fully non-custodial, globally accessible, and gas-efficient solution for managing shared group expenses using crypto.

background image mobile

Join the mailing list

Get the latest news and updates