What it does
Freelancers and clients often argue over whether a milestone is "done". ProofPay gives a quick, honest first check. The freelancer submits proof text for a milestone. Gemini reports whether it is present, readable and consistent with the agreed scope. A plain code word count checks stated lengths, so a claim like "310 words" cannot pass when only 15 words were submitted. The AI only recommends. A human approves, which creates and sends a PayPal sandbox invoice. The client pays it separately in PayPal. ProofPay then reads the invoice back from PayPal's Invoicing API and marks the milestone paid only if PayPal reports PAID with a matching amount.
How I built it
A Flask backend in Python calls the Gemini API for the proof check and the PayPal Invoicing API (sandbox) for invoices and status. The frontend is a single plain HTML/JS page. The code is MIT licensed and the README has run instructions.
Honest limits
- The AI reads proof text only, not files, images or links.
- Status uses a manual "Refresh" button. I did not verify a PayPal webhook, so ProofPay does not claim one.
- PayPal blocked invoices between two India sandbox accounts, so I tested with an India sandbox seller and a US sandbox buyer.
- The 90% word-count cutoff is my own developer heuristic, not an agreed tolerance.
- All money is PayPal sandbox test money and all data is made up. Not validated for production use.
- The demo voiceover is AI-generated.
Code: https://github.com/Samarth11-byte/proofpay Demo: https://youtu.be/VbSFViwRDm4