- Add fallback for chown failure by using group permissions
- Add www-data to user's group and set appropriate group permissions
- This handles cases where chown is not permitted (e.g., certain filesystems)
- Set ownership of static/ directory to www-data:www-data
- This resolves 'Permission denied' errors when nginx tries to serve static files like the logo
- Add client_max_body_size 100G to both HTTP and HTTPS nginx configs
- Increase client_body_timeout and client_header_timeout for large uploads
- Update proxy timeouts to 300s for better handling of large files
- Disable proxy_buffering and proxy_request_buffering for large uploads
- This resolves 413 Request Entity Too Large errors from nginx
- Replace base64 logo with static file reference to avoid ERR_INVALID_URL
- Add missing status element to index.html to fix TypeError in XMLHttpRequest
- Reduce MAX_CONTENT_LENGTH from 1000TB to 100GB for practicality
- Update all templates to use logo_url instead of logo_b64
- Update Waitress max_request_body_size to match Flask limit
- Convert all print statements in process_pdfs_async to logger.info/logger.error
- Update startup diagnostics to use logger.info instead of print
- Ensure all diagnostic information is captured by systemd logs on remote server
- Add detailed logging for PDF processing steps, file scanning, and error conditions
- Add startup diagnostics showing directory permissions and PDF support
- Enhanced process_pdfs_async with detailed logging at every step
- Check if PyMuPDF is available and fail gracefully if not
- Scan and log all PDF files found in upload directory
- Improved error handling during file processing
- Sequential processing with progress updates every 10 files
- Clear error messages when no PDFs found or processing fails
- This will show exactly where processing stops on remote server
- Make RESULTS_DIR, SESSION_FILE_DIR, uploads absolute
- Add error handling around file saving with detailed logging
- Add /test route to check write permissions
- Ensure app works on remote with correct paths and permissions
- Remove login_required decorator to test if upload works
- Add debug print to confirm auth is bypassed
- If files appear in uploads after this, the issue is authentication
- Create job_id first, then save files to uploads/job_id/
- Add debug print when index() is called
- Files will now be visible in uploads folder for debugging
- Change JOBS_FILE and RESULTS_DIR to absolute paths using os.path.abspath
- Fix job sorting in /jobs route to use datetime objects instead of strings
- This should resolve issues with jobs not appearing or processing on remote server
- Print if jobs.json exists and file path
- Show timestamp conversion details for each job
- Print sorted jobs count and first job status
- Help diagnose why new jobs aren't appearing
- Add try-except in save_jobs to catch errors
- Print job IDs when loading jobs in /jobs route
- Print timestamp when job is created
- Print start/end times for processing
- Print successful save confirmation
- Add print statements to track job creation, processing start, completion, and failures
- Use absolute path for jobs.json to avoid working directory issues
- Temporarily switch to sequential PDF processing to avoid multiprocessing issues on remote server
- Embed logo as base64 data URL in templates to avoid static file issues
- Fix Flask route endpoint for /jobs (change function name to 'jobs')
- Change upload and session directories to relative paths for better portability
- Ensure directories are created at app startup
- Add PDF_SUPPORT checks before using PyMuPDF functions
- Handle missing PyMuPDF gracefully in PDF processing functions
- Fix url_for('jobs') to url_for('jobs_page') in templates
- Prevent AttributeError when fitz is None
- Full-featured web application for PDF processing
- Microsoft Entra (Azure AD) authentication with PKCE
- Parallel PDF sorting and merging capabilities
- Job management system with real-time progress tracking
- Modern web UI with responsive design
- Comprehensive error handling and logging
- Ubuntu installation script for easy deployment
- Environment configuration for secure credential management