Model signing as an ordered workflow
Template fields were assigned to signing parties, and state tracked each step. The next participant was notified only after the previous signer completed their action.
A signature is one step. I built the workflows, billing, and verification around the whole contract.
Conceptual illustration of the product workflow, created for this case study.
Led backend and solution design across subscription infrastructure, contract automation, document organization, and blockchain verification, with Next.js frontend contributions. The work was approximately 70% backend and 30% frontend.
Contract execution involves more than placing signatures on a PDF. The product needed reusable templates, ordered participants, reliable workflow state, recurring billing, and a way to check whether a completed document had changed.
Built a contract workflow engine with party-specific fields, sequential signing, notifications, automated PDF generation, cloud upload, and email delivery. Integrated subscription providers and document-hash recording on Avalanche and Polygon testnets.
Template fields were assigned to signing parties, and state tracked each step. The next participant was notified only after the previous signer completed their action.
Stripe, Razorpay, and PayPal integrations handled webhooks, renewals, usage limits, upgrades, downgrades, and immediate or end-of-cycle cancellation. Schedulers allocated monthly credits to annual subscribers.
Document hashes were recorded through smart contract integrations on Avalanche and Polygon testnets. Comparing a final document hash with the on-chain value made alterations detectable; this verifies integrity, not a signer’s legal identity.
MongoDB aggregation pipelines supported parent and child folders, archives, and contract movement. NestJS services used OAuth/JWT authentication and Redis caching.
The next reliability questions center on repeated payment events, concurrent credit-allocation jobs, signing transitions, and delayed on-chain confirmation. I would make these failure scenarios explicit before extending the testnet verification workflow to a production network.