What's New
Restore Backup (#107)
- Added restore backup functionality via Settings > Data Management
- Upload a previously exported JSON backup file to restore subscriptions
- Two restore modes: Replace (clears existing data first) or Merge (adds alongside existing)
- Categories are automatically matched by name or created if missing
- Full validation of backup file format with clear error messages
Custom Schedule Intervals (#77, #75)
- Expanded schedule options from 5 presets to 12, supporting multi-year and custom intervals
- New options include: Every 2 Weeks, Every 2 Months, Every 6 Months, Every 2/3/5/10 Years
- Ideal for domain renewals, multi-year licenses, and other long-cycle subscriptions
- Cost calculations (monthly/annual) correctly account for custom intervals
- Renewal date calculations updated across both V1 and V2 date engines
- iCal export uses proper RRULE INTERVAL values
- Single dropdown UI keeps the experience simple -- no extra inputs needed
Technical Changes
- Added
schedule_intervalfield to Subscription model with database migration - Added
DisplaySchedule()method for human-friendly schedule labels in templates, emails, and Pushover notifications - Added
POST /api/restoreendpoint for backup restoration - Added
GetByNameto CategoryRepository/CategoryService for category matching during restore - Updated CSV export to include schedule interval column
- All existing subscriptions default to interval=1 (fully backward compatible)