<?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: Jozef Cipa</title>
    <description>The latest articles on DEV Community by Jozef Cipa (@jozefcipa).</description>
    <link>https://dev.to/jozefcipa</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%2F2433747%2F5629c1ea-8995-4aae-803e-9e202f3c393f.jpg</url>
      <title>DEV Community: Jozef Cipa</title>
      <link>https://dev.to/jozefcipa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jozefcipa"/>
    <language>en</language>
    <item>
      <title>How I built a custom Homekit thermostat for 40€</title>
      <dc:creator>Jozef Cipa</dc:creator>
      <pubDate>Mon, 10 Mar 2025 08:10:40 +0000</pubDate>
      <link>https://dev.to/jozefcipa/how-i-built-a-custom-homekit-thermostat-for-40eu-50ga</link>
      <guid>https://dev.to/jozefcipa/how-i-built-a-custom-homekit-thermostat-for-40eu-50ga</guid>
      <description>&lt;p&gt;I wanted a smart HomeKit thermostat for a long time. The only problem is that it is quite expensive so I never bought one. Last year, &lt;a href="https://www.espressif.com/" rel="noopener noreferrer"&gt;Espressif&lt;/a&gt; organized an introductory workshop to familiarize people with ESP32. I’ve heard about this board before but didn’t know what exactly it was and never really played with it. So I signed up for the workshop to get hands-on experience with the chip. If you don’t know what ESP32 is, you can think of it as something between Arduino and Raspberry Pi - a microprocessor that you can program in C with GPIO pins, WiFi and Bluetooth connectivity.&lt;/p&gt;

&lt;p&gt;Some time after the workshop, I got an idea to try to make my own thermostat using the ESP32 chip I got from the event. I saw this as a great opportunity to deepen my knowledge about this board and at the same time build something useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;The main thing was to define a goal - what exactly do I want my thermostat to be capable of and how should it work. Obviously, it has to be &lt;strong&gt;HomeKit compatible&lt;/strong&gt;, so I can control it with my iPhone. Also, once I mount it on the wall, it would be nice to have &lt;strong&gt;instant visual feedback&lt;/strong&gt; to see the current room temperature and heating state. Also, anyone should be able to &lt;strong&gt;control the temperature directly&lt;/strong&gt; via the thermostat. That means the thermostat needs to have an &lt;strong&gt;LCD screen.&lt;/strong&gt; Moreover, since I want to be able to interact with it to change the temperature, it has to provide some user interface. I decided to use a &lt;strong&gt;touch screen&lt;/strong&gt; as I wanted to avoid adding a bunch of physical buttons. And it also feels more natural nowadays. Besides, why not bring on another challenge for myself 😅. Obviously, I can’t forget a &lt;strong&gt;temperature sensor&lt;/strong&gt; and a &lt;a href="https://en.wikipedia.org/wiki/Relay" rel="noopener noreferrer"&gt;&lt;strong&gt;relay&lt;/strong&gt;&lt;/a&gt; to control a boiler.&lt;/p&gt;

&lt;h2&gt;
  
  
  HomeKit
&lt;/h2&gt;

&lt;p&gt;HomeKit is the heart of the whole thermostat, without it the project wouldn’t be possible. That means I had to find a library that would implement the protocol.&lt;/p&gt;

&lt;p&gt;There is one library called &lt;a href="https://github.com/HomeSpan/HomeSpan/" rel="noopener noreferrer"&gt;Homespan&lt;/a&gt;, but this is intended for programming ESP32 in the Arduino environment. This is much easier and beginner friendly, but I wanted something more advanced and challenging :). As I said in the beginning, I wanted to get more familiar with the ESP32 environment and the &lt;a href="https://github.com/espressif/arduino-esp32" rel="noopener noreferrer"&gt;arduino-esp32&lt;/a&gt; project offers a lot of abstractions. That’s why I opted for the &lt;a href="https://idf.espressif.com/" rel="noopener noreferrer"&gt;ESP-IDF framework&lt;/a&gt; instead.&lt;/p&gt;

&lt;p&gt;Luckily, there is a great &lt;a href="https://github.com/AchimPieters/esp32-homekit" rel="noopener noreferrer"&gt;HomeKit library&lt;/a&gt; built by &lt;a href="https://www.studiopieters.nl/" rel="noopener noreferrer"&gt;Achim Pieters&lt;/a&gt;. It comes with a ton of examples, probably for every possible HomeKit appliance, so implementing not only a thermostat but also anything else becomes much easier.&lt;/p&gt;

&lt;p&gt;After installing and setting up the library, it will start a HomeKit server on the ESP32 and wait for connections from your iOS Home app. Then you will need to generate a QR code as you might know from other smart devices and scan it to add it to your Home app. The QR code generator is a part of the library, so it is very simple to make one.&lt;/p&gt;

&lt;p&gt;Unfortunately, since this is a custom, &lt;a href="https://mfi.apple.com/" rel="noopener noreferrer"&gt;MFi uncertified&lt;/a&gt; product, Apple doesn't support configuring WiFi network in the same step as adding the device to the Home app. Therefore, you will need to scan two QR codes, first, one to set the WiFi network, and then another one for registering the device with the Home app. We’ll talk more about the WiFi QR code later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measuring temperature
&lt;/h2&gt;

&lt;p&gt;Measuring temperature is an important part of every thermostat. In this project, I chose the &lt;a href="https://www.laskakit.cz/en/laskakit-sht40-senzor-teploty-a-vlhkosti-vzduchu/" rel="noopener noreferrer"&gt;SHT-40&lt;/a&gt; sensor that is cheap but still fairly accurate. Apart from temperature, it can also measure humidity, so this comes in handy too. The sensor communicates with the board via &lt;a href="https://en.wikipedia.org/wiki/I%C2%B2C" rel="noopener noreferrer"&gt;I2C&lt;/a&gt; interface. In this project, the temperature is measured in 10 minute intervals.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Controlling a boiler&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If the thermostat evaluates the current room temperature as too low compared to the set target temperature, it will turn on a boiler. To do so, we need a relay that will be switching the boiler on and off. In our case, this will be a &lt;a href="https://www.laskakit.cz/en/1-kanal-5v-rele-modul-s-optickym-oddelenim--high-low-level--250vac-10a/" rel="noopener noreferrer"&gt;5V relay&lt;/a&gt; with the max load of 250VAC/10A.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;LCD&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I picked the &lt;a href="https://www.laskakit.cz/en/2-4--palcovy-barevny-dotykovy-tft-lcd-displej-240x320-ili9341-spi/" rel="noopener noreferrer"&gt;240x320” TFT display&lt;/a&gt; with the touch support. It communicates with the board via  &lt;a href="https://en.wikipedia.org/wiki/Serial_Peripheral_Interface" rel="noopener noreferrer"&gt;SPI&lt;/a&gt; interface and both display and the touch screen share the same connection. This was quite a challenge to make it work and it took me some time and a lot of head-scratching but eventually I figured it out.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Building the UI&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The display is connected but the real fun just begins now. I needed to figure out how to create and show GUI elements on the display, and put it all in a nice layout. Not to mention, I had to find a way to connect those UI elements with the touch screen.&lt;/p&gt;

&lt;p&gt;Luckily, there is this awesome graphics library for the embedded devices called &lt;a href="https://lvgl.io/" rel="noopener noreferrer"&gt;LVGL&lt;/a&gt;. It is very intuitive and easy to use. Moreover, it is inspired by CSS, so it was surprisingly easy to use. But the initial setup and connecting the UI with the LCD screen was quite a challenge.&lt;/p&gt;

&lt;p&gt;Here you can see the diagram of the thermostat GUI. Eventually I ended up creating three different screens for handling various states of the thermostat.&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%2Fassets.jozefcipa.com%2Fblog%2F12677955515e8037be53e7832bb10412%2Fgui-flow.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%2Fassets.jozefcipa.com%2Fblog%2F12677955515e8037be53e7832bb10412%2Fgui-flow.png" alt="GUI flow" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Showing current time
&lt;/h2&gt;

&lt;p&gt;Since we already have the display that shows the room temperature and will be mounted on a wall, I thought it would be cool to also display the current time and date.&lt;/p&gt;

&lt;p&gt;For that, I used the &lt;a href="https://en.wikipedia.org/wiki/Network_Time_Protocol" rel="noopener noreferrer"&gt;NTP&lt;/a&gt; protocol that fetches the current time from the internet servers and sets the local clock based on the configured timezone. Then I just created a task that updates the screen with the new time every minute.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;WiFi provisioning&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I’m a perfectionist and even though hardcoding the WiFi credentials was the easiest way, I was thinking of the future and the last thing I want to do is having to reprogram the device once the WiFi network or password changes 😅. That is why I made extra effort to set up automatic WiFi provisioning. &lt;/p&gt;

&lt;p&gt;The way it works is that the ESP32 first creates a Bluetooth connection with the iOS &lt;a href="https://apps.apple.com/us/app/esp-ble-provisioning/id1473590141" rel="noopener noreferrer"&gt;Provisioning app&lt;/a&gt;. Then, you scan the WiFi QR code displayed on the screen that contains the connection details. Next, the app will connect to the device and configure WiFi credentials that are then stored in the device flash memory.&lt;/p&gt;

&lt;p&gt;Now, whenever the configured WiFi network is not available or the thermostat just can’t establish a connection for any reason, it will show the setup screen so you can restart the provisioning process and configure a new WiFi network.&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%2Fxx7dt676ec3pp9vnof8e.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%2Fxx7dt676ec3pp9vnof8e.png" alt="Wifi setup screen" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Electrical circuit&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The electronic is pretty straightforward, and you can find the circuit below. The LCD, the temperature sensor, and the relay are all connected directly to the ESP32 board and that’s pretty much it 😀. &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%2F4gohikxrgpa2ysor5uey.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%2F4gohikxrgpa2ysor5uey.png" alt="electronic circuit diagram" width="800" height="868"&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%2Ffuytn7hcrgd14ap8502y.jpg" 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%2Ffuytn7hcrgd14ap8502y.jpg" alt="thermostat enclosure" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In total, the whole project cost less than 20€ (&lt;em&gt;ESP32 is usually extra 20€, but I got mine for free from the workshop&lt;/em&gt;) and many mental breakdowns while trying to make things work :).&lt;/p&gt;

&lt;p&gt;But, I learned &lt;strong&gt;a lot&lt;/strong&gt; of new cool stuff. In fact, almost the entire project was something completely new to me. I learned more about ESP32 and ESP-IDF, how WiFi provisioning works, how to connect an LCD and make the touch screen work, what is a LVGL library and how to build UI interfaces in embedded systems.&lt;/p&gt;

&lt;p&gt;On top of that, I learned a lot of things about programming in C, how horrible and cool it is at the same time. And that all those memory crashes are a pain in the ass to debug. But it truly forces you to really understand what’s going on in the program.&lt;/p&gt;

&lt;p&gt;So it was definitely a fun project to work on. If you are interested in the code, you can find everything on &lt;a href="https://github.com/jozefcipa/homekit-thermostat" rel="noopener noreferrer"&gt;Github&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>c</category>
      <category>iot</category>
      <category>homekit</category>
      <category>esp32</category>
    </item>
    <item>
      <title>Monitoring your website with Upptime</title>
      <dc:creator>Jozef Cipa</dc:creator>
      <pubDate>Mon, 03 Feb 2025 10:28:59 +0000</pubDate>
      <link>https://dev.to/jozefcipa/monitoring-your-website-with-upptime-364k</link>
      <guid>https://dev.to/jozefcipa/monitoring-your-website-with-upptime-364k</guid>
      <description>&lt;p&gt;Recently I’ve encountered an unpleasant situation on one of the websites I manage. I randomly opened it only to find out it wasn’t working. Unfortunately, it was not a very important website, so no harm was done but the problem was that I didn’t know for how long it had been down. This is unacceptable, especially for the important websites that cannot go down.&lt;/p&gt;

&lt;p&gt;Therefore, I did research on some tools that would help me with monitoring the website status and notify me when something goes south again in the future.&lt;/p&gt;

&lt;p&gt;I came across an open-source tool called &lt;a href="https://upptime.js.org/" rel="noopener noreferrer"&gt;Upptime&lt;/a&gt;, a monitoring solution that you can easily configure to constantly monitor the specified HTTP endpoints. It is Github-based, which means you can easily clone the &lt;a href="https://github.com/upptime/upptime" rel="noopener noreferrer"&gt;repository&lt;/a&gt; by clicking on the “Use this template”. It uses Github Actions for constantly checking the configured endpoints and then commits the results back to your Git repository 💯.&lt;/p&gt;

&lt;p&gt;By default, it checks the website every 5 minutes and commits a daily report once a day, but this is configurable. Whenever your website goes down or is unresponsive, Upptime creates a new GitHub issue and sends you a notification. There are several channels that you can configure for receiving those alerts, such as Slack, Telegram, email, or even SMS.&lt;/p&gt;

&lt;p&gt;It comes with a static status page that reads the data from your repository and you can freely customize it as you like. And it can be easily deployed to Github Pages, for instance.&lt;br&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%2F1win2twh2ojg0o3z1uee.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%2F1win2twh2ojg0o3z1uee.png" alt="Status page" width="800" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check out their &lt;a href="https://upptime.js.org/docs/get-started/" rel="noopener noreferrer"&gt;getting started&lt;/a&gt; guide and follow all the steps to set it up. The whole process is super straightforward and doesn’t take more than half an hour to complete.&lt;/p&gt;

&lt;p&gt;And after that, you can start sleeping without worries again 😁.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>monitoring</category>
      <category>website</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Are you getting tired of localhost:3000 URLs?</title>
      <dc:creator>Jozef Cipa</dc:creator>
      <pubDate>Fri, 17 Jan 2025 12:39:48 +0000</pubDate>
      <link>https://dev.to/jozefcipa/are-you-getting-tired-of-localhost3000-urls-2fgf</link>
      <guid>https://dev.to/jozefcipa/are-you-getting-tired-of-localhost3000-urls-2fgf</guid>
      <description>&lt;p&gt;I'll show you how you can quickly and easily turn &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; into &lt;a href="https://your-custom-domain.test" rel="noopener noreferrer"&gt;https://your-custom-domain.test&lt;/a&gt; to improve your webdev experience in 3 minutes.&lt;/p&gt;

&lt;p&gt;Just open your terminal and install &lt;em&gt;novus&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ brew tap jozefcipa/novus
$ brew install novus
$ novus init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that, define your URL with a single command 🤩&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ novus serve your-custom-domain.test http://localhost:3000

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that's it.&lt;br&gt;
Now, you can start using HTTPS locally with your custom domains and forget annoying localhost URLs 🎉&lt;/p&gt;

&lt;p&gt;If you're curious to learn more, check out Novus on &lt;a href="https://github.com/jozefcipa/novus" rel="noopener noreferrer"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tooling</category>
      <category>ssl</category>
      <category>macos</category>
    </item>
    <item>
      <title>I just released an update for my HTTPS tool</title>
      <dc:creator>Jozef Cipa</dc:creator>
      <pubDate>Thu, 16 Jan 2025 18:22:29 +0000</pubDate>
      <link>https://dev.to/jozefcipa/i-just-released-an-update-for-my-https-tool-141f</link>
      <guid>https://dev.to/jozefcipa/i-just-released-an-update-for-my-https-tool-141f</guid>
      <description>&lt;p&gt;Dive into the latest updates on Novus, the lightweight tool that makes local development with HTTPS a breeze.&lt;/p&gt;

&lt;p&gt;Check it out here: &lt;a href="https://jozefcipa.com/blog/novus-just-got-better-again/" rel="noopener noreferrer"&gt;Novus Just Got Better (Again)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your feedback is always welcome, so let me know what you think! 🙌&lt;/p&gt;

</description>
      <category>go</category>
      <category>webdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>🚀 Novus Just Got Better (Again)! 🌟</title>
      <dc:creator>Jozef Cipa</dc:creator>
      <pubDate>Thu, 16 Jan 2025 09:44:54 +0000</pubDate>
      <link>https://dev.to/jozefcipa/novus-just-got-better-again-28k9</link>
      <guid>https://dev.to/jozefcipa/novus-just-got-better-again-28k9</guid>
      <description>&lt;p&gt;Dive into the latest updates on Novus, the lightweight tool that makes local development with HTTPS a breeze. Whether you're already using it or curious about how it can simplify your workflow, this update brings exciting improvements you won't want to miss.&lt;/p&gt;

&lt;p&gt;Check it out here: &lt;a href="https://jozefcipa.com/blog/novus-just-got-better-again/" rel="noopener noreferrer"&gt;Novus Just Got Better (Again)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your feedback is always welcome, so let me know what you think! 🙌&lt;/p&gt;

</description>
      <category>go</category>
      <category>webdev</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Does Laravel Valet contain a security hole?</title>
      <dc:creator>Jozef Cipa</dc:creator>
      <pubDate>Wed, 15 Jan 2025 09:35:01 +0000</pubDate>
      <link>https://dev.to/jozefcipa/does-laravel-valet-contain-a-security-hole-42ij</link>
      <guid>https://dev.to/jozefcipa/does-laravel-valet-contain-a-security-hole-42ij</guid>
      <description>&lt;p&gt;If you use Laravel Valet, beware, it contains a security vulnerability.&lt;br&gt;
Read more in my newest article &lt;a href="https://jozefcipa.com/blog/how-to-use-sudo-without-a-password-in-your-programs/" rel="noopener noreferrer"&gt;https://jozefcipa.com/blog/how-to-use-sudo-without-a-password-in-your-programs/&lt;/a&gt; to learn about &lt;em&gt;sudoers&lt;/em&gt; file and what to keep in mind when using it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>novus</category>
      <category>sudo</category>
    </item>
    <item>
      <title>Just released a new version of Novus 🚀</title>
      <dc:creator>Jozef Cipa</dc:creator>
      <pubDate>Thu, 14 Nov 2024 17:27:51 +0000</pubDate>
      <link>https://dev.to/jozefcipa/just-released-a-new-version-of-novus-1ne9</link>
      <guid>https://dev.to/jozefcipa/just-released-a-new-version-of-novus-1ne9</guid>
      <description>&lt;p&gt;I've just released a new version of my pet project called &lt;a href="https://github.com/jozefcipa/novus/" rel="noopener noreferrer"&gt;novus&lt;/a&gt;.&lt;br&gt;
If you are a web developer and are tired of &lt;em&gt;localhost:3000&lt;/em&gt; URLs, check out novus - a tiny Go utility that provides nice HTTPS URLs for local development.&lt;br&gt;
Read what's new in &lt;a href="https://jozefcipa.com/blog/novus-v0-0-4-released/" rel="noopener noreferrer"&gt;v0.0.4&lt;/a&gt; and let me know what you think! Any feedback or ideas are welcome!&lt;/p&gt;

</description>
      <category>go</category>
      <category>webdev</category>
      <category>cli</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
