Inspiration

A startup founder signs an NDA with a Fortune 500 partner. Three months later, the partner's legal team claims the document they received had different terms. There's no audit trail. No proof of when the watermark was applied. No cryptographic record of who generated what, and when.

The founder loses the deal. Possibly the company.

This isn't a horror story — it's the default state of legal document workflows in 2026. Every year, $1.5 trillion in commercial contracts are disputed, delayed, or voided — not because of bad intent, but because of broken process. Agreements are drafted in Word, emailed as attachments, and signed with no tamper-evidence whatsoever. A PDF can be edited and re-saved invisibly. "I sent it Tuesday" is not a legal defense.

We built Foxit Sentinel Pro to make that story impossible.

What it does

Foxit Sentinel Pro is an auditable agreement orchestrator — it takes a legal template, injects the right data via AI autofill, generates a cryptographically-secured PDF through Foxit's API, and logs every single action in an immutable ledger. In under 30 seconds.

Foxit Sentinel Pro

Before Sentinel Pro After Sentinel Pro
3.4 days average turnaround < 30 seconds end-to-end
No tamper evidence SHA-256 hash logged at every step
Manual copy-paste errors AI autofill from deal context
"I think I sent v3" Immutable ledger with timestamps
PDF emailed as attachment Linearized for instant web streaming

Here's what the audit ledger looks like in practice:

Template Selected → SHA-256: a3f9c2d1... → 09:14:22 UTC

Data Injected → SHA-256: b71e4d88... → 09:14:23 UTC

PDF Generated → SHA-256: c88f0134... → 09:14:51 UTC

Watermark Applied → SHA-256: d02a7c55... → 09:14:54 UTC

Linearized → SHA-256: e19b3f90... → 09:14:57 UTC

Every hash is a cryptographic fingerprint of the document at that exact moment. If anything changes, the chain breaks.

How we built it

The core pipeline calls the Foxit PDF Services API at three stages:

  1. HTML → PDF — A populated legal template (NDA, MSA, Offer Letter) is rendered server-side into a pixel-perfect PDF via /pdf-services/api/documents/create/pdf-from-html.
  2. Watermarking — The PDF is immediately stamped with CONFIDENTIAL — ID: [unique hash] via /pdf-services/api/pdf-watermark, applied server-side so it cannot be stripped.
  3. Linearization — The secured PDF is optimized for fast web streaming via /pdf-services/api/documents/optimize/pdf-linearize.

The frontend is built with React 19 + Framer Motion for fluid animations and a premium feel. The backend runs as Vercel Serverless Functions — all API logic lives in api/_lib/ as plain ES Modules, ensuring Foxit client code is bundled correctly within the serverless boundary.

The audit ledger uses SHA-256 hashing at each pipeline stage, creating a tamper-evident chain of custody for every document.

Challenges we ran into

  • The serverless bundling problem: Vercel's serverless functions can't resolve modules from parent directories. Fix: move backend logic into api/_lib/ as plain JS modules, no TypeScript compilation.
  • Foxit API polling required a polling loop with a 60-attempt timeout and graceful fallback.
  • Crypto polyfill: crypto.randomUUID() requires explicit import in Node.js serverless environments.

Accomplishments we're proud of

  • Fully live, production deployment on Vercel
  • Complete Foxit API pipeline working end-to-end
  • Immutable audit ledger for verifiable document integrity
  • Director Mode — self-driving demo recorded as .webm
  • Solved hard serverless bundling challenges

What we learned

  • "It works locally" ≠ "It works in production." Simplification often beats extra config.
  • Security features can be invisible to the user — watermark, hash chain, linearization.

What's next for Foxit Sentinel Pro

  • Public Blockchain Anchoring — Audit hashes to Polygon or Solana
  • Foxit eSign Integration — Direct pipeline from linearized PDF into eSign workflows
  • Multi-party Real-time Signing — Co-signing with status tracking
  • Mobile Verification App — QR-code scanner for on-site hash verification

Built With

Share this project:

Updates