Live · Works Offline — Zero Internet Required

Payments Without
Internet

EdgePay brings full UPI banking to every Indian, regardless of internet access. Built on USSD technology, it works on any phone, any network — even where 2G is a luxury.

Download Now Free · No Sign-up · 23 MB
23MBApp Size
0mbData Needed
USSDPowered
100%Open Source
Offline Active
Payment Sent ✓
2:50
Welcome back, Nishant
N
CHECK BALANCE
OFFLINE
₹1,000.00
Linked Bank: SBI
Scan
Send
History
Account
History
B
bhupenderjangra8053...
🧑 Sent 1h ago
−₹1.00
R
Rahul Sharma
↓ Received 3h ago
+₹500
Home
Send
History
Account
850M+
Indians without reliable internet
The audience EdgePay was built for
USSD
National USSD protocol
Works on every carrier in India
20 sec
Average payment time
From tap to bank-confirmed transfer
100%
SMS-verified confirmation
Dual-channel reliability engine
🎵 How It Started

Bhooka reh gaye concert mein — isliye banaya EdgePay

It wasn't a boardroom idea. It started at a live concert in a packed stadium — where thousands of people stood in food queues only to find their UPI apps dead. No signal. No data. Vendors couldn't accept payment. People walked away hungry.

The team thought: "Bhai, GSM tower toh chal raha hai — calls aa rahi hain — toh payment kyun nahi ho sakti?" That question became EdgePay. Because if a GSM tower can carry a voice call through 50,000 people, it can carry a payment too.

🎵
Concert Crowd Problem
50,000+ people = towers overloaded. Data fails. Voice calls still work. USSD works. EdgePay works.
💡
The Aha Moment
GSM infrastructure is everywhere in India. Payments don't need internet — they need a signal. Any signal.
🏗️
Built in a Hackathon
Team "The Last Braincells" at HACKRUST, DCRUST Murthal turned that concert frustration into a working app.
📍 The Scene — Before EdgePay
📶
Internet: DEAD
50,000 people overloaded the tower
📱
UPI: Payment Failed
PhonePe, GPay, Paytm — all stuck
🍔
Food: Not Eaten
Vendor couldn't take cash either — no change
✅ With EdgePay
📡
GSM Signal: Active
Calls work → USSD works → Payments work
💸
Payment: Sent in 20s
Scan QR → USSD → Bank confirms → Done
🍔
Food: Eaten 😄
Concert enjoyed. Problem solved. App shipped.
Inspired by real GSM infrastructure
India has 600,000+ GSM towers. USSD (*99#) works on all of them — across Jio, Airtel, Vi, BSNL — in 83+ banks, 13 languages. EdgePay simply makes it beautiful to use.
Core Features

Built for Real India

Where internet is a privilege, not a given. EdgePay bridges the digital payments divide using infrastructure that already exists — every GSM tower, every SIM card.

Offline USSD Banking — The Primary Engine

EdgePay's core innovation is a fully abstracted USSD payment layer built on India's National Unified USSD Platform. Payments are processed through the phone's native GSM radio — working on every Indian carrier at just 2G speeds, deep in rural areas where data connectivity doesn't exist.

Primary Payments Engine

Edge Wallet

A fully UPI-integrated digital wallet with PIN verification and locally encrypted transaction state. Users can send, receive, and manage funds using only their UPI VPA — no bank app or internet required for most operations.

QR Code Scanner

Vision Camera integration with ML Kit-powered decoding. Merchant UPI ID and amount auto-populate into the payment form. Handles low-light conditions and both static and merchant-displayed QR codes at under 120ms on budget devices.

SMS Confirmation Engine

A dual-path SMS system guarantees payment reliability. Listens via BroadcastReceiver for real-time bank debit alerts, and also polls the inbox as fallback. A custom multi-pattern parser extracts transaction IDs, amounts, and timestamps — confirming payments within seconds.

Account Services

Full-service banking through secure USSD channels — check balances, change UPI PIN, and request money without opening a browser or bank app. Every action is handled by NPCI's verified banking infrastructure.

Transaction History

All USSD and wallet transactions are stored locally in encrypted, structured format. History includes merchant details, timestamps, transaction references, and status indicators — parsed from SMS confirmations. Private by default, no cloud sync needed.

Masked Dashboard

Balances are hidden by default (₹ ••••••) for user privacy. Every sensitive action — Check Balance, Send Money — is PIN-protected. PIN values are handled natively and zeroed in memory after use, aligned with OWASP MASVS-CRYPTO.

Triple Widget Ecosystem

Three native Android widgets give you real-time financial data at a glance: Home Status (4×1), Savings Goal tracker (2×2), and Expense Percentage display (2×2). All powered entirely from local store — no cloud required.

Salary Deduction Engine

Set a monthly salary or pocket money budget. Auto-deduction logic continuously scans confirmed transactions via SmsParser and updates your remaining balance in real-time via Zustand. Spending percentage calculated and surfaced on the widget instantly.

How It Works

A Payment in 3 Steps

No internet handshake. No server round-trips. EdgePay talks directly to India's national USSD banking infrastructure — the same system powering every major bank's offline UPI feature.

01

Scan BHIM UPI QR or Enter Mobile Number

Point your camera at any BHIM UPI QR code — the scanner auto-decodes the UPI ID and amount. Alternatively, type the recipient's mobile number directly. QR payments follow BHIM UPI ID structure; mobile-number payments work with most major banks via USSD. No internet needed at any point.

02

Authenticate with UPI PIN

Review the summary — recipient, amount, remark. Enter your UPI PIN. The app constructs the USSD command (*99*1*1*<mobile>*<amt>*<remark> or 1*<pin>#) and dials it via ACTION_CALL — completely offline over GSM.

03

Instant Bank Confirmation

Once the USSD session completes, the bank sends a standard SMS debit alert. EdgePay's SMS engine intercepts this, parses the transaction reference and amount, and surfaces a clear "Payment Successful" card within 2–3 seconds. Logged locally.

USSD BRIDGE — LIVE SESSION
edge $ initiate_payment
→ recipient: 9876543210 (mobile)
→ amount: ₹200.00
→ remark: dinner split
 
ussd $ build_string
→ cmd: *99*1*1*9876543210*200*dinner split
→ pin: or 1*[upi-pin]#
 
tel $ dial [ACTION_CALL]
→ GSM session opened via tower...
→ NPCI response: TXN_SUCCESS
 
sms $ listen_broadcast
→ debit alert: ₹200 deducted
→ ref: SBI240326001234
 
bal $ check_balance → *99*3#
→ or missed-call: 09223766666 (SBI)
 
✓ Payment confirmed in 2.7s — 0 bytes data used
Engineering Challenges

Problems We Solved

Building offline payments on Android wasn't calling an API. It meant reverse-engineering telephony primitives, fighting OS restrictions, and rethinking how mobile apps confirm financial transactions.

01
📡

Executing USSD Without Internet

Modern Android sandboxes restrict programmatic USSD dialing. Strings with * and # are intercepted at the dialer layer. CALL_PHONE permission management also differs wildly across Android 7–14 and OEM firmware variants.

Solution

Built a Kotlin-native TelephonyManager bridge exposed to React Native via a custom NativeModule. The USSD string is URL-encoded, wrapped in a tel: intent, and dispatched via startActivity(ACTION_CALL) — bypassing the RN bridge entirely for telephony.

02
💬

Parsing Unstructured Bank SMS

India has 50+ banks, each formatting its debit confirmation SMS differently — varying terminology, date formats, merchant name placements, and encoding quirks. A naive regex fails across all but one bank's format.

Solution

Built a multi-pattern SMS parser with a ranked priority queue of 12+ regex templates tuned to specific bank formats. Extracts a normalised struct — {amount, bank, txnRef, timestamp} — regardless of input variation, with BroadcastReceiver + inbox polling dual-channel strategy.

03
📷

Real-Time QR Scanning Performance

Running ML Kit BarcodeScanning on every camera frame at 30fps caused severe frame drops and UI thread blocking on low-end Android devices. The RN bridge introduced serialisation overhead on every native call.

Solution

Integrated react-native-vision-camera with Worklets to run barcode decoding on a native thread — never touching the JS or UI thread. Results forward to React Native only on successful decode. Cut scan latency from ~800ms to under 120ms on budget devices.

04
🔐

Secure PIN Handling Off the Heap

JavaScript's GC doesn't guarantee immediate memory reclamation, meaning UPI PINs can linger in heap memory long after a transaction — exposable via memory dumps on rooted devices.

Solution

PIN values captured natively and passed directly to the Kotlin USSD bridge via a single-use NativeModule call, never persisted to React Native state. Stored in a CharArray and zeroed via Arrays.fill(pinArray, '\0') immediately after use — aligned with OWASP MASVS-CRYPTO.

05
🤝

Bridging React Native & Android Telephony

React Native has no built-in telephony API. The standard Linking.openURL('tel:...') opens the dialer instead of dialing USSD, breaking the in-app payment flow. Additionally, the RN New Architecture introduced breaking changes to the NativeModule contract.

Solution

Authored UssdModule.kt — a fully typed RN NativeModule exposing dialUssd(ussdString, promise) to JavaScript. Implements both the legacy NativeModule interface and a TurboModule spec file for forward compatibility. Dispatches via a properly encoded Intent and resolves the Promise with success/error payload.

TypeScript Typed
Old + New Arch
Promise-Based
Banking Services

Full Bank Access via USSD

Every service is routed through NPCI's National USSD Platform — the same infrastructure your bank uses for its own offline UPI feature.



QR payments use BHIM UPI ID structure — scan any BHIM UPI QR and pay instantly via USSD. Other UPI apps (GPay, PhonePe etc.) planned for future.
Mobile number payments work with most major Indian banks via USSD/GSM — SBI, HDFC, PNB, Axis, BoB and more. No app needed.

Send Money via USSD

Send to any mobile number or BHIM UPI ID — no internet. App builds the USSD string, dials it over GSM, bank confirms via SMS. Works for most major Indian banks.

USSD Command
*99*1*1*
<mobile-no>*<amount>*<remark>
or 1*<upi-pin>#
── dial via Android Telephony ──
Bank confirms via SMS ✓
📱 Mobile No.
🔷 BHIM UPI QR

Check Balance via GSM

Live bank balance — entirely over GSM radio. Zero internet, zero data. Both USSD (*99*3#) and missed-call banking supported. Results in 3–4 seconds.

Method 1 — USSD
*99*3#
Works on all carriers · all banks
Method 2 — Missed Call Banking
SBI → 09223766666
HDFC → 07308080808
Balance SMS arrives instantly ✓
1 App dials *99*3# via Android Telephony
2 GSM tower → NPCI USSD Platform
3 Bank returns balance over GSM ✓

Set / Change UPI PIN

Reset or update your UPI PIN entirely through USSD — no internet, no bank app, no OTP email. Debit card details verified directly on NPCI's side.

USSD Command
*99*7#
Debit card details verified by NPCI
PIN never stored in EdgePay
PIN updated securely offline ✓
🔐 PIN is entered directly into the USSD session — EdgePay never reads or stores it. Aligned with NPCI security guidelines.

Request / Collect Money

Send a collect request to any mobile number — they get a standard UPI notification and can approve from any UPI app. Perfect for splitting bills or merchant collections.

USSD Command
*99*2*
<mobile-no>*<amount>*<remark>
or 1*1#
Collect request sent to payer ✓
💸 Split Bills
🏪 Merchant Collect
Under the Hood

Engineered with Precision

A carefully chosen stack that marries cross-platform development speed with native Android performance — because offline payments cannot afford to compromise on reliability.

⚛️
React Native
Cross-platform UI
📱
Android Native
Telephony & SMS
🔷
TypeScript
Type-safe JS
🟣
Kotlin
NativeModules bridge
📷
Vision Camera
QR frame processor
📡
USSD Bridge
Payment dispatch
💬
SMS Parser
Confirmation engine
🐻
Zustand
Offline state sync
🧭
React Navigation
Stack + transitions
🔥
Hermes Engine
Optimised JS runtime
🏦
NPCI NUUP
*99# banking infra
🔐
OWASP MASVS
PIN security standard
Adaptive Bank Logic

Every Bank. One App.

EdgePay doesn't use a generic adapter. It ships hand-tuned bank-specific logic — separate protocol paths for different banks, with a multi-pattern regex brain that works across 50+ Indian bank SMS formats.

🏦
SBI Integration
Custom SMS-Based Balance Fetch

EdgePay sends a BAL request to SBI's missed-call number. The incoming AD-SBIPSG-S response is parsed in real-time for live balance accuracy.

SBI SMS Path
Send SMS: "BAL"
→ to: 09223766666
Await: AD-SBIPSG-S
→ SmsParser extracts balance
✓ Balance fetched — 0 bytes data
🏛️
HDFC & All Others
Standard USSD Gateway

HDFC and all other supported banks route through the universal NPCI USSD Gateway — the same infrastructure used natively by every major bank's own UPI feature.

USSD Gateway Path
Dial: *99*3#
→ NPCI USSD Gateway
HDFC, PNB, Axis, BoB...
→ Balance returned via USSD
✓ Works on all carriers
🧠 The Regex Brain

SmsParser.ts — Multi-Bank Intelligence

India has 50+ banks, each formatting its debit confirmation SMS differently — varying terminology, date formats, merchant name placements, and encoding quirks. EdgePay's parser handles all of them.

📋
12+ Regex Templates
Ranked priority queue, bank-specific patterns
🔄
Dual-Channel Strategy
BroadcastReceiver + inbox polling fallback
📦
Normalised Output Struct
{amount, bank, txnRef, timestamp} — always consistent
SmsParser.ts — Pattern Matching
// SBI pattern
/INR\s?([\d,]+\.?\d*)\s+debited/i
──────────────────────────
// HDFC pattern
/Rs\.?\s?([\d,]+\.?\d*)\s+debited/i
──────────────────────────
// Generic UPI alert
/UPI\/(\w+)\s+Ref:\s*(\w+)/i
──────────────────────────
→ Output: {
amount: 200.00,
bank: "SBI",
txnRef: "SBI240326001234",
timestamp: "2024-03-26T14:22:00"
}
✓ Parsed in <5ms
Widget Ecosystem

Always-On Home Screen

EdgePay ships three native Android widgets — so your financial snapshot is a glance away, even when the app is closed. No internet. No refresh delay. Purely local.

📊

Home Status Widget

Real-time payment status on your home screen. Shows last transaction, balance (masked), and current offline/online mode — updating from local store.

EdgePay
₹ ••••••
OFFLINE ACTIVE
Last: ₹200 sent · 1h ago
4×1 Android Widget
🎯

Savings Goal Widget

Track your savings progress at a glance. Set a target, and watch the progress bar update every time you save. No cloud sync needed — all local.

Savings Goal
₹4,200 / ₹10,000
42% reached · Keep going! 🚀
2×2 Android Widget
💸

Expense Tracker Widget

Large, bold percentage display of your monthly spending vs salary/pocket money budget. Auto-deduction scans transaction history and updates the display automatically.

Monthly Spend
67%
₹6,700 of ₹10,000 used
2×2 Android Widget
Salary Deduction Engine

Smart Budget Auto-Tracking

Set your monthly salary or pocket money budget once. EdgePay's auto-deduction logic continuously scans your transaction history and maintains a live view of what's left — zero manual entry.

💼
Set Monthly Budget
Enter your salary, stipend, or pocket money. EdgePay uses this as the baseline for all spending calculations.
🔄
Auto-Deduction Scan
Every confirmed transaction is scanned by the SMS parser and automatically deducted from your remaining balance — powered by Zustand state sync.
📈
Real-Time Spend %
Live spending percentage updates on the widget and dashboard — large, bold, impossible to ignore. Know before you overspend.
Expense Dashboard
Monthly Salary
₹10,000
Spent this month 67%
₹6,700 used ₹3,300 left
Auto-Deducted
🍔 Dinner Split
−₹200
🛒 Grocery
−₹850
🚌 Travel
−₹320
🌍 Multi-Language Support

India Speaks Many Languages

EdgePay is fully localized in 8 Indian languages — including right-to-left script support for Urdu. A dedicated Language Selector gives every user a personalized, native experience.

🇮🇳
हिंदी
Hindi
🟠
मराठी
Marathi
☪️
اردو
Urdu (RTL)
🌾
ਪੰਜਾਬੀ
Punjabi
🐟
বাংলা
Bengali
☀️
ಕನ್ನಡ
Kannada
🌊
ଓଡ଼ିଆ
Odia
🌐
English
Default
🗣️
Language Selector Built-In
Switch language from Settings at any time. All UI strings, error messages, and confirmations update instantly. RTL layout flips automatically for Urdu users. No app restart required.
8 Languages
RTL Support
Hot Swap
Technical Architecture

The Engine Stack

EdgePay uses a decoupled architecture where the React Native UI communicates with a specialized Banking Engine — keeping telephony, parsing, and state management cleanly separated.

⚙️
/src/engine
The Banking Protocol Engine
USSDBuilder.ts
Core protocol builder — constructs encoded NUUP-compliant USSD dial strings from transaction inputs
SmsParser.ts
Regex brain — identifies successful transaction alerts, extracts amounts and reference numbers from any bank format
SmsService.ts / USSDService.ts
Bridge layer between React Native JS and the Kotlin NativeModules — abstracts telephony primitives
📱
Mobile Stack
UI · State · Navigation
React Native + TypeScript
Frontend UI
⚛️
Zustand
Lightning-fast offline-optimized state
🐻
React Navigation (Stack)
Custom header transitions
🧭
Vanilla StyleSheet
Max performance on low-end hardware
🎨
PROJECT STRUCTURE
├── android/
Kotlin USSD & SMS bridges
+ App Widgets (3 total)
├── src/
├── engine/
USSDBuilder.ts
SmsParser.ts
SmsService.ts
USSDService.ts
├── screens/
Dashboard, ExpenseTracker
├── components/
Goal & Language Modals
├── store/
Zustand — Salary & Spending
├── theme/
Design Tokens & Palettes
└── utils/
Formatters, i18n, Constants
├── index.html
Landing Page & Simulation
└── README.md
Getting Started

Run It Yourself

EdgePay requires a physical Android device — USSD/SMS listeners cannot be emulated. A real SIM card is needed for full telephony functionality.

01 Prerequisites

🟢
Node.js v18+
JavaScript runtime
🤖
Android SDK (API 29+)
Android 10 or higher
📱
Physical Android Device Required
USSD/SMS cannot be emulated — real SIM card needed

02 How It Works — Workflow

1
Onboarding
User selects their bank — SBI or HDFC/others
2
Dashboard
App checks local store for last known balance (masked by default)
3
Check Balance
SBI → SMS to 09223766666 → AD-SBIPSG-S parsed. HDFC/others → *99*3# via USSD
4
Send Money
Input UPI ID or scan QR → USSDBuilder creates NUUP dial string → UssdModule dispatches call → SMS confirms

03 Installation

TERMINAL
# 1. Clone the repository
$
git clone https://github.com/
yash-hackathon-email/edgepay.git
# 2. Install dependencies
$
npm install
# 3. Compile and install on device
$
npx react-native run-android
--variant=release
✓ EdgePay installed on device
Or just download the APK
No build setup needed — works on any Android 7.0+ device
Download APK — 23MB
Why EdgePay Matters

Real People. Real Struggles.

These aren't edge cases — millions of Indians face payment failures every day because digital finance was built assuming internet always works.

Network Failure
Rural Rajasthan, 2024

"मेरी दुकान पर UPI बंद हो गई — 3 घंटे कोई payment नहीं"

A kirana store owner in Barmer lost ₹8,000 in sales during a 3-hour internet outage. Customers left because no cash, no payment. His entire day's business depended on a signal he couldn't control.

EdgePay would've kept his shop running via USSD — zero internet needed.
Medical Emergency
Small-town UP, 2024

"Hospital pharmacy refused medicines — UPI failed, no ATM nearby"

A family rushed to a district hospital in Pratapgarh. The pharmacy's POS machine was offline. The nearest ATM was 12km away. No cash, no data signal, and a sick child waiting — digital India failed at its most critical moment.

EdgePay works on 2G GSM signal — even in areas with no data.
Farmer's Market
Mandi, Himachal Pradesh

"850 million Indians still live in areas with unreliable mobile data"

TRAI data confirms over 850 million Indians either lack consistent 4G/3G access or depend on 2G networks. The push for cashless India forgot that digital payments need data — something hundreds of millions simply don't have.

EdgePay is built specifically for this 850M+ demographic.
UPI Outage
Pan-India, March 2024

"UPI down for 2 hours — lakhs of transactions failed across India"

When NPCI's UPI servers faced downtime in early 2024, millions of internet-dependent payment apps stopped working instantly. Grocery stores, petrol pumps, and online checkouts all failed simultaneously — a single point of failure with nationwide consequences.

EdgePay's USSD fallback bypasses internet-dependent UPI servers.
₹2.4 Lakh Crore
lost annually due to failed digital payments in India
6.5%
UPI transaction failure rate in low-connectivity zones

EdgePay was built to make these statistics history — payments that work regardless of internet, carrier, or geography.

EdgePay

Ready to Go Offline?

Download EdgePay and start making UPI payments with nothing but a GSM signal. No data plan, no bank app, no internet dependency — ever.

📦 EdgePay v1.0.0 — Latest Release
Android 7.0+ No Root Required No Ads or Trackers Open Source