Overview
The Student Finance Tracker is a progressive web application designed to help students manage their personal finances effectively. Built entirely with vanilla HTML, CSS, and JavaScript (ES6+ modules), it demonstrates modern web development practices including client-side state management, data persistence, and responsive design—all without external frameworks.
Key Features
- Transaction Management: Add, edit, delete, and view all your financial transactions with full CRUD operations
- Advanced Search: Use regex patterns to search and filter transactions by description, category, amount, or date
- Budget Tracking: Set a monthly budget cap and monitor spending with real-time progress indicators and warnings
- Statistics Dashboard: View spending trends, category breakdowns, and last 7 days spending summary
- Multi-Currency Support: Work with USD, EUR, and RWF with instant currency conversion
- Data Portability: Import and export your data as JSON for backup and migration
- Offline Storage: All data stored locally using localStorage API—works offline
- Service Worker Support: Progressive Web App capabilities for enhanced offline functionality
- Dark Mode: Toggle between light and dark themes with theme preference persistence
Technical Implementation
Technologies Used
- HTML5 with semantic markup and accessibility features
- CSS3 with custom properties, CSS Grid, and Flexbox
- Vanilla JavaScript (ES6+ modules)
- localStorage API for persistent client-side storage
- Regular expressions for validation and advanced search
- Service Workers for offline functionality
- Google Fonts for typography
Architecture
The application follows a modular architecture with clear separation of concerns:
- storage.js: Handles all localStorage operations and data persistence
- validators.js: Comprehensive regex-based validation for all input fields
- state.js: State management including sorting and currency formatting
- ui.js: UI rendering utilities and status notifications
- dashboard.js: Dashboard statistics and budget tracking display
- form.js: Transaction form handling (add/edit)
- main.js: Transaction list and general page routing
- settings.js: Settings management including budget and currency configuration
- theme.js: Dark mode toggle functionality
Validation Rules
The application implements comprehensive regex-based validation:
- Description: 3-100 characters, alphanumeric with basic punctuation (no duplicate consecutive words)
- Amount: Decimal format, 1-4 digits with up to 2 decimal places (0.01 to 9999.99)
- Date: ISO format (YYYY-MM-DD), cannot be in the future
- Category: Predefined list (Food, Transport, Entertainment, Education, Shopping, Bills, Health, Other)
Accessibility Features
This application is built with accessibility as a priority:
- WCAG 2.1 Level AA compliant design and functionality
- Full keyboard navigation support (Tab, Shift+Tab, Enter, Escape)
- ARIA labels, live regions, and semantic HTML landmarks
- Semantic HTML structure for screen readers
- High contrast color scheme (4.5:1 minimum ratio)
- Skip navigation links for keyboard users
- Responsive design that works on all device sizes
- Focus management and visible focus indicators
Project Structure
student-finance-tracker/
├── index.html # Dashboard
├── transactions.html # Transaction list & search
├── add.html # Add/Edit transaction form
├── settings.html # Budget & currency settings
├── about.html # This page
├── styles/
│ └── main.css # All responsive styles
├── scripts/
│ ├── storage.js # localStorage operations
│ ├── validators.js # Regex validation
│ ├── state.js # State management
│ ├── ui.js # UI rendering
│ ├── dashboard.js # Dashboard logic
│ ├── form.js # Add/Edit form
│ ├── main.js # Transactions & routing
│ ├── settings.js # Settings logic
│ ├── theme.js # Dark mode
│ ├── sw.js # Service Worker
│ └── sw-register.js # SW registration
├── seed.json # Sample data
└── README.md # Documentation
Data Persistence
All data is stored in the browser's localStorage with JSON serialization. This means:
- Data persists across browser sessions
- No server or database required
- Complete user privacy—data never leaves your device
- Typical storage limit of 5-10MB per domain
- Users can export data as JSON backup files
Browser Compatibility
This application requires a modern browser that supports:
- ES6+ JavaScript (arrow functions, template literals, modules)
- CSS Custom Properties and CSS Grid/Flexbox
- localStorage API
- Fetch API
Tested on: Chrome 90+, Firefox 88+, Safari 14+, Edge 90+
Educational Purpose
This project demonstrates proficiency in:
- Semantic HTML5 structure and accessibility
- Responsive CSS design and modern layout techniques
- JavaScript ES6+ modules and functional programming
- Regular expressions for validation and pattern matching
- Client-side data persistence with localStorage
- Event-driven programming and DOM manipulation
- User experience design and accessibility best practices
- Progressive enhancement and offline-first principles
Contact & Resources
For questions, feedback, or contributions:
- Email: i.ntwali@alustudent.com
- GitHub: @realigor007