Create a SwiftUI Personal Finance Tracker app using SwiftData with the following features:
-
Data Models:
- Category: name, color, monthly budget amount, icon (SF Symbol name)
- Transaction: amount, date, note, relationship to Category
- Use SwiftData for persistence with proper relationships
-
Main Dashboard:
- List of categories showing: name, icon, color
- For each category: amount spent this month vs budget
- Progress bar or ring showing budget utilization
- Visual warning (red) when over budget
- Total spent this month across all categories
-
Add Transaction:
- Sheet to add new expense
- Fields: amount (currency input), category picker, date picker, optional note
- Quick "today" date default
- Validation for required fields
-
Category Management:
- List of all categories
- Add/edit categories with name, budget amount, color picker, SF Symbol picker
- Include common defaults: Groceries, Dining, Transport, Entertainment, Shopping
-
Transaction History:
- List of recent transactions grouped by date
- Show category icon, name, amount, note
- Swipe to delete
- Filter by category and date range
-
Category Detail View:
- Show all transactions for that category this month
- Display chart showing spending over time (line or bar chart using Swift Charts)
- Show remaining budget amount
Use modern SwiftUI patterns with proper MVVM separation. Follow SwiftData best practices for relationships and queries. Include sample data with 3-5 default categories and some test transactions.