fix: don't use mbstring
feat: sort graphs on the statistics page by usage
feat: lifetime subscriptions
feat: allow multiple filters on the settings page
feat: filter by notification status
fix: migrations using double quotes
feat: rework icons
fix: open 3 dot menu abone for the subscriptions at the bottom
fix: ntfy notifications with strange chars
feat: move update banner to the dashboard
fix: handle some ai responses that come in a different format
chore: handle deprecation of curl_close
feat: enable ai recommendations at a schedule
fix: ai recommendation numbering when deleting a recommendation
feat: mask ai api key on the settings page
fix: unicode character on the css file
fix: retain first and last name when switching language during registration
fix: calendar ocurrences to respect subscriptions start date
fix: ssrf vulnerability on several endpoints
fix: logo search
fix: xss vulnerability on payment method rename endpoint
fix: set login cookie to httponly
feat: add robots.txt to disallow indexing.
feat: add serverchan notifications.
fix: use stable UID for iCal events to prevent duplicates.
fix: use RFC 5545 compliant date format in iCal exports.
feat: notifications for subscription can be triggered up to 180 days before payment date.
Changed UID generation from uniqid() to a stable format based on
subscription ID (wallos-subscription-{id}@wallos). This ensures that
calendar applications update existing events instead of creating
duplicates when the feed is refreshed.
According to RFC 5545 section 3.8.4.7, the UID property must be
globally unique and persistent for the lifetime of the event.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: use RFC 5545 compliant date format in iCal exports
Fixes iCal date format to comply with RFC 5545 specification by:
- Adding VALUE=DATE parameter to DTSTART and DTEND fields
- Using date-only format (YYYYMMDD) instead of datetime format
- Removing incorrect timezone handling in exportcalendar.php
This resolves issues with calendar applications that strictly validate
iCal format, as reported in gethomepage/homepage#6091.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix: add required DTSTAMP property to iCal VEVENT components
According to RFC 5545 section 3.8.7.2, the DTSTAMP property is
required in VEVENT components. It specifies the date and time that
the calendar object was created.
Added DTSTAMP in UTC format (gmdate) to both iCal export endpoints.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>