Dokopi
Marketplace connecting users to nearby xerox stores — document upload, print customization, and PhonePe payments, with a real-time merchant dashboard where orders land the moment they're paid.

The problem
Getting documents printed in India usually means carrying a pen drive to a xerox shop, waiting in line, and hoping they have the right paper. Meanwhile the shops themselves sit idle between walk-ins. Dokopi connects the two: customers upload and pay online, shops receive orders in real time and print.
What it does
Customer side: find a nearby xerox store, upload documents, configure the job — color or B&W, single or double-sided, copies, binding — see the price, and pay through PhonePe.
Merchant side: a real-time dashboard where paid orders appear the moment the payment confirms, with the files ready to download and print. No calls, no pen drives, no "I sent it on WhatsApp, did you get it?"
Build notes
Next.js frontend, Express backend, files on S3, payments via the PhonePe gateway. The two hard parts:
- The payment → order pipeline. Payment webhooks are the canonical source of truth, and everything downstream (order state, merchant notification) hangs off them. Handling duplicate webhooks, out-of-order events, and payment-succeeded-but-callback-failed cases taught me why payment integrations are 20% API calls and 80% edge-case handling.
- Real-time merchant updates — orders push to the dashboard the moment they're paid, so a shop can start printing while the customer is still walking over.
Documents are personal — resumes, IDs, legal papers — so files live in S3 with access-controlled URLs rather than anything publicly addressable.
What I learned
This was my first product where real money moved through code I wrote, and it permanently changed how I think about reliability. A UI bug annoys someone; a payment bug costs someone money and your reputation. Idempotency, reconciliation, and audit trails stopped being abstract words.