Implementation Plan: Budget Application
Overview
This implementation plan follows an end-to-end delivery approach, building a working web application that can be loaded in the browser from day one. Each feature is implemented completely (frontend + backend + database) before moving to the next feature. This ensures continuous user testing and validation rather than theoretical functionality.
Development Philosophy
End-to-End Feature Delivery:
- Start with a deployable “Hello World” application
- Add one complete feature at a time (UI + API + database)
- Every increment should be testable in the browser
- Prioritize working software over comprehensive testing initially
- User testing (by you) drives iteration, not unit tests
Feature Priority Order:
- Core transaction tracking (accounts → transactions → balances)
- Transaction management (editing, deletion)
- Categorization for analysis
- Planning and forecasting
- Advanced budgeting (pots, goals)
Tasks
Phase 1: Deployable Foundation
-
[ ] 1. Create minimal deployable application
- Set up CDK infrastructure (Lambda, API Gateway, DynamoDB, S3, CloudFront)
- Create “Hello World” HTML page served from Lambda
- Deploy to AWS and verify it loads in browser
- Set up basic TypeScript build and deployment pipeline
- Requirements: 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7
-
[ ] 2. Set up basic application structure
- Create core library structure with minimal interfaces
- Set up HTTP request routing and basic error handling
- Add DynamoDB connection and basic table structure
- Create simple HTML template system for pages
- Requirements: 21.1, 21.2, 21.6, 21.7
Phase 2: Account Management
-
[ ] 3. Implement account creation (end-to-end)
-
[ ] 3.1 Create account creation UI
- Add HTML form for account name, description, notes
- Style with basic CSS for usable interface
- Requirements: 13.1, 13.2
-
[ ] 3.2 Implement account creation backend
- Create AccountService.create() method with DynamoDB storage
- Generate UUIDs and store account metadata with versioning
- Include userId in database keys for security
- Requirements: 4.1, 4.2, 4.3, 22.1, 22.2, 22.4
-
[ ] 3.3 Wire account creation form to backend
- Handle form submission and validation
- Display success/error messages to user
- Redirect to account list after successful creation
- Requirements: 12.1, 12.2, 12.8
-
-
[ ] 4. Implement account listing (end-to-end)
-
[ ] 4.1 Create account listing UI
- Display all accounts with names and metadata
- Show account balances (initially zero)
- Add navigation to account creation form
- Requirements: 13.1, 13.3
-
[ ] 4.2 Implement account listing backend
- Create AccountService.list() method
- Calculate and display account balances
- Requirements: 4.4, 4.5
-
[ ] 4.3 Test complete account workflow
- Verify account creation and listing works end-to-end
- Test in deployed environment, not just locally
- Requirements: 18.2, 18.8
-
Phase 3: Transaction Creation
- [ ] 5. Implement transaction creation (end-to-end)
-
[ ] 5.1 Create transaction creation UI
- Add form for amount, date, type (income/expense/transfer)
- Include source/destination account selection
- Add description and notes fields
- Requirements: 14.7
-
[ ] 5.2 Implement transaction event creation backend
- Create EventService for ULID-ordered event creation
- Create TransactionService.create() that generates events
- Store events in DynamoDB with proper key patterns
- Requirements: 9.1, 9.2, 9.7, 10.1, 22.1, 22.2
-
[ ] 5.3 Wire transaction creation to backend
- Handle form validation (positive amounts, valid dates, endpoint selection)
- Create transaction creation events
- Display success/error feedback
- Requirements: 10.2, 10.9, 10.10, 12.1, 12.3
-
Phase 4: State Calculation and Balance Display
- [ ] 6. Implement transaction-to-state calculation
-
[ ] 6.1 Create state calculation engine
- Implement event stream processing to reconstruct transactions
- Apply transactions to calculate account balances
- Handle transaction type ordering (income → transfers → expenses)
- Requirements: 11.1, 11.2, 11.3, 11.4
-
[ ] 6.2 Update account listing with real balances
- Connect account listing to state calculation
- Display current balances based on transactions
- Requirements: 4.4, 13.3
-
[ ] 6.3 Test transaction creation and balance updates
- Create transactions and verify balances update correctly
- Test different transaction types and amounts
- Requirements: 10.8, 11.1
-
Phase 5: Transaction Listing and Monthly Views
- [ ] 7. Implement transaction listing (end-to-end)
-
[ ] 7.1 Create transaction listing UI
- Display transactions for current month by default
- Show transaction details (date, amount, type, description)
- Display running balance calculations
- Requirements: 14.1, 14.5, 14.6
-
[ ] 7.2 Implement transaction listing backend
- Create TransactionService.list() with date filtering
- Support account-specific transaction filtering
- Calculate running balances for display
- Requirements: 14.1, 14.5, 14.6
-
[ ] 7.3 Wire transaction listing to UI
- Connect backend transaction queries to frontend display
- Show starting balance, ending balance, and running totals
- Requirements: 14.6
-
Phase 6: Navigation and Month Selection
- [ ] 8. Implement month and account navigation
-
[ ] 8.1 Add month navigation controls
- Create previous/next month navigation
- Display current year and month clearly
- Preserve account selection when changing months
- Requirements: 14.2, 14.3
-
[ ] 8.2 Add account selection dropdown
- Create account selection dropdown in transaction view
- Preserve month selection when changing accounts
- Support “all accounts” view
- Requirements: 14.4
-
[ ] 8.3 Test complete navigation workflow
- Verify month navigation works correctly
- Test account filtering and selection
- Ensure URL parameters work for bookmarking
- Requirements: 14.2, 14.3, 14.4
-
Checkpoint: Working Transaction Tracking System At this point, you have a fully functional transaction tracking application that provides real user value.
Phase 7: Account Metadata Management
- [ ] 9. Implement account editing
-
[ ] 9.1 Create account editing UI
- Add edit forms for account name, description, notes
- Support account activation/deactivation
- Requirements: 13.2, 20.1, 20.5
-
[ ] 9.2 Implement account metadata updates
- Create AccountService.update() with metadata versioning
- Handle conditional updates to prevent conflicts
- Requirements: 4.6, 3.8
-
[ ] 9.3 Wire account editing to backend
- Handle form submission and validation
- Display updated account information
- Requirements: 13.2
-
Phase 8: Transaction Management
-
[ ] 10. Implement transaction editing
-
[ ] 10.1 Create transaction editing UI
- Add edit forms for existing transactions
- Support changing amount, date, description, accounts
- Requirements: 14.7
-
[ ] 10.2 Implement transaction update events
- Create TransactionService.update() that generates update events
- Preserve transaction history through event sourcing
- Requirements: 9.3, 10.8
-
[ ] 10.3 Wire transaction editing to backend
- Handle transaction updates and validation
- Refresh transaction list and balances after updates
- Requirements: 10.8
-
-
[ ] 11. Implement transaction deletion
-
[ ] 11.1 Add transaction deletion UI
- Add delete buttons/confirmation dialogs
- Requirements: 14.7
-
[ ] 11.2 Implement transaction deletion events
- Create TransactionService.delete() that generates delete events
- Maintain audit trail through event sourcing
- Requirements: 9.4
-
[ ] 11.3 Wire transaction deletion to backend
- Handle deletion requests and confirmation
- Update transaction list and balances after deletion
- Requirements: 9.4
-
Phase 9: Category Support
- [ ] 12. Implement category management (end-to-end)
-
[ ] 12.1 Create category management UI
- Add category creation and listing interface
- Support category editing and activation/deactivation
- Requirements: 15.1, 15.2, 15.3
-
[ ] 12.2 Implement category backend services
- Create CategoryService with CRUD operations
- Include metadata versioning and active status
- Requirements: 7.1, 7.2, 7.5, 20.1
-
[ ] 12.3 Add category selection to transactions
- Update transaction forms to include category selection
- Display categories in transaction listings
- Requirements: 14.7
-
Checkpoint: Complete Transaction Management System At this point, you have a fully functional transaction management system with categorization.
Phase 10: Plan Creation and Management
- [ ] 13. Implement plan creation (end-to-end)
-
[ ] 13.1 Create plan creation UI
- Add forms for plan metadata (name, amount, source, destination)
- Support schedule configuration (one-time, monthly, weekly)
- Include weekend adjustment options
- Requirements: 16.1, 16.2
-
[ ] 13.2 Implement plan backend services
- Create PlanService with scheduling logic
- Calculate next execution dates based on plan type
- Requirements: 6.1, 6.2, 6.4, 6.5, 6.6, 6.7, 6.8, 6.9, 6.10
-
[ ] 13.3 Wire plan creation to backend
- Handle plan creation and validation
- Display created plans in management interface
- Requirements: 16.3
-
Phase 11: Combined Transaction Views (Realized + Planned)
- [ ] 14. Implement planned transaction generation
-
[ ] 14.1 Create planned transaction calculation
- Implement PlanService.generatePlannedTransactions()
- Generate future transactions based on active plans
- Respect lastRealizedDate to prevent duplicates
- Requirements: 6.19, 6.20
-
[ ] 14.2 Update transaction listing to show planned transactions
- Display both realized and planned transactions
- Visually distinguish planned vs realized transactions
- Requirements: 14.5
-
[ ] 14.3 Update balance calculations for planned transactions
- Include planned transactions in balance projections
- Show projected balances for future months
- Requirements: 11.1
-
Phase 12: Plan Realization
- [ ] 15. Implement plan realization
-
[ ] 15.1 Create plan realization UI
- Add buttons/interface to realize planned transactions
- Support batch realization up to specific dates
- Requirements: 16.2
-
[ ] 15.2 Implement plan realization backend
- Create PlanService.realize() method
- Convert planned transactions to actual transaction events
- Update lastRealizedDate tracking
- Requirements: 6.18, 6.19
-
[ ] 15.3 Wire plan realization to UI
- Handle realization requests and confirmation
- Update transaction views after realization
- Requirements: 16.2
-
Phase 13: Plan Management
- [ ] 16. Implement plan updates and lifecycle management
-
[ ] 16.1 Create plan editing UI
- Support editing plan metadata and schedules
- Add plan activation/deactivation controls
- Requirements: 16.2, 16.3
-
[ ] 16.2 Implement plan update backend
- Create plan update methods with versioning
- Handle plan deactivation and reactivation
- Requirements: 6.11, 6.12, 6.13
-
[ ] 16.3 Wire plan management to backend
- Handle plan updates and status changes
- Refresh planned transaction views after changes
- Requirements: 16.3
-
Checkpoint: Complete Planning and Forecasting System At this point, you have a fully functional system for planning and forecasting transactions.
Phase 14: Pot Support
- [ ] 17. Implement pot management (end-to-end)
-
[ ] 17.1 Create pot management UI
- Add pot creation forms with parent account selection
- Display pots within their parent accounts
- Requirements: 13.1, 13.3
-
[ ] 17.2 Implement pot backend services
- Create PotService with parent account relationships
- Implement pot balance constraints (no negative balances)
- Handle pot overflow to parent account
- Requirements: 5.1, 5.2, 5.4, 5.5, 5.6, 5.7
-
[ ] 17.3 Update transaction system for pot support
- Add pot selection to transaction forms
- Update balance calculations for pot constraints
- Requirements: 5.7, 10.3, 10.4, 10.5
-
Phase 15: Goal Support
- [ ] 18. Implement goal management (end-to-end)
-
[ ] 18.1 Create goal management UI
- Add goal creation forms for pots
- Display goal progress and required contributions
- Support manual achievement marking
- Requirements: 13.4
-
[ ] 18.2 Implement goal backend services
- Create GoalService with achievement tracking
- Calculate required periodic contributions
- Handle manual achievement status changes
- Requirements: 8.1, 8.2, 8.4, 8.5, 8.6, 8.7, 8.8, 8.9, 8.10, 8.11, 8.12
-
[ ] 18.3 Wire goal management to UI
- Display goal progress in pot listings
- Show achievement status and contribution requirements
- Requirements: 13.4
-
Phase 16: Production Readiness
- [ ] 19. Add authentication and production features
-
[ ] 19.1 Implement Cognito authentication
- Add user registration and login flows
- Implement JWT token handling and refresh
- Requirements: 1.8, 1.9, 1.10, 1.11
-
[ ] 19.2 Add multi-user and multi-budget support
- Implement user isolation and budget management
- Add budget creation and selection UI
- Requirements: 2.1, 2.2, 2.3, 2.4, 2.5, 2.6
-
[ ] 19.3 Production deployment and monitoring
- Set up production environment with authentication
- Add monitoring, logging, and error tracking
- Requirements: 18.5, 18.6
-
Notes
- Every task delivers working functionality that can be tested in the browser
- Each phase builds incrementally on the previous phase
- User testing drives iteration rather than theoretical unit tests
- Authentication is added only at the end to simplify development
- The system provides real user value starting from Phase 6