Releases: bscott/subtrackr
v0.5.2 - Currency Improvements
What's New
New Currency Support
- Added Colombian Peso (COP) as a supported currency (#78)
Bug Fixes
- Fixed currency conversion display in subscription list to match dashboard behavior (#79)
- Fixed missing currency symbols for BRL (R$) and CHF (Fr.) in display
UX Improvements
- Added info icon (ⓘ) with tooltip next to converted currency amounts
- Clicking the info icon links to Fixer.io to explain the conversion source
- Tooltip explains "Original amount before conversion (rates from Fixer.io)"
Currency Conversion Setup
To enable automatic currency conversion between different currencies, set up a Fixer.io API key:
# Set the environment variable before starting SubTrackr
export FIXER_API_KEY=your_api_key_hereWithout a Fixer API key, subscriptions will display in their original currency without conversion.
Issues Addressed
New Issues Created
v0.5.1 - Dark Classic Theme & Calendar Fixes
What's New
Dark Classic Theme
- Added Dark Classic theme option that restores the original Tailwind dark mode
- Set as the default theme for new installations
- Provides the familiar dark mode experience from previous versions
Calendar Improvements
- Fixed calendar event styling in dark themes
- Calendar events now have proper dark backgrounds in Dark and Midnight themes
- Improved contrast and readability for subscription events
Bug Fixes
- Eliminated white flash when loading pages in Dark Classic theme
- Fixed white background issue on calendar event cells
- Improved consistency across all theme options
Available Themes
- Default (Light)
- Dark
- Dark Classic (Default)
- Christmas
- Midnight
- Ocean
Upgrade Notes
Important: Back up your data before upgrading.
Download a backup from Settings → Data Management → Download Backup before updating.
v0.5.0 - Optional Login Support 🔐
SubTrackr v0.5.0 introduces optional authentication to protect your subscription data, while maintaining our commitment to simplicity and privacy-first design.
⚠️ Important: Backup Your Data
Before upgrading, we strongly recommend backing up your data:
- Navigate to Settings → Data Management
- Click "Download Backup" to save your database
- Store the backup file in a safe location
This ensures you can restore your data if anything goes wrong during the upgrade.
🎉 New Features
🎄 Holiday Themes (New!)
Spread holiday cheer with our new theming system!
- 5 Beautiful Themes: Default, Dark, Christmas, Midnight, Ocean
- 🎅 Christmas Theme: Festive red & green colors, gold accents, and gentle snowfall animation ❄️
- Easy Switching: Change themes instantly from Settings → Appearance
- Persistent: Your theme choice is saved automatically
- Accessible: Respects prefers-reduced-motion for animations
Perfect for the holiday season! Switch to the Christmas theme and enjoy the festive atmosphere while tracking your subscriptions.
Optional Authentication System
- OFF by default - Zero breaking changes for existing installations
- Single-user authentication with bcrypt password hashing
- Session-based login with secure cookies (HttpOnly, SameSite)
- "Remember me" option (30-day sessions)
- SMTP prerequisite check - ensures password recovery is always available
Password Reset Flow
- Complete forgot password → email reset link → set new password flow
- 1-hour token expiry for security
- Works seamlessly with existing SMTP configuration
CLI Password Reset (Perfect for Docker!)
- Reset admin password without email:
./subtrackr --reset-password - Non-interactive mode:
./subtrackr --reset-password --new-password "yourpassword" - Disable authentication:
./subtrackr --disable-auth - Essential for Docker deployments when SMTP isn't configured
Security Section in Settings
- Easy toggle to enable/disable authentication
- Shows current authentication status
- Warns if SMTP is not configured (required for password recovery)
- Disable authentication option preserves credentials for re-enabling
🔒 Security Improvements
This release includes fixes for several security vulnerabilities identified during security review:
- Fixed: Open redirect vulnerability in authentication handlers
- Fixed: Timing attack in CLI password confirmation (now uses constant-time comparison)
- Fixed: Timing attack in token validation (constant-time string comparison)
- Fixed: Username enumeration via timing (always validates both username and password)
- Fixed: Password validation order in reset handler (prevents information leakage)
- Improved: Redirect URL validation with length limits (max 2048 characters)
- Improved: Error handling prevents authentication bypass
All authentication operations now use constant-time comparisons via crypto/subtle to prevent timing-based attacks.
📝 How to Enable Authentication
-
Configure SMTP first (Settings → Email Configuration)
- Required for password recovery
- Cannot enable login without email configured
-
Enable Login (Settings → Security)
- Toggle "Require Login"
- Set username and password (min 8 characters)
- Click "Enable Authentication"
-
You'll be redirected to login on next page load
🐳 Docker Best Practices
Version Pinning (Recommended)
Always pin to specific versions instead of using latest:
# ❌ NOT RECOMMENDED - unpredictable updates
image: bscott/subtrackr:latest
# ✅ RECOMMENDED - controlled, predictable deployments
image: bscott/subtrackr:v0.5.0Why Pin Versions?
- Predictability - Know exactly what version is running
- Stability - Avoid unexpected breaking changes
- Reproducibility - Same image across all environments
- Rollback Safety - Easy to revert to previous version
- Testing - Test specific versions before upgrading production
Version Update Strategy
# docker-compose.yml
services:
subtrackr:
image: bscott/subtrackr:v0.5.0 # Pin to specific version
volumes:
- ./data:/app/db
ports:
- "8080:8080"
restart: unless-stoppedUpgrade process:
- Backup your data (via Settings UI)
- Update version in
docker-compose.yml - Pull new image:
docker-compose pull - Recreate container:
docker-compose up -d - Verify everything works
- Keep backup until confident in new version
Using latest (Not Recommended)
Only use latest if you:
- Are testing/development (not production)
- Want automatic updates (understand the risks)
- Have good backup/restore procedures
- Monitor for breaking changes in releases
Even then, consider using version tags for better control.
Docker CLI Commands
# Reset Password (when locked out)
docker exec -it subtrackr /app/subtrackr --reset-password
# Disable Authentication
docker exec -it subtrackr /app/subtrackr --disable-auth🔄 Upgrade Instructions
Standard Installation
# Backup your data first (via Settings UI)
# Then pull the latest version
git pull
go build -o subtrackr ./cmd/server
./subtrackrDocker (Pinned Version)
# 1. Backup your data first (via Settings UI)
# 2. Update docker-compose.yml to new version
# image: bscott/subtrackr:v0.5.0
# 3. Pull new image
docker-compose pull
# 4. Recreate container
docker-compose up -d
# 5. Verify logs
docker-compose logs -f subtrackr⚙️ Technical Details
- Zero Breaking Changes - Authentication is OFF by default
- Backward Compatible - Existing installations work without modification
- Session Secret - Auto-generated 64-byte random key stored in database
- Password Hashing - bcrypt with DefaultCost (10 rounds)
- Token Security - Constant-time comparisons prevent timing attacks
- Public Routes - Login, password reset, and static assets remain accessible
🐛 Bug Fixes
- Fixed public routes not including forgot password pages
- Fixed middleware redirect parameter encoding
- Fixed error handling in authentication username retrieval
📚 Dependencies
- Added
golang.org/x/termfor secure CLI password input - Added
crypto/subtlefor constant-time comparisons (standard library)
🔮 What's Next?
Future enhancements being considered:
- CSRF protection
- Rate limiting for auth endpoints
- Account lockout after failed attempts
- Stronger password requirements
🎁 Happy Holidays!
We hope SubTrackr helps you manage your subscriptions effortlessly as we head into the new year. Try out the festive Christmas theme and enjoy the snowfall while you work! ❄️🎄
Wishing you and your loved ones a wonderful holiday season and a prosperous 2026!
Full Changelog: v0.4.9...v0.5.0
v0.4.9 - New Currencies & UX Improvements
Release Notes - v0.4.9
🎉 New Features
New Currency Support
- Swiss Franc (CHF): Added Fr. CHF to supported currencies with proper symbol display
- Brazilian Real (BRL): Added R$ BRL to supported currencies
- Both currencies fully integrated with Fixer.io exchange rate API for automatic conversions
Inline Category Creation (#67)
- Create categories on-the-fly: New "+" button next to the category dropdown in the subscription form
- Seamless workflow: Create a new category without leaving the subscription form
- Instant availability: New category is immediately selected after creation
- No more workflow interruption: Users no longer need to create categories before adding subscriptions
🐛 Bug Fixes
Status Change No Longer Resets Renewal Date (#68)
- Fixed: Changing subscription status (Active, Cancelled, Paused, Trial) no longer recalculates the renewal date
- Previous behavior: Changing status would reset renewal date to today + billing cycle
- New behavior: Status and renewal date are now independent - only changing the billing schedule recalculates the renewal date
📦 Files Changed
internal/service/currency.go- Added CHF and BRL to SupportedCurrenciestemplates/settings.html- Added CHF and BRL currency options with symbolstemplates/subscription-form.html- Added inline category creation, fixed status/renewal date bug, added CHF/BRL options
🔄 Migration Notes
No database migrations required. This is a feature addition that works with existing data.
⚠️ Breaking Changes
None. All changes are backward compatible.
Note: Always create a database backup before updating to a new version. You can export your data from Settings → Data Management → Backup Data.
v0.4.8 - Renewal Reminders & Improved Notes Display
Release Notes - v0.4.8
🎉 New Features
Renewal Reminder Emails
- Automatic renewal reminders: SubTrackr now sends email reminders for upcoming subscription renewals
- Configurable reminder window: Set how many days in advance to receive reminders (default: 7 days)
- Daily scheduler: Background process checks for upcoming renewals daily and sends reminder emails
- Smart filtering: Only active subscriptions with renewal dates are included in reminders
- Email template: Beautiful HTML email template with subscription details and renewal date
Improved Subscription Notes Display
- Hover tooltip: Subscription notes are now displayed in a compact tooltip on hover instead of a separate row
- Eye icon indicator: Small eye icon appears next to edit/delete buttons when a subscription has notes
- Auto-sizing tooltip: Tooltip width automatically adjusts to match the note text length
- Better UX: Cleaner table layout with notes accessible on demand
🔧 Technical Improvements
- Added
SendRenewalReminder()method to EmailService - Added
GetSubscriptionsNeedingReminders()method to SubscriptionService - Implemented background scheduler with daily checks
- Added comprehensive test suite for renewal reminder functionality
- Improved template structure for better maintainability
🧪 Testing
- Added 13 test cases covering renewal reminder functionality
- Tests cover edge cases, boundary conditions, and error scenarios
- All tests passing
📝 How to Use
Renewal Reminders
- Configure SMTP settings in Settings page
- Enable "Renewal Reminders" toggle in Settings
- Set "Reminder Days" (how many days before renewal to send reminder)
- Ensure subscriptions have renewal dates set
- Reminders will be sent automatically via email
Subscription Notes
- Notes are now visible via hover tooltip on the eye icon
- Tooltip appears when hovering over the eye icon in the Actions column
- No changes needed - works automatically with existing notes
🐛 Bug Fixes
- Fixed subscription notes display taking up unnecessary table space
- Improved tooltip positioning and sizing
📦 Files Changed
cmd/server/main.go- Added renewal reminder schedulerinternal/service/email.go- Added SendRenewalReminder methodinternal/service/subscription.go- Added GetSubscriptionsNeedingReminders methodinternal/service/renewal_reminder_test.go- Comprehensive test suitetemplates/subscriptions.html- Updated notes display with tooltiptemplates/subscription-list.html- Updated notes display with tooltip
🔄 Migration Notes
No database migrations required. This is a feature addition that works with existing data.
⚠️ Breaking Changes
None. All changes are backward compatible.
v0.4.7 - Mobile Navigation Improvements
🎉 What's New
📱 Mobile Navigation (Resolves #39)
- Hamburger Menu: Implemented responsive hamburger menu for mobile devices
- Mobile Menu Overlay: Slide-in panel with backdrop for easy navigation
- Full Navigation Access: All pages (Dashboard, Subscriptions, Analytics, Calendar, Settings) now have mobile menu support
- Add Subscription: Accessible directly from mobile menu
- Keyboard Support: Escape key closes mobile menu
- Body Scroll Lock: Prevents background scrolling when menu is open
- Dark Mode: Full dark mode support for mobile menu
🎨 UI Improvements
- Updated README with mobile screenshot
- Consistent mobile experience across all pages
- Improved mobile responsiveness
🔧 Technical Details
- Updated templates: analytics.html, calendar.html, dashboard.html, settings.html, subscriptions.html
- Added mobile menu JavaScript functions
- Responsive breakpoints using Tailwind CSS md: classes
📝 Notes
Any AI-generated code or notes were reviewed by a human developer :)
v0.4.6 - Docker Healthcheck & CI/CD Improvements
SubTrackr v0.4.6 Release Notes
🎉 Overview
This release focuses on Docker improvements and CI/CD pipeline optimization. We've added Docker healthcheck support (Issue #47), simplified Docker image tagging, and optimized the build pipeline to only create images on Git tags.
✨ New Features
🐳 Docker Healthcheck (Resolves #47)
-
Container Health Monitoring
- Added
HEALTHCHECKinstruction to Dockerfile - Monitors application health every 30 seconds
- 3-second timeout per health check
- 5-second start period to allow application initialization
- 3 retries before marking container as unhealthy
- Uses
curlto check/healthzendpoint with database connectivity verification - Verifies both HTTP server and database availability
- Enables better container orchestration and monitoring
- Added
-
Health Endpoint
- New
/healthzendpoint (Kubernetes convention) - Checks database connectivity in addition to HTTP server availability
- Returns
200 OKwith{"status": "healthy"}when healthy - Returns
503 Service Unavailablewhen database is unavailable
- New
-
Runtime Dependencies
- Added
curlto runtime dependencies for healthcheck support - Minimal impact on image size (~180MB total)
- Added
🔧 CI/CD Pipeline Improvements
-
Simplified Docker Image Tagging
- Only creates exact version tag (e.g.,
v0.4.6) andlatest - Removed major and minor version tags (
v0,v0.4) - Cleaner image registry with fewer redundant tags
- Easier to identify specific versions
- Only creates exact version tag (e.g.,
-
Optimized Build Triggers
- Docker images only build on Git tag pushes (
v*) - Removed automatic builds on
mainbranch pushes - Reduces CI/CD resource usage
- Manual builds still available via
workflow_dispatch - More efficient and cost-effective pipeline
- Docker images only build on Git tag pushes (
🔧 Technical Improvements
Docker
- Healthcheck configuration following Docker best practices
- Multi-stage build maintained for optimal image size
- All runtime dependencies properly included
GitHub Actions
- Streamlined workflow configuration
- Reduced unnecessary build triggers
- Better resource utilization
Project Configuration
- Updated
.gitignorewith additional entries - Improved project organization
🔄 Migration Notes
- Docker Images: Existing images continue to work
- CI/CD: Pipeline changes only affect new builds
- Health Endpoint: If you're using the
/healthendpoint for monitoring, update to/healthz
📝 Breaking Changes
Health Endpoint Change
/healthendpoint removed: The previous/healthendpoint has been replaced with/healthz- Action Required: If you have monitoring systems, health checks, or load balancers configured to use
/health, update them to use/healthzinstead - Reason: The new
/healthzendpoint provides better health verification by checking both HTTP server and database connectivity, following Kubernetes conventions - Impact: Low - Only affects systems actively monitoring the health endpoint
🙏 Acknowledgments
- Issue #47 contributor for Docker healthcheck request
- Community feedback on CI/CD optimization
📚 Documentation
- Docker healthcheck follows Docker documentation
- Updated workflow documentation for tag-based builds
Release Date: 11/14/25
Git Tag: v0.4.6
Branch: v0.4.6
v0.4.5 - Calendar View, iCal Export & More
SubTrackr v0.4.5 Release Notes
🎉 Overview
This release brings significant improvements to email notifications, UI polish, and visual enhancements with subscription icons. We've revamped the SMTP configuration system, fixed dark mode issues (Issue #48), added automatic logo fetching for subscriptions (Issue #6), introduced table sorting functionality for better subscription management (Issue #27), added Quarterly schedule support (Issue #49), implemented automatic renewal date updates (Issue #29), and added a comprehensive calendar view with iCal export functionality.
✨ New Features
📧 Enhanced Email Notifications
-
SMTP TLS/SSL Support (PR #51, Resolves #50)
- Added comprehensive TLS/SSL support for SMTP connections
- Supports both STARTTLS (ports 587, 25, 2525, 8025, 80) and implicit TLS/SSL (ports 465, 8465, 443)
- Improved error messages to distinguish between SSL and STARTTLS failures
- Fixed authentication issues with SMTP2Go and similar providers
- Added loading spinner to test connection button for better UX
-
Email Notification System
- Added "To Email" field to SMTP configuration for notification recipient
- Implemented high-cost alert emails (>$50/month) when creating or updating subscriptions
- HTML email templates with subscription details (name, cost, category, renewal date, URL)
- Emails sent automatically when subscriptions become high-cost
- Respects "High Cost Alerts" setting in preferences
🎨 Subscription Icons/Logos (Resolves #6)
-
Automatic Logo Fetching
- Automatic favicon fetching from subscription website URLs
- Uses Google's favicon service for reliable logo retrieval
- Supports URLs with or without protocol (auto-adds https://)
- Logos automatically update when subscription URL changes
- Logos displayed in subscription lists and dashboard
-
UI Enhancements
- Icons appear next to subscription names in all lists
- Graceful fallback to status dot if logo fails to load
- Works seamlessly in both light and dark modes
- Responsive design maintained
📊 Subscription Table Sorting (Resolves #27)
-
Sortable Columns
- Click any column header to sort subscriptions
- Sortable by: Name, Category, Cost, Schedule, Status, Renewal Date
- Toggle between ascending and descending order
- Visual indicators (arrows) show current sort column and direction
- HTMX-powered sorting (no page reload required)
-
Table View
- Converted subscription list from card layout to table format
- Better data organization and readability
- Maintains responsive design with horizontal scroll on small screens
- Full dark mode support
- Sort state persists during page interactions
📅 Quarterly Schedule Support (Resolves #49)
- New Schedule Option
- Added "Quarterly" as a subscription schedule option
- Quarterly subscriptions renew every 3 months
- Properly handles month-end dates (e.g., Jan 31 → Apr 30)
- Cost calculations updated for quarterly subscriptions
- Annual cost: 4x quarterly cost
- Monthly cost: quarterly cost / 3
- Category statistics correctly include quarterly subscriptions
🔄 Automatic Renewal Date Updates (Resolves #29)
-
Smart Date Management
- Renewal dates automatically update when they pass (for active subscriptions)
- Renewal dates recalculate when start date changes
- Renewal dates recalculate when schedule changes
- Updates happen automatically when subscriptions are loaded from database
- Uses GORM hooks (AfterFind, BeforeUpdate) for seamless updates
- No manual intervention required - dates stay current automatically
-
UI Improvements
- Added info tooltip to "Next Renewal" field explaining auto-update behavior
- Tooltip clarifies that renewal date updates after clicking Update button
- Better user understanding of automatic date management
📅 Calendar View & iCal Export
-
Interactive Calendar
- New calendar page showing all subscription renewal dates
- Month view with navigation between months
- Visual highlighting of days with renewals
- Subscription icons displayed next to names
- Renewal amounts shown for each subscription
- Click any subscription to edit it directly from the calendar
- Full dark mode support
- Responsive design
-
iCal Export
- Export all subscription renewals to standard iCal format (.ics file)
- Compatible with Google Calendar, Apple Calendar, Outlook, and other calendar apps
- Includes recurrence rules based on subscription schedule (Daily, Weekly, Monthly, Quarterly, Annual)
- Event descriptions include subscription details (name, cost, schedule, URL)
- One-click download from calendar page
🐛 Bug Fixes
Dark Mode Improvements (Resolves #48)
- Fixed SMTP configuration section dark mode styling
- Fixed categories section dark mode visibility
- Fixed API keys section dark mode colors
- Fixed API documentation section dark mode support
- Fixed email message templates for dark mode
- All input fields and labels now properly visible in dark mode
JavaScript Fixes
- Fixed syntax error in subscription form (extra closing braces causing HTMX errors)
- Improved form initialization and event handling
Dashboard Improvements
- Removed 5-subscription limit on dashboard
- Dashboard now displays all subscriptions (matching subscriptions page)
- Better consistency across views
Date Calculation Improvements
- Enhanced date calculation logic for all schedule types
- Robust handling of month-end dates (e.g., Jan 31 → Feb 28/29)
- Quarterly renewals properly handle edge cases
- Start date changes now trigger renewal date recalculation
- Past renewal dates automatically advance to next occurrence
🔧 Technical Improvements
Database
- Added
icon_urlcolumn to subscriptions table with automatic migration - Migration handles existing databases gracefully
Code Quality
- Created reusable
LogoServicefor favicon fetching - Extracted duplicate logo fetching logic into helper methods
- Improved error handling and logging
- Better separation of concerns
Architecture
- Email service with TLS/SSL support
- Logo service with URL normalization and domain extraction
- Synchronous logo fetching for immediate display
- Preserves existing logos when updating subscriptions
- Repository layer supports flexible sorting with column validation
- Service layer abstraction for sorted data retrieval
- GORM hooks (AfterFind, BeforeUpdate) for automatic date management
- Enhanced date calculation with month-end date handling
- Quarterly schedule support throughout the application stack
- Calendar view with client-side rendering for performance
- iCal export with RFC 5545 compliant format
- Template function support for date formatting in navigation
📋 Future Enhancements
Email Notifications
- Renewal reminder emails
- Automatic emails before subscription renewals
- Configurable reminder timeframe (e.g., 7 days before)
- Support for multiple reminder intervals
- Note: Auto-update of renewal dates (Issue #29) is now implemented
- Customizable email templates
- User-defined email templates
- Template variables and customization
- Email notification preferences per subscription
- Per-subscription notification toggles
- Granular control over alert types
- Batch email sending for multiple alerts
- Digest emails for multiple high-cost subscriptions
- Daily/weekly summary emails
Subscription Icons
- Manual logo upload option
- Allow users to upload custom logos
- Override automatic favicon fetching
- Support for image formats (PNG, JPG, SVG)
- Logo caching/memoization for performance
- Cache domain-to-logo mappings
- Reduce redundant API calls
- In-memory or database caching
- Background job to refresh missing logos
- Periodic refresh of logos for existing subscriptions
- Retry failed logo fetches
- Update logos when favicons change
- Support for alternative favicon services
- Fallback to multiple favicon APIs
- Icon Horse, Favicon.io, etc.
- Service rotation for reliability
- Local file storage option for logos
- Download and store logos locally
- Reduce dependency on external services
- Better privacy and performance
- Logo optimization and resizing
- Automatic image optimization
- Consistent sizing across subscriptions
- Support for different display sizes
SMTP
- OAuth2 authentication support
- Gmail OAuth2 integration
- Microsoft 365 OAuth2 support
- Improved security for email sending
- Multiple SMTP provider presets
- Pre-configured settings for popular providers
- One-click setup for Gmail, Outlook, etc.
- SMTP connection pooling
- Reuse connections for better performance
- Reduced connection overhead
- Email delivery status tracking
- Track email delivery success/failure
- Retry failed email sends
- Delivery reports and analytics
🔄 Migration Notes
- Automatic Migration: The
icon_urlcolumn is automatically added to existing subscriptions - No Data Loss: All existing subscriptions remain intact
- Backward Compatible: Existing SMTP configurations continue to work
📝 Breaking Changes
None - This release is fully backward compatible.
🙏 Acknowledgments
- PR #51 contributors for SMTP TLS/SSL improvements
- Community feedback on dark mode issues (Issue #48)
- Inspiration from Wallos project for logo implementation approach (Issue #6)
- Community request for subscription sorting functionality (Issue #27)
- Community request for Quarterly schedule support (Issue #49)
- Community feedback on renewal date management (Issue #29)
📚 Documentation
- Updated settings page with "To Email" field
- Improved SMTP configuration UI with better error messages
- Enhanced subscription forms with logo preview capability
- Added info tooltip to renewal date field explaining auto-update behavior
- Version number updated to v0.4.5 in ...
v0.4.4 - Enhanced Currency Support & Renewal Date Fixes
🚨 IMPORTANT: Backup Your Data Before Upgrading
This release includes database schema changes. Please backup your data directory before upgrading:
# Stop SubTrackr
docker-compose down
# Create backup
cp -r ./data ./data-backup-$(date +%Y%m%d)
# Then proceed with upgrade
docker-compose pull
docker-compose up -dWhat's being added to your database:
- New
exchange_ratestable for currency conversion (optional feature) - New
date_calculation_versioncolumn for improved date handling - All existing data remains unchanged and fully compatible
🎯 What's New
✨ New Features
- Advanced Currency Support: Added comprehensive currency conversion system with support for USD, EUR, GBP, JPY, RUB, SEK, PLN, and INR
- Real-time Exchange Rates: Integration with Fixer.io API for up-to-date currency conversion (completely optional)
- Currency Settings: New settings page to configure your preferred base currency
- Enhanced Date Handling: Improved renewal date calculations with robust edge case handling
- Migration System: Added versioned date calculation system for better reliability
🐛 Bug Fixes
- Renewal Date Calculation: Fixed issues where renewal dates weren't being calculated correctly for new subscriptions
- Month-end Edge Cases: Improved handling of subscriptions starting on month-end dates (Jan 31, Jul 31, etc.)
- Leap Year Support: Enhanced leap year date arithmetic for accurate billing cycles
- API Response Format: Fixed API endpoints returning HTML instead of JSON in some cases
🔧 Technical Improvements
- Comprehensive Test Suite: Added extensive unit tests covering edge cases and currency functionality (55.6% coverage)
- Database Migrations: Enhanced migration system for schema updates
- Carbon Date Library: Integrated robust date arithmetic library for better date handling
- Performance Optimizations: Improved database queries and caching for currency rates
🔑 Currency Conversion is Optional
SubTrackr works fully out-of-the-box with no external dependencies required. The Fixer.io API integration is completely optional:
- Without API key: Full multi-currency support with manual selection
- With API key: Automatic real-time currency conversion
🙏 Thanks to Contributors
Special thanks to @amitsingh-007 for contributing INR currency support in PR #45!
📈 Stats
- Test coverage increased to 55.6%
- Added 90+ new test cases
- Enhanced edge case handling for date calculations
- Improved currency conversion accuracy
Full Changelog: v0.4.3...v0.4.4
v0.4.3 - API Response Fix
What's Changed
Bug Fixes
- Fixed API endpoint returning HTML instead of JSON (#42) - The
/api/v1/subscriptionsendpoint now correctly returns JSON data for API consumers
Contributors
A big thank you to @Klick3R-1 for identifying and fixing this important API issue! 🎉