Commit Graph

382 Commits

Author SHA1 Message Date
Dries Peeters 2cbc029d33 Updated testing 2025-10-22 11:25:10 +02:00
Dries Peeters 34946e1b80 feat: Make user profile pictures persistent across Docker updates
Store user avatars in persistent /data volume instead of application
directory to ensure profile pictures survive container rebuilds and
version updates.

Changes:
- Update avatar upload folder from app/static/uploads/avatars to
  /data/uploads/avatars using existing app_data volume mount
- Modify get_avatar_upload_folder() in auth routes to use persistent
  location with UPLOAD_FOLDER config
- Update User.get_avatar_path() to reference new storage location
- Add migration script to safely move existing avatars to new location
- Preserve backward compatibility - no database changes required

Benefits:
- Profile pictures now persist between Docker image updates
- Consistent with company logo storage pattern (/data/uploads)
- Better user experience - avatars not lost during upgrades
- Production-ready data/code separation
- All persistent uploads consolidated in app_data volume

Migration:
For existing installations with user avatars, run:
  docker-compose run --rm app python /app/docker/migrate-avatar-storage.py

New installations work automatically with no action required.

Documentation:
- docs/AVATAR_STORAGE_MIGRATION.md - Full migration guide
- docs/AVATAR_PERSISTENCE_SUMMARY.md - Quick reference
- docs/TEST_AVATAR_PERSISTENCE.md - Testing guide
- AVATAR_PERSISTENCE_CHANGELOG.md - Detailed changelog

Files modified:
- app/routes/auth.py
- app/models/user.py

Files added:
- docker/migrate-avatar-storage.py
- docs/AVATAR_STORAGE_MIGRATION.md
- docs/AVATAR_PERSISTENCE_SUMMARY.md
- docs/TEST_AVATAR_PERSISTENCE.md
- AVATAR_PERSISTENCE_CHANGELOG.md

Tested: ✓ No linter errors, backward compatible, volume mount verified
2025-10-22 11:12:11 +02:00
Dries Peeters c523214c9b Merge pull request #116 from DRYTRIX/Feat-ProfilePictures
Feat profile pictures
2025-10-22 10:18:23 +02:00
Dries Peeters 81532fcd55 ci: implement RC branch-based release workflow
Refactor GitHub Actions workflows to support a release candidate (RC)
branch workflow instead of direct develop->main flow.

Changes:
- cd-development.yml: Trigger on PRs to RC branches (not push to develop)
  * Updated summary to show PR context (source/target branches)
  * Build development images when code is promoted to RC

- cd-release.yml: Trigger on PRs from RC to main/master
  * Added path filters for code changes only
  * Enables release validation before merge to main

- ci-comprehensive.yml: Run tests on PRs to RC branches
  * Full test suite now runs for PRs to main, master, and RC branches
  * Ensures code quality before RC promotion

New workflow:
  develop (push) -> no actions
  develop -> rc (PR) -> run tests + development build
  rc -> main (PR) -> run tests + release build

Supports both single RC branch (rc) and versioned RC branches (rc/*)

Breaking change: Development builds no longer trigger on push to develop.
They now require a PR to an RC branch.
2025-10-22 10:17:15 +02:00
Dries Peeters 6559dd948b fix: resolve profile picture upload issues
- Add client_max_body_size 10M to nginx config to fix 413 error
- Add JavaScript preview for profile picture selection
- Include client-side validation for file size and type
2025-10-22 10:10:14 +02:00
Dries Peeters 2f3b4e6779 Merge pull request #115 from DRYTRIX/develop
Develop
2025-10-22 09:57:05 +02:00
Dries Peeters e02dab56ff Update cd-development.yml 2025-10-22 09:45:08 +02:00
Dries Peeters 0fe6dcf25d Update cd-development.yml 2025-10-22 09:41:03 +02:00
Dries Peeters db864a103a Merge pull request #113 from DRYTRIX/develop
feat: enhance CI/CD workflows and improve UX features
v3.2.3
2025-10-22 08:59:49 +02:00
Dries Peeters 189fbb3b96 Update conftest.py 2025-10-22 08:50:29 +02:00
Dries Peeters a4c1b899af Update conftest.py 2025-10-22 08:40:42 +02:00
Dries Peeters 96747690de Update conftest.py 2025-10-22 08:15:49 +02:00
Dries Peeters c08c2d8f58 Update conftest.py 2025-10-22 08:13:57 +02:00
Dries Peeters e868a299fd Update conftest.py 2025-10-22 08:06:01 +02:00
Dries Peeters 6ecf6dadcf fix: Multiple UI/UX improvements and bulk delete implementation
Major Changes:
- Implement bulk delete functionality for tasks with custom confirmation dialog
  * Add /tasks/bulk-delete POST route with permission checks
  * Add checkboxes and "Delete Selected" button to task list
  * Skip tasks with time entries, provide detailed feedback
  * Log all deletions for audit trail
2025-10-22 08:00:48 +02:00
Dries Peeters 84e2096602 feat: enhance CI/CD workflows and improve UX features
This commit improves the testing workflow, CI/CD documentation, and user experience:

## CI/CD Improvements:
- Add comprehensive testing strategy documentation to CD release workflow
- Document workflow triggers and testing approach in ci-comprehensive.yml
- Update CI/CD documentation with testing workflow details

## UX Enhancements:
- Add localStorage persistence for PWA install prompt dismissal
- Prevent repeated PWA install prompts after user dismisses
- Add dismiss button (×) to PWA install toast notification

## Dashboard Features:
- Add edit and delete actions to recent time entries table
- Include delete confirmation dialogs for time entries
- Add notes field to "Start Timer" modal
- Improve table layout with actions column

## Documentation:
- Create TESTING_WORKFLOW_STRATEGY.md for comprehensive testing guidelines
- Add QUICK_REFERENCE_TESTING.md for quick testing reference
- Document changes in CHANGES_SUMMARY_TESTING_WORKFLOW.md
- Update README_CI_CD_SECTION.md with workflow details

## Other Changes:
- Update setup.py configuration
- Enhance task templates (create/edit/view) with improved UI

These changes improve developer experience with better testing documentation
and enhance user experience with smarter PWA prompts and dashboard functionality.
2025-10-22 07:28:39 +02:00
Dries Peeters 73c9316b77 feat(profile): allow users to upload profile pictures (avatars)
- Add avatar_filename to User model with URL/path/existence helpers
- Alembic migration 020: add users.avatar_filename (nullable)
- Implement avatar upload in /profile/edit with Pillow validation
- Add avatar removal endpoint: POST /profile/avatar/remove
- Public serving route: /uploads/avatars/<filename>
- Update templates:
  - Header shows user’s avatar if present
  - Profile page displays avatar
  - Edit Profile supports file upload and removal
- Update Docker permission scripts to include uploads/avatars
- Add tests for upload and removal (tests/test_profile_avatar.py)
- Update README to mention profile pictures

Security/UX:
- Restrict types to PNG/JPG/JPEG/GIF/WEBP, verify content with Pillow
- Unique filenames; old file removed on replacement
- Respects MAX_CONTENT_LENGTH from config

Migration:
- Run: flask db upgrade
- Ensure app/static/uploads/avatars is writable (use fix upload permission scripts if needed)

No breaking changes.
2025-10-22 06:27:53 +02:00
Dries Peeters c13010306c Merge pull request #110 from DRYTRIX/develop
Develop
v3.2.2 dev-dev-67-a4c1b899 dev-dev-63-6ecf6dad dev-dev-64-e868a299 dev-dev-65-c08c2d8f dev-dev-66-96747690 dev-dev-62-84e20966 dev-dev-68-189fbb3b
2025-10-21 20:25:04 +02:00
Dries Peeters 6a0fab7cb7 Update setup.py 2025-10-21 20:15:37 +02:00
Dries Peeters ffb9f6fba1 Update to make the remote work 2025-10-21 20:03:21 +02:00
Dries Peeters 357e1093f0 Merge pull request #109 from DRYTRIX/develop
Update clients.py
v3.2.1 dev-dev-61-6a0fab7c dev-dev-60-ffb9f6fb
2025-10-21 17:45:56 +02:00
Dries Peeters 257ee30fd2 Update clients.py 2025-10-21 17:29:28 +02:00
Dries Peeters dedf0a6a7c Merge pull request #108 from DRYTRIX/develop dev-dev-59-257ee30f 2025-10-21 17:21:25 +02:00
Dries Peeters 79e826ced2 feat(tasks,ui): enhance task management UI; update routes; add tests
Improve task workflows and overall UX, and align backend routes with the
new UI flows. Update docs and development setup accordingly.

- UI: refine task list/view/edit templates, project views, and Kanban
  partial (`_kanban_tailwind.html`)
- CSS: polish `app/static/enhanced-ui.css` for spacing, layout, and
  responsiveness
- Routes: update `app/routes/tasks.py` and `app/routes/clients.py` to
  support new edit/delete/filter behaviors and validations
- Templates: align clients/projects pages for consistency and navigation
- Docs: refresh `docs/GETTING_STARTED.md` and
  `docs/TASK_MANAGEMENT_README.md`
- Dev: adjust `docker-compose.yml` and `setup.py` to match the latest
  runtime/build expectations
- Tests: add coverage for delete actions, task project editing, and task
  filters UI (`tests/test_delete_actions.py`,
  `tests/test_task_edit_project.py`,
  `tests/test_tasks_filters_ui.py`); update existing tests

Why:
- Streamlines common task operations and improves discoverability
- Ensures backend and UI are consistent and well-tested
2025-10-21 17:05:00 +02:00
Dries Peeters fa4ed5597f Merge pull request #106 from DRYTRIX/develop
Update install instructions
dev-dev-58-79e826ce dev-dev-57-330c4f2b
2025-10-21 13:03:49 +02:00
Dries Peeters 330c4f2b5b Update install instructions 2025-10-21 13:00:59 +02:00
Dries Peeters 332aa130aa Merge pull request #105 from DRYTRIX/develop v3.2.0 2025-10-21 12:16:35 +02:00
Dries Peeters 20429d8496 tests: fix telemetry patchability and config reload; make telemetry toggle test reflect updated state 2025-10-21 11:46:16 +02:00
Dries Peeters a3d8037547 Merge pull request #103 from DRYTRIX/develop
tests/ci: fix analytics DB init; telemetry env precedence and export;…
dev-dev-55-7d327819 dev-dev-56-20429d84
2025-10-21 11:35:10 +02:00
Dries Peeters 7d32781932 tests/ci: fix analytics DB init; telemetry env precedence and export; installation config reload; route analytics calls reference app module for mocks 2025-10-21 10:07:20 +02:00
Dries Peeters a6963bbbd1 Merge pull request #102 from DRYTRIX/develop
tests: make user fixtures idempotent to avoid unique violations under…
2025-10-21 09:08:39 +02:00
Dries Peeters e2f924a54d tests: make user fixtures idempotent to avoid unique violations under PostgreSQL 2025-10-21 08:46:09 +02:00
Dries Peeters 8884730bce Merge pull request #101 from DRYTRIX/develop
ci: ensure DB schema exists before tests (flask db upgrade)
dev-dev-54-e2f924a5
2025-10-21 08:38:07 +02:00
Dries Peeters 60e10d2c48 ci: ensure DB schema exists before tests (flask db upgrade) 2025-10-21 08:14:12 +02:00
Dries Peeters 96e3948ce6 Merge pull request #100 from DRYTRIX/develop
ci: restore v3.0.0 workflows; keep PostHog/Sentry injection in releas…
dev-dev-53-60e10d2c
2025-10-21 08:04:40 +02:00
Dries Peeters 3b73cb5534 ci: restore v3.0.0 workflows; keep PostHog/Sentry injection in release build 2025-10-21 07:47:44 +02:00
Dries Peeters d4b37e8db7 Merge pull request #99 from DRYTRIX/develop dev-dev-51-7a4354d1 dev-dev-52-3b73cb55 2025-10-20 22:13:26 +02:00
Dries Peeters 7a4354d1fb update cert 2025-10-20 22:07:14 +02:00
Dries Peeters 3567be8c36 Merge pull request #98 from DRYTRIX/develop
Update test_analytics.py
dev-dev-50-c823bb13
2025-10-20 21:54:10 +02:00
Dries Peeters c823bb1331 Update test_analytics.py 2025-10-20 21:49:08 +02:00
Dries Peeters b22c3c9ea0 Merge pull request #97 from DRYTRIX/develop
Develop
2025-10-20 21:42:02 +02:00
Dries Peeters 8b5d7af40f Update build-and-publish.yml 2025-10-20 21:31:59 +02:00
Dries Peeters 81b759a409 Update build-dev.yml 2025-10-20 21:28:20 +02:00
Dries Peeters 7d1ad9023a Update tests 2025-10-20 21:25:13 +02:00
Dries Peeters 8b6d92780e Merge pull request #96 from DRYTRIX/develop
Develop
dev-dev-46-4c67b25f dev-dev-47-7d1ad902 dev-dev-48-81b759a4 dev-dev-49-8b5d7af4
2025-10-20 21:07:45 +02:00
Dries Peeters 4c67b25f9d feat: enhance invoice management UI and add generate-from-time feature
- Enhanced invoice creation form with auto-fill client data from project selection
- Redesigned invoice edit page with improved layout and quick actions sidebar
- Added new generate-from-time template for adding unbilled time entries and costs
- Improved form styling and added responsive design enhancements
- Added internationalization (i18n) support throughout invoice templates
- Added notes and terms fields to invoice forms
- Implemented item removal functionality in invoice editor
- Added comprehensive tests for new invoice features
- Updated .gitignore to exclude logs directory
- Bumped version from 3.0.0 to 3.2.0

The invoice UI now provides:
- Quick actions panel with export, duplicate, and payment recording links
- Invoice summary sidebar showing totals and status
- Tips and guidance sidebars for better UX
- Client data auto-population when selecting projects
- Improved visual hierarchy and mobile responsiveness
2025-10-20 21:01:09 +02:00
Dries Peeters f390a13474 chore(devops): streamline Docker Compose and refresh docs/config
- Simplify docker-compose setup and align environment defaults
- Update README and Quick Start to reflect the new compose flow
- Refine app initialization and configuration for clearer env handling
- Minor consistency and cleanup in config modules

No breaking changes expected.
2025-10-20 20:44:11 +02:00
Dries Peeters e99036fb78 Merge pull request #93 from DRYTRIX/Feat-Metrics
Feat metrics
2025-10-20 20:02:39 +02:00
Dries Peeters 10e9bb7c8a Update workflow files 2025-10-20 19:58:09 +02:00
Dries Peeters 264a43083e Update 2025-10-20 19:55:03 +02:00