Qurbani registration & payments
Qurbani App
An entire Qurbani season, run end to end in three days
A registration and payments platform for Usmani Holdings’ annual Qurbani share programme.

- Status
- Live
- Role
- Product · Full-Stack · DevOps
- Engagement
- Client work
Stack
- Next.js
- MongoDB
- Vercel
- Cloudinary
- QStash
- Razorpay
The problem
An animal is shared by seven people, so every Qurbani season the organisers had to collect applications, verify payment screenshots, group seven buyers into one animal, issue tokens, assign volunteers and confirm completion — all by hand, across thousands of registrations in a few days.
What I built
End-to-end automation of registration, share grouping, volunteer allocation and completion — with payments built in.
- Online registration + payment
- Each registration takes its share count and pays via Razorpay.
- Automatic grouping
- Filled groups of seven become one receipt, shown to admins.
- Volunteer allocation
- Admins assign receipts and everyone is notified automatically.
- Completion tracking
- Unique receipt numbers let admins mark Qurbani complete — one or many at once.
- PDF receipts
- Issued at registration and again at completion.
How it is built
The whole season runs in a few days, so the system is built for a short, high-volume burst: thousands of users at once, payments that fail safely, and background jobs for every message and PDF.
- When a payment fails
- A failed payment never leaves a half-finished registration. The failure is recorded, the buyer is told what to do next, and admins can see exactly where it stopped.
- Razorpay payments
- Payments reconcile straight onto the admin dashboard.
- QStash background jobs
- Messages and PDFs run off the request path so bursts stay smooth.
- Receipts as the unit of work
- A unique receipt number ties each group of seven to a volunteer and a completion state.
The hard part
Three days, thousands of users, failures in the middle
The whole season is one short burst, so the system has to stay correct when a payment fails halfway through.
Result
- registrations in a single season
- 3,000+registrations in a single season
- of users on the platform at once
- Thousandsof users on the platform at once
- of rupees in payments, in three days
- Millionsof rupees in payments, in three days
Gallery
Have a problem like this?
Tell me about your business and I will tell you how I would approach it.
