Started the prototype as a PWA, then ported the runtime to native Android. Wrote the USSD action runner and the accessibility plumbing.
UPI changed everything in India. But it still needs the internet. For 300 million people on the wrong side of a signal bar, that's a problem.
UPI is everywhere — except when it isn't. Travel a few kilometres outside a metro and the data disappears. The bank's app loads forever. The QR code scans, then nothing.
Meanwhile, on the same SIM, on the same network, on the same phone — you can
always make a call. That cellular voice signal is reliable enough to carry
a payment. NPCI built *99# on top of it years ago. It works on
every Airtel / Vi / BSNL handset in the country. Nobody uses it.
Because dialling raw USSD codes and typing UPI IDs on a number pad is brutal.
OffPay puts a clean, modern Android app on top of *99#. Same
feel as GPay or PhonePe — type, scan, tap. Auto mode drives the carrier's
dialog start to finish; manual mode opens the dialer with the USSD code
prefilled. Either way, the bytes-of-data counter never moves.
We don't run servers. We don't have an account. Your PIN never leaves volatile memory; it's wiped within 500 milliseconds of the session ending. Open source, MIT, on GitHub.
It's a side project. It is not a registered payment service. It is a small, sharp tool that does one thing — UPI without the internet — and stays out of your way.
We made it because the gap was annoying us. We're keeping it open source because the people who need it most don't need a startup behind it.
Started the prototype as a PWA, then ported the runtime to native Android. Wrote the USSD action runner and the accessibility plumbing.
Designed the screens, the NeoPOP polish, and the onboarding flow. Owns the FAQ + carrier-detection edge cases.