A modern, responsive financial tracking application built with vanilla HTML, CSS, and JavaScript. Track expenses, manage budgets, and visualize financial data with interactive charts.
- Project Overview
- Features
- Technologies Used
- Installation & Setup
- Usage
- File Structure
- Development Process
- Testing
- Deployment
- Credits
Purpose: Create a comprehensive personal finance management application that helps users track expenses, manage budgets, and make informed financial decisions through intuitive visualizations.
Live Website: See deployed Personal Finance Dashboard website
Target Audience:
- Young professionals starting their financial journey
- Individuals seeking better expense tracking
- Budget-conscious users wanting financial insights
- Anyone looking to improve their financial health
Key Goals:
- Provide simple expense and income tracking
- Offer budget management with visual progress
- Create clear financial analytics with charts
- Ensure responsive design across all devices
- Implement secure local data storage
- Real-time Dashboard: Financial summary with current balance, monthly income/expenses, and savings rate calculation
- Transaction Management: Complete CRUD operations (Create, Read, Update, Delete) with form validation
- Smart Categorization: 10+ pre-configured categories (Food, Transport, Entertainment, etc.) with custom icons
- Budget Tracking: Monthly budget setting with visual progress indicators and over-budget warnings
- Data Visualization: Interactive charts showing spending patterns and financial trends using Chart.js
- Advanced Search & Filtering: Filter by date ranges, categories, amounts, and transaction types
- CSV Export: Export transaction data for external analysis and record-keeping
- Responsive Design: Mobile-first approach optimized for all screen sizes (320px to 1920px+)
| Real-time Dashboard | Transaction Management |
|---|---|
![]() |
![]() |
| Smart Categorization | CSV Export |
|---|---|
![]() |
![]() |
| Advanced Search | Advanced Filtering |
|---|---|
![]() |
![]() |
| Responsive Design |
|---|
![]() |
- Local Data Persistence: Complete privacy with browser-based LocalStorage (no server required)
- Real-time Calculations: Instant balance updates and savings rate computation
- Touch Optimization: Mobile gestures and touch-friendly interfaces for smartphones/tablets
- Accessibility Compliance: WCAG 2.1 AA standards with screen reader support
- Progressive Enhancement: Core functionality works without JavaScript, enhanced with JS
- Error Handling: Comprehensive validation with user-friendly error messages
- Performance Optimization: Sub-second response times with efficient data processing
- Dashboard (index.html): Main overview with balance cards, quick stats, expense charts, and recent transactions
- Transactions (pages/transactions.html): Comprehensive management with pagination, sorting, and bulk operations
- Analytics (pages/analytics.html): Advanced insights with multiple chart types and financial recommendations
- Settings (pages/settings.html): Category management and user preferences (expandable architecture)
- Modal-based Forms: Add/Edit transactions with context-sensitive validation
- Dynamic Charts: Pie charts for category breakdown, line charts for trends, bar charts for comparisons
- Intelligent Filters: Auto-complete search with real-time results filtering
- Responsive Navigation: Collapsible mobile menu with touch-optimized controls
- Contextual Help: Inline guidance and tooltips for user assistance
Frontend Technologies:
- HTML5: Semantic markup with accessibility features
- CSS3: Modern styling with CSS Grid, Flexbox, and custom properties
- Vanilla JavaScript (ES6+): Modular architecture with no frameworks
- Chart.js 3.9.1: Interactive data visualization library via CloudFlare CDN
- LocalStorage API: HTML5 Web Storage specification for client-side persistence
- Responsive Design: Mobile-first approach with fluid layouts and touch optimization
Development Tools:
- Visual Studio Code 1.84+ with Live Server extension
- Chrome DevTools for debugging and performance analysis
- Git for version control and GitHub Pages deployment
Browser Support:
- Chrome 60+, Firefox 60+, Safari 12+, Edge 79+
- Mobile: iOS Safari 12+, Android Chrome 60+
- JavaScript: ES6+ features (arrow functions, destructuring, template literals)
- Storage: LocalStorage with 5MB+ capacity requirement
- Browser Compatibility: Chrome 60+, Firefox 60+, Safari 12+, Edge 79+
- JavaScript: ES6+ support enabled
- Storage: LocalStorage with 5MB+ available capacity
- Screen Resolution: Minimum 320px width for mobile optimization
- Network: Internet connection for Chart.js CDN (first load only)
- Text Editor: Visual Studio Code recommended with Live Server extension
- Git: Version control for development workflow (optional)
- Modern Browser: Latest version for optimal performance
- git clone https://stevedok22.github.io/FinTrack/
- cd personal-finance-dashboard
personal-finance-dashboard/
βββ index.html
βββ README.md
βββ .gitignore
βββ pages/
β βββ transactions.html
β βββ analytics.html
β βββ settings.html
βββ assets/
β βββ css/
β β βββ styles.css
β β βββ components.css
β β βββ responsive.css
β βββ js/
β β βββ script.js
β β βββ dashboard.js
β β βββ transactions.js
β β βββ charts.js
β β βββ storage.js
β β βββ utils.js
β βββ images/
β βββ icons/
β βββ screenshots/- Open the application in your web browser
- Add your first transaction using the "Add Transaction" button
- Set up categories in the Settings page for better organization
- Create budgets to track your spending goals
- View analytics to understand your spending patterns
- Dashboard: Overview of your financial status
- Transactions: Manage all your financial transactions
- Analytics: View detailed charts and spending analysis
- Settings: Customize categories and preferences
- All data is stored locally in your browser
- Export functionality available in Settings
- No server required - complete privacy
personal-finance-dashboard/
βββ index.html # Main dashboard page
βββ README.md # Project documentation
βββ .gitignore # Git ignore rules
β
βββ pages/ # Additional HTML pages
β βββ transactions.html # Transaction management
β βββ analytics.html # Financial analytics
β βββ settings.html # User settings
β
βββ assets/ # Static files
βββ css/ # Stylesheets
β βββ styles.css # Core styles and variables
β βββ components.css # UI component styles
β βββ responsive.css # Mobile responsiveness
β
βββ js/ # JavaScript modules
β βββ script.js # Main app initialization
β βββ dashboard.js # Dashboard functionality
β βββ transactions.js # Transaction management
β βββ charts.js # Chart.js integration
β βββ storage.js # Data persistence
β βββ utils.js # Helper functions
β
βββ images/ # Images and assets
βββ icons/ # UI and category icons
βββ screenshots/ # Documentation images
- T-Bank Inspired Design: Modern banking interface with green color palette
- Vanilla JavaScript: No frameworks for simplicity and performance
- LocalStorage: Privacy-first approach with local data storage
- Mobile-First: Responsive design starting from mobile screens
- Modular Architecture: Separate JavaScript files for maintainability
- Real-time Updates: Dashboard updates automatically when data changes
- Form Validation: Input validation with user-friendly error messages
- Chart Integration: Financial data visualization using Chart.js
- Responsive Navigation: Adaptive navigation for different screen sizes
- Accessibility: Semantic HTML and ARIA labels for screen readers
Challenge 1: Real-time Dashboard Updates
- Issue: Dashboard data not updating after transaction changes
- Solution: Implemented observer pattern with
refreshDashboard()function that updates all components - Reference: Observer Pattern in JavaScript
Challenge 2: Chart.js Responsive Behavior
- Issue: Charts not resizing properly on mobile devices
- Solution: Added
window.addEventListener('resize', debounce(resizeCharts, 250))with debounced resize handler - Reference: Chart.js Responsive Documentation
Challenge 3: LocalStorage Quota Management
- Issue: Potential storage limits with large transaction datasets
- Solution: Implemented data validation and compression in
storage.js - Reference: Web Storage API Limits
Challenge 4: Form Validation UX
- Issue: Poor user experience with validation errors
- Solution: Real-time validation with immediate feedback using
validateTransaction()function - Reference: Form Validation Best Practices
- HTML validation using W3C validator
- CSS validation using W3C CSS validator
- JavaScript linting using JSHint
- Accessibility testing with WAVE or similar tools
- All navigation links work correctly
- Transaction CRUD operations function properly
- Charts display data accurately
- Responsive design works on all devices
- Form validation provides appropriate feedback
- Data persistence works between sessions
- Google Chrome (latest)
- Mozilla Firefox (latest)
- Safari (if available)
- Microsoft Edge (latest)
- Mobile browsers (iOS/Android)
| Test Type | Initial Result | Final Result |
|---|---|---|
| index.html | ![]() |
![]() |
| transaction.html | ![]() |
![]() |
| settings.html | ![]() |
![]() |
| analytics.html | ![]() |
![]() |
| Links | Validate Your HTML β | |
| Before and after validation results showing successful error resolution |
| Test Type | Initial Result | Final Result |
|---|---|---|
| styles.css | ![]() |
|
| responsive.css | ![]() |
![]() |
| components.css | ![]() |
![]() |
| Links | Validate Your CSS β | |
| Before and after validation results showing successful error resolution |
| Test Type | Initial Result & Final Result |
|---|---|
| utils.js | ![]() |
| transactions.js | ![]() |
| storage.js | ![]() |
| script.js | ![]() |
| dashboard.js | ![]() |
| charts.js | ![]() |
| analytics.js | ![]() |
| Links | Validate Your JShint β |
| Results showing successful resolution |
| Desktop Performance | Mobile Performance |
|---|---|
![]() |
![]() |
| Test Desktop Performance β | Test Mobile Performance β |
Performance testing results showing optimized loading times and smooth animations
Repository Setup:
git init
git add .
git commit -m "Initial commit: Personal Finance Dashboard"
git remote add origin https://github.com/stevedok22/FinTrack.git
git push -u origin main- All pages accessible via HTTPS
- Chart.js CDN loads correctly
- LocalStorage functions properly
- Responsive design maintains integrity
| GitHub Pages Setup | Branch Configuration |
|---|---|
![]() |
![]() |
GitHub Pages deployment configuration showing automated hosting setup
- Netlify: One-click deployment
- Vercel: Git-based deployment
- Surge.sh:
surge . fintrack-demo.surge.shfor quick static hosting
- Functionality: All features tested and working in production environment
- Performance: Page load speed optimized (< 2 seconds initial load)
- Accessibility: WCAG 2.1 AA compliance verified
- External Links: All external resources open in new tabs (
target="_blank") - Cross-browser: Compatibility confirmed across major browsers
- Mobile: Touch interactions and responsive layout tested
// Production optimization applied
const PRODUCTION_CONFIG = {
enableDebugMode: false,
useLocalStorage: true,
chartAnimationDuration: 800,
maxTransactionLimit: 1000,
autoSaveInterval: 30000 // 30 seconds
};- Chart.js: Data visualization library (https://www.chartjs.org/)
- Licensed under MIT License
- Color Palette: Inspired by modern banking applications
- Icons: Custom icon set for financial categories
- Typography: System fonts for optimal performance
- Visual Studio Code: Code editor
- Live Server Extension: Local development server
- Chrome DevTools: Testing and debugging
- MDN Web Docs: Web development reference
- Chart.js Documentation: Data visualization guidance
- A11y Project: Accessibility best practices
Note: This application stores all data locally in your browser. No personal financial information is transmitted to external servers, ensuring complete privacy and security of your financial data.
- Source: T-Bank Official Website
- Elements Adapted:
- CSS Color Palette: Green gradient scheme adapted for financial trust theme
/* Inspired by T-Bank's professional banking colors */ --color-light-green: #E8F5E8; --color-neon-green: #00FF7F; --color-dark-green: #006B3F;
- Card Layout Patterns: Shadow effects and border radius implementations
/* T-Bank inspired card styling in components.css lines 45-62 */ box-shadow: var(--shadow-xl); border-radius: var(--radius-2xl); background: linear-gradient(135deg, var(--color-white) 0%, var(--color-light-green) 100%);
- Navigation Header: Dark gradient background pattern
/* Header gradient from styles.css lines 78-82 */ background: linear-gradient(135deg, var(--color-dark-green) 0%, var(--color-black) 100%);
- CSS Color Palette: Green gradient scheme adapted for financial trust theme
-
Tabler HTML Dashboard Template: GitHub - Tabler
- License: MIT License
- Code Adaptations:
- Grid Layout System: Responsive dashboard grid implementation
/* Dashboard grid pattern adapted from Tabler in styles.css lines 234-240 */ .dashboard-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); gap: var(--spacing-xl); }
- Modal Structure: Base modal HTML structure and overlay patterns
<!-- Modal pattern inspired by Tabler modal components --> <div class="modal" id="transaction-modal" role="dialog" aria-hidden="true"> <div class="modal-overlay"></div> <div class="modal-content">
- Grid Layout System: Responsive dashboard grid implementation
-
Financial Dashboard GitHub Reference: IvanCampos/financial-dashboard
- LocalStorage Patterns: Data persistence structure adapted for financial transactions
// Storage pattern inspired by IvanCampos approach in storage.js lines 15-35 const STORAGE_KEYS = { TRANSACTIONS: 'financeApp_transactions', CATEGORIES: 'financeApp_categories', SETTINGS: 'financeApp_settings' };
- Utility Functions: Date formatting and currency display helpers
// Currency formatting adapted from financial-dashboard in utils.js lines 8-14 function formatCurrency(amount, currency = '$') { return `${currency}${Math.abs(amount).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`; }
- LocalStorage Patterns: Data persistence structure adapted for financial transactions
-
AlignUI Finance Components: AlignUI Banking Template
- Form Validation Patterns: Transaction form structure and validation approach
// Form validation pattern inspired by AlignUI in script.js lines 156-175 function validateTransaction(transaction) { const errors = []; if (!transaction.amount || transaction.amount <= 0) { errors.push('Please enter a valid amount greater than 0'); } // Additional validation logic... }
- Form Validation Patterns: Transaction form structure and validation approach
-
Banking UI Component Library: W3Layouts Banking Templates
- Responsive Navigation: Mobile-first navigation toggle patterns
/* Mobile navigation adapted from W3Layouts in responsive.css lines 25-45 */ @media (max-width: 768px) { .nav { flex-direction: column; gap: var(--spacing-md); } .nav-menu { gap: var(--spacing-md); } }
- Responsive Navigation: Mobile-first navigation toggle patterns
- Chart.js Documentation: Chart.js Official Docs
- Custom Implementation:
// Chart configuration adapted from Chart.js examples in charts.js lines 45-89 window.dashboardChart = new Chart(ctx, { type: 'doughnut', data: { labels: dataWithSpending.map(d => d.label), datasets: [{ data: dataWithSpending.map(d => d.value), backgroundColor: dataWithSpending.map(d => d.color), borderWidth: 2, borderColor: '#ffffff' }] }, options: { responsive: true, maintainAspectRatio: false, cutout: '60%' // Custom financial dashboard styling } }); - **Chart.js Community Examples:** [GitHub - Chart.js Samples](https://github.com/chartjs/Chart.js/tree/master/docs/samples) - **Line Chart Implementation:** /* Line chart pattern from Chart.js samples - charts.js lines 105-145 */ datasets: [{ label: 'Income', data: monthlyData.map(d => d.income), borderColor: CHART_COLORS.success, backgroundColor: CHART_COLORS.success + '20', borderWidth: 3, tension: 0.4 }]
-
Fintech Dashboard Templates: GitHub Dashboard Templates
- Component Structure: Card-based layout patterns for financial metrics
<!-- Card structure pattern from multiple dashboard templates --> <div class="stat-card income"> <div class="stat-icon">π°</div> <div class="stat-content"> <p class="stat-label">Total Income</p> <p class="stat-amount" id="total-income">$0.00</p> </div> </div>
- Component Structure: Card-based layout patterns for financial metrics
-
Modern CSS Patterns: CSS Grid and Flexbox Examples
- Flexbox Navigation: Header navigation alignment
/* Flexbox pattern from CSS-Tricks in styles.css lines 65-72 */ .nav { display: flex; align-items: center; justify-content: space-between; }
- Flexbox Navigation: Header navigation alignment
-
JavaScript.info Tutorial: LocalStorage Tutorial
-
Storage Implementation Patterns:
/* LocalStorage wrapper pattern from JavaScript.info - storage.js lines 200-215 */ function safeJsonParse(jsonString, fallback = []) { try { return JSON.parse(jsonString) || fallback; } catch (error) { console.error('JSON parse error:', error); return fallback; } }
-
MDN Web Docs: Fetch API and DOM Manipulation
- Event Handling Patterns:
/* Modern event handling from MDN examples - script.js lines 45-65 */ document.addEventListener('DOMContentLoaded', function() { initializeApp(); setupEventListeners(); });
- Event Handling Patterns:
-
ES6+ Features Implementation:
// Destructuring and arrow functions from modern JS best practices const { start, end } = getCurrentMonthRange(); // utils.js line 234 const incomeTransactions = transactions.filter(t => t.type === 'income'); // storage.js line 156
-
Modal Accessibility Implementation: Stack Overflow - Focus Management
/* Focus trap implementation adapted from Stack Overflow - script.js lines 89-105 */ function openAddTransactionModal() { const modal = document.getElementById('transaction-modal'); modal.classList.add('active'); modal.setAttribute('aria-hidden', 'false'); // Focus first input (adapted from Stack Overflow solution) const firstInput = modal.querySelector('input, select'); if (firstInput) { setTimeout(() => firstInput.focus(), 100); } }
-
LocalStorage Quota Detection: Stack Overflow - Storage Limits
/* Storage quota check adapted from Stack Overflow - storage.js lines 45-55 */ function isLocalStorageAvailable() { try { const test = '__test__'; localStorage.setItem(test, test); localStorage.removeItem(test); return true; } catch (e) { return false; } }
- Web Storage API Best Practices:
// LocalStorage wrapper pattern in storage.js lines 78-95 function getTransactions() { try { const data = localStorage.getItem(STORAGE_KEYS.TRANSACTIONS); return data ? JSON.parse(data) : []; } catch (error) { console.error('Failed to get transactions:', error); return []; } }
Bootstrap Grid ConceptsBootstrap Grid System
- Responsive Grid System: Adapted Bootstrap's grid principles without the framework
/* Bootstrap-inspired responsive grid in styles.css lines 180-195 */ .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--spacing-lg); }
- Tailwind CSS Utilities: Tailwind CSS Documentation
- Utility-First CSS Approach: Color and spacing system inspiration
/* Tailwind-inspired utility system - styles.css lines 25-40 */ --spacing-xs: 0.25rem; /* 4px */ --spacing-sm: 0.5rem; /* 8px */ --spacing-md: 1rem; /* 16px */ --spacing-lg: 1.5rem; /* 24px */
- Utility-First CSS Approach: Color and spacing system inspiration
- Card Elevation and Shadows:
/* Material Design shadow system adapted in styles.css lines 45-50 */ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
- Extensions Used:
- Live Server: Local development server
- Prettier: Code formatting
- HTML CSS Support: Enhanced CSS intellisense
- Chrome DevTools: Performance profiling and responsive design testing
- Firefox Developer Tools: CSS Grid inspection and accessibility auditing
- JavaScript Guide: MDN JavaScript
- LocalStorage API implementation patterns
- ES6+ feature usage throughout the application
- DOM manipulation best practices
- Flexbox Guide: CSS-Tricks Flexbox Guide
- Navigation Layout:
/* Flexbox pattern from CSS-Tricks - styles.css lines 128-135 */ .nav { display: flex; align-items: center; justify-content: space-between; max-width: 1400px; margin: 0 auto; }
- Navigation Layout:
- CSS Grid Guide: CSS-Tricks CSS Grid Guide
- Dashboard Layout:
/* CSS Grid implementation from CSS-Tricks guide - styles.css lines 418-423 */ .dashboard-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); gap: var(--spacing-xl); margin-bottom: var(--spacing-2xl); }
- Dashboard Layout:
- Custom Properties: CSS variables usage throughout the stylesheet
- "JavaScript Crash Course" - Modern JS patterns used in the application
- "CSS Grid Tutorial" - Layout techniques implemented in the dashboard
- "Chart.js Tutorial" - Data visualization implementation guidance
-
Date Utility Functions: Generated and modified for financial date handling
/* ChatGPT generated date range calculation - utils.js lines 234-270 */ function getDateRange(period) { const now = new Date(); const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); switch (period) { case 'today': return { start: today.toISOString().split('T')[0], end: today.toISOString().split('T')[0] }; case 'week': const weekStart = new Date(today); weekStart.setDate(today.getDate() - today.getDay()); // ... additional logic modified for project needs } }
Modifications Made: Added financial-specific period handling, integrated with transaction filtering system
-
Chart Color Generation: Base algorithm from ChatGPT, customized for financial categories
/* ChatGPT generated color mapping - utils.js lines 310-325 */ function getCategoryColor(categoryId) { const colors = { food: '#FF6B6B', transport: '#4ECDC4', entertainment: '#45B7D1', shopping: '#96CEB4' // ... extended with financial-specific categories }; return colors[categoryId] || colors.other; }
Modifications Made: Integrated T-Bank color palette, added financial category mappings
-
Responsive Navigation Toggle: ChatGPT base code, adapted for banking interface
/* ChatGPT responsive navigation pattern - responsive.css lines 25-45 */ @media (max-width: 768px) { .nav { flex-direction: column; gap: var(--spacing-md); padding: var(--spacing-md); } .nav-menu { width: 100%; justify-content: center; flex-wrap: wrap; } }
Modifications Made: Applied T-Bank design system variables, integrated banking-specific spacing
- 100% Original Implementation: All JavaScript logic, data structures, and business rules
- Adapted Design Patterns: CSS layouts, color schemes, and UI components from referenced sources
- Modified Library Integration: Chart.js configuration customized for financial data display
- Inspired Architecture: Dashboard structure influenced by professional fintech templates
- styles.css: T-Bank color palette (lines 8-20), Tabler grid system (lines 234-240)
- components.css: Material Design shadows (lines 45-50), Bootstrap form patterns (lines 156-200)
- script.js: Modern JS event patterns, original application logic
- storage.js: LocalStorage patterns inspired by financial-dashboard repository
- dashboard.js: 100% original financial calculation and display logic
- utils.js: Currency formatting adapted from financial application examples
-
Unicode Emoji Standard: Financial category icons (π, π, π¬, π°)
- Source: Unicode Emoji Charts
- Implementation: Category visualization throughout the application
-
System Font Stack: Platform-optimized typography
/* System font implementation - styles.css lines 18-19 */ --font-family-primary: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
-
W3C HTML Validator: Used for semantic markup validation
-
W3C CSS Validator (Jigsaw): Used for CSS standards compliance
-
JSHint: JavaScript code quality analysis
-
WAVE Accessibility Checker: Used for accessibility compliance testing
-
Google PageSpeed Insights: Performance optimization guidance
All external code has been properly attributed, modified for educational purposes, and integrated into an original financial management application. The project serves as a learning tool combining industry best practices with custom implementation.
Β© 2024 Personal Finance Dashboard. Built with privacy and simplicity in mind.








.png)

.png)

























