Privacy-first, 100% offline expense tracker. No accounts, no cloud. Track EMIs, subscriptions, recurring payments with flexible frequencies (monthly, quarterly, half-yearly, yearly, custom). Auto-archives completed items. Seal Mode locks payments for financial certainty. Freedom Timeline shows your debt-free date. PWA, open source, free.
Built for people who want to track their finances without:
β Creating accounts
β Uploading data to someone's server
β Paying subscription fees
β Trusting "AI insights" with their money
If you want a simple, transparent tool that calculates what matters and stays out of your way, this is it.
I wanted one simple number that tells me:
"This is the amount I must pay every month (for example: $4000).
Spend whatever is left β freely."
I don't track salary because salary changes.
What doesn't change are constant spendings:
- EMIs
- Loans
- Rent
- Netflix / Spotify
- Insurance
- Subscriptions
I was tired of:
- Re-adding the same expenses every month (or quarter/year)
- Remembering which EMIs are still active
- Manually excluding EMIs after they end
- Tracking which payments I've already made this month/cycle
- Converting quarterly/yearly expenses to "monthly equivalents" (confusing!)
- Accidentally unchecking payments or changing status after I've confirmed everything
- Doubting myself: "Did I really pay this? Should I double-check?"
- The anxiety of accidental touches messing up my payment tracking
Once an EMI ends, it should automatically stop affecting my monthly total.
That's it.
That's the core problem.
A simple, privacy-first, offline Progressive Web App that:
- Tracks expenses with flexible payment frequencies (monthly, quarterly, half-yearly, yearly, custom)
- Automatically excludes EMIs after their end date
- Shows one clear number:
Total mandatory monthly payment
- π Periodic Payment Tracking β Manage non-monthly expenses separately
- π― Financial Freedom Timeline β See exactly when you'll be debt-free
- Works 100% offline
- Requires zero sign-up
- Stores data only on your device
A lightweight, privacy-first Progressive Web App for tracking EMIs, loans, and recurring expenses β 100% offline, 100% yours.
- Add Your Items β EMIs, loans, rent, subscriptions, savings goals with flexible frequencies
- Choose Frequency β Monthly, quarterly, half-yearly, yearly, or custom intervals
- Mark as Paid β Check off items as you pay them throughout the month/cycle
- π Seal Payments β Lock checked items to prevent accidental changes
- Auto-Reset β Payment status automatically resets each month or cycle
- Get Celebrated β Complete all payments? We'll celebrate with you! π
- Auto-Archive β Completed EMIs automatically move to archive
- Track Your Freedom β Financial Freedom Timeline shows when you'll be debt-free
- Manage Periodic Payments β Separate view for quarterly, half-yearly, yearly expenses
- Visit: https://dhuruvandb.github.io/EMI-And-Expense-calculator/
- Click "Install App" button (optional)
- Start tracking!
git clone https://github.com/dhuruvandb/EMI-And-Expense-calculator.git
# Open index.html in any browser β that's it!WebView webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.loadUrl("file:///android_asset/index.html");- Vanilla JavaScript (Zero dependencies, no frameworks)
- Progressive Web App (PWA) technology (installable, works offline)
- LocalStorage API (100% offline operation, your data stays on your device)
- Modern Web APIs (100% client-side, no backend required)
- Frontend: Vanilla HTML5 + CSS3 + JavaScript (no frameworks)
- Storage: Browser localStorage API (3 separate keys for active/archived/preferences)
- Size: ~60KB total (HTML + CSS + JS combined)
- Dependencies: Zero β Pure vanilla JavaScript
| Browser | Minimum Version |
|---|---|
| Chrome/Edge | 60+ |
| Safari | 12+ |
| Firefox | 60+ |
| Android WebView | 60+ |
- β‘ Loads in <100ms
- πͺΆ Lightweight codebase
- π± Works on 2G networks
- π Auto-refresh every minute for monthly reset detection
β
Track unlimited EMIs, loans, and recurring expenses
β
Flexible payment frequencies β Monthly, quarterly, half-yearly, yearly, custom intervals
β
3-tab view system β Monthly, Periodic, and Archive views
β
Monthly payment tracking β Check off items as you pay them
β
Periodic payment tracking β Separate cycle-based tracking for non-monthly expenses
β
π Seal Mode β Lock your payments to prevent accidental changes
β
π― Financial Freedom Timeline β See your debt-free date and countdown
β
Auto-archive system β Completed EMIs automatically move to archive
β
Smart search β Instant search by name or amount
β
Works 100% offline after first load
β
Export/Import your data (JSON backup with archive support)
β
Dark mode for late-night budgeting
β
Install as native app (PWA)
β
Auto-save β never lose your data
β
8 sorting options + 4 grouping modes
The Problem: You've checked all your payments. But later, you accidentally tap a checkbox, or you start doubting yourself: "Did I really pay this?" The anxiety builds.
Seal Mode solves this with a deliberate ceremony:
- β Lock Your Payments β Seal checked items to prevent accidental changes
- β 8-Second Ceremony β 3s countdown + 5s undo period ensures intentional commitment
- β Multiple Seals Per Month β Seal items as you pay them, add new expenses, seal again
- β Visual Lock Icons β π Sealed items show lock instead of checkbox
- β
Smart Messages:
- Seal 1 item: "π Sealed! Forget "Rent" this month"
- Seal all items: "π Fully paid up! Financial peace of mind!"
- β Full Protection β Cannot edit, delete, or uncheck sealed items until next month
- β Auto-Unlock β Seals automatically clear on the 1st of next month
- β Export/Import Aware β Seal state preserved when exporting/importing same month
How Seal Mode Works:
- Check off your payments β
- Click "π Seal" button
- Confirm in modal
- 3-second countdown β Press STOP to abort
- 5-second undo period β Press UNDO to reverse
- Done! Items locked until next month π
- Check off items as you pay them each month
- Automatic monthly reset (payment status clears at month start)
- Visual strikethrough for paid items
- Smart calculation excludes paid items from monthly total
The Problem: Not all expenses are monthly. Insurance premiums, property taxes, annual subscriptions, quarterly maintenance β real life has varied payment schedules.
Periodic Payment Tracking gives you flexibility without complexity:
- β
5 Frequency Options:
- Monthly β Traditional monthly tracking (default)
- Quarterly β Every 3 months (e.g., property tax, quarterly insurance)
- Half-Yearly β Every 6 months (e.g., car insurance, semi-annual fees)
- Yearly β Annual payments (e.g., domain renewals, memberships)
- Custom β Any interval in days or months (e.g., every 45 days, every 2.5 months)
- β Separate Periodic View β 3-tab system: Monthly | Periodic | Archive
- β Cycle-Based Tracking β Each periodic item tracks its own payment cycle
- β Next Due Date Calculation β Automatically calculates when payment is due next
- β
Smart Due Status:
- Due Now β Payment is currently due (highlighted)
- Paid This Cycle β Payment completed for current cycle
- Upcoming β Not yet due
- β Visual Frequency Badges β See at a glance: "Every 3 months", "Yearly", "Every 45 days"
- β Frequency Filtering β Filter periodic view by frequency type
- β Separate Totals β Periodic payments don't clutter your monthly budget
How Periodic Payments Work:
- Add Item β Choose payment frequency (e.g., "Quarterly")
- Set Cycle Start Date β When did this cycle begin? (e.g., Jan 1, 2026)
- See Next Due Date β App calculates: "Next due: Apr 1, 2026"
- Track Payment β When due date arrives, item shows in "Due Now" section
- Mark as Paid β Check it off, moves to "Paid This Cycle"
- Auto-Reset β On next due date, payment status resets automatically
- Separate View β Switch to Periodic tab to see all non-monthly items
Real-World Examples:
- Car Insurance β Half-yearly, cycle starts Jun 1 β Next due: Dec 1
- Property Tax β Quarterly, cycle starts Jan 1 β Next due: Apr 1
- Domain Renewal β Yearly, cycle starts Mar 15 β Next due: Mar 15, 2027
- Maintenance Fee β Custom (every 45 days), cycle starts Feb 1 β Next due: Mar 18
Why This Matters:
Instead of manually converting quarterly payments to "monthly equivalent" (confusing and inaccurate), track them naturally. See exactly when they're due, pay them, forget them until next cycle.
Smart Integration:
- Monthly view shows only monthly items (clean, focused)
- Periodic view shows only non-monthly items (organized by due status)
- Archive view shows completed EMIs (regardless of frequency)
- Export/Import preserves all frequency settings and cycle states
- Completed EMIs automatically archive when end date passes
- Separate archive view to review past items
- Archive items included in export/import backups
- Clean interface showing only active items
- Loan/Debt tracking β EMIs, loans, credit cards
- Savings tracking β SIPs, RDs, investment commitments
- Separate totals for debt vs savings in dashboard
- Color-coded rows (red for debt, green for savings)
The Problem: You know what you owe, but when will it end? Most trackers focus on debt burden, not liberation.
Freedom Timeline shows you the light at the end of the tunnel:
- π― See Your Debt-Free Date β Exact date when your last EMI ends
- β° Countdown Timer β Years, months, or days until financial freedom
- π Upcoming Milestones β Next EMIs ending with payment relief amounts
- π Motivational Focus β Track progress toward freedom, not just obligations
- π Auto-Updates β Timeline adjusts as you add, edit, or complete EMIs
- π Click for Details β Modal view with full milestone breakdown
How It Works:
- Add EMIs with end dates (e.g., Car Loan ends Dec 2028)
- Freedom Timeline card appears in dashboard
- Shows your debt-free date with glowing countdown badge
- Click the card to see detailed milestones and timeline
- Watch the countdown decrease as time passes
- Celebrate when you reach freedom! π
Visual Design:
- Beautiful green gradient card in dashboard
- Animated shimmer effect for visual appeal
- Glowing countdown badge that pulses
- Clean modal with full milestone list
- Dark mode support with enhanced glows
Smart Logic:
- Only shows when you have active EMIs with end dates
- Filters out savings and ongoing expenses
- Automatically hides when last EMI completes
- Calculates freedom date from latest EMI end date
- Updates in real-time as you manage items
- Get rewarded when all monthly payments are complete!
- Encouraging messages for savings contributions
- "Financial peace of mind" celebration toast
- Instant search by name or amount (300ms debounce)
- 8 Sort Options: Entry order, due date, amount, end date, period left, name, type, category
- 4 Grouping Modes: Category, type, due date range, status
- Bidirectional sorting (ascending/descending)
- Group totals displayed in headers
- π Total active items count
- π° Monthly payment breakdown (Debt + Savings)
- π³ Outstanding debt tracker (principal remaining)
- π― Debt-Free Date & Countdown (when you have active EMIs)
- π¨ Color-coded period alerts:
- π’ Normal (β€30 days remaining)
- π‘ Warning (31-90 days)
- π΄ Critical (>90 days)
- π No backend servers β your data never leaves your device
- π No user accounts β nothing to sign up for
- π No tracking β zero analytics, cookies, or pixels
- π 100% client-side β auditable source code
Please don't use this app if you are looking for:
- Daily expense tracking
- Per-transaction budgeting
- Categorizing every coffee or grocery purchase
- Push notifications (we intentionally don't have them β see FAQ)
π This app is NOT built for daily budgeting.
It is designed only for:
- Fixed recurring expenses (monthly, quarterly, half-yearly, yearly, custom)
- EMIs with clear end dates
- Knowing your mandatory payment obligations β fast and reliably
Your data is stored only in your browser's localStorage:
- β Remains on YOUR device
- β Not transmitted anywhere
- β Not accessible by anyone else
- β You control export/delete
- β Names, emails, phone numbers
- β Financial data
- β IP addresses or location
- β Analytics or tracking data
- β Literally nothing
Every line of code is open for inspection. No hidden trackers, no backdoors.
- Click "π₯ Export" button in header
- Saves as
emi-tracker-backup-YYYY-MM-DD.json - Includes active items (monthly & periodic), archived items, and preferences
- Store in cloud (Google Drive, Dropbox, etc.)
- Click "π€ Import" button
- Select your
.jsonfile - Choose to merge with existing data or replace
- Handles both old format (array) and new format (active/archived split)
- Preserves payment frequencies and cycle states
- Auto-archives completed items during import
A: Your data will be lost forever. Always export your data regularly to avoid losing it. Store backups in cloud storage or email them to yourself.
A: Yes! Export from one device, then import to another. The app works entirely offline, so data doesn't sync automatically.
A: When an EMI's end date passes, it automatically moves to the archive on next app load. You can view archived items by clicking "π¦ View Archive".
A: EMI has a fixed end date (like a car loan ending in 2027). Constant Expense is ongoing with no end date (like rent or Netflix).
A: Periodic payments are expenses that occur at intervals other than monthly β like quarterly insurance, half-yearly property tax, or yearly subscriptions. Instead of tracking them as "monthly equivalent," you track them naturally:
- Choose frequency: Quarterly, Half-Yearly, Yearly, or Custom
- Set cycle start date (when the payment cycle began)
- App calculates next due date automatically
- Payment appears in "Due Now" when it's time to pay
- Mark as paid, and it moves to "Paid This Cycle"
- On the next due date, it resets automatically
This keeps your monthly view clean while tracking non-monthly expenses accurately.
A: The app has a 3-tab view system:
- π Monthly β Shows only items with monthly payment frequency
- π Periodic β Shows only items with quarterly, half-yearly, yearly, or custom frequencies
- π¦ Archive β Shows completed EMIs (all frequencies)
This separation keeps each view focused and clutter-free. Your monthly budget only shows monthly items, while periodic items are managed separately by their own cycles.
A: Yes! The Custom frequency option lets you set any interval in days or months. Examples:
- Every 45 days
- Every 2.5 months
- Every 90 days
- Every 1.5 months
Just select "Custom", enter the number, and choose "days" or "months" as the unit.
A: Periodic items use cycle-based tracking instead of monthly tracking:
- When a periodic item's due date arrives, it shows in "Due Now"
- You mark it as paid, and it moves to "Paid This Cycle"
- The payment status stays "paid" until the next due date arrives
- Then it automatically resets and becomes due again
This is different from monthly items, which reset every calendar month.
A: All payment checkboxes automatically reset at the start of each month. This ensures you track payments fresh every month.
A: When you mark all active items as paid for the month, you'll see a special celebration message: "Financial peace of mind" π
A: Seal Mode locks your checked payments to prevent accidental changes. Once you've confirmed all payments are done, seal them to achieve mental peace. You won't accidentally uncheck something or doubt whether you paid. Sealed items show a π lock icon and cannot be edited, deleted, or unchecked until next month.
A: When you click "Seal", you get:
- 3-second countdown with a STOP button (last chance to abort)
- 5-second undo period with an UNDO button (final safety net)
- After 8 seconds total, items are permanently sealed for the month This deliberate process ensures you're intentional about sealing.
A: Yes! Seal items as you pay them. For example:
- Day 5: Pay rent, seal it β "π Sealed! Forget Rent this month"
- Day 10: Pay Netflix, seal it β Adds to sealed list
- Day 20: Pay all remaining β "π Fully paid up! Financial peace!"
A: If you export and import in the same month, seal status is preserved. If you import in a different month, everything resets automatically with a notification: "π Month changed! Data imported with payments and seal reset for new entries"
A: No. Sealed items are locked until the 1st of next month. This is intentional β it prevents accidental changes and gives you peace of mind that your payment tracking is final.
A: Yes! When adding items, choose Savings category. The dashboard shows separate totals for debt vs savings.
A: The Freedom Timeline automatically appears in your dashboard when you have active EMIs with end dates. It shows:
- Your exact debt-free date (when your last EMI ends)
- Countdown timer (years/months/days until freedom)
- Next 5 upcoming milestones (EMIs ending soon)
- Click the card to see full details in a modal
The timeline only tracks debt/expense items (not savings) and automatically updates as you add, edit, or complete EMIs. It disappears when you have no more active EMIs.
A: Completely secure. Your data never leaves your device. No server, no cloud, no transmission. It's 100% local storage.
A: Great question β and we made this decision intentionally.
Push notifications on the web require ONE of two things:
- Keep the app constantly active β Battery drain, memory hogging, always listening
- Connect to a backend server β Your financial data gets stored on someone's server, sent over the internet, synced across devices
Both options destroy the privacy we built this app around.
We refused to compromise.
The Trade-Off We Chose:
β
You check the app when YOU want
β
No background processes stalking your device
β
No financial data ever leaving your phone
β
No battery drain from constant monitoring
β
No "reminder anxiety" from notifications pestering you
The Reality:
Your EMI tracker is simple enough that a 30-second check every few days tells you everything:
- What's due this month?
- What's already paid?
- Any new items to add?
You don't need the app spamming your notifications to stay on top of it.
This Is Actually a Feature:
In a world where apps are constantly fighting for your attention, this app respects your focus. You're in control. No notifications. No pressure. Just open it when you decide.
The Wisdom Here:
We could have added notifications by:
- Storing your data on our servers β
- Adding a backend API β
- Selling you "premium notification features" β
Instead, we chose to keep your data 100% private, even if it meant saying "no" to a feature users expect.
That's the trade-off between convenience and privacy. We picked privacy. π
| Feature | Other Apps | EMI Tracker |
|---|---|---|
| Requires Account | β Yes | β No |
| Cloud Sync Required | β Yes | β No |
| Works Offline | β No | β Yes |
| Monthly Payment Tracking | Sometimes | β Yes |
| Periodic Payment Frequencies | β No | β Yes |
| Custom Intervals | β No | β Yes |
| Seal Mode (Lock Status) | β No | β Yes |
| Freedom Timeline | β No | β Yes |
| Auto-Archive Completed | β No | β Yes |
| Auto-Reset Monthly | β No | β Yes |
| Push Notifications | β Yes | β No |
| Privacy First | β No | β Yes |
| 100% Free | β No | β Yes |
| Zero Dependencies | β No | β Yes |
| Open Source | β No | β Yes |
Day 1: Add all your EMIs and recurring expenses (home loan, car EMI, rent, Netflix)
Day 1: Add quarterly car insurance to Periodic view (βΉ20,000 every 3 months)
Day 1: π― Freedom Timeline appears β "Debt-Free: Dec 15, 2028 β’ 2y 11m away"
Day 5: Mark "Home Loan" as paid β β monthly total updates automatically
Day 6: Seal "Home Loan" π β Now it's locked, no accidental unchecking
Day 10: Mark "Car EMI" as paid β, seal it π
Day 15: All items paid! Seal remaining β π "Financial peace of mind!"
Day 20: Try to edit sealed item β Blocked with message "π Cannot edit sealed payments"
Next Month (1st): All seals auto-unlock, payment status resets, start fresh
3 Months Later: Car insurance shows "Due Now" in Periodic view β Pay it, mark as paid
6 Months Later: Car EMI completed β Auto-archived, Freedom Timeline updates to new date
1 Year Later: Export backup (includes monthly, periodic, archived items), import to new device
2 Years Later: Click Freedom Timeline β See "6 months away!" β Motivation boost π
- Export/Import JSON backups (with archive support)
- Dark mode (system-aware + manual toggle)
- Input validation
- PWA offline support
- Smart sorting (8 options) & grouping (4 modes)
- Search functionality (name/amount)
- Payment tracking with monthly reset
- Seal Mode with 8-second ceremony (lock payments)
- Multi-seal support (seal items progressively)
- Seal state export/import with month awareness
- π― Financial Freedom Timeline (debt-free date & countdown)
- π Periodic Payment Frequencies (quarterly, half-yearly, yearly, custom)
- 3-tab view system (Monthly | Periodic | Archive)
- Cycle-based tracking for non-monthly payments
- Frequency filtering and smart due status
- Auto-archive system
- Category-based separation (Debt/Savings)
- Celebration mode for completed payments
- Period left color-coded alerts
- Group totals in table headers
- Archive view toggle
- EMI detail tracking (principal/interest/total)
- β Star this repo β helps others discover it
- π’ Share β tell privacy-conscious friends
git clone https://github.com/dhuruvandb/EMI-And-Expense-calculator.git
# Edit files β no build process needed
# Open index.html in browser to testMIT License β Free to use, modify, and distribute.
Copyright (c) 2024 Dhuruvan
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software... [full license](LICENSE)
Inspired by:
- Privacy-first software movement
- Progressive Web App best practices
- Open source community
- Real frustrations with overcomplicated finance apps
No subscriptions. No data collection. No BS.
Your finances. Your data. Your control.
If this helps you, give it a β.


