Inspiration

Freelancers on fixed-price projects lose money one small request at a time. A client asks for "just one more thing", and the freelancer either does it for free to avoid an awkward conversation, or writes a careful email, waits, sends an invoice and chases it. Pricing extra work is easy. Explaining why it's extra without souring the relationship, and getting agreement and payment before starting, is the hard part.

What it does

ScopePay turns a messy change request into agreed, paid work:

  • AI compares the request with the original agreement. It splits the request into separate asks and marks each one included, additional or needs a decision, quoting both documents. The server checks that every quote exists word for word; unverified items can't be billed.
  • The freelancer stays in charge. They review the findings, set every price and edit the AI's tactful message to the client. The AI never sets a price.
  • The client negotiates with an AI assistant. "Keep it under $200, booking matters most" gets a concrete proposal built only from published items, and the server checks the total against the budget. Requests for discounts or scope disputes are passed to the freelancer, not conceded.
  • Agree and pay on one page. The client agrees to the exact items, price and terms, then pays with PayPal Checkout on the same page. There's no separate invoice step.
  • Payment is matched to the agreement. Work is marked paid only when PayPal's completed capture matches the stored terms.

How we built it

  • PayPal: JavaScript SDK buttons on the client page, and the Orders v2 REST API on the server. Orders are created from the stored, fingerprinted agreement, never from an amount sent by the browser. Captures are checked against the agreed amount and terms, and repeated capture callbacks return the original capture instead of charging twice.
  • AI: OpenAI's open-weight GPT-OSS 120B on Groq, called with a strict JSON schema so every answer is structured data the server can check before anyone sees it. The same code also supports Claude.
  • Guardrails in code, not prompts: the server validates evidence quotes, item IDs, integer-cent totals and client-stated budgets. Any dollar amount the model invents triggers an escalation.
  • Stack: Node.js with built-in HTTP, static HTML/CSS/JS with no build step, and PostgreSQL on Render's free tier. 65 automated tests cover the domain rules, model and PayPal request formats, payment races and recovery, and storage failures.

Challenges we ran into

Letting AI talk to a client on a freelancer's behalf is only acceptable if it can't give money away, so that rule lives in server code that inspects every reply. Payments had their own edge cases: terms changing mid-checkout, duplicate callbacks, and a capture succeeding while our server missed the response. Deploying a single-owner database on free hosting also meant handling the moment when old and new servers overlap.

Accomplishments that we're proud of

  • A real hosted PayPal sandbox payment of $180.00 USD, matched to the exact agreement it paid for.
  • Live AI that cites verified evidence, fits a client's budget, and politely refuses to invent a discount.
  • One page where the client goes from "what's this extra work?" to agreed and paid.

What we learned

The most useful AI work here isn't arithmetic. It's language: understanding what a client actually asked for, and saying "that part is extra" kindly. The arithmetic belongs in code, where it can be checked.

What's next

Importing change requests from email and Slack, delayed capture so clients pay on delivery, multi-currency offers, and reusable price lists for common extras.

Built With

Share this project:

Updates

Submission history