<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Elezea — releases</title><description>Rian van der Merwe&apos;s blog</description><link>https://elezea.com/</link><item><title>discogs-mcp v3.4.0 — Wantlist support</title><link>https://elezea.com/2026/06/discogs-mcp-v3-4-0/</link><guid isPermaLink="true">https://elezea.com/2026/06/discogs-mcp-v3-4-0/</guid><description>Your Discogs wantlist is now first-class in `discogs-mcp`. Browse the records you want but don&apos;t own, add one the moment you spot it, and clear it off the list…</description><pubDate>Sun, 28 Jun 2026 14:47:11 GMT</pubDate><content:encoded>&lt;p&gt;Your Discogs wantlist is now first-class in &lt;code&gt;discogs-mcp&lt;/code&gt;. Browse the records you want but don&apos;t own, add one the moment you spot it, and clear it off the list once you&apos;ve finally tracked it down — all from your LLM client, without a trip to the Discogs site.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;get_wantlist&lt;/code&gt; browses the releases you want but don&apos;t own, paged, with the details for each so you can scan the list in conversation.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;add_to_wantlist&lt;/code&gt; adds a release to your wantlist by its Discogs release ID — pair it with &lt;code&gt;search_discogs&lt;/code&gt; to find the release, then add it in the same breath.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;remove_from_wantlist&lt;/code&gt; takes a release off your wantlist once you own it.&lt;/li&gt;
&lt;li&gt;There&apos;s a ready-made workflow built on these: the &lt;a href=&quot;https://github.com/rianvdm/product-ai-public/tree/main/.opencode/skills/finding-original-cds&quot;&gt;&lt;code&gt;finding-original-cds&lt;/code&gt;&lt;/a&gt; skill picks the best original, non-remastered CD pressing of an album and adds it to your wantlist for you.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The server now backs off cleanly when Discogs rate-limits a request. A per-entry retry cap and circuit breaker stop it from retrying in a tight loop, so a burst of 429s during a big collection sync pauses and recovers on its own instead of wedging.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Collection sync now runs every 6 hours instead of hourly — the snapshot stays plenty fresh at that cadence and it&apos;s far gentler on the Discogs API.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! If you&apos;d like you can &lt;a href=&quot;https://elezea.com/contact&quot;&gt;reply via email&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Discrobble v1.3.1 — Free to start, plus a Wikipedia summary on each album</title><link>https://elezea.com/2026/06/discrobble-v1-3-1/</link><guid isPermaLink="true">https://elezea.com/2026/06/discrobble-v1-3-1/</guid><description>Discrobble is now free to start, with a one-time $4.99 unlock for unlimited scrobbling. If you were already using the app before this change, you keep…</description><pubDate>Fri, 19 Jun 2026 16:29:07 GMT</pubDate><content:encoded>&lt;p&gt;Discrobble is now free to start, with a one-time $4.99 unlock for unlimited scrobbling. If you were already using the app before this change, you keep unlimited scrobbling for free — thanks for being an early user. This update also adds a Wikipedia summary on the album page, a clearer view of your membership in Settings, and the option to show or hide album ratings.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Discrobble is free to start. New listeners get 20 free scrobbles, then a single $4.99 purchase unlocks unlimited scrobbling, with no subscription and no ads. Anyone who used Discrobble before this change keeps unlimited scrobbling for free.&lt;/li&gt;
&lt;li&gt;Album pages now include a summary from Wikipedia, with a link to read the full article.&lt;/li&gt;
&lt;li&gt;Settings shows your membership status, and lets you upgrade or restore your purchase.&lt;/li&gt;
&lt;li&gt;You can choose whether to show album ratings, under Settings.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! If you&apos;d like you can &lt;a href=&quot;https://elezea.com/contact&quot;&gt;reply via email&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Discrobble v1.2.1 — Rate your albums</title><link>https://elezea.com/2026/06/discrobble-v1-2-1/</link><guid isPermaLink="true">https://elezea.com/2026/06/discrobble-v1-2-1/</guid><description>Discrobble now shows your Discogs rating for every album and lets you set or change it without leaving the app. Open an album, tap a star, and your rating…</description><pubDate>Fri, 12 Jun 2026 23:05:41 GMT</pubDate><content:encoded>&lt;p&gt;Discrobble now shows your Discogs rating for every album and lets you set or change it without leaving the app. Open an album, tap a star, and your rating saves straight to your Discogs collection.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Your Discogs rating now appears on each album&apos;s detail screen.&lt;/li&gt;
&lt;li&gt;Tap a star to rate an album from 1 to 5, or tap the star you&apos;ve already selected to clear the rating. Ratings save to your Discogs account, so they stay in sync wherever you use Discogs.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! If you&apos;d like you can &lt;a href=&quot;https://elezea.com/contact&quot;&gt;reply via email&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Discrobble v1.2.0 — Synced scrobble history</title><link>https://elezea.com/2026/05/discrobble-v1-2-0/</link><guid isPermaLink="true">https://elezea.com/2026/05/discrobble-v1-2-0/</guid><description>Your Recently Scrobbled history now syncs across all your devices. Scrobble an album on your iPhone and it&apos;s there on your iPad — your recent plays follow you…</description><pubDate>Sun, 31 May 2026 20:45:54 GMT</pubDate><content:encoded>&lt;p&gt;Your Recently Scrobbled history now syncs across all your devices. Scrobble an album on your iPhone and it&apos;s there on your iPad — your recent plays follow you anywhere you&apos;re signed in with the same &lt;a href=&quot;http://Last.fm&quot;&gt;Last.fm&lt;/a&gt; account.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Recently Scrobbled now syncs across every device signed into the same &lt;a href=&quot;http://Last.fm&quot;&gt;Last.fm&lt;/a&gt; account. It&apos;s there on launch — no pull-to-refresh needed.&lt;/li&gt;
&lt;li&gt;Clear your history on one device and it clears everywhere.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Older scrobbles from before this update may show without cover art. They clear out on their own as you keep scrobbling, or you can tidy them up right away with Clear Recent History in Settings.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! If you&apos;d like you can &lt;a href=&quot;https://elezea.com/contact&quot;&gt;reply via email&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Discrobble v1.1.0 — Native iPad support</title><link>https://elezea.com/2026/05/discrobble-v1-1-0/</link><guid isPermaLink="true">https://elezea.com/2026/05/discrobble-v1-1-0/</guid><description>Discrobble now runs natively on iPad, with a denser collection grid and a side-by-side album view that puts the cover and tracklist together. This release also…</description><pubDate>Tue, 26 May 2026 20:30:26 GMT</pubDate><content:encoded>&lt;p&gt;Discrobble now runs natively on iPad, with a denser collection grid and a side-by-side album view that puts the cover and tracklist together. This release also clears out a sticky onboarding bug, makes sync safer when it gets interrupted, and fully removes your data from the server when you delete your account.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Native iPad support. The collection grid adapts to the screen — more albums per row on iPad, same comfortable density on iPhone. The album screen shows the cover and the tracklist side by side in both portrait and landscape.&lt;/li&gt;
&lt;li&gt;The onboarding and sync screens stay at a readable width on iPad instead of stretching edge to edge.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The app could occasionally get stuck on the setup screen after you connected your accounts. Once you&apos;re signed in, you now move on.&lt;/li&gt;
&lt;li&gt;Collection sync is safer. If a sync is interrupted partway through, it can no longer remove albums from your collection by mistake.&lt;/li&gt;
&lt;li&gt;Deleting your account from Settings now fully removes your data from the server, not just from your device.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;In-flight auth tokens are now encrypted at rest on the server (AES-256-GCM).&lt;/li&gt;
&lt;li&gt;Added the Apple required-reason API privacy manifest.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! If you&apos;d like you can &lt;a href=&quot;https://elezea.com/contact&quot;&gt;reply via email&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Discrobble v1.0.2 — Free on the App Store</title><link>https://elezea.com/2026/05/discrobble-v1-0-2/</link><guid isPermaLink="true">https://elezea.com/2026/05/discrobble-v1-0-2/</guid><description>My first iPhone app is live! Discrobble is now on the [App Store](https://apps.apple.com/us/app/id6761305573), free. It connects to your Discogs collection and your Last.fm account so you can track plays from your vinyl and CDs…</description><pubDate>Sat, 09 May 2026 20:05:48 GMT</pubDate><content:encoded>&lt;p&gt;My first iPhone app is live! Discrobble is now on the &lt;a href=&quot;https://apps.apple.com/us/app/id6761305573&quot;&gt;App Store&lt;/a&gt;, free. It connects to your &lt;a href=&quot;https://www.discogs.com/&quot;&gt;Discogs&lt;/a&gt; collection and your &lt;a href=&quot;https://www.last.fm/&quot;&gt;Last.fm&lt;/a&gt; account so you can track your physical music listening in two taps: pick an album, hit &amp;quot;Scrobble,&amp;quot; and the tracks land in your &lt;a href=&quot;http://Last.fm&quot;&gt;Last.fm&lt;/a&gt; history. There&apos;s more on the &lt;a href=&quot;https://elezea.com/discrobble/&quot;&gt;product page&lt;/a&gt; about how it works.&lt;/p&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! If you&apos;d like you can &lt;a href=&quot;https://elezea.com/contact&quot;&gt;reply via email&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>discogs-mcp v3.3.0 — Background sync, instant search</title><link>https://elezea.com/2026/05/discogs-mcp-v3-3-0/</link><guid isPermaLink="true">https://elezea.com/2026/05/discogs-mcp-v3-3-0/</guid><description>The first search of the day is now instant. `discogs-mcp` pre-fetches your collection in the background every hour and keeps it in a snapshot, so…</description><pubDate>Tue, 05 May 2026 01:13:29 GMT</pubDate><content:encoded>&lt;p&gt;The first search of the day is now instant. &lt;code&gt;discogs-mcp&lt;/code&gt; pre-fetches your collection in the background every hour and keeps it in a snapshot, so &lt;code&gt;search_collection&lt;/code&gt; doesn&apos;t have to paginate the Discogs API from cold any more.&lt;/p&gt;
&lt;p&gt;The server also tells your LLM client how to navigate it — every tool response ends with a &amp;quot;Next steps&amp;quot; block listing the most likely follow-up calls and the exact arguments to use, so chained queries like &amp;quot;find me a mellow jazz album, then expand the top hit&amp;quot; don&apos;t make the model guess.&lt;/p&gt;
&lt;p&gt;And if you&apos;ve been putting off deploying your own copy, there&apos;s now a Deploy to Cloudflare button in the README — one click, three secrets, done.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Hourly background sync keeps your collection snapshot fresh. Add or remove a record on Discogs and it&apos;s visible to search within an hour, automatically.&lt;/li&gt;
&lt;li&gt;New &lt;code&gt;refresh_collection&lt;/code&gt; tool forces an immediate snapshot refresh — useful when you&apos;ve just bought an album and want it visible to search right now.&lt;/li&gt;
&lt;li&gt;Server-level &lt;code&gt;instructions&lt;/code&gt; and per-tool &amp;quot;Next steps&amp;quot; breadcrumbs make the server self-navigating for any LLM client. The instructions name a recommended path (&lt;code&gt;search_collection&lt;/code&gt; → &lt;code&gt;get_release&lt;/code&gt; → mutations); each tool response ends with the most likely follow-up calls, with real values templated in (&lt;code&gt;get_release(release_id=28861354)&lt;/code&gt;, not &lt;code&gt;release_id=&amp;lt;ID&amp;gt;&lt;/code&gt;). Inspired by &lt;a href=&quot;https://taoofmac.com/space/blog/2026/04/29/2341&quot;&gt;Rui Carmo&apos;s MCP server post&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;One-click self-hosting via the Deploy to Cloudflare button in the README. Cloudflare provisions the KV namespaces, Durable Object, cron, and prompts for the secrets — no &lt;code&gt;wrangler kv namespace create&lt;/code&gt; needed, and pushes to your fork redeploy automatically via Workers Builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;First &lt;code&gt;search_collection&lt;/code&gt; call after a cold cache no longer times out. Previously this could take 30 seconds to two minutes on a 1,500-item collection, often longer than the MCP request timeout. It&apos;s now sub-second.&lt;/li&gt;
&lt;li&gt;Mood queries (&amp;quot;mellow Sunday morning&amp;quot;, &amp;quot;road trip music&amp;quot;) respond just as fast as keyword queries — they used to pay the same pagination cost as everything else.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New &lt;code&gt;syncCollection&lt;/code&gt; module with per-page retry, resumable progress, and atomic snapshot swap so readers never see partial state.&lt;/li&gt;
&lt;li&gt;Cron runs hourly with a probe path: one API call to compare count + page-1 instance IDs against the snapshot. Full repaginate only when something changed. Steady-state cron tick now costs 1 Discogs request instead of 16.&lt;/li&gt;
&lt;li&gt;Self-healing across MCP request timeouts: if a sync stalls partway through, the next call resumes from where it left off rather than restarting.&lt;/li&gt;
&lt;li&gt;Dropped the &lt;code&gt;MCP_LOGS&lt;/code&gt; KV binding. Sync outcomes now structured-log to the Workers runtime so Cloudflare Observability ingests them — one fewer namespace for self-hosters to create.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! If you&apos;d like you can &lt;a href=&quot;https://elezea.com/contact&quot;&gt;reply via email&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>lastfm-mcp v2.4.0 — Top tracks and 8K fewer lines</title><link>https://elezea.com/2026/04/lastfm-mcp-v2-4-0/</link><guid isPermaLink="true">https://elezea.com/2026/04/lastfm-mcp-v2-4-0/</guid><description>The big shifts in this release: three new tools, a glassmorphism-redesigned landing page, timezone-aware day boundaries on `get_recent_tracks`, and a…</description><pubDate>Thu, 30 Apr 2026 20:09:55 GMT</pubDate><content:encoded>&lt;p&gt;The big shifts in this release: three new tools, a glassmorphism-redesigned landing page, timezone-aware day boundaries on &lt;code&gt;get_recent_tracks&lt;/code&gt;, and a 8,300-line cull of the original session-based worker now that the OAuth path has been the only one in production for a while.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Three new tools.&lt;/strong&gt; &lt;code&gt;get_top_tracks&lt;/code&gt; fills the obvious symmetry gap with the existing &lt;code&gt;get_top_artists&lt;/code&gt; and &lt;code&gt;get_top_albums&lt;/code&gt;. &lt;code&gt;get_artist_top_tracks&lt;/code&gt; and &lt;code&gt;get_artist_top_albums&lt;/code&gt; surface an artist&apos;s globally most-played catalog — useful for &amp;quot;what&apos;s the canonical record by X&amp;quot; questions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Date-aware &lt;code&gt;get_recent_tracks&lt;/code&gt;.&lt;/strong&gt; New &lt;code&gt;date&lt;/code&gt; param accepts a &lt;code&gt;YYYY-MM-DD&lt;/code&gt; calendar date plus a &lt;code&gt;timezone&lt;/code&gt; (IANA name, e.g. &lt;code&gt;America/New_York&lt;/code&gt;) and the server computes the correct UTC day boundaries. Way better than juggling &lt;code&gt;from&lt;/code&gt;/&lt;code&gt;to&lt;/code&gt; Unix timestamps for &amp;quot;what did I listen to yesterday&amp;quot; queries. The response also echoes the queried range back so an LLM can self-verify it asked the right question.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redesigned landing page&lt;/strong&gt; at &lt;a href=&quot;https://lastfm-mcp.com&quot;&gt;lastfm-mcp.com&lt;/a&gt; — glassmorphism, animated waves, glow effects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;get_album_info&lt;/code&gt; no longer renders &lt;code&gt;[object Object]&lt;/code&gt; when &lt;a href=&quot;http://Last.fm&quot;&gt;Last.fm&lt;/a&gt; returns the album artist as an object instead of a string. Latent bug, fixed via a &lt;code&gt;formatArtist&lt;/code&gt; helper that handles both shapes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deleted the legacy worker.&lt;/strong&gt; Removed &lt;code&gt;src/index.ts&lt;/code&gt; plus the homemade JSON-RPC dispatch layer in &lt;code&gt;src/protocol/&lt;/code&gt; and the SSE transport in &lt;code&gt;src/transport/&lt;/code&gt;. The OAuth worker (&lt;code&gt;src/index-oauth.ts&lt;/code&gt;) has been the only production deployment for months; the legacy &lt;code&gt;[env.legacy]&lt;/code&gt; block in &lt;code&gt;wrangler.toml&lt;/code&gt; was never deployed to Cloudflare. Net diff: &lt;strong&gt;−8,293 lines, 0 added.&lt;/strong&gt; Test suite went from 376 tests / 5 failing → 167 tests / 0 failing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dropped dead deps:&lt;/strong&gt; &lt;code&gt;crypto-js&lt;/code&gt;, &lt;code&gt;@types/crypto-js&lt;/code&gt;, &lt;code&gt;oauth-1.0a&lt;/code&gt; — zero imports.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed dead throttle.&lt;/strong&gt; &lt;code&gt;LastfmClient.throttleRequest&lt;/code&gt; was per-request (clients are instantiated per-request in the OAuth worker), so it never observed a previous request — it did nothing while implying rate-limit safety. Existing 429-aware retry handles rate limits correctly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic tool catalog.&lt;/strong&gt; The &lt;code&gt;lastfm_auth_status&lt;/code&gt; tool list lives in one place now (&lt;code&gt;src/mcp/tools/catalog.ts&lt;/code&gt;) instead of being hardcoded in three.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! If you&apos;d like you can &lt;a href=&quot;https://elezea.com/contact&quot;&gt;reply via email&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>tldl v2.4.0 — Broadsheet redesign</title><link>https://elezea.com/2026/04/tldl-v2-4-0/</link><guid isPermaLink="true">https://elezea.com/2026/04/tldl-v2-4-0/</guid><description>TL;DL has a new look. Inspired by classic broadsheet newspapers, the redesigned site puts episode summaries in a layout that&apos;s calmer to read and easier to…</description><pubDate>Wed, 29 Apr 2026 21:25:26 GMT</pubDate><content:encoded>&lt;p&gt;TL;DL has a new look. Inspired by classic broadsheet newspapers, the redesigned site puts episode summaries in a layout that&apos;s calmer to read and easier to scan — with proper typography, a featured &amp;quot;lead&amp;quot; episode, and a cleaner detail page for every summary.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Broadsheet-style homepage.&lt;/strong&gt; A featured lead episode at the top, then the rest of the week&apos;s episodes laid out as numbered index entries. Episode count grows? Pagination kicks in at 20 per page.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redesigned episode pages.&lt;/strong&gt; New typography (Fraunces + Inter Tight + JetBrains Mono), a generated deck and pull quote on every episode, links out to the podcast&apos;s website and Apple Podcasts, and a &amp;quot;More from this podcast&amp;quot; section.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search and tag browsing.&lt;/strong&gt; Search the homepage with &lt;code&gt;?q=...&lt;/code&gt;, click any tag to see every episode with that tag, or browse the full tag and podcast directories.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Polished mobile and tablet layouts.&lt;/strong&gt; Episode rows stack their metadata neatly on smaller screens. Tags wrap onto their own row. Pull quotes tighten up.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subscribe, preferences, and request flows live in the new design.&lt;/strong&gt; No more jarring jump from the new site into the old forms.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restored social previews.&lt;/strong&gt; Favicon, Open Graph, and Twitter Card tags are back, so links shared on social and in chat apps look right again.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;iPad portrait layout&lt;/strong&gt; no longer cuts off episode titles — the index now collapses to the simpler mobile-style row at tablet widths too.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Masthead date&lt;/strong&gt; shows the correct day in Pacific time instead of drifting based on the reader&apos;s timezone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Episode summaries&lt;/strong&gt; no longer show a duplicate title at the top — the redundant first heading is now stripped automatically.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Editorial metadata&lt;/strong&gt; (deck and pull quote) generation now retries cleanly on transient failures instead of giving up on the first error.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! If you&apos;d like you can &lt;a href=&quot;https://elezea.com/contact&quot;&gt;reply via email&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>tldl v2.3.0 — Email subscriptions</title><link>https://elezea.com/2026/04/tldl-v2-3-0/</link><guid isPermaLink="true">https://elezea.com/2026/04/tldl-v2-3-0/</guid><description>Per-podcast email subscriptions for tldl. Pick the shows you care about at [/subscribe](https://tldl-pod.com/subscribe) and the summary lands in your inbox as…</description><pubDate>Wed, 22 Apr 2026 23:11:37 GMT</pubDate><content:encoded>&lt;p&gt;Per-podcast email subscriptions for tldl. Pick the shows you care about at &lt;a href=&quot;https://tldl-pod.com/subscribe&quot;&gt;/subscribe&lt;/a&gt; and the summary lands in your inbox as soon as a new episode is out.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Per-podcast email subscriptions.&lt;/strong&gt; Sign up at &lt;code&gt;/subscribe&lt;/code&gt;, confirm via double-opt-in, and get an HTML summary email (TL;D&lt;strong&gt;L&lt;/strong&gt; header, red CTA, summary body inline) every time a monitored podcast publishes a new episode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preferences management.&lt;/strong&gt; Returning subscribers can update which podcasts they&apos;re subscribed to via a signed &lt;code&gt;/preferences/manage&lt;/code&gt; link delivered by email. One-click unsubscribe per podcast, or unsubscribe from everything.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;From address on &lt;a href=&quot;http://tldl-pod.com&quot;&gt;tldl-pod.com&lt;/a&gt;.&lt;/strong&gt; Emails now come from &lt;code&gt;&amp;quot;TL;DL&amp;quot; &amp;lt;summaries@tldl-pod.com&amp;gt;&lt;/code&gt; with DKIM and SPF aligned on the &lt;a href=&quot;http://tldl-pod.com&quot;&gt;tldl-pod.com&lt;/a&gt; domain.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New D1 database (&lt;code&gt;tldl-subscribers&lt;/code&gt;) for subscribers, subscriptions, and pending confirmations.&lt;/li&gt;
&lt;li&gt;Postmark broadcast stream (&lt;code&gt;episode-summaries&lt;/code&gt;) with HMAC-SHA-256 signed manage/unsubscribe tokens.&lt;/li&gt;
&lt;li&gt;Zone-level rate limiting on &lt;code&gt;POST /subscribe&lt;/code&gt; and &lt;code&gt;POST /preferences&lt;/code&gt; (5 req / 10 min per IP + colo, 1-hour block).&lt;/li&gt;
&lt;li&gt;Double-opt-in flow with throttled per-email pending confirmations.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! If you&apos;d like you can &lt;a href=&quot;https://elezea.com/contact&quot;&gt;reply via email&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>discogs-mcp v3.2.0 — Catalog-wide search</title><link>https://elezea.com/2026/04/discogs-mcp-v3-2-0/</link><guid isPermaLink="true">https://elezea.com/2026/04/discogs-mcp-v3-2-0/</guid><description>Adds `search_discogs` for catalog-wide queries beyond your own collection, plus two real-world accuracy fixes: owned-marker correctness across pressings, and…</description><pubDate>Sun, 19 Apr 2026 19:58:22 GMT</pubDate><content:encoded>&lt;p&gt;Adds &lt;code&gt;search_discogs&lt;/code&gt; for catalog-wide queries beyond your own collection, plus two real-world accuracy fixes: owned-marker correctness across pressings, and exact genre/style matching.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;search_discogs&lt;/code&gt; tool&lt;/strong&gt; — search the full Discogs catalog, not just your collection. Default type is &lt;code&gt;master&lt;/code&gt; so album lookups don&apos;t return duplicate pressings. Results get a ✓ marker when you already own them.&lt;/li&gt;
&lt;li&gt;Tool lists in README, marketing page, &lt;code&gt;auth_status&lt;/code&gt;, and &lt;code&gt;server_info&lt;/code&gt; refreshed with grouped categories (Search, Collection, Folders, Custom Fields, Diagnostics).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Exact genre/style matching&lt;/strong&gt; (&lt;a href=&quot;https://github.com/rianvdm/discogs-mcp/issues/17&quot;&gt;#17&lt;/a&gt;) — substring matching caused &lt;code&gt;music&lt;/code&gt; to match &lt;code&gt;Non-Music&lt;/code&gt;, flipping the filter to OR mode and returning unrelated releases. Now uses exact equality per release.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Release-result owned-marker is now strict on &lt;code&gt;release.id&lt;/code&gt;.&lt;/strong&gt; Previously, owning one pressing of an album marked every other pressing as owned too, because &lt;code&gt;isOwned()&lt;/code&gt; matched on &lt;code&gt;master_id&lt;/code&gt; first. Caught by real-world dogfood on &amp;quot;Christian Scott Stretch Music&amp;quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Root &lt;code&gt;CLAUDE.md&lt;/code&gt; for Claude Code auto-discovery; removed stale &lt;code&gt;development/CLAUDE.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;GitHub release workflow auto-cross-posts to &lt;a href=&quot;http://elezea.com&quot;&gt;elezea.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! If you&apos;d like you can &lt;a href=&quot;https://elezea.com/contact&quot;&gt;reply via email&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>tldl v2.2.0 — RSS-first monitoring and audio-URL dedup</title><link>https://elezea.com/2026/04/tldl-v2-2-0/</link><guid isPermaLink="true">https://elezea.com/2026/04/tldl-v2-2-0/</guid><description>Two meaningful changes since v2.1.0. tldl now detects new podcast episodes directly from RSS feeds with conditional GETs instead of relying on Podcast Index…</description><pubDate>Sun, 19 Apr 2026 18:59:50 GMT</pubDate><content:encoded>&lt;p&gt;Two meaningful changes since v2.1.0. tldl now detects new podcast episodes directly from RSS feeds with conditional GETs instead of relying on Podcast Index re-crawls, so episodes typically land in the queue within minutes of publication. A second fix catches episodes that get retitled or have their GUIDs regenerated after publication — a surprisingly common pattern in the wild.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS-first monitoring.&lt;/strong&gt; The monitor now fetches RSS feeds directly with &lt;code&gt;If-Modified-Since&lt;/code&gt; / &lt;code&gt;If-None-Match&lt;/code&gt; headers, queues full episode metadata without a Podcast Index round-trip, and falls back to PI only on RSS errors. Detection lag drops from &amp;quot;hours&amp;quot; (PI re-crawl cadence) to &amp;quot;minutes&amp;quot; for feeds that update frequently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;POST /admin/rebuild-index&lt;/code&gt;.&lt;/strong&gt; Backfill endpoint now populates &lt;code&gt;audioUrl&lt;/code&gt; on every existing index entry so the new dedup check works retroactively.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Silent duplicate episodes.&lt;/strong&gt; Episodes that publishers edited after publishing — new title, regenerated GUID, or both — used to slip past dedup and get transcribed twice. A new audio-URL dedup signal (origin + pathname, query-stripped, lowercased) catches them. Confirmed against a real-world retitle where Lenny&apos;s Podcast re-published an episode with a different title + GUID, and 100 historical near-duplicates silently deduped on the first force-check after deploy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Queue messages carry full episode metadata when the source is RSS, so the consumer branches on &lt;code&gt;rssSourced&lt;/code&gt; and skips Podcast Index + iTunes enrichment entirely on that path.&lt;/li&gt;
&lt;li&gt;New &lt;code&gt;audioUrl&lt;/code&gt; field on &lt;code&gt;EpisodeIndexEntry&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Monitor cron cadence tuned to every 2 hours — RSS conditional GETs keep the feed-scan cost low, and most monitored feeds don&apos;t publish often enough to justify the previous 30-minute cadence.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! If you&apos;d like you can &lt;a href=&quot;https://elezea.com/contact&quot;&gt;reply via email&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item></channel></rss>