A comprehensive Rails 8.0.2 expense tracking application designed for Costa Rican banking systems with advanced categorization, real-time synchronization, and intelligent expense management.
- Email-based Expense Extraction: Automatic parsing of bank emails to extract expense data
- Intelligent Categorization: AI-powered expense categorization with learning capabilities
- Real-time Dashboard: Live expense tracking with performance-optimized queries (<50ms)
- Multi-bank Support: Compatible with Costa Rican banking systems
- API Integration: iPhone Shortcuts support via webhook endpoints
- View Toggle System: Compact/expanded expense views with persistent user preferences
- Inline Quick Actions: Rapid expense management with keyboard navigation support
- Batch Selection System: Bulk operations with full accessibility compliance
- Financial Confidence Design: Professional color palette optimized for financial applications
- Keyboard Navigation: Complete keyboard accessibility (WCAG 2.1 AA compliant)
- Performance Optimized: Strategic database indexing with <50ms query targets
- Real-time Updates: WebSocket broadcasting for live data synchronization
- Background Processing: Solid Queue for reliable job processing
- Security Hardened: Encrypted credentials, API token authentication, pre-commit security scanning
- Comprehensive Testing: 236+ test examples with 100% pass rate
Backend:
- Ruby on Rails 8.0.2
- PostgreSQL database with performance optimization
- Solid Cache, Queue, and Cable for high performance
- Puma web server
Frontend:
- Turbo and Stimulus (Hotwire) for SPA-like behavior
- Tailwind CSS with Financial Confidence color palette
- Import maps for JavaScript modules
- Propshaft asset pipeline
Testing & Quality:
- RSpec with Capybara for system testing
- RuboCop (rails-omakase) for code quality
- Brakeman for security analysis
- Rails Best Practices compliance
- Pre-commit hooks for quality gates
The application follows Domain-Driven Design principles:
app/services/
├── Email Domain
│ ├── ProcessingService - Email parsing and expense extraction
│ └── SyncService - Synchronization orchestration
├── Categorization Domain
│ ├── BulkCategorizationService - Bulk operations
│ └── Categorization::Engine - ML-powered categorization
├── Infrastructure Domain
│ ├── BroadcastService - WebSocket reliability
│ └── MonitoringService - System health tracking
└── Dashboard Domain
├── DashboardService - Dashboard data aggregation
└── DashboardExpenseFilterService - Enhanced filtering
Core Models:
Category- Expense categorization with hierarchical supportEmailAccount- Bank email account configurationExpense- Central expense records with full metadataParsingRule- Configurable email parsing patternsApiToken- Secure API authenticationBudget- Budget tracking and monitoring
Performance Features:
- Strategic indexing for common query patterns
- Optimized foreign key relationships
- Efficient pagination and filtering
- Query performance monitoring
- Ruby 3.2+
- PostgreSQL 14+
- Node.js 18+ (for asset compilation)
- Redis (for Solid Cache/Queue)
-
Clone the repository:
git clone <repository-url> cd expense_tracker
-
Install dependencies:
bundle install npm install # If using npm packages -
Database setup:
bin/rails db:setup # This creates database, loads schema, and seeds with Costa Rican data -
Configure credentials:
bin/rails credentials:edit # Add email account settings, API keys, etc. -
Start the application:
bin/dev # Runs Rails server, Tailwind watcher, and background jobs
# Server
bin/rails server # Start development server
bin/rails console # Rails console
# Testing
bin/rails test # Run test suite (excludes system tests)
bin/rails test:system # Run system tests
bin/rails test:all # Run all tests
bundle exec rspec # Run RSpec tests
# Database
bin/rails db:migrate # Run migrations
bin/rails db:reset # Reset database
# Assets
tailwindcss:build # Build CSS
tailwindcss:watch # Watch CSS changes
# Code Quality
bundle exec rubocop # Ruby linting
bundle exec brakeman # Security analysisThe project follows a multi-agent development pattern established during Epic 3:
- Implementation: Senior architect implements core functionality
- Review: Tech lead reviews and refines architecture
- Testing: QA strategist ensures comprehensive testing
- Integration: Final validation and performance testing
Quality Gates:
- A-grade code quality (90+ scores)
- 100% test coverage expectation
- <50ms database query performance
- WCAG 2.1 AA accessibility compliance
- Rails Best Practices adherence
Service Layer Pattern:
# Extend base services for specialized functionality
class DashboardExpenseFilterService < ExpenseFilterService
# Add dashboard-specific logic while maintaining compatibility
endStimulus Controller Standards:
- Keyboard navigation support
- Accessibility attributes
- Performance optimization
- Error handling
Testing Organization:
describe "Feature" do
context "User Interaction" do
it "handles primary flow" { }
end
context "Keyboard Navigation" do
it "supports accessibility" { }
end
context "Performance" do
it "meets requirements" { }
end
endConfigure bank email accounts in Rails credentials:
email_accounts:
bac_san_jose:
email: "notifications@baccredomatic.com"
imap_server: "mail.baccredomatic.com"
# ... other settingsFor iPhone Shortcuts integration:
api:
webhook_token: "secure_token_here"
allowed_origins: ["shortcuts://"]Database and caching settings in config/database.yml and config/cache.yml.
- Unit Tests: Model validations, service logic
- Integration Tests: Cross-service communication
- System Tests: Full user workflows, accessibility
- Performance Tests: Query optimization, load testing
# Quick test suite (excludes system tests)
bin/rails test
# Full test suite including system tests
bin/rails test:all
# RSpec tests (comprehensive suite)
bundle exec rspec
# Specific test categories
bundle exec rspec spec/models/
bundle exec rspec spec/services/
bundle exec rspec spec/system/The project maintains comprehensive test coverage:
- 236+ test examples
- 100% pass rate target
- Model, service, and system test coverage
- Performance benchmarking tests
- All tests passing
- Security scan clean (Brakeman)
- Code quality check (RuboCop)
- Performance benchmarks met
- Database migrations tested
- Configure Redis for Solid Cache/Queue
- Set up PostgreSQL with performance tuning
- Configure SSL certificates
- Set up monitoring and logging
- Configure backup strategies
Follow the established patterns documented in rules/:
- Use Financial Confidence color palette
- Follow accessibility requirements (WCAG 2.1 AA)
- Maintain test coverage
- Follow conventional commit messages
- Use pre-commit hooks for quality checks
When running multiple development sessions concurrently (e.g., multiple Claude Code instances), use git worktrees with isolated test databases to avoid PostgreSQL deadlocks:
# 1. Create a worktree
git worktree add .worktrees/my-feature -b my-feature main
cd .worktrees/my-feature
# 2. Edit config/database.yml — change test database name (use unique name per worktree)
# database: expense_tracker_test_<worktree-name><%= ENV['TEST_ENV_NUMBER'] %>
# 3. Set up the isolated test database
bundle install
RAILS_ENV=test bin/rails db:create
RAILS_ENV=test bin/rails db:schema:load
# 4. Work normally — no deadlocks with other sessionsThe
.worktrees/directory is already gitignored. Don't commit thedatabase.ymlchange.
- Feature branches:
epic-N-feature-description - Comprehensive testing before PR
- Multi-agent review process
- Strategic indexing for common patterns
- Query optimization (<50ms targets)
- Efficient pagination and filtering
- Performance monitoring
- Optimized Tailwind CSS compilation
- Efficient Stimulus controllers
- Image optimization and lazy loading
- JavaScript performance budgets
- Solid Queue for reliable processing
- Job monitoring and retry logic
- Performance metrics and alerting
- Encrypted Rails credentials
- API token authentication
- Pre-commit security scanning (Brakeman)
- Input validation and sanitization
- SQL injection prevention
- Regular security audits
- Dependency vulnerability scanning
- Security-focused code reviews
- Production security monitoring
[Add your license information here]
For development questions or issues:
- Check the established development patterns in
CLAUDE.md - Review the comprehensive rule documentation in
rules/ - Examine existing test patterns for guidance
- Follow the multi-agent development workflow for complex features
Built with Rails 8.0.2 • Designed for Costa Rican Banking Systems • Optimized for Performance & Accessibility