Added
- Episode covers are fetched and cached by MinusPod rather than loaded from
the publisher. Publishers reject images requested with a cross-site
Referer, which is what a browser sends for a hot-linked image, so covers
that worked for months turn into grey placeholders with nothing in the
logs to explain it. Serving them ourselves also keeps listener IPs off
the publisher. Cached covers are capped per feed, least recently served
dropped first. Generated RSS still points episode art at the publisher,
where podcast apps fetch it without trouble. - A Delete feed button on the feed page, so removing a feed no longer means
going back to the dashboard first. It is the same button and the same
click-twice confirm the dashboard already uses.
Fixed
- Deleting a feed no longer leaves rows pointing at it. Ad patterns and ad
reviewer log entries key on the slug as plain text with no foreign key, so
they outlived the feed, as did the fingerprints and corrections hanging
off those patterns. A re-added feed takes the same slug, so it inherited
the old feed's patterns and applied one show's learning to another.
Feed-scoped patterns now go with the feed; wider-scoped ones keep their
learning and drop the dead reference. - Endpoints podcast apps fetch no longer set a session and CSRF cookie
neither can use. The session cookie carried aVary: Cookiethat stopped
any CDN caching cover art and audio.