Try it: open https://pledge-line.onrender.com, press Start a call, then Start call, and enter the demo PIN 2468 on the keypad. Type or say "I want to stop my monthly gift", then "Yes". It runs on PayPal sandbox, so no real money moves. The free host can take about a minute to wake up.

Code: https://github.com/Arnav66692/pledge-line (MIT)

What it does

Every sentence the line says about a gift sits next to the PayPal read that backs it. When the call ends, the donor can keep a signed receipt of the whole call.

A monthly subscriber calls an after-hours voice line from the browser. They enter a PIN, then ask about their subscription in their own words. Pledge Line can:

  • check the monthly gift's status, amount and next payment date
  • pause, restart or cancel the subscription
  • create a one-time invoice to the email on file

Nothing changes in PayPal until the subscriber says yes in the next turn. The line reads PayPal back after every change. If a change can't be confirmed, the line says so and doesn't claim success.

Every fact the line states, such as an amount, a status or a date, is checked against a PayPal read from the same turn. The donor page shows the read time and reference next to each sentence. A donor can keep a signed receipt of the whole call. Changing one letter of the receipt fails the check and names the sentence.

Who it's for

Small nonprofits with monthly donors, and any business with PayPal subscriptions, such as clubs, gyms, creators and small shops. The nonprofit donor line is the first example. The subscriber page (linked above) explains how any subscription business can run it.

How it uses PayPal

  • Subscriptions v1: read the subscription and its plan, suspend, activate and cancel it, and read each change back.
  • Invoicing v2: create a draft one-time invoice, send it, and delete it if the subscriber changes their mind.
  • Webhooks: verify incoming PayPal notifications and record each one once.

All of this runs on PayPal's sandbox. The demo gift is a test account, and no real money moves.

How it uses AI

The AI doesn't write any facts or make any changes. A model reads what the subscriber said and picks one request from a fixed list (check, pause, restart, cancel, one-time invoice, or a question). Code then checks the PIN, asks for the yes, calls PayPal, and reads the result back.

  • The live demo's router is Claude Sonnet 5.5, with TypeSafe's Jev model as a fast first check, through keys with a $10 and a $0.10 spending cap. If the AI is unavailable or its budget runs out, the line falls back to the offline rules router below. The PIN, the read before every change and the separate yes stay the same.
  • The offline router uses the same rules without any model.
  • A separate test compared a plain Gemini agent with Pledge Line on the same 25 calls against mock PayPal, 79 claims each. Pledge Line's side used the offline rules router, not the live model. Neither agent stated a fact PayPal didn't return. Pledge Line missed one of its own preregistered checks. On a misheard amount it repeated $75 instead of the $25 PayPal holds. We fixed that routing after the test and haven't rerun it. The difference we can show is structural. A PIN, a read before every change, and a separate yes.

What's real and what's simulated

  • Real: PayPal sandbox calls for subscriptions, invoices and webhooks. The signed receipt. The check page.
  • Simulated: the callers in the task comparison, and the supplier lab on the procurement page. The payments in that comparison are mock. Those demos are labeled on the page.
  • Not yet: no nonprofit or subscriber has used the line in production. We haven't measured donor outcomes.

Known limits

  • It doesn't handle disputes, plan changes or new monthly subscriptions. It reads a charge back to you and logs a refund request for staff.
  • A misheard amount could still produce a one-time invoice draft. The draft is never sent without a yes, and the line states the amount PayPal holds.
  • Every judge shares one sandbox gift. If it's paused when you call, ask the line to restart it, then say yes.

How to run it

  1. Clone the repository and run npm ci.
  2. Copy .env.example to .env. Add your PayPal sandbox app's client id and secret, and a PIN.
  3. Run npm run dev and open the local address shown in the terminal.
  4. The offline mode (PAYPAL_MODE=mock ROUTER_MODE=rules) runs without any keys.

Setup details are in SETUP.md.

Built With

Share this project:

Updates

Submission history