📘Overview
FreelanceBot is an open-source escrow + agentic-payment platform for global freelance work. Clients post a job (publicly on the marketplace or privately to a known freelancer), the freelancer accepts, an on-chain USDC escrow on Arc holds the funds, and an AI agent verifies the deliverable before the client releases payment in sub-second finality.
It is not a startup, not a token, not a take-rate platform you can't leave. The hosted demo lives at freelancebot-alpha.vercel.app. Anyone can fork the repo and deploy their own instance.
🧩The problem
The global freelance workforce is huge — 75M+ in Asia-Pacific alone. But the payment rails are wildly broken:
- Cross-border fees — PayPal + Wise + bank wires eat 5–18% of every gig.
- Delays — invoice → review → payout often takes 7–21 days.
- Trust gap — freelancers fear non-payment; clients fear under-delivery.
- Discovery silos — marketplaces (Upwork/Fiverr) lock both sides into their walled garden.
FreelanceBot doesn't replace marketplaces — it offers a portable, open-source alternative anyone can run, with stablecoin settlement and an AI agent that automates verification.
⚖️Why not just use existing payment systems?
Every existing rail — fintech app, remittance service, freelance marketplace, or bank wire — was built for a world that doesn't match today's cross-border freelance economy. Below is a head-to-head on a $300 job sent from a US client to a Jakarta freelancer, the median gig for our target user.
| Method | Net to freelancer | Settlement time | Effective fee | Escrow? | Self-custody? |
|---|---|---|---|---|---|
| PayPal (International) | ~$260 | 1–3 days | ~13% (4.4% + FX spread ~4–6% + $0.30) | Disputes only | No · reversible |
| Wise (Business) | ~$284 | ~1–2 days | ~5.4% (0.4–1% fee + mid-market ~1% + local bank fees) | No | No |
| Payoneer | ~$272 | 2–5 days | ~9% (2% receive + 3.5% FX + withdrawal + inactivity) | No | No · custodial |
| SWIFT wire (bank-to-bank) | ~$248 | 2–5 business days | ~17% ($15–50 sender + $15–30 intermediary + $10–30 recipient + FX ~2–4%) | No | No |
| Western Union | ~$258 | Minutes–hours | ~14% (fixed + FX spread up to 5–7%) | No | No |
| Upwork | ~$220 | 5–14 days (hold + payout) | ~26% (10–20% platform + 2% withdrawal + FX) | Yes · platform-held | No · account can be frozen |
| Fiverr | ~$225 | 14+ days (revenue clearance) | ~25% (20% service + $1–3 withdrawal + FX) | Yes · platform-held | No |
| Deel / Remote (EOR) | ~$285 | 1–3 days | ~5% (SaaS-priced but adds $49–75/mo overhead for the client) | Contract-based | No · KYC-heavy |
| Stripe Connect | ~$282 | 2–7 days | ~6% (2.9% + $0.30 + payout fee + FX) | Optional · destination charges | No · custodial |
| Local bank (SEPA/ACH domestic) | ~$298 | 0–3 days | ~0.7% (domestic only — cross-border falls back to SWIFT) | No | No |
| FreelanceBot (USDC on Arc) | $297 | 0.8 seconds | 1% (platform, configurable) | Yes · on-chain smart contract | Yes · freelancer holds keys |
Sources: published fee schedules on paypal.com/us/fees, wise.com/pricing, payoneer.com/pricing, stripe.com/pricing, upwork.com/hire/pricing, fiverr.com/support (retrieved 2026). SWIFT and Western Union fees are averaged across the top ten Asia-Pacific corridors from World Bank Remittance Prices Worldwide (Q1 2026). Cross-border FX spreads are conservative estimates against mid-market rate on the day.
Every entry above shares the same weakness: the freelancer never has custody of their earnings. Funds are held by a company (PayPal, Upwork, Fiverr, Payoneer) or routed through a chain of correspondent banks (SWIFT). Accounts get frozen, holds get extended, disputes get lost, and the freelancer waits.
FreelanceBot is different in two ways that matter:
- Self-custody by default. The escrow is a Solidity contract on Arc Testnet. When the client approves release, USDC moves directly from the contract to the freelancer's wallet — no intermediary, no chargeback window, no account to freeze.
- Deterministic fee. 1% platform fee, encoded in the contract, transparent on-chain. Zero FX spread (USDC is a dollar). Zero withdrawal fee (the funds are already yours). Zero holdback.
What about existing crypto solutions?
Raw USDC transfers on Ethereum L1 (~$3–15 gas, 15–30 sec finality), Polygon, or Base solve fees but not trust. Neither party wants to send first. Bitwage and Request Network wrap USDC in payroll UX but keep custody with the employer. Escrow-as-a-service tools (LawGeex, Escrow.com) charge 3–5%. None combine on-chain escrow + AI verification + open marketplace in a single self-custody flow the way FreelanceBot does — that's the wedge.
No token. Ever.
FreelanceBot is infrastructure, not a speculative asset. There is no FBOT token, no governance token, no airdrop, no vesting schedule, no VC unlock, no points program, no season pass, no NFT tier — none of it, ever. Payments settle in USDC, a fully-reserved US-dollar stablecoin regulated under NYDFS BitLicense. The platform fee (1%) is collected in USDC and routed to a recipient address the operator controls transparently on-chain.
This is a deliberate design choice, not an oversight. Adding a token would:
- Break the value proposition. The whole point is that a freelancer in Jakarta gets a dollar-denominated payout without volatility. A native token would re-introduce the FX risk we spent the entire product design removing.
- Invite regulatory attack. Selling a token to fund development turns the protocol into an unregistered securities offering in most jurisdictions. Circle's USDC (already regulated) plus Arc (settlement layer) is legally clean end-to-end.
- Distract from execution. Every hour spent on token economics is an hour not spent making cross-border settlement faster, cheaper, and more auditable. We'd rather ship features to the 75M APAC freelancers than manage a Discord about staking rewards.
- Contradict the open-source thesis. The contract is MIT-licensed. Anyone can fork it, deploy their own instance, and set their own fee (or zero). Trying to capture that value with a token would be self-defeating.
If the protocol needs governance in the future, it will be handled by a lightweight multisig of elected operators — funded transparently via the 1% platform fee, not by minting a new asset. If it needs sustainability funding, it will come from grants (Ethereum Foundation, Circle Ventures, Arc Foundation), audit sponsorships, or optional premium hosting for large clients — never from a token sale that dilutes the workers this protocol exists to serve.
✨The solution
FreelanceBot fuses three pieces into one flow:
- On-chain escrow — a verified Solidity contract on Arc Testnet holds USDC until both parties are done.
- AI verification — Groq Llama 3.3 70B inspects the deliverable URL, deadline, brief alignment, and emits a structured verdict.
- Public marketplace + private mode — clients can post publicly (anyone applies) or directly to a known freelancer (skip the marketplace).
The result: a freelancer in Jakarta and a client in NYC complete a $300 job, the USDC settles in <1 second with a 1% platform fee, and both walk away with a 1–5 star rating that travels across orders.
🔄Order lifecycle
Every order flows through five states:
- 01
Draft
Client posts. If public, listed on /jobs. If private, sent directly.
- 02
Funded
Client funds USDC into the escrow contract (or sim'd in demo).
- 03
Delivered
Freelancer submits a deliverable URL. AI agent checks reachability + deadline + brief alignment.
- 04
Released
Client clicks approve. USDC settles to freelancer in sub-second finality, minus 1% fee.
- 05
Rated
Both sides rate each other (1–5 stars + comment). Aggregated to user profile.
If the deadline passes without delivery, anyone can call refund(orderId) after the grace period and the client gets their USDC back.
🏷️Marketplace
The marketplace at /jobs is fully public — no sign-in required to browse. Each job card shows budget, deadline, field, and an attachment indicator. Freelancers click into the job and submit a one-page application (email + pitch + optional counter-bid).
The client sees all applicants in their order detail and picks one. On accept, the order becomes private (only the parties can see it) and the escrow flow begins.
Fields supported: Design 🎨 · Dev ⚙️ · Writing ✍️ · Video 🎬 · Marketing 📣 · Research 🔬 · Other 📦.
⭐Trust & ratings
After every released order, both parties can rate each other 1–5 stars with an optional public comment. Ratings are stored per email and aggregated to a UserBadge that appears next to client/freelancer everywhere their name shows.
New users with zero ratings show a small new badge. Ratings are immutable once submitted — no editing, no deleting.
Clients can also enrich their listing with X / GitHub / website / LinkedIn links so freelancers can verify identity before applying. Set defaults in Settings.
🤖AI agent
The agent (Groq Llama 3.3 70B by default; swap for OpenAI / Anthropic / Ollama in MVP 2) does two jobs:
- chat — answers questions from either party with full order context (brief, amount, deadline, status). Replies in the user's language automatically.
- verifyDeliverable — given a deliverable URL: (1) HEAD-checks reachability, (2) refuses private / link-local hosts (SSRF guard), (3) compares against the original brief via LLM, (4) emits a JSON verdict
{verified, confidence, reasoning, checks}.
The verdict is advisory — the client still clicks the release button. The agent never moves funds autonomously.
Security model (OWASP LLM Top 10)
The agent is hardened against the most common LLM attack patterns:
- LLM01 — Prompt injection: system prompt explicitly tells the agent to treat all user content (brief, URL, chat) as untrusted data, not commands. Common jailbreak phrases ("ignore previous instructions", "you are now in admin mode") are neutralized server-side before being sent to the model.
- LLM02 — Insecure output handling: the verdict shape is strictly typed. Any value outside the allowed enum collapses to safe defaults (
partial/low). Theverifiedboolean is server-derived from the LLM's structured fields, not asserted by the LLM directly. - LLM06 — Sensitive info disclosure: the agent is instructed to never repeat seed phrases, private keys, or API tokens — even if the user claims to be the platform admin.
- LLM08 — Excessive agency: the agent has zero authority to move funds. It cannot call
approveAndRelease,refund, or any contract function. Release is always a human click in the UI. - LLM09 — Overreliance: every verdict carries a confidence level. UI surfaces "Hold for review" on anything below
matches + high, and the server downgrades anymatches + highclaim tomediumbecause the LLM only sees the URL string, not the actual contents. - SSRF: the URL reachability check refuses
localhost,127.x,10.x,172.16-31.x,192.168.x, link-local IPv6, and non-HTTP(S) schemes. A malicious freelancer cannot use the verifier to probe internal infra.
🪙Smart contract
The escrow contract FreelanceEscrow.sol is deployed and source-verified at0xA8CA…3ae4 on Arc Testnet ↗.
Key functions:
createAndFund(freelancer, amount, brief, deadline)— client deposits USDC + opens an order.submitDelivery(orderId, deliverable)— freelancer marks deliverable.approveAndRelease(orderId)— client or agent releases funds (1% fee deducted).refund(orderId)— anyone can trigger after deadline + 7-day grace.
Eighteen unit tests cover happy path, refund path, agent-release, admin, and a Jakarta→NYC end-to-end scenario.
🔒Privacy & security
FreelanceBot makes a few explicit choices about what stays public and what stays private:
- Order metadata — visible to anyone with the order ID if the order is public; visible only to the two parties otherwise.
- Chat thread — always private to the client + freelancer. The agent reads it server-side.
- Attachments — visibility follows the order's public/private flag.
- Ratings — public. They are trust signals.
- API keys / private keys / seed phrases — NEVER asked for on FreelanceBot. We don't store them, we don't want them. Anything asking you to paste them isn't us.
Mutating API routes require the caller to identify as a party of the order. Spoof risk is acknowledged for MVP 1 — real auth (Supabase Auth magic-link, Circle Wallets) lands in MVP 2.
🗺️Roadmap
- Now
v0.11.x
Ratings, attachments, marketplace, applications, basic settings. Single hosted instance + GitHub repo.
- Next
v0.12.0
Dark mode toggle, real i18n (5 languages), notification emails (Resend or SES), better empty states.
- MVP 2
v1.0.0
Multi-chain (Base + Polygon), Circle Wallets embedded auth, back office for operators, Foundry test suite added, docker-compose self-host kit.
- Future
post-1.0
Reputation primitive (soulbound NFT), CCTP cross-chain, USYC yield on idle escrow.
See PRD.md for the full plan.
❓FAQ
Do I need crypto experience to use this?
Is the contract audited?
What stops a client from refusing to release?
Can I self-host?
How does the 1% fee work?
agentFeeRecipient. In the public reference instance that's the deployer's wallet; in a self-hosted instance you set it.