AlgoSplit is a decentralized payment splitting and funding application built on the Algorand blockchain. It enables users to effortlessly split bills or send & receive payments by creating shareable payment links. Friends and family can contribute or claim their portion using ALGO or USDCa directly through their Algorand wallets with funds automatically distributed to the receiver once the payment target is reached.
The Claim link Function Uses Smart contract escrow which holds the funds sent by the sender and releases when receiver claims !
Key Features:
- Split payments between multiple participants
- Create escrow-based claim links for one-time payments
- Support for ALGO and USDCa (ASA) tokens
- Secure smart contract escrow system
- Beautiful, modern UI with wallet integration
- Real-time payment tracking and history
Traditional payment splitting often involves manual tracking, trust issues, and inconvenience when splitting bills among friends or for group expenses. AlgoSplit solves this by leveraging blockchain technology for secure, trustless, and automated payment distribution.
[Insert LinkedIn video URL here]
- App ID: 749648130
- Testnet Explorer (Lora): https://lora.algokit.io/testnet/application/749648130
- Testnet Explorer (PeraWallet): https://testnet.explorer.perawallet.app/tx/AMZXSKWGQONDSUSTN4M6W6JGTO6KONP2RXE5O7WTKS6OPPHZBZ2Q/
- ALGO Payments - Fast and secure blockchain payments
- Shareable Links - Easy payment link sharing across any device
- Multi participant Support - Split bills between any number of people
- Secure - Built on Algorand blockchain with Supabase backend
- Beautiful UI - Modern, responsive design
- Multiple Wallets - Support for Pera, Defly, and Lute wallets
- Payment History - Track your created and contributed payments
- Auto Completion - Payment links stop accepting when target is reached
- Create - Create a payment link with total amount and number of participants
- Share - Send the link to your friends/family
- Pay - Each person clicks and pays their share using their Algorand wallet
- Complete - Payment link stops accepting new contributions when target is reached
If you create a payment link for 100 ALGO split between 5 people:
- Each participant pays exactly 20 ALGO
- Payment link accepts exactly 5 payments of 20 ALGO each
- After 5 payments, the link stops working (status: completed)
- Funds go directly to the specified receiver address
- Node.js 18+
- npm or yarn
- Python 3.10+ (for smart contract development)
- Algorand wallet (Pera, Defly, or Lute)
- Supabase account (for backend database)
# Clone the repository
git clone <repository-url>
# Navigate to the project
cd algo-split-link-main
# Install dependencies
npm install
# Start development server
npm run devFor deploying and working with smart contracts:
# Navigate to contracts directory
cd contracts
# Create virtual environment (Windows)
python -m venv venv
venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Install PuyaPy compiler
pip install puyaCreate a .env file in the project root:
# Supabase Configuration (REQUIRED)
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
# Algorand Network (REQUIRED)
VITE_ALGORAND_NETWORK=testnet
# Smart Contract Configuration (OPTIONAL - only if using Claim Links)
# These are automatically set when you run: python contracts/deploy_teal_escrow.py
# Or manually add them after deploying:
VITE_CLAIM_APP_ID=12345678 # Numeric ID from deployment (e.g., 12345678)
VITE_CLAIM_APP_ADDRESS=ABC123...XYZ789 # 58-character Algorand address
# Payment Split Contract (OPTIONAL - for future use)
VITE_PAYMENT_APP_ID=your_payment_contract_app_idWhat to enter for each variable:
| Variable | What to Enter | Example | Required? |
|---|---|---|---|
VITE_SUPABASE_URL |
Your Supabase project URL | https://xxxxx.supabase.co |
β Yes |
VITE_SUPABASE_ANON_KEY |
Your Supabase anon/public key | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... |
β Yes |
VITE_ALGORAND_NETWORK |
Network name | testnet or mainnet |
β Yes |
VITE_CLAIM_APP_ID |
Numeric application ID | 12345678 |
β Only for Claim Links |
VITE_CLAIM_APP_ADDRESS |
58-char Algorand address | ABC123...XYZ789 |
β Only for Claim Links |
VITE_PAYMENT_APP_ID |
Numeric application ID | 87654321 |
β Optional |
π‘ Tip: The easiest way to get
VITE_CLAIM_APP_IDandVITE_CLAIM_APP_ADDRESSis to run the deployment script - it will automatically add them to your.envfile!
Setting up Supabase:
- Sign up at supabase.com
- Create a new project
- Run the SQL from
supabase-schema.sqlin the SQL Editor - Get your credentials from Settings β API
For mainnet production:
VITE_ALGORAND_NETWORK=mainnet- Visit Algorand Testnet Dispenser
- Enter your Algorand wallet address
- Get testnet ALGO
- Click "Connect Wallet" in the navbar
- Select your preferred Algorand wallet
- Navigate to "Create Payment"
- Fill in the payment details:
- Title and description
- Total amount in ALGO
- Number of participants
- Receiver address (automatically filled from your wallet)
- Optional expiry date
- Click "Create Payment Link"
- Open the payment link
- Connect your wallet
- Click "Pay" to contribute your share
- Confirm the transaction in your wallet
- Wait for confirmation (usually 4-5 seconds)
Screenshots illustrating the usage steps will be added here.
AlgoSplit uses smart contracts deployed on the Algorand TestNet. After deploying your contracts, you can verify them using Lora Explorer.
What are VITE_CLAIM_APP_ID and VITE_CLAIM_APP_ADDRESS?
When you deploy a smart contract to Algorand, it creates an Application on the blockchain. This application has:
-
Application ID (App ID): A unique numeric identifier assigned by Algorand (e.g.,
12345678)- This is used to call the contract's methods
- Think of it as the contract's "phone number"
-
Application Address: A unique Algorand address derived from the App ID (e.g.,
ABC123...XYZ789)- This address can receive ALGO and assets
- Funds sent here are held in escrow by the smart contract
- Think of it as the contract's "bank account"
When do you need these values?
- β Required if you want to use the Claim Link feature (escrow-based one-time payments)
- β Optional if you only want to use the Payment Split feature (multi-participant payments)
The deployment script automatically generates and saves these values:
-
Deploy the contract:
cd contracts python deploy_teal_escrow.py -
The script will:
- Deploy the contract to Algorand TestNet
- Generate the App ID and Address
- Automatically update your
.envfile with:VITE_CLAIM_APP_ID=12345678 VITE_CLAIM_APP_ADDRESS=ABC123...XYZ789 - Show you the explorer link to verify
-
Restart your dev server:
# Stop the server (Ctrl+C) npm run dev
Escrow Claim Link Contract:
cd contracts
python deploy_teal_escrow.pyAfter deployment, the script will output:
- Application ID (e.g.,
12345678) β This goes inVITE_CLAIM_APP_ID - Contract Address (e.g.,
ABC123...XYZ789) β This goes inVITE_CLAIM_APP_ADDRESS - Explorer link (e.g.,
https://lora.algokit.io/testnet/application/12345678)
Payment Split Contract:
cd contracts
python deploy.py # (if available)lora.algokit.io/testnet to show and verify our deployed contract or asset links on the Algorand TestNet.
Escrow Claim Link Contract:
- Application ID:
749648130 - Contract Address: View on Lora`
- Lora Explorer: View on Lora
Example: If your
VITE_CLAIM_APP_ID=12345678, your verification link would be:https://lora.algokit.io/testnet/application/12345678
Escrow Claim Link Contract (escrow_claim_link.py):
- Pre-funded escrow system
- One-time claim links
- Optional receiver restrictions
- Expiry enforcement
- Cancel/refund functionality
- Support for ALGO and ASA tokens
Payment Split Contract (payment_split.py):
- Multi-participant payment splitting
- Automatic completion when target reached
- Duplicate contribution prevention
- Real-time balance tracking
AlgoSplit follows a hybrid decentralized architecture:
Frontend (React + Vite)
β
Smart Contracts (Algorand Blockchain)
β
Supabase (Metadata & history storage)
- React 18 + TypeScript
- Vite
- Tailwind CSS + shadcn/ui
- React Router v6
- Context API
- Algorand
- algosdk
- PuyaPy (Smart contracts)
- Supabase (PostgreSQL)
- Row Level Security (RLS)
- All transactions are signed by user wallets
- No private keys are stored
- Duplicate payment prevention
- Expiry date enforcement
- Row Level Security (RLS) in Supabase
- Data persistence across devices
β
Duplicate contributions (user can only contribute once)
β
Payment expiry
β
Exact amount validation
β
Balance checks before transaction
β
Network connectivity issues
β
Wallet disconnection handling
β
Insufficient balance handling
- The application is currently available only on the Algorand testnet.
- Only supports ALGO and USDCa tokens.
- Users must have an Algorand-compatible wallet (Pera, Defly, or Lute).
- Smart contract interactions may incur minimal transaction fees.
- Limited to a maximum number of participants per payment link.
Contributions are welcome! Please open an issue or submit a pull request.
- Prince Kr.Jha: Blockchain & Smart Contract Development
- Priyansh: Frontend & Wallet Integration
- Deepak Singh: Backend & Database Management
- Paras: Testing, Deployment
MIT
The frontend is deployed on Vercel and accessible at:
π Live Application: https://algo-spleet-x.vercel.app/
Quick deploy:
npm install -g vercel
vercelOr connect your GitHub repository to Vercel for automatic deployments.
Make sure to set all environment variables in your Vercel project settings:
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEYVITE_ALGORAND_NETWORKVITE_PAYMENT_APP_ID(if using payment split contract)VITE_CLAIM_APP_ID(if using claim link contract)VITE_CLAIM_APP_ADDRESS(if using claim link contract)
For issues or questions, please open an issue on GitHub.
Built with β€οΈ on Algorand