- Fix infinite recursion error in showToast function by removing duplicate local definition
- Implement dynamic calendar legend that updates with actual project names and colors
- Add comprehensive button state management to prevent stuck "Processing..." states
- Implement immediate loading state clearing for all calendar actions (create, update, delete, duplicate)
- Add resetAllButtonStates() function to handle button state cleanup
- Remove delays in loading state transitions for better responsiveness
- Add error handling and logging for calendar events loading
- Ensure loading states are cleared on both success and error scenarios
- Add global reset function for manual button state recovery
- Improve loadTasksForProject error handling and null checks
Fixes:
- Calendar legend showing static placeholders instead of dynamic project data
- Buttons stuck in "Processing..." state after successful actions
- Loading states persisting for 2-3 seconds after completion
- Recursion errors in toast notification system
- Inconsistent button state management across calendar operations
This commit introduces a comprehensive Kanban board customization system and
improves CSRF token configuration for Docker deployments.
## Major Features
### 1. Customizable Kanban Board Columns
Add complete kanban column customization system allowing users to define
custom workflow states beyond the default columns.
**New Components:**
- Add KanbanColumn model with full CRUD operations (app/models/kanban_column.py)
- Add kanban routes blueprint with admin endpoints (app/routes/kanban.py)
- Add kanban column management templates (app/templates/kanban/)
- Add migration 019 for kanban_columns table (migrations/)
**Features:**
- Create unlimited custom columns with unique keys, labels, icons, and colors
- Drag-and-drop column reordering with position persistence
- Toggle column visibility without deletion
- Protected system columns (todo, in_progress, done) prevent accidental deletion
- Complete state marking for columns that should mark tasks as done
- Real-time updates via SocketIO broadcasts when columns change
- Font Awesome icon support (5000+ icons)
- Bootstrap color scheme integration
- Comprehensive validation and error handling
**Integration:**
- Update Task model to work with dynamic column statuses (app/models/task.py)
- Update task routes to use kanban column API (app/routes/tasks.py)
- Update project routes to fetch active columns (app/routes/projects.py)
- Add kanban column management links to base template (app/templates/base.html)
- Update kanban board templates to render dynamic columns (app/templates/tasks/)
- Add cache prevention headers to force fresh column data
**API Endpoints:**
- GET /api/kanban/columns - Fetch all active columns
- POST /api/kanban/columns/reorder - Reorder columns
- GET /kanban/columns - Column management interface (admin only)
- POST /kanban/columns/create - Create new column (admin only)
- POST /kanban/columns/<id>/edit - Edit column (admin only)
- POST /kanban/columns/<id>/delete - Delete column (admin only)
- POST /kanban/columns/<id>/toggle - Toggle column visibility (admin only)
### 2. Enhanced CSRF Configuration
Improve CSRF token configuration and documentation for Docker deployments.
**Configuration Updates:**
- Add WTF_CSRF_ENABLED environment variable to all docker-compose files
- Add WTF_CSRF_TIME_LIMIT environment variable with 1-hour default
- Update app/config.py to read CSRF settings from environment
- Add SECRET_KEY validation in app/__init__.py to prevent production deployment
with default keys
**Docker Compose Updates:**
- docker-compose.yml: CSRF enabled by default for security testing
- docker-compose.remote.yml: CSRF always enabled in production
- docker-compose.remote-dev.yml: CSRF enabled with production-like settings
- docker-compose.local-test.yml: CSRF can be disabled for local testing
- Add helpful comments explaining each CSRF-related environment variable
- Update env.example with CSRF configuration examples
**Verification Scripts:**
- Add scripts/verify_csrf_config.sh for Unix systems
- Add scripts/verify_csrf_config.bat for Windows systems
- Scripts check SECRET_KEY, CSRF_ENABLED, and CSRF_TIME_LIMIT settings
### 3. Database Initialization Improvements
- Update app/__init__.py to run pending migrations on startup
- Add automatic kanban column initialization after migrations
- Improve error handling and logging during database setup
### 4. Configuration Management
- Update app/config.py with new CSRF and kanban-related settings
- Add environment variable parsing with sensible defaults
- Improve configuration validation and error messages
## Documentation
### New Documentation Files
- CUSTOM_KANBAN_README.md: Quick start guide for kanban customization
- KANBAN_CUSTOMIZATION.md: Detailed technical documentation
- IMPLEMENTATION_SUMMARY.md: Implementation details and architecture
- KANBAN_AUTO_REFRESH_COMPLETE.md: Real-time update system documentation
- KANBAN_REFRESH_FINAL_FIX.md: Cache and refresh troubleshooting
- KANBAN_REFRESH_SOLUTION.md: Technical solution for data freshness
- docs/CSRF_CONFIGURATION.md: Comprehensive CSRF setup guide
- CSRF_DOCKER_CONFIGURATION_SUMMARY.md: Docker-specific CSRF setup
- CSRF_TROUBLESHOOTING.md: Common CSRF issues and solutions
- APPLY_KANBAN_MIGRATION.md: Migration application guide
- APPLY_FIXES_NOW.md: Quick fix reference
- DEBUG_KANBAN_COLUMNS.md: Debugging guide
- DIAGNOSIS_STEPS.md: System diagnosis procedures
- BROWSER_CACHE_FIX.md: Browser cache troubleshooting
- FORCE_NO_CACHE_FIX.md: Cache prevention solutions
- SESSION_CLOSE_ERROR_FIX.md: Session handling fixes
- QUICK_FIX.md: Quick reference for common fixes
### Updated Documentation
- README.md: Add kanban customization feature description
- Update project documentation with new features
## Testing
### New Test Files
- test_kanban_refresh.py: Test kanban column refresh functionality
## Technical Details
**Database Changes:**
- New table: kanban_columns with 11 columns
- Indexes on: key, position
- Default data: 4 system columns (todo, in_progress, review, done)
- Support for both SQLite (development) and PostgreSQL (production)
**Real-Time Updates:**
- SocketIO events: 'kanban_columns_updated' with action type
- Automatic page refresh when columns are created/updated/deleted/reordered
- Prevents stale data by expiring SQLAlchemy caches after changes
**Security:**
- Admin-only access to column management
- CSRF protection on all column mutation endpoints
- API endpoints exempt from CSRF (use JSON and other auth mechanisms)
- System column protection prevents data integrity issues
- Validation prevents deletion of columns with active tasks
**Performance:**
- Efficient querying with position-based ordering
- Cached column data with cache invalidation on changes
- No-cache headers on API responses to prevent stale data
- Optimized database indexes for fast lookups
## Breaking Changes
None. This is a fully backward-compatible addition.
Existing workflows continue to work with the default columns.
Custom columns are opt-in via the admin interface.
## Migration Notes
1. Run migration 019 to create kanban_columns table
2. Default columns are initialized automatically on first run
3. No data migration needed for existing tasks
4. Existing task statuses map to new column keys
## Environment Variables
New environment variables (all optional with defaults):
- WTF_CSRF_ENABLED: Enable/disable CSRF protection (default: true)
- WTF_CSRF_TIME_LIMIT: CSRF token expiration in seconds (default: 3600)
- SECRET_KEY: Required in production, must be cryptographically secure
See env.example for complete configuration reference.
## Deployment Notes
Affected modules: Projects, Clients, Tasks, Invoices, Comments, Admin, Search
- All HTML forms now include csrf_token hidden input
- JavaScript forms retrieve token from meta tag in base.html
- API endpoints properly exempted for JSON operations
- 58 POST forms + 4 dynamic JS forms now protected
Security impact: HIGH - Closes critical CSRF vulnerability
Files modified: 20 templates
BREAKING CHANGE: Removed legacy license server in favor of Stripe billing
Major changes:
- Remove license server system (563 lines removed from license_server.py)
- Add multi-tenant support with organizations and memberships
- Integrate Stripe billing and subscription management
- Enhance authentication with 2FA, password reset, and JWT tokens
- Add provisioning and onboarding flows for new customers
- Implement row-level security (RLS) for data isolation
- Add GDPR compliance features and data retention policies
- Enhance admin dashboard with billing reconciliation and customer management
- Add security scanning tools (Bandit, Gitleaks, GitHub Actions workflow)
- Implement rate limiting and enhanced password policies
- Update all routes to support organization context
- Enhance user model with billing and security fields
- Add promo code system for marketing campaigns
- Update Docker initialization for better database setup
Modified files:
- Core: app.py, app/__init__.py, app/config.py
- Models: Enhanced user model (+175 lines), updated all models for multi-tenancy
- Routes: Enhanced admin routes (+479 lines), updated all routes for org context
- Templates: Updated login, admin dashboard, and settings
- Docker: Enhanced database initialization scripts
- Dependencies: Added stripe, pyotp, pyjwt, and security packages
Deleted files:
- app/utils/license_server.py
- docs/LICENSE_SERVER_*.md (3 files)
- templates/admin/license_status.html
- test_license_server.py
New features:
- Organizations and membership management
- Stripe billing integration with webhook handling
- Enhanced authentication (2FA, password reset, refresh tokens)
- GDPR compliance and data export/deletion
- Onboarding checklist for new customers
- Promo code system
- Security enhancements (rate limiting, password policies)
- Admin tools for customer and billing management
Net change: 46 files changed, 1490 insertions(+), 1968 deletions(-)
This commit implements three major feature enhancements to improve user
productivity and experience:
COMMAND PALETTE IMPROVEMENTS:
- Add '?' key as intuitive shortcut to open command palette
- Maintain backward compatibility with Ctrl+K/Cmd+K
- Enhance visual design with modern styling and smooth animations
- Add 3D effect to keyboard badges and improved dark mode support
- Update first-time user hints and tooltips
- Improve input field detection to prevent conflicts
CALENDAR REDESIGN:
- Implement comprehensive drag-and-drop for moving/resizing events
- Add multiple calendar views (Day/Week/Month/Agenda)
- Create advanced filtering by project, task, and tags
- Build full-featured event creation modal with validation
- Add calendar export functionality (iCal and CSV formats)
- Implement color-coded project visualization (10 distinct colors)
- Create dedicated calendar.css with professional styling
- Add recurring events management UI
- Optimize API with indexed queries and proper filtering
TRANSLATION SYSTEM ENHANCEMENTS:
- Update all 6 language files (EN/DE/NL/FR/IT/FI) with 150+ strings
- Improve language switcher UI with globe icon and visual indicators
- Fix hardcoded strings in dashboard and base templates
- Add check mark for currently selected language
- Enhance accessibility with proper ARIA labels
- Style language switcher with hover effects and smooth transitions
DOCUMENTATION:
- Add COMMAND_PALETTE_IMPROVEMENTS.md and COMMAND_PALETTE_USAGE.md
- Create CALENDAR_IMPROVEMENTS_SUMMARY.md and CALENDAR_FEATURES_README.md
- Add TRANSLATION_IMPROVEMENTS_SUMMARY.md and TRANSLATION_SYSTEM.md
- Update HIGH_IMPACT_FEATURES.md with implementation details
All features are production-ready, fully tested, responsive, and maintain
backward compatibility.
- Remove global jQuery/DataTables/Chart.js from base; load per-page where used
- Add “Skip to content” link and set main content id for accessibility
- Add reusable confirm modal with Promise API; refactor clients/invoices to use it
- Add mobile “Log Time” floating action button (FAB)
- Extract inline styles into app/static/ui.css (invoices, project view); tidy project list CSS
- Invoices list: add status filter chips, mobile-friendly data-labels; move scripts to extra_js
- Add per-page Chart.js includes for reports and project view
- Improve performance (less global JS) and consistency without altering behavior
Note: Theme/density navbar buttons intentionally excluded per request.
Add Pomodoro focus mode with session summaries
Model: FocusSession; API: /api/focus-sessions/; UI: Focus modal on timer page
Add estimates vs actuals with burndown and budget alerts
Project fields: estimated_hours, budget_amount, budget_threshold_percent
API: /api/projects/<id>/burndown; Charts in project view and project report
Implement recurring time blocks/templates
Model: RecurringBlock; API CRUD: /api/recurring-blocks; CLI: flask generate_recurring
Add tagging and saved filters across views
Model: SavedFilter; /api/entries supports tag and saved_filter_id
Support billable rate overrides per project/member
Model: RateOverride; invoicing uses effective rate resolution
Also:
Migration: 016_add_focus_recurring_rates_filters_and_project_budget.py
Integrations and UI updates in projects view, timer page, and reports
Docs updated (startup, invoice, task mgmt) and README feature list
Added basic tests for new features
- Command palette (Ctrl/Cmd+K) with quick nav (g d/p/r/t), start/stop
timer, theme toggle
- Adds modal to base layout and global shortcuts
- Files: app/templates/base.html, app/static/commands.js
- Bulk edit for time entries with multi-select and quick actions
- Delete, set billable/non-billable from dashboard Recent Entries
- API: POST /api/entries/bulk
- Files: app/templates/main/dashboard.html, app/routes/api.py
- Idle detection and “resume/stop at” support
- Detect inactivity and prompt to stop at last active time
- API: POST /api/timer/stop_at, POST /api/timer/resume
- Files: app/static/idle.js, app/templates/base.html, app/routes/api.py
- Calendar (day/week/month) with drag‑to‑create entries
- Route: /timer/calendar
- APIs: GET /api/calendar/events, POST /api/entries
- Files: app/routes/timer.py, templates/timer/calendar.html, app/routes/api.py
- UX polish: improved flash container spacing; reused existing
skeleton loaders, loading spinners, and toasts
No breaking changes.
- Reduce global .btn:hover lift (no translate) and lighten shadow (0 2px 6px @ 0.08); trim overlay to 0.35
- Tone down .btn-primary/.btn-success/.btn-danger hover lift and shadows
- Align inline .btn:hover in templates (tasks view/edit/create, my_tasks, projects create)
- Preserve focus states and dark mode; no functional changes
Files:
- app/static/base.css
- app/templates/tasks/view.html
- app/templates/tasks/edit.html
- app/templates/tasks/create.html
- app/templates/tasks/my_tasks.html
- templates/projects/create.html
Add explicit ellipsis icon to actions dropdown toggle in templates/invoices/list.html
Hide default Bootstrap caret to avoid invisible indicator on light theme
Preserve accessibility with title and visually hidden label
- Add client email and address auto-population when project is selected
- Include client data attributes in project options (data-client-email, data-client-address)
- Add reset buttons for email and address fields to restore original client data
- Implement smart button visibility (only show when fields are edited)
- Fix CSS alignment issues by standardizing form field styling
- Maintain field editability while providing convenient auto-population
- Improve user experience with consistent visual layout
- Add hidden username input field in user edit form
- Resolves 'Username is required' error when elevating user roles
- Maintains security by keeping visible username field disabled
- Ensures username value is properly submitted with form data
- Fix header alignment issues with comments counter and action button
- Remove nested card styling conflicts in comments list
- Improve comment header flex layout with proper spacing
- Fix timestamp text overflow with ellipsis for long content
- Make comment actions always visible instead of hover-only
- Remove conflicting CSS resets that broke flex layouts
- Remove decorative guideline to prevent double left borders
- Optimize comment metadata flex behavior for better responsiveness
Resolves vertical alignment issues in comment headers and improves
overall visual consistency of the comment system.
• Enhanced CSS variable system with comprehensive color palettes (50-900 scales)
• Implemented modern glass morphism effects with backdrop-blur throughout
• Added smooth animations and micro-interactions for better user feedback
• Created reusable component system with modern styling patterns
• Improved mobile experience with better touch interactions and responsive design
• Enhanced dark theme with better contrast ratios and visual hierarchy
• Updated navbar to use square corners and fixed dark mode styling issues
• Applied consistent styling patterns from clients page across all templates
• Added comprehensive theme template for future customizations
• Maintained existing blue color scheme while modernizing visual appearance
• Optimized CSS architecture with global styling patterns and reduced duplication
• Enhanced accessibility with proper focus states and WCAG compliance
• Improved button system with gradients, animations, and consistent interactions
Files modified:
- app/static/base.css: Enhanced with modern styling system
- app/static/mobile.css: Improved mobile experience and touch interactions
- app/static/theme-template.css: Comprehensive theme export template
- app/templates/_components.html: Modernized reusable components
- Multiple template files: Applied consistent styling patterns
- Documentation: Added comprehensive guides and summaries
Breaking changes: None - all existing functionality preserved
- Add comprehensive bulk time entry system allowing users to create multiple time entries across date ranges
- Implement smart date range selection with weekend skipping option (max 31 days)
- Add real-time preview showing affected dates, total days, and hours before creation
- Include robust validation: conflict detection, overlap prevention, and data integrity checks
- Create responsive UI with mobile optimization and accessibility features
- Integrate with existing project/task system maintaining full compatibility
- Add navigation links in main menu and dashboard quick actions
- Implement atomic database transactions for reliable bulk operations
- Support consistent time patterns (same start/end time across all days)
- Include comprehensive documentation and user guidance
Routes added:
- GET/POST /timer/bulk - Main bulk entry form
- GET /timer/bulk/<project_id> - Project-specific bulk entry
UI improvements:
- New bulk entry form with live preview and validation
- Updated navigation dropdown with bulk entry option
- Added bulk entry card to dashboard quick actions
- Mobile-responsive design with touch-friendly interface
This feature significantly reduces time entry overhead for users with regular work patterns,
enabling creation of a full work week in seconds instead of minutes per day.
Features:
- Add comprehensive payment tracking to invoices
- Support multiple payment statuses: unpaid, partially_paid, fully_paid, overpaid
- Track payment details: date, method, reference, notes, amount
- Visual payment progress indicators and status badges
- Record payment functionality with user-friendly interface
Database:
- Add payment tracking fields to invoices table
- Smart migration handling for existing data
- Auto-populate payment status based on current invoice status
- Create performance indexes for payment queries
UI/UX:
- Enhanced invoice list with payment status column
- Payment progress bars for partial payments
- Detailed payment information display on invoice view
- New payment recording form with validation
- Color-coded payment status indicators
Backend:
- New payment recording route and form handling
- Enhanced invoice model with payment properties and methods
- Improved summary statistics using actual payment data
- Automatic payment status calculations
Testing:
- Comprehensive test suite for payment functionality
- Tests for partial, full, and overpayments
- Multiple payment scenarios and edge cases
- Payment status calculation validation
Closes payment tracking requirements for basic invoice management
- Add Comment model with threaded replies and user attribution
- Create Alembic migration (013_add_comments_table.py) for database schema
- Implement complete CRUD operations via comments routes
- Add responsive UI with inline editing and real-time interactions
- Include permission system (users edit own, admins manage all)
- Support soft delete for comments with replies to preserve structure
- Add comprehensive CSS styling with dark theme support
- Integrate comments sections into project and task detail views
- Fix modal z-index and context issues for delete confirmations
- Update README with detailed feature documentation
Technical details:
- Threaded comment structure with parent-child relationships
- API endpoints for comment operations and retrieval
- Mobile-responsive design with touch-friendly interactions
- Internationalization support via Flask-Babel
- Bootstrap 5 modal integration with proper event handling
- Add DataTables library integration for enhanced table functionality
- Improve navigation bar styling with rounded corners and white background
- Fix mobile button widths for better responsive design
- Enhance badge styling with proper text wrapping and ellipsis handling
- Add table sorting styles for projects and tasks lists
- Improve mobile responsiveness across various screen sizes
- Update filter button styling for better visual consistency
- Update Kanban board: remove alert system, clean up styling and JavaScript
- Enhance task management: add collapsible filters, improve button layouts
- Improve mobile responsiveness: standardize colors, spacing, and component styling
- Modernize CSS: implement CSS custom properties for consistent theming
- Update templates: standardize button styling and layout across all pages
- Refactor invoice interface: improve form layouts and visual consistency
- Enhance admin pages: better spacing and mobile-friendly designs
This update provides a more cohesive and modern user experience across
desktop and mobile devices with improved accessibility and visual consistency.
Add admin PDF Layout Editor with local GrapesJS (no CDN)
Routes:
GET/POST /admin/pdf-layout (save, server-side default seeding)
POST /admin/pdf-layout/reset (clear custom template)
GET /admin/pdf-layout/default (serve default body HTML/CSS)
POST /admin/pdf-layout/preview (render preview with sample context)
Invoice PDF generator: support custom HTML/CSS and i18n; add default template and CSS
Preview: sanitize Jinja, add helpers (format_date, format_money), sample item
Base layout: include head_extra and scripts_extra
Editor UI: removed quick blocks, preview, and insert variables; keep load/save/reset
Vendor GrapesJS under app/static/vendor/grapesjs and load locally
README: document the new feature and usage
- Integrate Flask-Babel and i18n utilities; initialize in app factory
- Add `preferred_language` to `User` with Alembic migration (011_add_user_preferred_language)
- Add `babel.cfg` and `scripts/extract_translations.py`
- Add `translations/` for en, de, fr, it, nl, fi
- Update templates to use `_()` and add language picker in navbar/profile
- Respect locale in routes and context processors; persist user preference
- Update requirements and Docker/Docker entrypoint for Babel/gettext support
- Minor copy and style adjustments across pages
Migration: run `alembic upgrade head`
- Add Kanban board partial and integrate into tasks list
- app/templates/tasks/_kanban.html
- app/templates/tasks/list.html
- Update API to support task status moves and ordering
- app/routes/api.py
- Expose Kanban in layout/navigation and polish UI
- app/templates/base.html
- app/static/base.css
- Link/entry points from related pages
- templates/projects/view.html
- templates/reports/index.html
- Minor profile page adjustments
- app/templates/auth/profile.html
- Add reusable Kanban partial (app/templates/tasks/_kanban.html) with HTML5
drag-and-drop and optimistic status updates via PUT /api/tasks/<id>/status
- Tasks overview (app/templates/tasks/list.html): replace grid with Kanban and
remove the List/Kanban toggle so Kanban is the sole view
- Project page (templates/projects/view.html): replace task cards grid with the
same Kanban board
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.
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
- 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)
- 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
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
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
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.
- 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.
- Add Task model with full CRUD operations, status tracking, and priority management
- Integrate tasks with existing projects and time entries via foreign key relationships
- Create new Flask routes (/tasks) with admin and user role-based access control
- Implement task status transitions (pending → in_progress → completed → cancelled)
- Add task filtering by status, priority, assignee, and project
- Create responsive Jinja2 templates for task listing, creation, editing, and viewing
- Integrate task selection in timer and manual time entry forms
- Add task management to project dashboards and navigation menus
- Implement automatic database migration system for seamless deployment
- Create migration scripts to add missing tables and columns
- Update startup script to detect and run migrations automatically
- Add comprehensive error handling and validation
- Include full documentation (TASK_MANAGEMENT_README.md)
- Update project structure and main README with new feature details
Database Changes:
- New 'tasks' table with indexes for performance
- Add 'task_id' column to 'time_entries' table
- Automatic migration detection and execution
Technical Implementation:
- SQLAlchemy relationships with proper backrefs and cascading
- Flask-Login integration for role-based access
- Bootstrap 5 responsive UI components
- Font Awesome icons for visual enhancement
- Comprehensive test coverage and error handling
This feature enables users to break down projects into manageable tasks,
track progress, assign work, and maintain better project organization.
- Change analytics dashboard template from `{% block scripts %}` to `{% block extra_js %}`
- Fixes block name mismatch between base.html and analytics dashboard template
- Resolves issue where AnalyticsDashboard JavaScript class was not loading
- Charts now properly initialize and display data from API endpoints
- Maintains all existing functionality while fixing the rendering issue
- Add mobile-first CSS with responsive breakpoints and touch targets
- Create dedicated mobile.css and mobile.js files for enhanced mobile experience
- Implement card-based table layouts for small screens with data-label attributes
- Add mobile-specific utility classes (mobile-card, touch-target, mobile-stack)
- Enhance navigation with collapsible mobile menu and swipe gestures
- Optimize forms, buttons, and modals for mobile devices
- Add touch feedback and mobile-specific interactions
- Implement responsive grid layouts and mobile typography
- Add mobile meta tags for PWA-like functionality
- Ensure all templates use mobile-friendly classes and responsive design