- 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
- Add render.yaml Blueprint: PostgreSQL + Python web service, auto-deploy on push
- Add demo mode (DEMO_MODE, DEMO_USERNAME, DEMO_PASSWORD): single fixed user only
- Login page shows demo credentials when demo mode is active
- Disable self-registration, admin user creation, and OIDC user creation in demo mode
- DB init creates demo user with password when DEMO_MODE is true
- Add docs/deploy/RENDER.md with deployment and demo mode instructions
- Improve expenses route with additional functionality
- Enhance admin route with new features
- Update auth route with improved authentication handling
- Extend user model with new capabilities
- Update expenses view template
- Improve config manager utility
- 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.
Implement a configuration management system where settings changed via
WebUI take priority over .env values, while .env values are used as initial
startup values.
Changes:
- Update ConfigManager.get_setting() to check Settings model first, then
environment variables, ensuring WebUI changes have highest priority
- Add Settings._initialize_from_env() method to initialize new Settings
instances from .env file values on first creation
- Update Settings.get_settings() to automatically initialize from .env
when creating a new Settings instance
- Add Settings initialization in create_app() to ensure .env values are
loaded on application startup
- Add comprehensive test suite (test_config_priority.py) covering:
* Settings priority over environment variables
* .env values used as initial startup values
* WebUI changes persisting and taking priority
* Proper type handling for different setting types
This ensures that:
1. .env file values are used as initial configuration on first startup
2. Settings changed via WebUI are saved to database and take priority
3. Configuration priority order: Settings (DB) > .env > app config > defaults
Fixes configuration management workflow where users can set initial values
in .env but override them permanently via WebUI without modifying .env.