Inspiration

We run Givelink, a marketplace where donors buy specific items that verified nonprofits need. When the items arrive, the nonprofit sends a photo, and donors see it. More than 7,000 deliveries have been confirmed this way, each photo checked by a person.

That check is breaking. Anyone can now make a convincing delivery photo with a free AI image tool in seconds, and a person scrolling through photos can't tell. If delivery photos can't be trusted, donors, auditors and the platforms that report impact all lose the one piece of evidence they have. We wanted a check that is fast, honest about its limits, and open for any giving platform to use.

What it does

A delivery batches the gifts of several donors. When it arrives, the nonprofit takes one photo in the app.

  1. Does anything flag the photo? The app reads AI content labels in C2PA / IPTC metadata, compares a fingerprint against earlier delivery photos, and checks the delivery date. A labelled fake can stop before a model call. Labels can be stripped, and an unlabelled fake can pass the visual check. This is item matching and risk flagging, not proof that a photo is genuine.
  2. Does it show every item? A vision model checks each product from every donor, counts it, says where it sits in the photo, and reads any packing slip to match the order code.
  3. Decide. A rule score sets the ceiling. NVIDIA Nemotron 3 Super reviews it and hands borderline cases to Nemotron 3 Ultra. The reviewer can only make a verdict stricter, never looser.
  4. The nonprofit sees the check first. Every product gets a green tick, or a notice if it isn't fully visible. Nonprofits are never stuck: a photo that fails can still be sent, but every donor sees it marked "Not verified", with what the check found. Only proven fakes are blocked.
  5. Close the loop. Nemotron 3 Nano drafts the thank-you note, the nonprofit edits and sends it, and each donor gets a receipt: their own items numbered next to the photo ("you gave 2 of these 4"), what was checked, and what a photo can't prove.

When a nonprofit adds a product to its wishlist, the app searches US CPSC, SaferProducts.gov and EU Safety Gate for matching recall notices. No recall found is a search result, not a safety certification.

Privacy is built in: faces can be blurred on the phone before upload when the nonprofit switches it on; location goes to the platform only, and receipts never name donors.

It is also infrastructure, not just a feature: an open receipt format (JSON schema), a public stats page with CSV export, and a server-to-server API any giving platform can call.

How we built it

  • Nebius Token Factory for every model call, through its OpenAI-compatible API: one key, one base URL, five models.
  • NVIDIA Nemotron 3 Super turns the donors' items into a checklist and makes the everyday decision.
  • NVIDIA Nemotron 3 Ultra takes only the borderline decisions, so the biggest model is spent where reasoning matters.
  • NVIDIA Nemotron 3 Nano drafts the thank-you note and repairs malformed JSON.
  • Gemma 3 27B (on Token Factory) does the vision step, because no Nemotron vision model was available on our account. MiniCPM-V takes over when Gemma is slow.
  • A Nebius Serverless AI Jobs script is included to evaluate the deployed app; it has not yet been run. The reported evaluation was run locally.
  • MediaPipe face detection in the browser blurs faces before the photo leaves the phone.
  • Next.js, sharp, exifr, react-easy-crop, Vercel with Blob storage.

Every check shows its own cost from Token Factory's token counts: about $0.001 for a typical photo. Hard daily and monthly caps keep the demo from ever burning through credits.

Challenges we ran into

  • Screenshots strip the AI label. With labels intact, 8 of 8 fakes were rejected; with labels stripped, only 1 to 2 of 8 were rejected across runs, and 1 of 8 was approved. These are local pilot results, not statistical validation. Every receipt states what a photo cannot prove.
  • Missing items are not fraud. Our first version rejected real photos that didn't show every item. We split "is it genuine?" from "is it complete?", so an honest partial photo becomes a notice to the nonprofit, not a rejection.
  • Blocking creates friction. Nonprofits are busy. Instead of refusing photos that fail, we let them send with a clear label, so the donor decides and nothing is hidden.
  • No model on Token Factory could locate objects. We asked for boxes around products and got boxes on the wall. We describe where items are in words instead.
  • Vision latency varied from 3 to 59 seconds on the same image. We added a timeout with a fallback model and moved the free checks first, so fakes never reach the slow step.

Accomplishments that we're proud of

  • A fake with an AI label is rejected in about 20 ms with zero model calls.
  • A random photo is rejected in about 10 seconds for $0.001, with the reason in plain words ("No coats are visible").
  • On two real delivery photos, on-device face blurring found all 6 faces.
  • Checked 4 real Givelink deliveries against their actual orders: 3 confirmed complete, 1 flagged as partial (only 4 of 10 hair dryers visible in the photo), 0 wrongly rejected. A small labelled pilot, not statistical validation.
  • An open receipt format any platform can issue.

What we learned

A check that admits what it can't prove is more useful than one that claims to catch everything. Separating "genuine" from "complete", and "blocked" from "labelled", mattered more than any prompt.

What's next

  • Run it on every Givelink delivery through the API.
  • Re-run recall searches over time, not only when a product is added.
  • Move vision to a Nemotron omni model once it is on Token Factory.

Built With

  • c2pa
  • exifr
  • gemma-3
  • mediapipe
  • nebius-serverless
  • nebius-token-factory
  • nemotron-3-nano
  • nemotron-3-super
  • nemotron-3-ultra
  • next.js
  • node.js
  • nvidia-nemotron
  • openai-sdk
  • react
  • sharp
  • typescript
  • vercel
  • vercel-blob
Share this project:

Updates

Submission history