📘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.

MethodNet to freelancerSettlement timeEffective feeEscrow?Self-custody?
PayPal (International)~$2601–3 days~13% (4.4% + FX spread ~4–6% + $0.30)Disputes onlyNo · reversible
Wise (Business)~$284~1–2 days~5.4% (0.4–1% fee + mid-market ~1% + local bank fees)NoNo
Payoneer~$2722–5 days~9% (2% receive + 3.5% FX + withdrawal + inactivity)NoNo · custodial
SWIFT wire (bank-to-bank)~$2482–5 business days~17% ($15–50 sender + $15–30 intermediary + $10–30 recipient + FX ~2–4%)NoNo
Western Union~$258Minutes–hours~14% (fixed + FX spread up to 5–7%)NoNo
Upwork~$2205–14 days (hold + payout)~26% (10–20% platform + 2% withdrawal + FX)Yes · platform-heldNo · account can be frozen
Fiverr~$22514+ days (revenue clearance)~25% (20% service + $1–3 withdrawal + FX)Yes · platform-heldNo
Deel / Remote (EOR)~$2851–3 days~5% (SaaS-priced but adds $49–75/mo overhead for the client)Contract-basedNo · KYC-heavy
Stripe Connect~$2822–7 days~6% (2.9% + $0.30 + payout fee + FX)Optional · destination chargesNo · custodial
Local bank (SEPA/ACH domestic)~$2980–3 days~0.7% (domestic only — cross-border falls back to SWIFT)NoNo
FreelanceBot (USDC on Arc)$2970.8 seconds1% (platform, configurable)Yes · on-chain smart contractYes · 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:

  1. On-chain escrow — a verified Solidity contract on Arc Testnet holds USDC until both parties are done.
  2. AI verification — Groq Llama 3.3 70B inspects the deliverable URL, deadline, brief alignment, and emits a structured verdict.
  3. 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:

  1. 01

    Draft

    Client posts. If public, listed on /jobs. If private, sent directly.

  2. 02

    Funded

    Client funds USDC into the escrow contract (or sim'd in demo).

  3. 03

    Delivered

    Freelancer submits a deliverable URL. AI agent checks reachability + deadline + brief alignment.

  4. 04

    Released

    Client clicks approve. USDC settles to freelancer in sub-second finality, minus 1% fee.

  5. 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). The verified boolean 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 any matches + high claim to medium because 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

  1. Now

    v0.11.x

    Ratings, attachments, marketplace, applications, basic settings. Single hosted instance + GitHub repo.

  2. Next

    v0.12.0

    Dark mode toggle, real i18n (5 languages), notification emails (Resend or SES), better empty states.

  3. 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.

  4. 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?
For the live demo: no, the UI simulates fund/release if you don't connect a wallet. For real on-chain transactions: yes, you need MetaMask connected to Arc Testnet with testnet USDC.
Is the contract audited?
Not yet. v1.0.0 plans Code4rena / Sherlock review when the contract surface changes. The current contract is source-verified on arcscan so anyone can read it.
What stops a client from refusing to release?
The grace-period refund path. If the freelancer delivered and the client doesn't release within 7 days, the agent or a third party can't force release — but reputation hits and a dispute mechanism (planned MVP 2) handle the long tail.
Can I self-host?
Yes. Fork the repo, follow the README's "For contributors and self-hosters" section. You'll need Supabase + Groq + Arc Testnet, all free tier.
How does the 1% fee work?
Set as a basis-points constant in the contract at deploy time. Goes to agentFeeRecipient. In the public reference instance that's the deployer's wallet; in a self-hosted instance you set it.
Is there a token?
No. Explicit non-goal.