98 Commits

Author SHA1 Message Date
Dries Peeters
164893c6e8 Merge pull request #45 from DRYTRIX/develop
Develop
v1.5.1
2025-09-08 12:11:45 +02:00
Dries Peeters
c6d704e5f1 Merge pull request #44 from DRYTRIX/Feat-ImproveDarkMode
Major CSS overhaul: Enhanced UI/UX with modern animations and perfec…
2025-09-08 12:11:11 +02:00
Dries Peeters
1ab0122cc7 Major CSS overhaul: Enhanced UI/UX with modern animations and perfect dark mode
Features:
- Added shimmer effects and micro-interactions across all components
- Implemented gradient backgrounds and enhanced visual hierarchy
- Created smooth hover animations with cubic-bezier transitions
- Enhanced markdown editor with professional styling and dark mode support
- Improved task cards with animated progress bars and status badges
- Added responsive design optimizations for mobile devices

 Technical improvements:
- Consolidated and optimized CSS across 6 template files
- Implemented consistent design system with unified color palette
- Added hardware-accelerated animations for 60fps performance
- Enhanced accessibility with proper focus states and contrast ratios
- Created modular CSS architecture with clear organization

 Dark mode enhancements:
- Complete dark theme support across all modified components
- Smooth theme switching with no visual glitches
- Enhanced contrast and readability in dark mode
- Consistent color palette and gradient adaptations

 Responsive design:
- Mobile-optimized touch interactions and spacing
- Unified breakpoint behavior across all pages
- Enhanced button sizes and hover states for mobile

Files modified:
- templates/clients/list.html - Enhanced client list with animated badges and cards
- templates/clients/view.html - Improved client details with shimmer effects
- app/templates/tasks/edit.html - Professional markdown editor styling
- app/templates/tasks/create.html - Enhanced task creation form
- app/templates/tasks/list.html - Modern task cards with animations
- templates/projects/view.html - Consistent project task styling

This commit transforms the TimeTracker into a modern, professional application with exceptional user experience in both light and dark modes.
2025-09-08 12:09:58 +02:00
Dries Peeters
161bf2a2bd Merge pull request #43 from DRYTRIX/Feat-ImprovedTaskHandling
feat(tasks): add activity log, Markdown editor, and dark-mode polish
2025-09-08 08:10:05 +02:00
Dries Peeters
c297f1503b feat(tasks): add activity log, Markdown editor, and dark-mode polish
Backend
- Add TaskActivity model to record start/pause/review/complete/cancel/reopen
- Preserve started_at when reopening tasks; keep timestamps in app-local time
- Expose recent activities on task detail view

Migrations
- Add 004_add_task_activities_table (FKs + indexes)

Task detail (UI)
- Move Description into its own card and render as Markdown (markdown + bleach)
- Restyle Quick Actions to use dashboard btn-action styles
- Add custom confirmation modal + tooltips
- Recent Time Entries: use dashboard action buttons, add progressive “Show more/less” (10 per click)

Tasks list
- Fix dark mode for filter UI (inputs, selects, input-group-text, checkboxes)

Create/Edit task
- Integrate EasyMDE Markdown editor with toolbar
- Strong dark-theme overrides (toolbar, editor, preview, status bar, tokens)
- Prevent unintended side-by-side persistence
- Align “Current Task Info” dark-mode styles with task detail

CSS
- Add dark-mode tints for action buttons, tooltip light theme in dark mode
- Editor layout polish (padding, focus ring, gutters, selection)
- Quick actions layout: compact horizontal group

Deps
- Add: markdown, bleach

Run
- flask db upgrade  # applies 004_add_task_activities_table
2025-09-08 08:06:48 +02:00
Dries Peeters
6a0f3efe77 removed caddy 2025-09-05 15:09:25 +02:00
Dries Peeters
cc053d13eb Merge pull request #41 from DRYTRIX/develop
Develop
v1.5.0
2025-09-05 15:01:07 +02:00
Dries Peeters
9eef81d365 Merge pull request #40 from DRYTRIX/feat-ImproveTaskStateHandling
Update Github actions
2025-09-05 15:00:27 +02:00
Dries Peeters
e4a55860a3 Update Github actions 2025-09-05 15:00:08 +02:00
Dries Peeters
1a66b4d4b6 Merge pull request #39 from DRYTRIX/feat-ImproveTaskStateHandling
feat(tasks): allow reopening completed tasks and improve status handling
2025-09-05 14:48:17 +02:00
Dries Peeters
6d9c54b052 feat(tasks): allow reopening completed tasks and improve status handling
- Enable changing status from done back to todo/in_progress/review via edit form and status endpoints
- Clear completed_at when reopening; set/preserve started_at appropriately for in_progress
- Use localized timestamps via now_in_app_timezone() for updates [[memory:7499916]]
- Add “Reopen Task” quick action in task view for done tasks
- Update flash messages; no linter issues

Files:
- app/routes/tasks.py
- app/templates/tasks/view.html
2025-09-05 14:47:53 +02:00
Dries Peeters
fc5fd280b2 Merge pull request #38 from DRYTRIX/bug-FixRemoveRecentTimeEntry
fix(ui): unify Recent Time Entries actions and enable self-delete
2025-09-05 14:33:44 +02:00
Dries Peeters
9f58465c29 fix(ui): unify Recent Time Entries actions and enable self-delete
- Dashboard: switch Actions column to inline `btn-group` with `btn-action` styles
  (no stacking), preserving delete modal and permission checks.
- Tasks view: add Actions column with Edit/Delete, plus delete confirmation modal
  and JS; regular users can delete their own entries (or admins any).
- Timer page: align dynamic recent entries buttons to `btn-action` styles.

Server-side permissions already enforce owner-or-admin and block deleting active timers.
Files: app/templates/main/dashboard.html, app/templates/tasks/view.html, templates/timer/timer.html
2025-09-05 14:33:16 +02:00
Dries Peeters
47be788443 Merge pull request #37 from DRYTRIX/bug-FixCheckOverdueTasks
feat(tasks): add overdue filter; fix(ui): solid light-mode dropdown/n…
2025-09-05 10:27:50 +02:00
Dries Peeters
ae38d436d0 feat(tasks): add overdue filter; fix(ui): solid light-mode dropdown/navbar
- Backend:
  - Accept `overdue` query param in `tasks.list_tasks` and `tasks.my_tasks`
  - Filter tasks where `due_date < today` and status in ['todo','in_progress','review']
  - Use local date via `now_in_app_timezone().date()` to respect app timezone

- UI:
  - Add “Show overdue only” checkbox to `tasks/list.html` and `tasks/my_tasks.html`
  - Preserve checkbox state via template context

- Styles:
  - Enforce opaque white backgrounds for light-mode navbar and mobile navbar
  - Disable backdrop blur to prevent bleed-through
  - Normalize light-mode dropdown menu colors/borders for readability
  - Add light-theme fallback for `--bs-body-bg`
  - Tweak mobile navbar dropdown borders/shadows

Files:
- app/routes/tasks.py
- app/templates/tasks/list.html
- app/templates/tasks/my_tasks.html
- app/static/base.css
- app/static/mobile.css

Testing:
- Tasks and My Tasks: check “Show overdue only” → only overdue, non-completed/non-cancelled tasks appear
- Light mode: navbar and dropdowns show solid white backgrounds with clear borders/hover states
- Mobile: collapsed navbar menu is full-width, opaque, readable
2025-09-05 10:27:24 +02:00
Dries Peeters
34d4a38231 Merge pull request #36 from DRYTRIX/feat-DarkMode
feat(ui): dark mode fixes and Log Time UX aligned with invoices
2025-09-05 10:05:17 +02:00
Dries Peeters
66919c96b2 feat(ui): dark mode fixes and Log Time UX aligned with invoices
Make user dropdown fully dark; fix hover/divider; remove white overlay
Mobile dropdown respects dark vars; improve navbar-collapse bg/z-index
Improve action button grouping/contrast across pages
Add dark-mode variants for badges, lists, pagination, utilities
Refresh Log Time page: card header, mini-cards for Start/End, unified labels
Group Save/Clear actions; Back remains secondary
Per-user theme preference: model column + migration (003) + POST /auth/profile/theme
Base loads user theme (fallback to local/system); remove admin theme selector
2025-09-05 10:04:49 +02:00
Dries Peeters
b3e2d8419e Merge pull request #35 from DRYTRIX/feat-LayoutImprovements
feat(ui): unify page headers across app; add Buy Me a Coffee link
2025-09-04 09:53:33 +02:00
Dries Peeters
3376874ba0 feat(ui): unify page headers across app; add Buy Me a Coffee link
- Create and use shared page_header macro for consistent info headers
- Apply new header styling to:
  - Dashboard, Projects, Clients, Invoices (removed filter dropdown), Reports, Timer (manual)
  - System Info, Admin Users (list + form)
  - Profile, Edit Profile
  - Tasks (list, my tasks, overdue)
  - Analytics (desktop + mobile)
  - About, Help
- Add shared header/badge utilities in base.css for consistent spacing and badges
- Align summary cards and table/button styles with admin dashboard
- Footer: add “Buy me a coffee” link (https://buymeacoffee.com/DryTrix)
2025-09-04 09:52:09 +02:00
Dries Peeters
10346172ba Merge pull request #34 from DRYTRIX/develop
Develop
v1.4.0
2025-09-03 20:56:15 +02:00
Dries Peeters
1d29393008 Merge pull request #33 from DRYTRIX/feat-MissingReport
feat(reports): add Finished Tasks report with per-task hours and filters
2025-09-03 20:54:38 +02:00
Dries Peeters
079695d1b8 feat(reports): add Finished Tasks report with per-task hours and filters
- New route: GET /reports/tasks
  - Lists tasks with status "done" completed within the selected date range
  - Filters: project_id, user_id, start_date, end_date (defaults to last 30 days)
  - Aggregates hours per task from matching TimeEntry records
  - Shows assignee, completion date, total hours, and entry count per task
- UI: new template templates/reports/task_report.html with filters, summary cards, and results table
- Navigation: add “Finished Tasks Report” link under Project Reports on templates/reports/index.html
- Consistent styling and behavior with existing project/user reports
- No schema changes; login required
2025-09-03 20:54:13 +02:00
Dries Peeters
a835ec3f34 Merge pull request #32 from DRYTRIX/feat-CommonNameForUser
feat: add real name support and fix task detail error
2025-09-03 20:44:41 +02:00
Dries Peeters
7f8fd43eb5 feat: add real name support and fix task detail error
models/user: add nullable full_name and display_name property (fallback to username)
migrations: add 002_add_user_full_name to introduce users.full_name
auth/profile: show and allow editing full_name; persist on POST
templates:
use display_name across navbar, dashboard greeting, tasks (list/view/edit/my/overdue), projects view, reports (user/project), invoices (creator and generate-from-time), and admin (dashboard/users)
keep username where appropriate (e.g., read-only admin form field)
reports:
aggregate/group by display_name in summaries
CSV export writes display_name instead of username
projects: get_user_totals returns display names when available
main/dashboard: replace inline Jinja in script with data attribute flag to satisfy linter
tasks/view: remove Jinja desc() usage; iterate over pre-ordered time_entries from route and slice to 5
fixes jinja2 UndefinedError: 'desc' is undefined
2025-09-03 20:43:51 +02:00
Dries Peeters
041979e320 Merge pull request #31 from DRYTRIX/feat-CorrectBackupWorker
feat(backup): add robust backup/restore with migration-aware restores…
2025-09-03 20:18:25 +02:00
Dries Peeters
e0432a039f feat(backup): add robust backup/restore with migration-aware restores; polish Admin UI
Add app/utils/backup.py with create_backup/restore_backup
Include DB dump (SQLite file or pg_dump custom), settings.json, uploads/, manifest.json (incl. alembic_revision)
Use local-time timestamps in filenames and metadata
PostgreSQL: call pg_dump/pg_restore with host/port/user/db and PGPASSWORD
Restore runs migrations to head for older data compatibility
Admin
/admin/backup now generates and downloads a .zip archive
New /admin/restore (template: templates/admin/restore.html) for uploading and restoring backups
Refresh admin dashboard visuals (hero header, hover-lift cards, soft buttons), keep color scheme
Remove “System Overview” card from dashboard
CLI
Add flask backup_create and flask backup_restore <archive.zip>
Docker
Install PostgreSQL client tools; switch to PGDG postgresql-client-16 to match server v16
Docs/Config
No schema changes; retains existing settings and migrations
Notes:
Requires pg_dump/pg_restore inside the app image (now included)
Backups saved under project-root/backups and streamed to user on demand
2025-09-03 20:17:44 +02:00
Dries Peeters
645329c1e5 Merge pull request #30 from DRYTRIX/feat-ShowClientNameNextToProjectInSelector
feat(tasks): show client name next to project in task forms
2025-09-03 14:42:16 +02:00
Dries Peeters
a1703d6846 feat(tasks): show client name next to project in task forms
- Update app/templates/tasks/create.html and app/templates/tasks/edit.html
- Render project options as "Project (Client)" for clearer selection
- No backend changes required
2025-09-03 14:41:54 +02:00
Dries Peeters
cce66832db Merge pull request #29 from DRYTRIX/Bug-StartTimerFromTaskNotPossible
fix(timer): resolve 405 when starting a timer from tasks/project views
2025-09-03 14:32:56 +02:00
Dries Peeters
a5d3c0582c fix(timer): resolve 405 when starting a timer from tasks/project views
Use GET route `timer.start_timer_for_project` instead of POST-only `timer.start_timer`
in task and project templates. This fixes “405 Method Not Allowed” when starting a
timer from /tasks and /tasks/<id>, and from the project view.
2025-09-03 14:31:48 +02:00
Dries Peeters
47652ac1c0 Merge pull request #28 from DRYTRIX/Bug-TaskViewDropdownNotCorrect
fix(tasks,ui): correct Task View dropdown behavior and unify filter UI
2025-09-03 14:18:24 +02:00
Dries Peeters
64543d1550 fix(tasks,ui): correct Task View dropdown behavior and unify filter UI
- Ensure Task View dropdown shows correct options and preserves selected state
- Normalize dropdown/filter markup across tasks, clients, projects, reports, timer
- Update routes to pass/handle filter params and template context
- Align styles for dropdown spacing/alignment; improve mobile behavior
- Keep base layout consistent for shared components
2025-09-03 14:17:57 +02:00
Dries Peeters
b347848fbf Merge pull request #26 from DRYTRIX/bug-VersionTagNotCorrectInInterface
Update to fix displaying the correct version number.
v1.3.1
2025-09-03 11:28:38 +02:00
Dries Peeters
1ac98b6baa Update to fix displaying the correct version number. 2025-09-03 11:05:10 +02:00
Dries Peeters
f99b2fd58e Merge pull request #23 from DRYTRIX/develop
feat: add time-entry editing; improve invoices/PDF; harden Docker startup
v1.3.0
2025-09-03 09:49:58 +02:00
Dries Peeters
09192c53bf Merge pull request #22 from DRYTRIX/Feature-EditTimeEntry
feat: add time-entry editing; improve invoices/PDF; harden Docker sta…
2025-09-03 09:49:05 +02:00
Dries Peeters
b880191c16 feat: add time-entry editing; improve invoices/PDF; harden Docker startup
Timer/Editing
- Add/edit time-entry UI and flows in templates (`templates/timer/*`)
- Extend timer and API routes (`app/routes/timer.py`, `app/routes/api.py`)
- Update mobile interactions (`app/static/mobile.js`)

Invoices/PDF
- Improve invoice model and route handling (`app/models/invoice.py`, `app/routes/invoices.py`)
- Enhance PDF generation and fallback logic (`app/utils/pdf_generator*.py`)
- Adjust invoice view layout (`templates/invoices/view.html`)

Docker/Startup
- Refine Docker build and startup paths (`Dockerfile`)
- Improve init/entrypoint scripts (`docker/init-database-*.py`, new `docker/entrypoint*.sh`, `docker/entrypoint.py`)
- General startup robustness and permissions fixes

Docs/UI
- Refresh README and Docker docs (setup, troubleshooting, structure)
- Minor UI/help updates (`templates/main/help.html`, `templates/projects/create.html`)
- Remove obsolete asset (`assets/screenshots/Task_Management.png`)
- Add repo hygiene updates (e.g., `.gitattributes`)
2025-09-03 09:48:19 +02:00
Dries Peeters
3894b3be94 Migration v1.2.3 2025-09-02 15:42:32 +02:00
Dries Peeters
d9dab3a49c feat: enhance README with comprehensive screenshot showcase
- Add organized screenshot sections for better visual presentation
- Include all 12 available screenshots from assets/screenshots/
- Group screenshots into logical categories:
  * Core Application Views (Dashboard, Projects, Tasks, Clients)
  * Management & Analytics (Reports, Visual Analytics, Task Management, Admin)
  * Data Entry & Creation (Log Time, New Task, New Client, New Project)
- Improve visual layout with proper spacing and responsive design
- Enhance user experience by showcasing full application capabilities
2025-09-02 14:42:54 +02:00
Dries Peeters
8e3e5c195c Update README.md v1.2.2 2025-09-01 15:02:11 +02:00
Dries Peeters
48518af295 Cleanup docker, only publish one image. 2025-09-01 14:53:21 +02:00
Dries Peeters
d010d261ec Make sure we expose the port and that it always has the latest tag. 2025-09-01 14:35:51 +02:00
Dries Peeters
49c1986ead Update Docker. 2025-09-01 14:27:27 +02:00
Dries Peeters
0386881003 Update Database Initialisation v1.2.1 2025-09-01 13:04:05 +02:00
Dries Peeters
8a378b7078 feat(clients,license,db): add client management, enhanced DB init, and tests
- Clients: add model, routes, and templates
  - app/models/client.py
  - app/routes/clients.py
  - templates/clients/{create,edit,list,view}.html
  - docs/CLIENT_MANAGEMENT_README.md
- Database: add enhanced init/verify scripts, migrations, and docs
  - docker/{init-database-enhanced.py,start-enhanced.py,verify-database.py}
  - docs/ENHANCED_DATABASE_STARTUP.md
  - migrations/{add_analytics_column.sql,add_analytics_setting.py,migrate_to_client_model.py}
- Scripts: add version manager and docker network test helpers
  - scripts/version-manager.{bat,ps1,py,sh}
  - scripts/test-docker-network.{bat,sh}
  - docs/VERSION_MANAGEMENT.md
- UI: tweak base stylesheet
  - app/static/base.css
- Tests: add client system test
  - test_client_system.py
v1.2.0
2025-09-01 11:34:45 +02:00
Dries Peeters
e0d235f37f Updated datbase init. V1.1.1 2025-08-30 11:32:03 +02:00
Dries Peeters
02fe1e227a Update README.md 2025-08-30 11:22:22 +02:00
Dries Peeters
4640a9e6a3 Merge pull request #14 from DRYTRIX/develop
🚀 Release V1.1.0: Enhanced Mobile Experience & Task Management
V1.1.0
2025-08-30 10:14:28 +02:00
Dries Peeters
e39e9e0824 Merge pull request #13 from DRYTRIX/feature-InvoiceGeneration
feat: enhance web interface layout and fix logo import circular depen…
2025-08-30 10:09:38 +02:00
Dries Peeters
d230a41e8a feat: enhance web interface layout and fix logo import circular dependency
- Improve web interface layout for better user-friendliness and mobile responsiveness
  * Update CSS variables for consistent spacing and component sizing
  * Enhance card layouts with improved padding, borders, and shadows
  * Optimize button and form element dimensions for better touch targets
  * Add hover effects and animations for improved user interaction
  * Implement responsive grid system with mobile-first approach

- Refactor mobile JavaScript to prevent duplicate initialization
  * Consolidate mobile enhancements into dedicated utility classes
  * Add initialization guards to prevent double loading
  * Implement MobileUtils and MobileNavigation classes
  * Remove duplicate event listeners and mobile enhancements

- Fix circular import issue in logo handling
  * Replace problematic 'from app import app' with Flask's current_app
  * Add error handling for cases where current_app is unavailable
  * Improve logo path resolution with fallback mechanisms
  * Fix settings model to use proper Flask context

- Clean up template code and remove duplication
  * Remove duplicate mobile enhancements from base template
  * Clean up dashboard template JavaScript
  * Centralize all mobile functionality in mobile.js
  * Add proper error handling and debugging

- Update CSS variables and spacing system
  * Introduce --section-spacing and --card-spacing variables
  * Add mobile-specific spacing variables
  * Improve border-radius and shadow consistency
  * Enhance typography and visual hierarchy

This commit resolves the double loading issue and logo import errors while
significantly improving the overall user experience and mobile responsiveness
of the web interface.
2025-08-30 10:09:06 +02:00