Inspiration
Supply chain fraud is a quiet but expensive problem — vendors who aren't who they claim to be, buyers paying upfront for goods that never show up, and no reliable way to verify a supplier before money changes hands. We built Sentinel for the Squad Hackathon because we noticed that most payment infrastructure solves how money moves, but not whether it should be moving in the first place. We wanted verification to happen before the payment, not after a business has already been burned.
What it does
Sentinel helps businesses verify vendors and move money safely by combining three things:
- Vendor image verification — compares photos of a vendor's storefront/goods against a reference image using SSIM (Structural Similarity Index) to flag mismatches before a payment goes out.
- Escrow-based payments — funds are held and released against shipment milestones rather than paid upfront, cutting the window for a bad actor to disappear with the money.
- Shipment tracking — a live record of goods in transit tied to each vendor and payment, so buyers aren't flying blind between "paid" and "delivered."
How we built it
- Backend: Node.js + Express, with MongoDB/Mongoose for data — handles auth, vendors, shipments, payments, and webhooks.
- Vision service: a separate Python/FastAPI microservice using OpenCV and scikit-image to run the SSIM comparison, called internally by the Node API so the fraud-detection logic stays isolated from the main app.
- Frontend: React + TypeScript on Vite, with Tesseract.js for OCR on uploaded documents.
- Payments: integrated with Squad's API for virtual accounts and payment rails.
Challenges we ran into
Integrating with the Squad API was harder than expected — getting authentication, virtual account creation, and webhook handling working correctly under hackathon time pressure meant a lot of trial and error against the sandbox environment before payments and escrow releases behaved the way we needed.
Getting OCR to a usable accuracy was the other major hurdle. Real-world uploaded documents vary a lot — lighting, angle, image quality — and Tesseract.js would misread or drop text on anything less than a clean, well-lit scan. We had to spend real time on this to get extraction reliable enough to trust.
Accomplishments that we're proud of
Shipping a working 3-service architecture (Node backend, Python vision microservice, React frontend) in the hackathon window, getting the SSIM verification pipeline working end-to-end, and integrating real payment rails rather than mocking them.
Log in or sign up for Devpost to join the conversation.