<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:base="https://yeldar.org/" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Yeldar Kudaibergen – proxyfeed</title>
  <link>https://yeldar.org/tags/proxyfeed/</link>
  <atom:link href="https://yeldar.org/tags/proxyfeed/feed.xml" rel="self" type="application/rss+xml"/>
  <description>Posts tagged "proxyfeed" from Yeldar Kudaibergen</description>
  <language>en</language>
    <item>
      <title>A deep cleanup of ProxyFeed</title>
      <link>https://yeldar.org/blog/proxyfeed-2-cleanup/</link>
      <description>&lt;p&gt;I realized that while improving &lt;a href=&quot;https://proxyfeed.io/&quot;&gt;ProxyFeed&lt;/a&gt; I overloaded it so much that its original purpose began to suffer: providing a stable address for a feed. So I removed &lt;em&gt;almost&lt;/em&gt; all feed modifications. Almost, because feeds have self-tags, and those must be rewritten so the feed reader has no doubts about the canonical source of the proxy feed.&lt;/p&gt;
&lt;p&gt;There is something interesting here: the less you interfere with someone else’s feed, the cleaner the architecture becomes. You remove one piece of logic, and immediately you see that another one is unnecessary. Then another. And step by step the system returns to its natural form. Without trying to “improve” what should not be improved.&lt;/p&gt;
&lt;p&gt;It turns out ProxyFeed should be a stable bridge between the original feed and the platforms. That is its only strength. Everything else is noise that gets in the way.&lt;/p&gt;
&lt;p&gt;Once I removed almost all modifications, it became clear that the true value of ProxyFeed is its reliability. That it does not break the feed. That it does not disappear. That once a stable address is created, it lives and makes it possible to change the original feed URL or even the original feed type without pain.&lt;/p&gt;
&lt;p&gt;And here is the fascinating part: the simpler the system becomes, the clearer the real work becomes. You need to correctly identify the feed type. You need to guarantee no duplicates. You need a cache system that does not fail. You need to ensure that self-tags always point to the proxy feed. You need proper support for JSON, Atom, and whatever comes next.&lt;/p&gt;
&lt;p&gt;Here is what was actually done:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fully removed all feed content modifications, no element edits and no attempts to &amp;quot;improve&amp;quot; the original feed;&lt;/li&gt;
&lt;li&gt;implemented feed type detection (RSS, Atom, JSON Feed) before parsing;&lt;/li&gt;
&lt;li&gt;kept only the essential rewriting of self-tags (rss/atom/json) so feed readers treat the proxy feed as canonical;&lt;/li&gt;
&lt;li&gt;added a strict check preventing the same original feed from being connected twice;&lt;/li&gt;
&lt;li&gt;added validation ensuring publicUrl is unique and never conflicts;&lt;/li&gt;
&lt;li&gt;added proper handling of JSON Feed without trying to mimic XML;&lt;/li&gt;
&lt;li&gt;improved XML normalization: remove BOM, add declaration only when missing;&lt;/li&gt;
&lt;li&gt;removed &lt;code&gt;itunes:new-feed-url&lt;/code&gt; so no player can redirect subscribers back to the original;&lt;/li&gt;
&lt;li&gt;rewritten caching logic: correct handling of hash, unchanged, partial and ok states;&lt;/li&gt;
&lt;li&gt;added atomic guarantees for cache and backup creation;&lt;/li&gt;
&lt;li&gt;moved the whole project closer to the “as-is” principle: minimal interference, maximum stability.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’m self-taught dev, and I have to learn from my own experience from trying to improve things that, as it turns out, didn’t need to be touched. That’s okay. ProxyFeed grows together with me. And every time I simplify it, I understand the architecture, the responsibility, and the path itself a little better. I want this service to live a long life, and for the people who choose it to be able to rely on it with confidence.&lt;/p&gt;
</description>
      <pubDate>Fri, 14 Nov 2025 16:00:00 PST</pubDate>
      <dc:creator>Yeldar Kudaibergen</dc:creator>
      <guid>https://yeldar.org/blog/proxyfeed-2-cleanup/</guid>
    </item>
    <item>
      <title>ProxyFeed devlog: funding tags, bug fixes</title>
      <link>https://yeldar.org/blog/proxyfeed-1-tags-bugs/</link>
      <description>&lt;p&gt;&lt;strong&gt;Important update:&lt;/strong&gt; ProxyFeed has undergone significant architectural changes. Much of the old behavior and many earlier features have been removed or redesigned. For the latest and accurate information, please read the new post describing all recent changes: &lt;a href=&quot;https://yeldar.org/blog/proxyfeed-2-cleanup/&quot;&gt;A deep cleanup of ProxyFeed&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;I submitted my application for the LinkedIn REACH Backend Apprenticeship and had to write three essays, so I didn’t have much time for coding. Fortunately, I got everything done and sent off — now I’m back to working on &lt;a href=&quot;https://proxyfeed.io/&quot;&gt;ProxyFeed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Originally, ProxyFeed was built specifically for podcast feeds, and even now, I still find remnants of that original thinking when adding new features. But my approach has changed — I now support Podcasting 2.0 tags for any type of RSS feed, not just podcasts. That said, I’ve kept a flag in the database just in case we need to distinguish between podcast and non-podcast feeds.&lt;/p&gt;
&lt;p&gt;One of the updates: I revised how the &lt;code&gt;&amp;lt;podcast:funding&amp;gt;&lt;/code&gt; tag works. Now, users can only add one funding tag per feed, regardless of whether it’s a podcast. Technically, multiple tags were allowed, but there&#39;s really no point — podcast players usually display just one, and I assume RSS readers will do too. After a tag is added, the feed is immediately re-fetched so the change appears in the proxy without delay. Also, I finally implemented tag deletion, and if a feed already has a funding tag in the original source, we now inform the user on the settings page.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;em&gt;This funding tag comes from the original feed and cannot be edited here. To change it, update your original RSS feed or remove the tag from the original feed — then you’ll be able to edit it here.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What happens if the original feed didn’t have a funding tag, but the user adds one through ProxyFeed — and then the original feed later adds its own funding tag? In that case, ProxyFeed keeps the original intact. The original feed always takes priority over proxy changes.&lt;/p&gt;
&lt;p&gt;This work, even just adding a seemingly simple tag like &lt;code&gt;&amp;lt;podcast:funding&amp;gt;&lt;/code&gt;, reminded me how complex this project really is.&lt;/p&gt;
&lt;p&gt;Another step: replacing the &lt;code&gt;atom:link&lt;/code&gt; with the URL of the generated proxy feed. This worked perfectly for new feeds, but didn’t apply to older ones — unless the user updated the domain or slug. So, I wrote a script that scanned all feeds and patched the outdated ones.&lt;/p&gt;
&lt;p&gt;I also cleaned up the database — removed old unused tables. At some point, I had the idea to fully parse feeds into structured database tables and reassemble them later. But due to the huge variety in RSS formats (or maybe I just wasn’t ready for it), this approach turned out to be unrealistic. So I deleted all related tables. The database is now clean.&lt;/p&gt;
&lt;p&gt;All of this is part of a gradual preparation for the next major step: adding Podping support.&lt;/p&gt;
&lt;p&gt;Oh, and I fixed another bug: ProxyFeed supports both system and custom domains. When users picked a system domain, I wasn’t generating a &lt;code&gt;slug&lt;/code&gt; for them, since system feeds used &lt;code&gt;feed id&lt;/code&gt;. Now, regardless of domain type, every feed gets a slug.&lt;/p&gt;
</description>
      <pubDate>Tue, 15 Jul 2025 17:00:00 PDT</pubDate>
      <dc:creator>Yeldar Kudaibergen</dc:creator>
      <guid>https://yeldar.org/blog/proxyfeed-1-tags-bugs/</guid>
    </item>
    <item>
      <title>A clearer vision for ProxyFeed</title>
      <link>https://yeldar.org/blog/proxyfeed-main/</link>
      <description>&lt;p&gt;&lt;strong&gt;Important update:&lt;/strong&gt; ProxyFeed has undergone significant architectural changes. Much of the old behavior and many earlier features have been removed or redesigned. For the latest and accurate information, please read the new post describing all recent changes: &lt;a href=&quot;https://yeldar.org/blog/proxyfeed-2-cleanup/&quot;&gt;A deep cleanup of ProxyFeed&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Note: This post was originally &lt;a href=&quot;https://weblog.kz/blog/proxyfeed-main-entity/&quot;&gt;written&lt;/a&gt; in Kazakh. This is an expanded English translation.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;ProxyFeed.io is now powering live feeds — including my own audioblog — and everything is working as expected.&lt;/p&gt;
&lt;p&gt;The biggest difference from the previous version is that I’ve now clearly defined the &lt;em&gt;main entity&lt;/em&gt; of ProxyFeed: the new RSS feed we generate for the user. Every function in the system revolves around this feed. Previously, I don’t think that was entirely clear to me. But this realization helped structure the entire system’s architecture.&lt;/p&gt;
&lt;p&gt;At first, I made a big decision: Users couldn’t register unless they provided a fully valid RSS feed with &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; tags. But as I kept building, my thinking evolved. I realized there’s no real reason to limit ProxyFeed to podcast feeds only — &lt;strong&gt;we can accept any valid RSS feed&lt;/strong&gt;. It doesn’t have to be audio-based. If the feed is valid, ProxyFeed can work with it. This shift helped me open up new use cases I hadn’t even considered before.&lt;/p&gt;
&lt;p&gt;It’s important to be clear about one thing: &lt;strong&gt;ProxyFeed is, first and foremost, a stable feed URL.&lt;/strong&gt; Your RSS feed never changes — even if you change hosts. Everything else — Podcasting 2.0 tags, caching, feed enhancements — is built on top of that foundation.&lt;/p&gt;
&lt;p&gt;Another core principle: If your original feed already includes advanced tags, ProxyFeed doesn’t overwrite or interfere. We only add missing tags — nothing more. That’s intentional: it keeps things simple and shows respect for your existing setup.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;P.S. One thought I’ve been toying with: what if we added some Podcasting 2.0 tags to regular blog feeds?&lt;/em&gt;&lt;/p&gt;
</description>
      <pubDate>Wed, 11 Jun 2025 17:00:00 PDT</pubDate>
      <dc:creator>Yeldar Kudaibergen</dc:creator>
      <guid>https://yeldar.org/blog/proxyfeed-main/</guid>
    </item>
    <item>
      <title>ProxyFeed — a permanent URL for any RSS feed</title>
      <link>https://yeldar.org/blog/proxyfeed-v1/</link>
      <description>&lt;p&gt;&lt;strong&gt;Important update:&lt;/strong&gt; ProxyFeed has undergone significant architectural changes. Much of the old behavior and many earlier features have been removed or redesigned. For the latest and accurate information, please read the new post describing all recent changes: &lt;a href=&quot;https://yeldar.org/blog/proxyfeed-2-cleanup/&quot;&gt;A deep cleanup of ProxyFeed&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; I built &lt;a href=&quot;https://proxyfeed.io/&quot;&gt;ProxyFeed&lt;/a&gt; — a tool that gives your podcast (or any RSS feed) a permanent, stable URL, no matter how often your hosting changes. It enhances your feed with Podcasting 2.0 features, supports custom subdomains, and works for any type of RSS. I made it to solve my own problem — now it’s ready for others to use. Core features will stay free; premium options may come later.&lt;/p&gt;
&lt;p&gt;Lately, this blog, podcast, and social channels have gone quiet — but behind the scenes, things have been moving fast. About a three months ago, I built a simple website for my podcast in Kazakh. As part of that, I had to change the RSS feed — a familiar problem in the podcasting world. If you switch podcast hosts, your feed URL changes. Sure, you can set up a 301 redirect, but even that isn’t guaranteed to work forever.&lt;/p&gt;
&lt;p&gt;So I decided to solve this problem once and for all — at least for myself. I built a tool that takes the feed my podcast site generates and republishes it under a stable, fast, permanent link. Now, no matter how often I change hosting platforms, my public feed stays the same. On top of that, the tool can enhance the RSS feed — for example, by adding Podcasting 2.0 tags and other advanced features. I have big plans for the future.&lt;/p&gt;
&lt;p&gt;This idea actually started years ago when I was still living in Kazakhstan. But back then, I didn’t have the knowledge, experience, or courage to follow through. It remained just a conversation. After moving to the U.S., I realized I &lt;em&gt;had&lt;/em&gt; to make it real. I built the first version just for myself — then realized it could help other podcasters too. That’s when I gave it a name — ProxyFeed — and turned it into its own project.&lt;/p&gt;
&lt;p&gt;Today, ProxyFeed is live and working. It’s currently powering the RSS feed for my audio blog, and everything is running smoothly. The core of the system is now clearly defined: the main product is the proxy RSS feed we create for the user. Everything else in the system — features, tools, domains — exists to support that one feed.&lt;/p&gt;
&lt;p&gt;This architectural clarity led to one key decision: if a user doesn&#39;t provide a valid RSS feed with &lt;code&gt;&amp;lt;enclosure&amp;gt;&lt;/code&gt; tags (a full podcast feed), they won’t be able to register. If you don’t already have a feed, ProxyFeed isn’t for you.&lt;/p&gt;
&lt;p&gt;Having a clear definition of the system’s core made development much easier. For example, I used to treat the user’s custom subdomain and their original feed as equal. But now I see them both as secondary — just support elements for the main proxy feed we generate.&lt;/p&gt;
&lt;p&gt;One more major update: ProxyFeed no longer works only with podcasts. Now it can handle &lt;em&gt;any&lt;/em&gt; RSS feed. No restrictions. I initially built it from a podcasting perspective, but over time I realized users are much more diverse. For example, this blog now has its own ProxyFeed-powered RSS feed: &lt;a href=&quot;https://feed.yeldar.org/blog&quot;&gt;https://feed.yeldar.org/blog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The old feed still works, for now. But if I ever move my blog to a new domain, only the ProxyFeed URL will remain stable. That’s the whole point — to ensure that your feed link never breaks, no matter what happens upstream.&lt;/p&gt;
&lt;p&gt;One area of focus is Podcasting 2.0 support. I’ve started adding new tags, beginning with &lt;code&gt;&amp;lt;podcast:funding&amp;gt;&lt;/code&gt;, and soon I’ll include &lt;code&gt;&amp;lt;podcast:locked&amp;gt;&lt;/code&gt;. My initial goal is to implement the full Podcast Standards Project &lt;a href=&quot;https://podstandards.org/features/&quot;&gt;feature list&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Soon, I plan to share ProxyFeed with the podcasting community. If it solves your problem like it did mine — go ahead and use it. The core functionality will remain free. To be honest, I didn’t build this to make money. I built it to solve a problem I personally faced. Now I’m just sharing it with others.&lt;/p&gt;
</description>
      <pubDate>Sun, 08 Jun 2025 17:00:00 PDT</pubDate>
      <dc:creator>Yeldar Kudaibergen</dc:creator>
      <guid>https://yeldar.org/blog/proxyfeed-v1/</guid>
    </item>
</channel>
</rss>