<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tim B</title>
    <description>The latest articles on DEV Community by Tim B (@tbosak).</description>
    <link>https://dev.to/tbosak</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F380468%2F7fa382e7-7a95-48bb-9dc0-7f8f7da33da5.jpeg</url>
      <title>DEV Community: Tim B</title>
      <link>https://dev.to/tbosak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tbosak"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Tim B</dc:creator>
      <pubDate>Fri, 14 Mar 2025 22:35:45 +0000</pubDate>
      <link>https://dev.to/tbosak/-2hgb</link>
      <guid>https://dev.to/tbosak/-2hgb</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/tbosak" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F380468%2F7fa382e7-7a95-48bb-9dc0-7f8f7da33da5.jpeg" alt="tbosak"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/tbosak/zero-code-rss-feeds-with-mkfd-from-webpage-to-feed-in-minutes-4p0l" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Zero-Code RSS Feeds with Mkfd: From Webpage to Feed in Minutes&lt;/h2&gt;
      &lt;h3&gt;Tim B ・ Mar 10&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#bunjs&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#honojs&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>bunjs</category>
      <category>honojs</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Zero-Code RSS Feeds with Mkfd: From Webpage to Feed in Minutes</title>
      <dc:creator>Tim B</dc:creator>
      <pubDate>Mon, 10 Mar 2025 18:58:53 +0000</pubDate>
      <link>https://dev.to/tbosak/zero-code-rss-feeds-with-mkfd-from-webpage-to-feed-in-minutes-4p0l</link>
      <guid>https://dev.to/tbosak/zero-code-rss-feeds-with-mkfd-from-webpage-to-feed-in-minutes-4p0l</guid>
      <description>&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/TBosak" rel="noopener noreferrer"&gt;
        TBosak
      &lt;/a&gt; / &lt;a href="https://github.com/TBosak/mkfd" rel="noopener noreferrer"&gt;
        mkfd
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      RSS feed builder created with Bun🥖 and Hono🔥- builds from webpages and/or REST API calls
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/TBosak/mkfd/blob/main/public/logo.png?raw=true"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FTBosak%2Fmkfd%2Fraw%2Fmain%2Fpublic%2Flogo.png%3Fraw%3Dtrue" alt="mkfd" height="15%" width="15%"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/1b48ee3d5b9be92d706c7f4b1ec427a103c23921575720fe698e52131a3fb579/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f74626f736b2f6d6b6664"&gt;&lt;img alt="Docker Pulls" src="https://camo.githubusercontent.com/1b48ee3d5b9be92d706c7f4b1ec427a103c23921575720fe698e52131a3fb579/68747470733a2f2f696d672e736869656c64732e696f2f646f636b65722f70756c6c732f74626f736b2f6d6b6664"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/097cce4963f58799fc03e69657362a9ea2000ad180d1164364630c67f971d972/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f74626f73616b2f6d6b6664"&gt;&lt;img alt="GitHub Repo stars" src="https://camo.githubusercontent.com/097cce4963f58799fc03e69657362a9ea2000ad180d1164364630c67f971d972/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f74626f73616b2f6d6b6664"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🏃 Running locally&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🍞 Bun installation &lt;sup&gt;Visit &lt;a href="https://bun.sh/" rel="nofollow noopener noreferrer"&gt;bun.sh&lt;/a&gt; for more info&lt;/sup&gt;
&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;curl https://bun.sh/install &lt;span class="pl-k"&gt;|&lt;/span&gt; bash&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;📦 To install dependencies&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;bun install&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🚀 To run&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;bun run index.ts --passkey=your_passkey_here --cookieSecret=your_cookie_secret_here&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;➡️ Access the GUI at &lt;code&gt;http://localhost:5000/&lt;/code&gt;&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🐳 Running with Docker&lt;/h2&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🏠 Locally&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;docker build -t mkfd &lt;span class="pl-c1"&gt;.&lt;/span&gt;
docker run -p 5000:5000 -v /local/mount/path:/configs -e PASSKEY=your_passkey -e COOKIE_SECRET=your_cookie_secret mkfd&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;📥 From Docker Hub&lt;/h3&gt;

&lt;/div&gt;

&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;docker pull tbosk/mkfd:latest
docker run -p 5000:5000 -v /local/mount/path:/configs -e PASSKEY=your_passkey -e COOKIE_SECRET=your_cookie_secret tbosk/mkfd:latest&lt;/pre&gt;

&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🔧 To Do&lt;/h2&gt;

&lt;/div&gt;

&lt;ul class="contains-task-list"&gt;
&lt;li class="task-list-item"&gt;
 &lt;strong&gt;Locally&lt;/strong&gt; testing subscriptions to feeds&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Add all possible RSS fields to models&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Add option for parallel iterators&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Add form validation&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Add selector suggestion engine&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Add feed preview pane&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Store/compare feed data to enable timestamping feed items&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Create dockerfile&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Create Helm chart files&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Create GUI&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Utilities
&lt;ul class="contains-task-list"&gt;
&lt;li class="task-list-item"&gt;
 HTML stripper&lt;/li&gt;
&lt;li class="task-list-item"&gt;
 Source URL wrapper for relative links&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li class="task-list-item"&gt;

 Amass contributors&lt;/li&gt;

&lt;/ul&gt;
&lt;br&gt;
&lt;br&gt;

&lt;p&gt;&lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;amp;hosted_button_id=V5LC4XTQDDE82&amp;amp;source=url" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5cfd8f7c73fdb870f771f097fd173cc703fb80964191845e8dc8d3a1f1c0509b/68747470733a2f2f7777772e70617970616c6f626a656374732e636f6d2f656e5f55532f692f62746e2f62746e5f646f6e61746543435f4c472e676966" alt="paypal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/TBosak/mkfd" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Mkfd is a zero-code RSS feed builder created with Bun and Hono, featuring an intuitive front-end that simplifies the entire feed creation process. Instead of manually writing scripts, you just open the interface, input a target URL along with CSS selectors, and Mkfd exports a YAML configuration file. Mkfd then uses that YAML to periodically build and update your feed. In this post, I'll show a high-level overview on how to use Mkfd’s user interface and show you how quickly you can start generating feeds from any webpage or REST API — &lt;strong&gt;without writing a single line of code&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏃 Running locally
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🍞 Bun installation &lt;sup&gt;Visit &lt;a href="https://bun.sh/" rel="noopener noreferrer"&gt;bun.sh&lt;/a&gt; for more info&lt;/sup&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://bun.sh/install | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  📦 To install dependencies
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bun &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🚀 To run
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bun run index.ts &lt;span class="nt"&gt;--passkey&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_passkey_here &lt;span class="nt"&gt;--cookieSecret&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_cookie_secret_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;➡️ Access the GUI at &lt;code&gt;http://localhost:5000/&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🐳 Running with Docker
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🏠 Locally
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; mkfd &lt;span class="nb"&gt;.&lt;/span&gt;
docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 5000:5000 &lt;span class="nt"&gt;-v&lt;/span&gt; /local/mount/path:/configs &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;PASSKEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_passkey &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;COOKIE_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_cookie_secret mkfd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  📥 From Docker Hub
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker pull tbosk/mkfd:latest
docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 5000:5000 &lt;span class="nt"&gt;-v&lt;/span&gt; /local/mount/path:/configs &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;PASSKEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_passkey &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;COOKIE_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_cookie_secret tbosk/mkfd:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧭 Navigating the Mkfd UI
&lt;/h2&gt;

&lt;p&gt;Open &lt;a href="http://localhost:5000" rel="noopener noreferrer"&gt;http://localhost:5000&lt;/a&gt; after running Mkfd. You’ll see a form that lets you input:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Target URL&lt;/strong&gt; of the webpage or API you want to convert into a feed.
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;Schedule&lt;/strong&gt; (in minutes) for how often Mkfd should re-scrape and rebuild the feed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mkfd provides a user-friendly interface (with SelectorGadget integration for figuring out the correct selectors) that lets you pinpoint elements on the webpage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Article Container Selector&lt;/strong&gt; – Identify the main wrapper for each item, e.g., &lt;code&gt;.article&lt;/code&gt; or &lt;code&gt;li.post-item&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Title, Link, Date Selectors&lt;/strong&gt; – Extract the specific data fields for your feed.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Additional Fields&lt;/strong&gt; – You can also include a description, author, or enclosures (such as audio, videos, or images).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Aforementioned UI:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhww24pergezsd668kplq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhww24pergezsd668kplq.png" alt="Front Page #1" width="800" height="804"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Favigacoo70lnc9aw1uf5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Favigacoo70lnc9aw1uf5.png" alt="Front Page #2" width="778" height="871"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fllwbmetynskzb394sl2u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fllwbmetynskzb394sl2u.png" alt="Front Page #3" width="789" height="820"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F173wpdu7jxnmrx49lot7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F173wpdu7jxnmrx49lot7.png" alt="Active Feeds Page" width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If accessing remotely from outside localhost, the passkey used on deployment is needed to enter the UI but not to consume the feeds.&lt;/p&gt;




&lt;h2&gt;
  
  
  🗂️ Generating the YAML Configuration
&lt;/h2&gt;

&lt;p&gt;After you specify your selectors and scheduling details, just hit &lt;strong&gt;Submit&lt;/strong&gt;. Mkfd will create a YAML configuration file with a unique GUID — this file contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt; – The page or API endpoint you’re scraping.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Selectors&lt;/strong&gt; – The custom CSS selectors for titles, links, dates, etc.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schedule&lt;/strong&gt; – The periodic interval (in minutes) for Mkfd to update your feed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This YAML file lives within the project directory and serves as the master instruction set for the feed builder.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ How Mkfd Builds and Serves the Feed
&lt;/h2&gt;

&lt;p&gt;Once your YAML is set up, Mkfd executes a periodic job to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scrape the Specified URL&lt;/strong&gt; – Using your CSS selectors to retrieve the latest content.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate an RSS Feed&lt;/strong&gt; – Formatting the scraped data into a valid feed structure.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expose the Feed&lt;/strong&gt; – Mkfd will automatically serve the feed from an endpoint for the end user to consume.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  💡 Tips and Tricks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Selector Fine-Tuning&lt;/strong&gt;: If your feed items aren’t showing as expected, double-check your CSS selectors.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple Feeds&lt;/strong&gt;: You can create multiple feeds for different websites or data sources. Each feed is built using its own web worker.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduling Intervals&lt;/strong&gt;: Avoid overly frequent scrapes (e.g., every minute) to reduce server load and potential IP blocking. A common interval is 15 minutes to 1 hour.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version Control Your YAML&lt;/strong&gt;: If you’re setting up multiple feeds or complex data extractions, keep your YAML in version control for easy rollback or iteration.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ Conclusion
&lt;/h2&gt;

&lt;p&gt;Mkfd offers a straightforward, no-code solution for generating custom RSS feeds out of any webpage or REST API.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Scrape Data&lt;/strong&gt; using simple CSS selectors—no coding required.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate a YAML&lt;/strong&gt; file that captures your scraping logic and schedule.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatically Build and Serve&lt;/strong&gt; the feed on a configurable schedule.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Whether you’re a seasoned developer or just need a simple feed builder, Mkfd’s browser-based UI, integrated selector tools, and one-click YAML generation make it easy to convert the web into feeds you control — all &lt;strong&gt;without writing a single line of code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy Building!&lt;/strong&gt; Check out the &lt;a href="https://github.com/TBosak/mkfd" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt; for more details and/or to contribute to Mkfd’s development.&lt;/p&gt;

</description>
      <category>bunjs</category>
      <category>honojs</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Janus - Visualize Your Journey</title>
      <dc:creator>Tim B</dc:creator>
      <pubDate>Sun, 12 Jan 2025 03:41:33 +0000</pubDate>
      <link>https://dev.to/tbosak/janus-4fjd</link>
      <guid>https://dev.to/tbosak/janus-4fjd</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github"&gt;GitHub Copilot Challenge &lt;/a&gt;: Transitions and Transformations&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Janus is a tool for visualizing transitions and transformations via interactive timelines. It is built using Angular and served via Bun.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://janus.baraniservices.us/" rel="noopener noreferrer"&gt;https://janus.baraniservices.us/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Repo
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/TBosak" rel="noopener noreferrer"&gt;
        TBosak
      &lt;/a&gt; / &lt;a href="https://github.com/TBosak/janus" rel="noopener noreferrer"&gt;
        janus
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Janus is a tool for visualizing transitions and transformations via interactive timelines
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://raw.githubusercontent.com/TBosak/janus/refs/heads/main/public/janus.svg"&gt;&lt;img height="250em" width="250em" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FTBosak%2Fjanus%2Frefs%2Fheads%2Fmain%2Fpublic%2Fjanus.svg"&gt;&lt;/a&gt;
  &lt;br&gt;
Janus
&lt;/h1&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🏃 Running locally&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🍞 Bun installation &lt;sup&gt;Visit &lt;a href="https://bun.sh/" rel="nofollow noopener noreferrer"&gt;bun.sh&lt;/a&gt; for more info&lt;/sup&gt;
&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;curl https://bun.sh/install &lt;span class="pl-k"&gt;|&lt;/span&gt; bash&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;📦 To install dependencies&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;bun install&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🚀 To run&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;bun run start&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;➡️ Access the GUI at &lt;code&gt;http://localhost:6200/&lt;/code&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🐳 Running with Docker&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🏠 Locally&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;docker build -t janus &lt;span class="pl-c1"&gt;.&lt;/span&gt;
docker run -p 6200:6200 -v /local/mount/path:/uploads -v /local/mount/path:/timelines janus&lt;/pre&gt;

&lt;/div&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/TBosak/janus" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  Copilot Experience
&lt;/h2&gt;

&lt;p&gt;Throughout the process, I used Copilot for code completion and chat. In chat, I tested out several different models - Claude 3.5, GPT 4o, o1, and o1-mini. I preferred o1 most of all, as I'm most familiar with it through my experience using ChatGPT. I periodically corrected syntax during the challenge using Copilot, occasionally used it for debugging, and used GPT o1 a lot for more organization and high-level questions. I find that Copilot keeps me more in a flow state, as I don't stray from my IDE.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Janus was an exciting project that allowed me to combine the power of Angular and Bun to create an interactive and visually engaging tool. Participating in the GitHub Copilot Challenge gave me the opportunity to explore how Copilot can enhance the development process by streamlining code completion, debugging, and overall workflow. By leveraging Copilot alongside other tools, I was able to stay focused and maintain a productive rhythm while building Janus. I'm thrilled to have contributed to this challenge and to share Janus with the developer community. Thank you for the opportunity!&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
