- Webhook models: remove duplicate index definitions so db.create_all()
no longer raises 'index already exists' (columns already have index=True)
- ImportService: fix circular import by late-importing ClientService,
ProjectService, TimeTrackingService in __init__
- reports: fix F823 by renaming unpack variable _ to _entry_count to avoid
shadowing gettext _ in export_task_excel()
- Code quality: add .flake8 with extend-ignore so flake8 CI passes;
simplify pyproject.toml isort config (drop unsupported options)
- Format: run black and isort on app/
- tests: restore minimal app fixture in test_import_export_models
- Normalize line endings from CRLF to LF across all files to match .editorconfig
- Standardize quote style from single quotes to double quotes
- Normalize whitespace and formatting throughout codebase
- Apply consistent code style across 372 files including:
* Application code (models, routes, services, utils)
* Test files
* Configuration files
* CI/CD workflows
This ensures consistency with the project's .editorconfig settings and
improves code maintainability.
- Add CRM models: Contact, ContactCommunication, Deal, DealActivity, Lead, LeadActivity
- Support multiple contacts per client with primary contact designation
- Track sales pipeline with deals and opportunities
- Manage leads with conversion tracking
- Record communication history with contacts
- Add CRM routes and templates
- Contact management (list, create, view, edit, delete)
- Deal management with pipeline view
- Lead management with conversion workflow
- Communication history tracking
- Fix SQLAlchemy relationship conflicts
- Specify foreign_keys for Deal.lead relationship to resolve ambiguity
- Remove duplicate backref definitions in DealActivity and LeadActivity
- Improve migration 062 robustness
- Add index existence checks before creation
- Handle partial migration states gracefully
- Support both assigned_to and assignee_id column names
- Add error handling for missing CRM tables
- Gracefully handle cases where migration 063 hasn't run yet
- Prevent application crashes when CRM tables don't exist
- Add database migration 063 for CRM features
- Create contacts, contact_communications, deals, deal_activities, leads, lead_activities tables
- Set up proper foreign key relationships and indexes
- Update documentation
- Add CRM features to FEATURES_COMPLETE.md
- Create CRM implementation documentation
- Add feature gap analysis documentation