Releases: zlimteck/subly_app
Subly v1.3.6
Subly v1.3.6 - Icon Search Feature
New Features
Icon Search with Dashboard Icons Integration
- New: Search modal with 2,320+ curated icons from Dashboard Icons library
- Added icon search button in subscription form alongside file upload
- Real-time search by name, alias, or category
- Smart auto-population: search automatically uses service name from form
- Clean UI with automatic hiding of broken/missing icons
Technical Details
Icon Selection Methods
Users now have 3 ways to add subscription icons:
- Auto-detection - Automatic logo detection from service URL (existing)
- File upload - Upload custom image files (existing)
- Icon search - Browse and search 2,320+ icons (new)
What's Changed
Added:
- IconSearchModal.jsx - New search modal component
- IconSearchModal.css - Responsive styling for all themes
- Search button in subscription form with responsive layout
Updated:
- SubscriptionForm.jsx - Integrated icon search functionality
- SubscriptionForm.css - Added responsive button layout
- en.json / fr.json - Added new translation strings
GitHub: https://github.com/zlimteck/subly_app
Docker Hub: https://hub.docker.com/r/zlimteck/subly
Subly v1.3.5
Subly v1.3.5 - Critical Bugfix
Bug Fixes
Critical: Application Startup Crash
- Fixed: Application no longer crashes when VAPID environment variables are empty strings
- Improved validation to properly detect missing or empty VAPID credentials
- Push notification service now gracefully disabled when credentials are not fully configured
- Better error handling for optional service initialization
Technical Details
Previous behavior:
- App crashed if VAPID_SUBJECT="" (empty string)
- Web-push library threw error on invalid credentials
New behavior:
- Validates that VAPID variables are not empty before initialization
- Cleanly disables push notifications if any credential is missing or empty
- Application starts successfully even with incomplete VAPID configuration
Important Notes
- Hotfix release for v1.3.4 deployment issues
- No functional changes or new features
- Recommended immediate upgrade if experiencing startup crashes
- Backward compatible with all 1.3.x versions
GitHub: https://github.com/zlimteck/subly_app
Docker Hub: https://hub.docker.com/r/zlimteck/subly
Subly v1.3.4
Subly v1.3.4 - Version Management System
New Features
Version Display & Tracking
- App version now displayed in terminal header: root@subly-1.3.4:~$
- Version automatically injected during Docker build via GitHub Actions
- Real-time version visibility for administrators and users
- Version info accessible from both main dashboard and admin panel
Updates Tab in Admin Panel
- New dedicated "Updates" tab exclusively for administrators
- One-click update checker that queries GitHub releases API
- Visual update notifications with direct links to release pages
- Comparison between current version and latest available version
- Smart update detection system
Complete Release History
- Display of last 10 releases directly in admin panel
- Each release shows:
- Version number with highlighted badge for current version
- Release title and publication date
- Full release notes from GitHub
- Direct link to view release on GitHub
- Current version prominently marked with green badge
- Chronological ordering from newest to oldest
Improvements
User Experience
- Clean terminal-style version display integrated into header
- Mobile-responsive tabs with horizontal scrolling
- Hidden scrollbar for seamless mobile experience
Backend Enhancements
- New endpoint: GET /api/version - Returns current app version
- New endpoint: GET /api/version/check-updates - Checks GitHub for updates
- Automated release fetching from GitHub Releases API
- Intelligent version comparison and update detection
- Comprehensive error handling for offline scenarios
DevOps Improvements
- GitHub Actions workflow enhanced to pass version to Docker builds
- Version automatically extracted from git tags during CI/CD
- Docker images tagged with specific version numbers
- Seamless version propagation from repository to production
Important Notes
- Admin-only feature (Updates tab visible only to administrators)
- Requires internet connection to check for updates from GitHub
- No automatic updates - manual deployment still required
- Update notifications are informational only
- Version persists across container restarts
- Compatible with existing deployment methods (Docker Hub, Portainer, etc.)
GitHub: https://github.com/zlimteck/subly_app
Docker Hub: https://hub.docker.com/r/zlimteck/subly
Subly v1.3.3
Subly v1.3.3 - Dynamic Category Management
New Features
Custom Categories Support
- Users can now create custom categories directly from the subscription form
- Categories are dynamically loaded from the database instead of being hardcoded
- Real-time category creation with inline UI (+Create new category...)
- Support for unlimited custom categories
- Categories are user-specific and fully customizable
Backend Enhancements
- New Category model and API endpoints (/api/categories)
- Migration script to initialize default categories from legacy system
- Automatic category creation with validation
- Improved category management and organization
Improvements
User Experience
- Enhanced category dropdown with inline creation option
- Smooth transition between category selection and creation
- Better error handling for category operations
- Improved i18n support for dynamic categories
Important Notes
Migration Required
First-time setup or upgrade from previous versions:
node /app/backend/scripts/migrateCategories.js
This script will:
- Create default categories in the database
- Preserve existing subscription categories
- Only needs to be run once
GitHub: https://github.com/zlimteck/subly_app
Docker Hub: https://hub.docker.com/r/zlimteck/subly
v1.3.2
Subly v1.3.2 - Optional Notifications & Stability Fix
Bug Fixes
Critical: Application Crash Prevention
- Fixed: Application no longer crashes when VAPID/email credentials are not configured
- Push and email notifications are now completely optional
- Better error messages for missing optional services
Configuration Improvements
- Simplified docker-compose.yml with optional services commented by default
- Minimal required configuration: only MONGODB_URI and JWT_SECRET
- Updated .env.example with clear optional sections
- Improved generateVapidKeys.js script output
Important Notes
- Backward-compatible bugfix release
- Existing deployments continue to work
- Generate VAPID keys when needed: node backend/scripts/generateVapidKeys.js
GitHub: https://github.com/zlimteck/subly_app
Docker Hub: https://hub.docker.com/r/zlimteck/subly
v1.3.0
Subly v1.3.0 - Calendar Integration & Multi-Device Synchronization
New Features
Calendar Integration (iCal)
- Calendar subscription: Unique token-secured URL to sync your payments with Apple Calendar, Google Calendar, Outlook, etc.
- Manual download: Export an .ics file for one-time import into your calendar
- Automatic synchronization: Your calendar updates automatically when you modify your subscriptions
- Recurring events: Monthly and annual subscriptions appear as recurring events
- Smart reminders: Alarms configured according to your notification preferences (1, 3, or 7 days before)
Multi-Device Preference Synchronization
- Currency: Your choice between EUR and USD is saved in the database and synced across all your devices
- Theme: Your preferred theme (dark, light, dracula, nord, solarized) is preserved between sessions
- Automatic loading: Your preferences are automatically restored at each login
- Real-time synchronization: Changes are immediately saved and applied
Docker Improvements
Simplified Deployment
- Docker Hub image: Use the pre-built image zlimteck/subly:latest directly
- MongoDB 8.0 included: Local MongoDB service in docker-compose.yml for deployment without cloud account
- MongoDB Atlas support: Option to use MongoDB cloud if you prefer
- Bind mounts: Ability to specify your own paths for MongoDB volumes
- Optimized Docker Compose: Simplified configuration with a single service for frontend + backend
CI/CD
- Faster builds: Removed Docker Hub description step that was causing failures
- ARM64 optimization: ARM64 architecture disabled to speed up builds (from 2h+ to ~5min)
- GitHub Actions cache: Cache usage for even faster builds
Bug Fixes and Improvements
Bootstrap & Installation
- Improved generateInvite.js script: Automatic bootstrap mode to create the first invitation without a user
- Docker compatible: The script works correctly in Docker containers
- Complete documentation: Detailed instructions for execution in Docker
User Interface
- Consistent spacing: Fixed button spacing in the ProfileModal
- Calendar URLs: Correct configuration for development and production
- Calendar descriptions: Fixed line breaks in events
Documentation
- Docker Hub guide: Instructions for using the pre-built image
- Docker Compose: Complete guide with local MongoDB and Atlas options
- Docker scripts: Documentation for running generateInvite.js and promoteAdmin.js in containers
- Environment variables: Updated examples
Update
From Docker Hub (Recommended)
docker pull zlimteck/subly:1.3.0
docker stop subly-app
docker rm subly-appRestart with the new version
From Docker Compose
Edit docker-compose.yml and change:
image: zlimteck/subly:1.3.0docker-compose down
docker-compose up -dManual Installation
git pull origin main
git checkout v1.3.0
npm install
npm run devRequirements
No new dependencies required. Existing environment variables are sufficient. MongoDB 8.0 is recommended but compatible with earlier versions.
Important Notes
- Existing preferences will be automatically migrated on first login
- Calendar URL is unique per user and does not change
- Calendar tokens are persistent and do not require regeneration
Full installation: https://github.com/zlimteck/subly_app
Docker image: https://hub.docker.com/r/zlimteck/subly
v1.2.2
v1.2.2 - Docker Build Optimization
Optimizations
- Faster Docker builds: Disabled ARM64 platform to avoid slow QEMU emulation on GitHub Actions
- Deterministic builds: Replaced npm install with npm ci for faster and more reliable dependency installation
- Improved caching: Optimized Docker layer caching for faster subsequent builds
Technical Details
Build time improvement: Reduced build time from 2+ hours to approximately 5-10 minutes by removing ARM64 cross-compilation.
Breaking changes: Docker images are now only available for linux/amd64 platform. ARM64 support may be re-enabled in the future with dedicated ARM runners.
Files Changed
- .github/workflows/docker-publish.yml - Removed ARM64 platform
- Dockerfile.prod - Updated to use npm ci instead of npm install
Full Changelog: v1.2.1...v1.2.2
v1.2.1
Version 1.2.1 - Docker Production Build Fix
Fixed
Docker Single Container Deployment:
- Fixed Dockerfile.prod build failure due to missing package-lock.json files
- Replaced npm ci with npm install in Docker build steps
- Created dedicated nginx.prod.conf for single container architecture
- Fixed nginx proxy configuration to use localhost:5071 instead of docker-compose service name
Technical Details
This patch release fixes the production Docker image build that was failing with the following error: npm error The npm ci command can only install with an existing package-lock.json
Changes:
- Added nginx.prod.conf specifically for Dockerfile.prod (single container)
- Kept frontend/nginx.conf for docker-compose.yml (multi-container)
- Both deployment methods (single container and docker-compose) are now fully functional
Deployment:
The single container production image can now be built successfully:
docker build -f Dockerfile.prod -t subly:prod .
Notes
- Image size: ~150 MB
- No breaking changes
- Existing docker-compose deployments are unaffected
Full Changelog: v1.2.0...v1.2.1
v1.2.0
Version 1.2.0 - Web Push Notifications & PWA Enhancements
New Features
Web Push Notifications
- Browser push notifications for upcoming trial expirations
- Payment reminders with configurable timing (1, 3, or 7 days before)
- Multi-language support (English/French) based on user preference
- Service Worker implementation for offline capability
- Automatic language synchronization with backend
- Compatible with: iOS 16.4+ PWA, Android Chrome, Desktop Chrome/Firefox/Edge
PWA Enhancements
- App shortcuts in context menu (Dashboard, Add Subscription)
- Badge API showing trial count on app icon
- Add Subscription shortcut opens form directly
Configurable Timezone
- Environment variable TZ for cron job scheduling
- Support for all IANA timezones (Europe/Paris, America/New_York, etc.)
- Automatic handling of daylight saving time changes
- Configuration in .env, docker-compose.yml, and Dockerfile
UI/UX Improvements
- Payment reminder days selector now adapts to theme with calendar icon
- Fixed notification description text alignment
- Corrected email notification description (trial-only)
- Enhanced profile modal notification preferences
Backend
- Web Push service with web-push library
- VAPID key generation script (generateVapidKeys.js)
- Push subscription storage in MongoDB
- Notification translations (EN/FR) in backend
- Cron jobs for automated push notifications
- Payment reminder service with user-configurable timing
Documentation
- README updated with Web Push setup instructions
- .env.example includes VAPID keys and timezone configuration
- Complete API documentation for push notification endpoints
- Docker deployment examples with new environment variables
Environment Variables Added:
- VAPID_PUBLIC_KEY - Public key for Web Push
- VAPID_PRIVATE_KEY - Private key for Web Push
- VAPID_SUBJECT - Contact info for push service
- TZ - Timezone for cron jobs (default: UTC)
Full Changelog: v1.1.1...v1.2.0
v1.1.1
Version 1.1.1 - Date Calculation Bugfix
Bug Fixes
Fixed date calculation bug where notifications and trial badges showed incorrect number of days remaining.
What was fixed:
- Trial badges on subscription cards now show accurate days remaining
- Notification panel "days until" text displays correct countdown
- Header notification badge count uses accurate date calculations
Technical details:
- Now uses
startOfDay()to normalize dates before calculatingdifferenceInDays - Fixes issue where hour/minute components caused off-by-one errors
- Applied fix across 3 components:
NotificationPanel.jsx,Header.jsx,SubscriptionList.jsx
Example:
Before: Payment due on Nov 10 showed "2 days" when current date was Nov 7
After: Same scenario now correctly shows "3 days"
Full Changelog: v1.1.1...v1.1.1