PingPay is an AI-powered money app on Arbitrum that turns conversations into transactions.
PingPay turns natural language into on-chain actions. PAY people instantly, SWEEP idle stables into yield, and INVEST into Bitcoin or Stocks — all from chat. Our first product, "PAY," allows anyone to send USDC to any type of identifier, like WhatsApp, Email ID or a Telegram handle. The receiver does not need PingPay or a crypto wallet.
- Working UI: https://pingpay-gz36.vercel.app/
- Subscribe to the @pingpay_bot bot on Telegram to test the feature
- Chat Command Interface: Type natural commands like
send 20 usdc to @alice - One-Click Claims: Recipients get a Telegram message with a claim link
- No Wallet Required: Recipients can claim without having a crypto wallet
- Real-time Status: Track transactions with ✅ (confirmed) and ✅✅ (claimed) indicators
- Mobile-First Design: iOS-optimized PWA-ready interface
PingPay/
├── backend/ # Node.js/Express API server
│ ├── src/
│ │ ├── index.js # Express app entry
│ │ ├── database.js # SQLite database
│ │ ├── services/
│ │ │ ├── blockchain.js # Ethers.js USDC transfers
│ │ │ └── telegram.js # Telegram bot notifications
│ │ └── routes/
│ │ ├── transfers.js # Send/parse commands
│ │ ├── wallets.js # Wallet management
│ │ └── claims.js # Claim verification
│ └── data/ # SQLite database file
│
└── frontend/ # React + Vite + TailwindCSS
├── src/
│ ├── pages/
│ │ ├── HomePage.jsx # Main chat interface
│ │ ├── ClaimPage.jsx # Recipient claim flow
│ │ └── HistoryPage.jsx # Transaction history
│ ├── components/
│ │ ├── ConfirmModal.jsx
│ │ └── AddFundsModal.jsx
│ └── context/
│ └── WalletContext.jsx
└── public/
Backend:
- Node.js + Express
- SQLite (simple file-based DB)
- Ethers.js v6 (blockchain interactions)
- node-telegram-bot-api
Frontend:
- React 18
- Vite
- TailwindCSS
- React Router
- Lucide Icons
Blockchain:
- Arbitrum Sepolia (testnet)
- USDC ERC-20 transfers
- Node.js 18+
- npm or yarn
- Telegram Bot Token (from @BotFather)
- Arbitrum Sepolia wallet with ETH for gas
cd backend
# Install dependencies
npm install
# Configure environment
cp .env.example .env
# Edit .env with your values:
# - TELEGRAM_BOT_TOKEN
# - DEMO_WALLET_PRIVATE_KEY
# Create data directory
mkdir -p data
# Start server
npm run devcd frontend
# Install dependencies
npm install
# Start dev server
npm run devThe app will be available at http://localhost:5173
PORT=3001
TELEGRAM_BOT_TOKEN=your_telegram_bot_token
RPC_URL=https://sepolia-rollup.arbitrum.io/rpc
USDC_CONTRACT_ADDRESS=0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d
CHAIN_ID=421614
DEMO_WALLET_PRIVATE_KEY=your_private_key
FRONTEND_URL=http://localhost:5173- Open PingPay web app
- Type:
send 20 usdc to @alice - Review confirmation modal → Confirm & Send
- Transaction broadcasts → shows ✅ when confirmed
- Recipient gets Telegram notification with claim link
- Recipient receives Telegram message with link
- Opens claim page → sees "You received 20 USDC"
- Enters Telegram handle → clicks Claim
- Sees balance + options (Send, Withdraw, Earn)
- Sender's UI updates to ✅✅
- Visit Circle Faucet
- Select Arbitrum Sepolia
- Enter your wallet address
- Receive testnet USDC
- Visit Arbitrum Sepolia Faucet
- Enter your wallet address
POST /api/transfers/parse- Parse send commandPOST /api/transfers/estimate- Get gas estimatePOST /api/transfers/send- Execute transferGET /api/transfers/:id- Get transfer detailsGET /api/transfers/history/:address- Get transfer history
GET /api/wallets/demo- Get demo wallet infoGET /api/wallets/balance/:address- Get balancesGET /api/wallets/handle/:handle- Get wallet by Telegram handlePOST /api/wallets/create- Create wallet for handle
GET /api/claims/:token- Get claim infoPOST /api/claims/:token/verify- Verify and claim
The app runs in demo mode with a prefunded wallet. For production:
- Implement proper wallet authentication
- Add recovery mechanisms for recipient wallets
- Integrate proper Telegram chat ID storage
- Add rate limiting and security measures
MIT