One link. Supported USDC routes. Verified on Arc.
A premium testnet payment-link product for freelancers: create one shareable link, let the payer use a supported USDC route, and finish with a server-verified Arc receipt.
Open live app · How it works · Pitch deck · Read whitepaper · Launch readiness
Important
Testnet only. Final paid and cancelled states are written by the server after the matching Arc Testnet event is verified on-chain. Mainnet, fiat/cards, Solana, and Circle Gateway checkout are intentionally out of the launch scope.
- What it does · 30-second tour
- Why OneLink
- What makes it different
- Built on Arc + Circle
- Verified scope · with live evidence per row
- Visual walkthrough
- Architecture
- Product surfaces
- Local development
- Verification commands
- Safety boundaries
- Docs deep-dive
A 30-second tour of one full payment cycle:
- Creator connects a wallet on
/create, sets amount, memo, recipient, and optional expiry. The browser signs an Arc transaction; the server verifies thePaymentLinkCreatedevent before persisting the invoice. - Payer opens the shareable link, picks a route — direct USDC on Arc, or bridge from Base Sepolia via Circle CCTP — and signs.
- Server watches Arc for the matching settlement, then writes the final
paidstate. The browser cannot bypass this gate. - Receipt at
/receipt/[id]shows the verified Arcscan transaction, the settlement contract, and a server-verified flag — every detail a reviewer needs to inspect.
Try it now → onelink-mauve-nu.vercel.app
Freelancers lose time asking clients which wallet, chain, and address format they use. OneLink turns that into a single payment URL or profile handle. The launch build focuses on a verified testnet scope: Arc direct settlement and a Base Sepolia to Arc bridge route powered by Circle CCTP.
OneLink is not claiming mainnet readiness, fiat/card payments, Solana support, or arbitrary-wallet instant settlement. The product language is intentionally limited to what has been proven live.
- USDC is the only token a payer needs. Arc's native gas is USDC, so there's no ETH-for-gas dance. The same balance pays the invoice and the network fee.
- Server-verified state, not browser trust. The browser asks; an API verifies the matching Arc event before flipping
paidorcancelled. The contract is the source of truth. - Every claim has live evidence. Each row in the verified-scope table links to a real
docs/test-results/report with transaction hashes you can re-check on Arcscan. - Premium design on a standard Web3 stack. Editorial fintech-minimal UI built with shadcn/ui, Radix primitives, the Geist type family, and
tw-animate-css, paired with wagmi + viem + RainbowKit + WalletConnect.
| Layer | Choice | Why it matters |
|---|---|---|
| Settlement | Arc Testnet · chain id 5042002 |
USDC is the native gas token. Deterministic on-chain finality. No ETH-for-gas friction. |
| Bridge | Circle CCTP via App Kit | Native USDC burn-and-mint between supported testnets and Arc, with retry-safe step events. |
| Receipts | Arcscan transaction + server reconciliation | Every paid receipt links to the exact on-chain settlement. |
| Stack | Next.js 15 · React 19 · TypeScript · Tailwind · shadcn/ui · Radix UI · Geist · wagmi · viem · RainbowKit · WalletConnect · Foundry · Supabase | Standard Web3 stack with a premium component library. |
Every row below maps to a live test report under docs/test-results/. If a row is gated or out-of-scope, the README and the UI both say so.
| Area | Status | Evidence |
|---|---|---|
| Arc direct payment | Live-proven on the public Vercel deployment. | direct report |
| Browser-wallet full flow | Live-proven create, approve, pay, refresh, and receipt flow. | browser-wallet report |
| WalletConnect payment | Live-proven QR pairing and signed Arc settlement through the protocol harness. | WalletConnect report |
| Base Sepolia → Arc bridge | Live-proven through Circle App Kit and CCTP. | bridge UI report |
| Permanent profile payment | Live-proven payer-initiated profile request and settlement. | profile payment report |
| Creator cancellation | Live-proven server-verified cancellation after Arc transaction. | cancellation report |
| Failure-state recovery | Live-verified rejected-wallet, expired-link, and cancelled-link UX. | failure-states report |
| Visual / responsive QA | Production screenshots captured at 390, 768, 1366, 1440, and 1920 px. | visual report |
| Circle Gateway unified balance | Gated. Disabled in checkout until a funded deposit, burn, and mint flow is proven end to end. | local gateway harness |
For the full evidence bundle (transaction hashes, screenshots, QA matrix), see LAUNCH_READINESS.md.
Mobile-first · the full create → pay → receipt story, thumb-reachable on a phone. |
Verification before claims · server-verified state, gated scope, and honest testnet boundaries. |
Fresh production captures. Mobile/tablet and deeper screen-by-screen QA live in launch readiness and the reports under docs/test-results.
Creator wallet
-> signs Arc invoice creation
-> server verifies PaymentLinkCreated
-> Supabase stores public payment metadata
Payer wallet
-> pays directly on Arc, or bridges Base Sepolia USDC to Arc through Circle CCTP
-> server verifies settlement
-> dashboard and receipt update only after verified state
Trust boundaries:
- Browser can request actions but cannot mark settlement complete.
- API routes verify Arc transaction receipts and contract logs before mutating trusted state.
- Supabase stores public metadata behind RLS and an immutability trigger that locks terminal states.
- Arc contract (
OneLinkCollect.sol) is the source of truth for registered, paid, and cancelled links.
| Surface | Purpose |
|---|---|
| Payment links | Specific invoice URL with amount, memo, recipient, expiry, and verified on-chain registration. |
| Profile handles | Permanent /{handle} page so a payer can enter amount and memo without asking for a new invoice URL. |
| Checkout | Payer reviews recipient, amount, route, expiry, and testnet scope before signing. |
| Receipts | Verified Arc settlement transaction as the source of truth for completed payments. |
| Trust center | /security — tested routes, limitations, privacy, wallet safety, and reconciliation rules. |
| Whitepaper | /whitepaper — product thesis, architecture, Circle/Arc usage, and launch scope. |
Repo modules:
| Path | What lives there |
|---|---|
app/ |
Next.js routes, API handlers, whitepaper, trust pages |
components/ |
Shared product flows (create, pay, receipt, dashboard clients, step timeline, proof drawer) plus onelink/* brand components and ui/* shadcn primitives. |
contracts/ |
OneLinkCollect Solidity contract and Foundry tests (27 passing) |
lib/ |
Arc, Circle, payment, storage, and reconciliation utilities |
scripts/ |
Live QA and deployment verification scripts |
supabase/ |
Database schema, RLS policies, immutability trigger |
docs/ |
Launch readiness, UI audit, curated screenshots |
Prerequisites: Node.js >=22 <25 (see .nvmrc) and, optionally, Foundry for the Solidity tests.
git clone https://github.com/Pratiikpy/onelink.git
cd onelink
npm install
cp .env.example .env.local
npm run devPowerShell equivalent:
git clone https://github.com/Pratiikpy/onelink.git
Set-Location onelink
npm install
Copy-Item .env.example .env.local
npm run devThe app runs in demo mode when production environment variables are missing — demo receipts are visibly marked and do not claim real settlement. Required production keys are documented in .env.example.
Keep private keys, service-role keys, and local
.env*files out of Git.
| Command | What it proves |
|---|---|
npm run lint |
ESLint clean across the whole app. |
npm run typecheck |
next typegen + tsc --noEmit clean. |
npm run build |
Production Next.js build succeeds for every route. |
npm run test:contracts |
Forge tests for OneLinkCollect.sol (27 passing). |
npm run qa:live:visual |
Screenshots every public surface at 390/768/1366/1440/1920 px against the live deployment. Non-destructive. |
npm run qa:live:browser-wallet |
Full create → approve → pay → refresh → receipt cycle on the live deployment. Spends testnet USDC. |
npm run qa:live:walletconnect-payment |
WalletConnect QR pairing and signed Arc payment. Spends testnet USDC. |
npm run qa:live:bridge-payment-ui |
Base Sepolia → Arc CCTP bridge end-to-end. Spends testnet USDC + Base ETH. |
npm run qa:live:profile-payment |
Permanent profile payment cycle. Spends testnet USDC. |
npm run qa:live:cancel |
Verified creator cancellation after Arc transaction. Spends Arc gas. |
Raw automation artifacts are intentionally not part of the public README. Public proof is summarized in launch readiness and curated screenshots.
- Testnet only: do not send mainnet funds.
- Server routes, not the browser, write final
paidandcancelledstates. - Gateway unified-balance checkout remains disabled until separately proven end to end.
- Solana and fiat/card rails are outside the current launch scope.
- Secrets must stay in environment variables or managed deployment settings.
| File | Why it matters |
|---|---|
docs/LAUNCH_READINESS.md |
Live deployment evidence, transaction hashes, screenshots, QA matrix. |
docs/ARCHITECTURE.md |
System design, settlement model, trust boundaries, and current product limits. |
docs/UI_UX_AUDIT.md |
Final visual audit, responsive checks, and remaining non-UI product limits. |
docs/PRD.md |
Product requirements and end-to-end behavior definition. |
docs/PRODUCT_INFO.md |
Every product fact in one place: features, flows, mechanics, scope, technology, verification, limits. |
docs/BEST_POSSIBLE_ONELINK.md |
Master vision — what the best possible OneLink looks like across Arc, Circle, product, UI, responsiveness, and roadmap. |
docs/AI_BUILD_PROCESS.md |
How Codex, MCP tools, local skills, and evidence-first QA were used. |
docs/pitch/PITCH_DECK_BRIEF.md |
Pitch deck narrative, copy, and design direction. |
docs/SECURITY_REVIEW.md |
Dependency alert disposition and enabled GitHub security controls. |
SECURITY.md |
Private vulnerability-reporting policy. |
SUPPORT.md |
Support boundaries, public issue guidance, and security-report routing. |
supabase/schema.sql |
Database schema, RLS policies, and immutability trigger. |
contracts/src/OneLinkCollect.sol |
Arc Testnet settlement contract. |
Built on the work of the Arc and Circle teams whose primitives — USDC-native gas, CCTP, App Kit, and the deployed Gateway contracts — make this product possible. Wallet UX powered by wagmi, viem, RainbowKit, and WalletConnect/Reown. Component system inspired by shadcn/ui and the Radix UI primitives.
MIT. See LICENSE.

