I spec, scope, and ship end-to-end fintech products — from API payload design to webhook idempotency to role-based dashboards. This portfolio documents two of them in full.
A production-ready fee collection tool built end-to-end — from Juspay API integration to real-time webhook handling to role-based analytics.
A full-stack internal tool that replaced manual, fragmented fee collection with a real-time, role-aware dashboard. Educators generate Juspay payment links in seconds; the system automatically syncs payment outcomes via webhooks — eliminating manual reconciliation entirely.
UNext Learning's fee collection was entirely manual. Operations staff coordinated across email, spreadsheets, and a raw Juspay merchant account — with no unified view of who had paid, which links had expired, and who generated which link.
When a student made a payment, there was no automatic update to internal records. Every payment required a manual check in Juspay's dashboard and a corresponding update to a shared spreadsheet. For a business processing fees across multiple programs, semesters, and currencies (INR and USD), this created significant operational delay and reconciliation errors.
The core question: how do we give educators a fast, reliable way to generate and track payment links — without building a full billing platform from scratch?
I scoped and shipped a focused internal tool: a Payment Link Generator that wraps Juspay's session API in a clean, role-aware interface purpose-built for UNext's fee collection workflow.
Rather than building a generic payment tool, I made deliberate product choices: expiry enforcement mapped to exact minute calculations, semester selection rules tied to fee type (single select for Semester, consecutive-only for Annual and Full Course), automatic gateway routing based on currency (INR → Semester-RD, USD → Semester-RI), and a webhook handler that writes payment outcomes directly into the dashboard — eliminating manual reconciliation entirely.
The app captures structured logs across all four interaction points (user submission, Juspay API call, webhook receipt, SLCM), giving the team full audit visibility without needing to access Juspay's own dashboard.
Full session API with payload mapping, expiry-in-minutes calculation, and currency-based gateway routing (INR → Semester-RD, USD → Semester-RI).
ORDER_SUCCEEDED and ORDER_FAILED events. Extracts epg_txn_id, txn_id, status — auto-updates DB in real time with IST timestamp conversion.
Metrics, per-user breakdown, paginated orders table, 4 live filters, status badges, copy-to-clipboard. Auto-refreshes every 30 seconds.
Email + password login. Admin sees full system logs. Regular users see only operational views. Forgot-password flow with complexity enforcement.
User submissions, Juspay API calls, webhook payloads, SLCM events — each with collapsible JSON and timestamps. Admin-only access.
Single select for Semester fee type. Consecutive-only dual select for Annual. Consecutive-only multi-select for Full Course. Enforced in UI.
Before this tool, a staff member would generate a link in Juspay, note it manually, share it with the student, then check back later to see if it was paid — updating a spreadsheet by hand. Errors and delays were routine.
After deployment: the entire lifecycle — link generation, delivery, payment, status sync — is captured automatically. The operations team has a live dashboard with full visibility into every order, zero manual work required after link generation.
The broader signal: this demonstrates that well-scoped internal tooling can eliminate entire categories of operational overhead without the cost or risk of a full platform rebuild.
A payment and re-registration analytics platform built for two universities — combining source-data governance with auditable USD→INR conversion and live program-level KPIs.
A full-stack analytics application that gives finance and academic-ops teams a live view of collected, gross and outstanding fees across programs, batches and semesters — with every USD payment normalized to INR through an auditable, dataset-locked conversion trail instead of a black-box number.
Sikkim Manipal University (SMU) and Manipal University Jaipur (MUJ) run fee collection and re-registration through source systems that produce raw payment exports — but no unified way to see collected vs. gross vs. outstanding fee value across programs, batches and semesters, or to trust a USD-to-INR figure without knowing which rate produced it.
USD payments in particular were a problem: a single converted number hides the question finance actually asks — which rate, on which date, under which banking-calendar rule, produced this INR figure? Without that trail, discrepancies were hard to explain and harder to audit.
The core question: how do we give both universities one analytics platform that's safe to hand real financial decisions to — where every uploaded file, every conversion and every edit is governed and traceable?
I scoped and shipped PayPulse Analytics as a single React + Node/Express application serving both organizations from isolated active datasets, with a data governance model borrowed from financial systems: every uploaded CSV is validated and archived immutably first, and only affects live analytics once explicitly activated via Replace or Append — so a bad upload can never silently corrupt a dashboard finance is already relying on.
For currency, I designed a reference-date and settlement-date priority chain (last installment date → own-term date → prior-semester date → record creation date → explicit fallback) feeding a rate lookup that prefers an exact historical Google Finance rate, falls back to the nearest prior market date, then a user override, then a static ₹84 floor — with every one of those decisions exposed in the UI, not hidden in a calculation.
Because Autoscale deployments can cold-start, I made the conversion snapshot dataset-locked: Google Finance and RBI holiday data are only polled at activation time and persisted, so opening the dashboard, applying filters or exporting never triggers an external call or a silently-shifting number.
Select org → upload CSV via signed URL → validate headers/rows → archive immutably → explicit Replace or Append activation.
Reference-date priority chain, T+1 banking settlement against RBI city calendars, Google Finance historical rates, and a static fallback — every step exposed per record.
Configurable KPI tiles, sortable program-wise breakdown table, and six chart types (trend, batch, semester, top programs, status, benefit category).
Server-side paginated table with debounced search, drag-to-reorder columns, and a per-learner detail panel with full payment and USD audit history.
Search, edit, soft-delete and restore individual source rows — scoped to the active dataset version, never touching the original archived file.
Filtered learner CSV with formula-injection neutralization, plus a program-summary XLSX with totals, autofilter and embedded conversion notes.
Before this, checking collection health per program meant pulling raw exports and reconciling USD payments by hand, with no consistent record of which exchange rate had been used. There was no safe way to try a new source file without risking the live dashboard.
After deployment: both universities view live, filterable KPIs and program breakdowns from a shared platform, every USD-derived number carries its own audit trail, and new data only goes live through an explicit, reversible activation step.
The broader signal: the same discipline that makes a payment tool trustworthy — governance before automation, and traceability before convenience — applies just as much to analytics as it does to transactions.
How this project went from a spreadsheet problem to a live payment tool.
I'm looking for fintech and product roles where payment integrations and real-time systems are core. If that's your team, I'd love to connect.
Real Juspay integration, live webhook handling, role-based dashboard.
https://payment-gateway-hub--krs08.replit.app/ Open live demo →Fee collection dashboard with auditable USD→INR conversion, live for SMU and MUJ.
https://paypulse-unext.replit.app/ Open live demo →