Rupora — Merchant Payments App
UPI QR and payment links for shops, a passbook confirmed by UTR, a credit book, a daily report and a mobile app, on your own server

Everything included
- UPI QR for the exact amount at the counter
- Payment links with expiry and a public pay page
- Static shop QR with a print view
- Passbook confirmed by UTR, duplicates refused
- Khata credit book with WhatsApp and email reminders
- Bill and recharge due-date reminders
- Daily settlement report and CSV export
- Owner, manager and cashier logins
- Platform admin with KYC review for many shops
- REST API and Expo mobile app source
From order to a live website
- 1
Choose a package
Code only, We set it up, or Customised. All prices are one-time.
- 2
Pay securely
Your download link is emailed once payment is confirmed and also appears in My Account.
- 3
We contact you
For setup packages we email within one business day for your cPanel / hosting login and domain.
- 4
Live on your domain
The app runs on your own Node.js hosting; shops collect UPI payments into their own bank accounts and confirm them in their passbook.
Who it is for
Rupora suits two kinds of buyer. A business that wants to give shops, cafés, salons and small service providers in its city or network a simple payment collection and bookkeeping app under its own brand, and a single shop or chain that wants its own tool on its own server instead of a monthly subscription. The demo brand name, colours, home page text and SEO are all changed in the admin, so the app carries your name. Merchants can sign themselves up, or you can turn sign-ups off and create shops yourself.
- Many merchants on one install, each with its own data
- Open or closed sign-ups and an optional KYC step
- Your brand, colours and SEO from the admin
Collecting a payment at the counter or by link
On the merchant panel home the cashier types the amount and an optional note and customer name. Show QR at the counter builds a UPI link from the shop's saved UPI ID, name, the amount, INR, the note and a reference, and draws a QR code of exactly that link; the tests decode the QR image back to the link to check this. The counter QR stays valid for 30 minutes by default. Make a payment link creates the same request with an expiry you choose, from 1 hour up to 30 days, and a share button for WhatsApp. The customer's pay page shows the shop name, amount, QR, an Open my UPI app button and a countdown. Once a link expires its page shows no QR or button. The static shop QR carries no amount, has a print view, and payments made to it are recorded by the shop with their UTR.
- Amount and payee always taken from the server
- Counter QR, payment link or static shop QR
- Minimum and maximum amount per request set by the admin
A passbook built on confirmation, not on claims
Every request sits in the passbook as waiting, received, expired or cancelled. It only turns received when the shop checks its bank or UPI app and enters the UTR. Each UTR can be used once per shop, also when typed with spaces or dashes and when two staff confirm at the same moment, because a unique database index backs the check. A UTR the customer types on the pay page is only shown to the shop as a hint. If money arrives after a link expired, the shop can still confirm it and the entry is flagged. The passbook has filters by status, type, date and search, and a CSV export.
- Received only after UTR or a signed gateway webhook
- Duplicate UTRs refused
- Late payments flagged, CSV export
Khata, bill reminders and the end of the day
The khata is the shop's credit book: add customers, record what you gave on credit and what you got back, and see the balance per customer and the totals to get and to give. A reminder opens a WhatsApp chat with a ready message for the shop to send, or goes by email, and can include a 7-day payment link for the balance; when the shop confirms that payment, the khata records it automatically. Bill and recharge reminders list the shop's own due dates for electricity, mobile recharge, DTH, rent, gas, insurance or EMIs, repeat monthly if you like, and email the shop a few days before. The daily settlement report shows what was received today by type and by who confirmed it, what is still waiting, what expired, and khata given and taken back, with a CSV for the day.
- Balances, totals, WhatsApp and email reminders
- Due-date reminders only, nothing is paid
- One report to close the day
Staff, the platform admin and the mobile app
The shop owner adds managers and cashiers. A cashier collects, confirms with a UTR and sees the passbook; a manager can also cancel, use the khata, reminders, reports and export; only the owner changes the UPI ID, KYC, settings and staff. Every route checks the permission and every query is scoped to the signed-in shop, and the tests confirm another shop gets a 404. In the platform admin you see merchants with their KYC status, open a merchant to view the uploaded document, approve or reject it with a note that is emailed, or suspend the shop. Settings hold collection rules, sign-ups, live chat, the WhatsApp button, analytics, banners and SMTP; unsent emails wait in the email log. The Expo mobile app gives shop staff sign-in, collect, the request screen with Mark received, the passbook, the khata and the shop QR, with tabs that follow the login's role.
- Owner, manager and cashier permissions
- KYC review with a private document viewer
- REST API /api/v1 documented in API.md
What is in the zip and how it was tested
You get the full source: server.js, the Express routes for the public site and pay page, merchant panel, admin and API, the libraries for payments, UPI links, khata, reminders, merchants and roles, EJS templates, the Prisma schema and a sample-data script, the mobile/ Expo app, README.md, API.md, ADDONS.md and the PDF guide. npm run setup creates the .env file, the tables and three sample shops; --no-seed gives empty tables and the setup wizard. npm test runs unit tests, a REST API flow test covering expiry, duplicate UTRs, roles, merchant isolation, khata and a mocked gateway webhook, and web-form tests with real cookies and CSRF, all on SQLite. The sample UPI IDs are not real, so the sample QR codes cannot be paid.
- Full source, docs and an illustrated guide
- One setup command, sample or empty data
- Unit, API and web tests on SQLite
What it is not
Rupora is not a wallet: it never holds, stores or moves money and there is no balance anyone can top up or spend; a stored-value wallet in India is a prepaid payment instrument and needs an RBI PPI licence, which this app does not need because it holds nothing. It is not a money transfer service, not a recharge or bill payment service, and not a bank or payment aggregator: UPI payments go from the customer's bank straight to the shop's bank, and the daily settlement report is a record, not a payout. No payment gateway is bundled. The add-on system can add a Pay online button and confirm payments by webhook, but it was tested only with a mocked gateway and a test signing secret; if one gateway account collects for many merchants, the platform becomes a payment aggregator, which needs RBI authorisation. Not tested by us: native Android and iOS builds of the mobile app (its type-check and web export were), paying a real UPI QR with a real UPI app, real gateways, MySQL and PostgreSQL, and sending through a real SMTP server.
- No wallet, transfers, recharges or card processing
- Gateway add-ons not included, mocked tests only
- Native app builds not run by us
More ready-made websites
Built by the same team, with the same setup service and support.
Browse every ready-made website, or compare our custom website packages if you need a site designed from scratch. Want more guests to find you on Google Maps? See our local SEO service, or talk to our web design team.




