<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ntfy on Christian Martínez De La Rosa</title><link>https://christt105.github.io/tags/ntfy/</link><description>Recent content in Ntfy on Christian Martínez De La Rosa</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><atom:link href="https://christt105.github.io/tags/ntfy/index.xml" rel="self" type="application/rss+xml"/><item><title>InformadoRSS</title><link>https://christt105.github.io/projects/informadorss/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://christt105.github.io/projects/informadorss/</guid><enclosure url="https://christt105.github.io/projects/informadorss/cover.webp" length="34178" type="image/webp"/><description>&lt;p&gt;&lt;code&gt;InformadoRSS&lt;/code&gt; is a lightweight, self-hosted service that watches RSS and Atom feeds, filters their items per route and delivers them to Discord channels or &lt;a class="link" href="https://ntfy.sh/" target="_blank" rel="noopener"&#10; &gt;ntfy&lt;/a&gt;. It runs as a single container: a C# .NET 10 binary compiled with NativeAOT that serves a Vue 3 web UI and keeps everything in SQLite. It talks to Discord only through the bot REST API (no gateway, no bot commands). It is open source under the MIT license.&lt;/p&gt;&#10;&lt;p&gt;Key features:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Feeds and routes&lt;/strong&gt;: A feed is a URL; each feed has routes with a filter, one or more destinations (Discord or ntfy) and a message template.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Filter builder and template editor&lt;/strong&gt;: Build filters and edit messages from the web UI instead of writing them by hand.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Discord server and channel picker&lt;/strong&gt;: Choose destinations by name, and see which channels the bot cannot post in.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Alerts&lt;/strong&gt;: One alert when a feed or destination breaks and another when it recovers, through Discord or ntfy.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Daily backups&lt;/strong&gt;: Scheduled copies of the database to a folder, keeping the newest ones.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;MonitoRSS importer&lt;/strong&gt;: Import feeds and routes from a MonitoRSS export, with a dry run and a test channel to compare messages before switching.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Identity pattern for feeds that rewrite entries&lt;/strong&gt;: A regular expression over the description that is appended to the item id, so a status change in a MyAnimeList list counts as a new item.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Read how and why I built it in &lt;a class="link" href="https://christt105.github.io/blog/informadorss/" &gt;the blog post&lt;/a&gt;. The image is published to &lt;code&gt;ghcr.io/christt105/informadorss&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="The route editor: filter, message template and destination channel" class="gallery-image" data-flex-basis="252px" data-flex-grow="105" height="1994" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://christt105.github.io/projects/informadorss/web-route.webp" srcset="https://christt105.github.io/projects/informadorss/web-route_hu_a1005d249803043c.webp 800w, https://christt105.github.io/projects/informadorss/web-route_hu_458b51e51904d625.webp 1600w, https://christt105.github.io/projects/informadorss/web-route.webp 2100w" width="2100"&gt;&lt;/p&gt;&#10;</description></item></channel></rss>