- Leverages node:18-alpine's existing node user with proper uid:gid 1000:1000
- Eliminates uid/gid conflicts during Docker build
- Maintains security by avoiding system service account permissions
- Completes fix for issue #109
- Use standard user uid:gid 1000:1000 instead of 100:101 (postfix:crontab)
- Add user override in docker-compose.yml to ensure consistent uid:gid
- Prevents .env files from having system service account permissions
- Addresses critical security concern in issue #109
- Create /usr/src/app/config and /usr/src/app/data directories before setting ownership
- Fixes permission issues when saving configuration via web UI
- Resolves issue #109 where appuser cannot write to .env file in mounted config volume
- Created UpdateManager class for handling application updates
- Added update check, download, and apply functionality
- Integrated update UI into settings modal with progress tracking
- Added version display and update notifications
- Implemented proper backup and rollback mechanism
- Added Docker-aware restart logic
- Enhanced configuration API to include version information
- Added real-time progress updates via WebSocket
Consolidate server dependencies into root package.json.
Refactor Dockerfile to use multi-stage build, build CSS,
run as non-root user, and install production dependencies only.
Update .gitignore and docker-compose.yml build context.
- Add explicit SPA route handler in server/index.js
- Correct middleware order in server/index.js
- Build CSS locally and copy into Docker image
- Adjust Dockerfile to copy pre-built CSS
- Remove GitHub workflows and related files
- Simplify Dockerfile to focus on production build only
- Update README to focus on local development with Docker for production
- Remove docker-compose and other Docker-related files
- Clean up documentation to match new simplified approach