What's New
Per-Subscription Cancellation Notice Period (#132)
- New Cancellation Notice (days) field on every subscription (0–365; default 0 keeps existing behavior)
- Renewal reminders now count down to the cancel-by deadline (renewal date minus notice period) across email, Pushover, Telegram, and webhooks, with clear "Cancel by" wording
- Once a deadline passes, reminders fall back to the renewal date so no subscription goes silent
- Cancel-by deadlines are shown in the subscription list, the in-app calendar, and the iCal export/subscription feed
- Available via the REST API, MCP tools, and CSV export; localized in English, German, Spanish, and Dutch
Subscription Search
- Filter the subscription list live, without disrupting column sorting
Autopay Tracking
- Track whether each subscription is charged automatically (yes / no / not recorded), with list badges, form toggle, CSV export, and MCP support
ARMv7 Docker Support (#133)
- Docker images now also build for
linux/arm/v7(32-bit Raspberry Pi and similar boards) — thanks to @DustinOnGithub for the contribution
Technical Changes
- New migration adds
cancellation_notice_days(default 0), clamped to 0–365 on all write paths - Reminder de-duplication state resets when a notice period changes mid-cycle
- Webhook renewal reminders keep the stable
renewal_reminderevent name; payloads now includecancel_by_dateandcancellation_notice_days - Notification text unified in a shared builder across all four channels
- New unit, handler, migration, and Playwright end-to-end coverage