Inspiration

The price of a purchase is on the button. The commitment is in a paragraph nobody reads: the restocking fee, the "final sale" exception, the refund timing the seller never states. Checkout flows are built to get you past that paragraph. We built one that makes reading it the step before paying.

What it does

  • New: Spending rules in plain speech ("never over fifty dollars without asking me", "no subscriptions"), checked against every cart before payment. When a cart needs a yes, approve it on your phone from a QR code with the cart shown item by item. A history shows what was asked and which rule decided.
  • Paste a seller's terms, or import them from an HTTPS page or a text-selectable PDF.
  • ConsentCart lays them out as a "Terms Facts" label: price, returns, return postage, fees, exceptions, renewal, dispatch, delivery, refund timing. Every line is the seller's own wording and links back to its place in the original text.
  • A local AI model highlights the passages that matter for the decision. It may only select sentences from the original; it does not paraphrase and does not give advice. Things the seller never states are shown as missing, not filled in.
  • To pay, you tick two acknowledgments: "I have read the full purchase terms" and "I agree to pay" the exact amount.
  • Only then does ConsentCart create a real PayPal Sandbox order bound to that reviewed amount, send you to PayPal's approval page, and capture when you press Pay. Returning from PayPal never pays automatically.
  • The review can be saved, so the terms you agreed to stay with the receipt.

How we built it

Node.js with only built-in modules, and plain HTML/CSS/JavaScript; no npm runtime dependencies. The AI step calls an OpenAI-compatible chat endpoint (we ran qwen2.5:7b locally through Ollama) with a schema-constrained request to select clause indices; the server rebuilds the highlighted text from the original source, so model wording never reaches the page. PayPal is Sandbox OAuth plus Orders v2 create, approve and capture. The reviewed amount is stored server-side and the order is created from that stored value, not from the browser.

Challenges we ran into

Models paraphrase, and a paraphrase of a legal term is a new term. We stopped letting the model write anything: it selects, the server quotes. Exact quotation still does not prove the model picked the right sentences, so the full original text is always one click away and the label works without AI at all. On the payment side, the hard cases were mismatched amounts, an unapproved order being reported as paid, and capture interrupted mid-request; each has its own visible state and none can be shown as success.

Accomplishments that we're proud of

  • A complete real run: terms to label, local-model highlights, two human acknowledgments, PayPal Sandbox order, buyer approval, explicit capture, confirmed payment.
  • A consent step that is specific: this text, this amount.
  • It is useful with no model configured.

What we learned

For anything a person is agreeing to, AI is most trustworthy as a pointer, not an author. And "human in the loop" only means something if the human's confirmation is tied to the exact amount and the exact text.

What's next

A browser extension that opens the label on any checkout page, merchant-signed terms so the source can be verified, comparison of two offers side by side, and a hosted version with live PayPal checkout.

Built With

Share this project:

Updates

Submission history