Project description
Second Seat turns what a small-business owner agrees to in a meeting into a PayPal payment, with a second set of eyes before any money moves.
A café owner, Maya, agrees to pay her printer for the spring menus. The risky part is paying the wrong amount, the wrong vendor, or a currency nobody said. Second Seat drafts each payment from the meeting transcript with AI, then plain code checks every draft against the owner's own words. Nothing is sent to PayPal until the owner approves it with one tap. The receipt keeps the quote it came from.
The same pattern shows up in bank-change fraud. The FBI's Internet Crime Complaint Center counted $2,770,151,146 in business email compromise losses across 21,442 complaints in 2024 (IC3 2024 Internet Crime Report, pages 10 and 19: https://www.ic3.gov/AnnualReport/Reports/2024_IC3Report.pdf). In the live demo, when a vendor says their bank changed, the model can draft the payment to the new payee. The checker blocks it, and there is no Approve button.
The live demo is at https://second-seat-payments.onrender.com. The code is at https://github.com/Bridgett50/second-seat-payments.
How it uses PayPal
PayPal is how the money actually moves, in the official sandbox only. No real money is used.
After the owner approves a draft, Second Seat uses PayPal Orders v2:
- OAuth with client credentials
- Create a checkout order with intent CAPTURE
- Capture only after a fetch shows the order is APPROVED
- Fetch the order again, and show Captured only when PayPal's own status is COMPLETED
The client will not talk to any PayPal host other than sandbox.paypal.com. In the sandbox, the payment goes to the app's own test merchant account, not to the named vendor. A real version would pay the vendor directly.
How it uses AI
OpenAI gpt-4o-mini reads a meeting transcript and proposes payments: a payee, an amount, a currency, and exact quotes. That is the model's only job.
The model is not trusted to decide that a payment is real. Plain code checks every claim. A draft must cite a quote that appears word for word in the transcript. A guessed currency, a made-up amount, or a quote that is not in the meeting does not get a free pass.
The page uses one label for how the drafts were made: Live AI when they came from a live OpenAI call, Recorded AI output when they are the saved copy of that run, or Stand-in example when they were written by hand.
The human approval gate
Proven drafts can be approved with one tap. Needs a look stays off until the owner checks the box on that draft. Blocked drafts have no Approve button, and the server will not create a PayPal order for them even if a client tries.
Approve, reject, and capture are written to a tamper-evident, hash-chained decision ledger. Anyone can reopen Proof and click Verify chain to recompute those hashes.
What the demo shows
- Bank change mid-meeting: the vendor says their bank changed. The draft is Blocked, with no Approve button.
- Harbor Print, $480, marked Proven, with the owner's quote on the card. The owner approves it. A real PayPal sandbox checkout follows, then a receipt that says Captured and PayPal status COMPLETED. In the sandbox, money goes to the test merchant, not Harbor Print.
- On Proof, the 25-meeting fraud eval: AI alone lets 11 bad payments reach approval; with the checker, 1 does. The one miss is the $900 + $900 split, a known limit. Then click Verify chain on the tamper-evident decision ledger.
- The currency nobody said is still in the live app: the owner said she would pay 90 for logo edits, but never named a currency. The model guessed USD. The checker marked it Needs a look, and Approve stayed off.
- A hand-written stand-in that tries to pay $875 when the meeting said $200 is also still in the app. It is Blocked, with no Approve button.
Honest limits
- Sandbox only. No live PayPal money.
- In the sandbox, money goes to the app's own test merchant account. A real version would pay the vendor directly.
- Live receipts and new ledger rows are kept in memory. A restart clears them. A labeled sample set loads again so the proof page is not empty.
- A scheduled ping keeps the free demo awake. If a first load is still slow, wait about 20 seconds and reload.
- Live AI calls are capped by the hour. Past the cap, or if a live call fails, sample meetings fall back to the saved drafts and the page says so.
Prizes we fit
Prize names below are the official names from the PayPal AI Hackathon overview and Official Rules.
Best Use of Agentic Commerce. An AI assistant drafts a payment from what was agreed in a meeting, but it does not transact on its own. Plain code checks the draft, a person approves it, and only then does PayPal move the money. That is agentic commerce with a human gate.
Best Use of PayPal + AI. The project meaningfully uses both, which is the only fundamental requirement of the hackathon. gpt-4o-mini drafts the payment. PayPal Orders v2 sandbox creates, captures, and confirms the order. AI proposes; PayPal settles; a person sits in between.
Best Demo Delivery. The hosted demo is live. The video at https://youtu.be/1VJKjwJzRN0 is a live run from November 10, 2026, in the PayPal sandbox. It opens on the bank-change catch, blocked with no Approve button. Then a clean $480 payment is approved, paid in PayPal's sandbox, and captured as COMPLETED. It finishes on the 25-meeting fraud eval — 11 bad payments without the checker, 1 with it, with the $900 + $900 split miss stated plainly — and a verified decision ledger. The README has a short try-it path and a local three-command run.
Best Use of Render. The working prototype is hosted on Render at https://second-seat-payments.onrender.com. A scheduled ping keeps the free service awake so judges can try it during judging.
This project is also eligible for the overall prizes (1st, 2nd, and 3rd Place). It does not use AG Grid, APIMatic, Bryntum, or Channel3, so it is not aimed at those sponsor prizes.
Try it
- Live demo: https://second-seat-payments.onrender.com
- Proof page: https://second-seat-payments.onrender.com/proof
- Code: https://github.com/Bridgett50/second-seat-payments
- Video: https://youtu.be/1VJKjwJzRN0
- Fraud eval write-up: https://docs.google.com/document/d/1NWxvrQ9qMXwW5TIvs6GKCCxY84wsXc7jgL2ehrYCs54/edit
Testing notes for judges
Use your own PayPal sandbox personal (buyer) account. The project does not ship a shared test buyer login, and no buyer password is posted in the README or this text. No real money moves.
To try the bank-change catch: open the live demo, choose Bank change mid-meeting, and click Find payments. The redirected $480 card is Blocked, with no Approve button.
To try a clean payment: choose Spring menus for the cafe, click Find payments, read the Harbor Print card, and tap Approve. Complete checkout with your own sandbox buyer. In the sandbox, money goes to the test merchant, not Harbor Print.
To rerun the measured results: open Proof and run the fraud eval. You should see 11 bad payments reach approval without the checker, and 1 with it. The one miss is the $900 + $900 split. Then click Verify chain. A write-up of that eval is at https://docs.google.com/document/d/1NWxvrQ9qMXwW5TIvs6GKCCxY84wsXc7jgL2ehrYCs54/edit
If a first load is slow, wait about 20 seconds and reload. A scheduled ping keeps the demo awake.
Built With
- node.js
- openai
- paypal
- render
- typescript