A comprehensive budget tracking application with calendar view, balance graphs, and transaction tables.
- Visual monthly calendar showing daily transactions
- Color-coded income (green) and expenses (red)
- Daily balance display
- Click any day to view or add transactions
- Recurring transaction support (daily, weekly, bi-weekly, monthly, yearly)
- Transaction categories with emoji icons
- Interactive balance-over-time chart
- Customizable date ranges (last month, quarter, or year)
- Statistics panel showing:
- Total income
- Total expenses
- Net change
- Average daily change
- Date range settings are saved and persist across sessions
- Detailed transaction table with:
- Date, description, category, and type
- Separate income and expense columns
- Running balance calculation
- Balance change per transaction
- Customizable date ranges
- Export to Excel (CSV format)
- Date range settings are saved and persist across sessions
- Export data to JSON (includes all settings)
- Import data from JSON
- Clear all data option
- Standardized JSON format for future compatibility
The application uses a versioned data structure to ensure compatibility with future updates:
{
"version": "1.0.0",
"initialBalance": 5000,
"initialBalanceDate": "2025-01-01",
"bills": [
{
"id": 1234567890,
"name": "Salary",
"amount": 3000,
"type": "monthly",
"category": "salary",
"date": "2025-01-01",
"endDate": null
},
{
"id": 1234567891,
"name": "Rent",
"amount": -1200,
"type": "monthly",
"category": "rent",
"date": "2025-01-01",
"endDate": "2025-12-31"
}
],
"settings": {
"graphDateRange": {
"start": "2024-12-01",
"end": "2025-01-01"
},
"tableDateRange": {
"start": "2024-12-01",
"end": "2025-01-01"
}
}
}- version (string): Data format version for migration support
- initialBalance (number): Starting balance amount
- initialBalanceDate (string|null): Date when initial balance was set (YYYY-MM-DD)
- bills (array): List of all transactions
- settings (object): Application settings
- id (number): Unique transaction identifier
- name (string): Transaction description
- amount (number): Amount (positive for income, negative for expenses)
- type (string): Frequency type
"one-time": Single transaction"daily": Repeats daily"weekly": Repeats weekly"biweekly": Repeats every 2 weeks"monthly": Repeats monthly"yearly": Repeats yearly
- category (string): Transaction category
"salary","food","transport","utilities","entertainment","shopping","health","education","savings","rent","subscriptions","other"
- date (string): Start date (YYYY-MM-DD)
- endDate (string|null): Optional end date for recurring transactions (YYYY-MM-DD)
- graphDateRange: Saved date range for graph view
- start (string|null): Start date (YYYY-MM-DD)
- end (string|null): End date (YYYY-MM-DD)
- tableDateRange: Saved date range for table view
- start (string|null): Start date (YYYY-MM-DD)
- end (string|null): End date (YYYY-MM-DD)
The application includes a migration system to handle future data format changes:
- Version Detection: When importing data, the version field is checked
- Automatic Migration: Data is automatically migrated to the current format
- Backward Compatibility: Older formats are supported and upgraded
- Default Values: Missing fields are populated with sensible defaults
Example migration function:
function migrateData(importedData) {
const version = importedData.version || '0.0.0';
// Migrate to current version
const migratedData = {
version: DATA_VERSION,
initialBalance: importedData.initialBalance || 0,
initialBalanceDate: importedData.initialBalanceDate || null,
bills: importedData.bills || [],
settings: importedData.settings || { /* defaults */ }
};
return migratedData;
}- Set Initial Balance: Enter your starting balance and update
- Add Transactions: Click any day on the calendar to add income or expenses
- View Balance Graph: Switch to Graph tab to see balance trends over time
- Export Table: Switch to Table tab and export your transactions to Excel
- Save Your Data: Use Export to save all your data as JSON
- Load Data: Use Import to restore previously saved data
- Escape: Close transaction modal
- Arrow Left: Previous month (calendar view)
- Arrow Right: Next month (calendar view)
BudgetTrack/
├── index.html # Main HTML structure
├── css/
│ └── styles.css # All styling
├── js/
│ └── app.js # Application logic
└── README.md # Documentation
Works in all modern browsers with ES6+ support:
- Chrome/Edge (latest)
- Firefox (latest)
- Safari (latest)
The standardized JSON format is designed to support future features:
- Multiple accounts/budgets
- Budget goals and alerts
- Category budgets
- Custom categories
- Shared budgets
- Cloud sync
- Mobile app integration
Free to use and modify.