Swift turns invoices into instant payments.
An AI agent validates the invoice, builds the transaction, and generates a QR code; the client scans, verifies, and pays instantly with one tap.
No addresses. No errors. Just scan and pay!
Live at: https://swift-ckb.vercel.app
- Invoice Creation: Simple form to create freelancer invoices
- AI Validation: Smart validation of invoice data
- QR Code Generation: Instant QR code for payment
- QR Scanning: Camera-based, or manually paste link as a fallback
- CKB Integration: Built on CKB Pudge testnet
- Transaction Tracking: Live explorer integration
- Freelancer creates an invoice with name, work description, amount, and CKB address
- AI Agent validates the invoice data
- CKB Integration builds the transaction and calculates fees
- A QR code is generated with the invoice and transaction details
- Client scans the QR code and reviews the invoice
- Payment is approved, signed, and broadcast to the CKB testnet
- Confirmation displays the transaction hash and explorer link
- The invoice amount is sent entirely to the freelancer
- The network fee is paid separately by the client’s wallet
- The app does not include the network fee in the invoice total
- Frontend: React 19 + Vite 6 + TailwindCSS 3
- CCC Core & Connector: @ckb-ccc/core + @ckb-ccc/connector-react
- QR: qrcode + html5-qrcode
- Node.js 18+
- npm
- Install dependencies:
npm install- Create your local env file:
cp .env.example .env- Set the environment variables:
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key
VITE_APP_URL=http://localhost:5173- Start the app:
npm run dev- Open:
http://localhost:5173
swift/
├── index.html
├── package.json
├── vercel.json
├── src/
│ ├── App.jsx
│ ├── main.jsx
│ ├── index.css
│ ├── lib/
│ │ └── supabase.js
│ ├── utils/
│ │ └── validateInvoice.js
│ ├── ckb/
│ │ └── transaction.js
│ └── components/
│ ├── Landing.jsx
│ ├── RoleSelection.jsx
│ ├── FreelancerDashboard.jsx
│ ├── InvoiceForm.jsx
│ ├── QRDisplay.jsx
│ ├── ClientDashboard.jsx
│ ├── QRScanner.jsx
│ ├── InvoiceApproval.jsx
│ └── Confirmation.jsx
└── .env.example
- Faucet: https://faucet.nervos.org
- Explorer: https://testnet.explorer.nervos.org


