~/yogesh
Get in touch
← yogeshtiwari.com
Live personal MVPSeptember 2026 · in daily use · Solo: product, full-stack development, AWS infrastructure, CI/CD

Outpace

Pay off debt faster, built for how India handles money. A personal finance and debt-payoff app for multi-card, multi-loan households and small merchants.

  • Next.js 15
  • React 19
  • TypeScript
  • PostgreSQL
  • AWS (Terraform)
  • PWA

Overview

Outpace is a personal-finance app focused on paying down debt faster. It is built for salaried Indians juggling several credit cards and EMIs, each with its own billing cycle and due date. It also includes tools for small shopkeepers: cash-drawer reconciliation, GST compliance and Tally export.

By the numbers

~17,000lines of code
30API routes
16database tables
15+Indian bank profiles
24commits, first to production
5 daysfrom first commit to live
The problem
  • Mint, YNAB and Money Manager are built for Western banking. They do not understand Indian credit-card billing cycles, bank SMS formats, password-protected statements, lakh amounts, UPI, GST or Tally.
  • Most Indian apps track expenses rather than plan debt repayment.
  • Indian banks offer no open API that individuals can use.
What I built

A Next.js 15 progressive web app with a five-tab dashboard, 30 API routes and a SaaS admin console, deployed on AWS through Terraform and GitHub Actions.

Key features

Dashboard, loans and cards

  • KPI grid with savings rate, debt-to-income ratio and outstanding debt; net worth across assets and liabilities; monthly budget goals and snapshots.
  • Debt vault: each card and loan shows its billing-cycle badge and due count. Payments are recorded in an append-only ledger with the balance before and after each one.
  • Due-date calendar with mark-as-paid.
  • Payoff simulator: avalanche versus snowball, an extra-payment slider and one-time windfall injection. It shows the debt-free date, interest saved and months saved.

Getting data in without bank APIs

  • Bank SMS parsing: paste or forward an SMS and the amount, merchant and masked account are extracted and card balances update.
  • A Telegram bot for forwarded SMS, and a personal email address that parses forwarded card statements for total due, minimum due and due date.
  • CSV statement import that detects the bank and columns, with a review step before anything is applied. Profiles for 15+ Indian banks.
  • Indian merchant categorisation (Swiggy, Zomato, Blinkit, IRCTC, BESCOM, LIC and others) with your own rules, and a subscription detector that predicts the next renewal.

India-specific tools

  • Hinglish voice entry: say "paanch hazar ka bill" and it is logged, using the browser's hi-IN speech recognition and a custom parser for lakh, hazar and k amounts.
  • UPI intent links and WhatsApp payment requests, with no payment gateway.
  • GST Rule 37 watchdog: tracks unpaid supplier bills against the 180-day input-tax-credit reversal deadline and reconciles against GSTR-2B JSON.
  • Tally Prime XML export for accountants, and cash-drawer (galla) reconciliation by denomination.

Platform

  • Installable PWA with a service worker and an IndexedDB offline cache.
  • Tenant-isolated accounts, onboarding, JSON backup and restore, and subscription tiers.
  • Admin console with tenant directory, system telemetry, an inbound-webhook stream, a parser test sandbox and bank-profile management.

Architecture and infrastructure

GitHubpushGitHub Actionstype-check · ARM64 buildAmazon ECRscan on pushAWS ap-south-2 (Hyderabad) · all provisioned with TerraformSystems Managersend-commandno SSHEC2 t4g.micro · Docker ComposeCaddyauto-HTTPSNext.js appPWAPostgreSQL 16S3encryptedbackupsdeploypull image
Outpace: GitHub Actions builds an ARM64 image to ECR and deploys through Systems Manager, with no SSH.
  • Data model: 16 tables scoped per user with composite tenant indexes, organised by monthly period. An append-only ledger records every debt payment.
  • No ORM: hand-written SQL with prepared statements.
  • Cost-first, single instance: one EC2 host runs the app and PostgreSQL, so there is no high availability and recovery is from encrypted S3 backups. That is a deliberate trade-off for a personal MVP.
Engineering highlights
  • Low running cost by design: an ARM Graviton t4g.micro instance, Caddy for free automatic TLS, browser speech recognition instead of paid speech-to-text, UPI intent links instead of a payment gateway, and Telegram and email webhooks instead of paid SMS APIs.
  • Secure delivery: deploys run through AWS Systems Manager rather than SSH. The container runs as non-root, ECR images are scanned, EBS and S3 are encrypted with public access blocked, and Terraform state is remote and encrypted.
  • Sessions: salted PBKDF2-SHA512 password hashes, 32-byte random session tokens and httpOnly SameSite cookies.
  • Indian finance edge cases, researched and written up: fuel-surcharge reversal, the minimum-amount-due trap, card-to-EMI conversion with 18% GST on interest, refunds that land after the statement date, salary sweep-to-FD treated as a transfer, and interest-free family loans.
Tech stack
  • App Next.js 15 (App Router), React 19, TypeScript, Tailwind CSS, Recharts
  • Data PostgreSQL 16 (pg), Dexie (IndexedDB)
  • Browser APIs Web Speech API (hi-IN), Service Worker, UPI intent links
  • Integrations Telegram Bot webhook, inbound email webhook, Tally Prime XML
  • Infrastructure AWS ap-south-2: EC2 Graviton, VPC, ECR, S3, IAM, SSM; Terraform; Docker; Caddy
  • CI/CD GitHub Actions: type-check CI, ARM64 buildx, push to ECR, deploy over SSM

Status and roadmap

A live personal MVP that I use every day for my own cards and loans. It is not a commercial product and I make no claims about users or revenue.

Roadmap from the product blueprint:

  • Deeper Indian banking rules: fuel surcharge reversal, forex markup, rewards.
  • Point-of-sale tools for micro-merchants, then a Udhar/Khata customer-credit ledger.
  • Overdraft and cash-credit limits, a post-dated cheque calendar and tax tools for CAs.
  • Enterprise roles and multi-currency.

Near term: PDF parsing for password-protected bank statements, a single Postgres datastore and an automated test suite.