After hacking my own RSS feed for my Obsidian Publish site, it is now time to try some ideas. The first one is automating my blog posts via Mastofeed. I just created a rule that will compose a Mastodon post using the Title, Summary, Link, and Image from my RSS feed.

This first post/test has two goals. Make sure the automation is working and understand what will happen if one of the items, in this case an image, is not present in the original feed.



If you are fed up with Obsidian Publish's limited RSS, here's how I hacked a better feed.

If you’re an Obsidian Publish user, you’ve probably stumbled upon its default RSS feed by adding /rss.xml to your domain. And if you’re like me, you quickly realized how incredibly limited it is – so limited, in fact, that it’s practically unusable for serious blogging.

I completely get the problem here. As Obsidian Publish doesn’t offer a standard blog feature, there isn’t an actual blog feed. However, that hasn’t stopped us users from hacking our way to a solution. So, I decided to also hack a better RSS feed.

The Problem

As I write this, the official RSS feed is not time-based and doesn’t even have a description for each item, even though there is a “description” property that Obsidian-Publish can read. Anyway, I understand the hurdle of going beyond the simplicity of the meta-information available on our notes, especially if one doesn’t use properties.

What I never got, though, is why it doesn’t display the items chronologically, matching the date a note was posted as a web page. I can’t share something like this with people willing to follow my blog posts.

However, even if I avoid sharing it, many modern feed readers look for and find the feed for the user. So, the two problems I have to solve are:

  1. Having a better RSS feed.
  2. Making the current /rss.xml address point to that better feed.

I’m not a specialist in any of the fields below. I’m sharing the steps I went through as a way to inspire you. Please do your own research and remember to always make backups of your work before trying the directions below.

How an RSS Feed is Created

I’m not a developer, but along the way I was, let’s say, forced to learn some things. When I started podcasting back in 2005—yes, yes, you read that right—I had to learn how to write a feed. Back then there was no such thing as a tool or AI.

The way I see it, a feed is split into two parts. The top part is like the ‘header’ of your blog, containing essential details like its title, overall description, and your website’s address.

Take a look at mine below, and you’ll notice that it’s easy to guess what is what.

<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
<title>vladcampos Blog</title>
<link>https://vladcampos.com</link>
<description>Thoughts and articles from one enthusiast to another.</description>
<language>en-us</language>
<lastBuildDate>Tue, 17 Jun 2025 10:12:00 GMT</lastBuildDate>
<atom:link href="https://social.vladcampos.com/rss.xml" rel="self" type="application/rss+xml"/>
<image>
<url>https://social.vladcampos.com/favicon-196x196.png</url>
<title>vladcampos Blog</title>
<link>https://vladcampos.com/blog</link>
</image>

Below this header are the individual entries, or ‘items,’ for each of your blog posts. Think of each item as a mini-summary of a single post, including its title, a brief description, a link to the full post, and the publication date.

<item>
<title>📃 Things you should know about Obsidian Publish —my struggles and how I'm dealing with them.</title>
<link>https://vladcampos.com/2025-06-16-things-you-should-know-about-obsidian-publish</link>
<guid isPermaLink="true">https://vladcampos.com/2025-06-16-things-you-should-know-about-obsidian-publish</guid>
<description>Obsidian Publish has been a game-changer for my online presence, but like any powerful tool, it comes with its quirks. Here are the hurdles I’ve faced and how I’m jumping them.</description>
<pubDate>Tue, 16 Jun 2025 11:32:00 GMT</pubDate>
</item>
<item>
<title>📃 Turning Bluesky into Instagram - my unexpected workflow.</title>
<link>https://vladcampos.com/2025-06-14-turning-bluesky-into-instagram-my-unexpected-workflow</link>
<guid isPermaLink="true">https://vladcampos.com/2025-06-14-turning-bluesky-into-instagram-my-unexpected-workflow</guid>
<description>Apps like Pinksky transform your Bluesky feed into a visual, Instagram-style experience, but there's a catch.</description>
<pubDate>Sun, 15 Jun 2025 10:31:00 GMT</pubDate>
<media:content url="https://publish-01.obsidian.md/access/54a5cde44e33737dbd9582dc8b12cf1f/vladcampos.com/_files/2025-06-14-pinksky-post-cover-art.png" medium="image" type="image/png"/>
</item>
</channel>
</rss>

Basically, every time there’s a new post in the blog, a new item representing it needs to added ti the feed. And that’s it; whatever software is reading that feed will see that new item.

Building my RSS Feed

This is where the magic happens and where my struggles with manual updates finally ended! I partnered with Gemini to create a simple web app I’m calling the RSS Item Generator.

For that I created another website and assign a subdomain to it using a GitHub repository. It’s a free and easy way to host static websites and you can learn all about it here and here. All I had to do after that was use that space to manually write and publish my own feed. I post frequently, but not that much per week. “It will be fine,” the naive me thought.

It is, indeed, kind of fine, since all I had to do was copy the last content inside <item></item>, paste it at the top of the previous one, and replace the old information with the new one. However, after a few manual updates, I quickly realized how prone to errors this approach was. I searched for a basic app that could generate new items but couldn’t find one.

Like I said, I’m not a developer, but since forever I’ve been having these ideas that I could never put into practice. Until now!

That’s when I turned to Gemini. I explained my needs in detail and asked for help creating a web app to automate the process. The first version was not exactly there but super close to what I envisioned. So, I kept chatting with it, and we came up with what I’m calling an RSS Item Generator.

How it Works

First, you need an RSS file, which is a fancy name for a text file with a .xml extension. Usually rss.xml. Copy the initial section of the RSS code (the ‘header’ part) to a new text document and replace my blog/site information with your own.

Below that, you need to start building the items list. Go to my RSS Item Generator, fill in the blanks with the information from your latest blog post, and click on Generate RSS Item. Now copy that and paste it to the rss.xml file. The most recent <item></item> should be at the top of the list. Make sure it looks like the example below.

<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
<title>vladcampos Blog</title>
<link>https://vladcampos.com</link>
<description>Thoughts and articles from one enthusiast to another.</description>
<language>en-us</language>
<lastBuildDate>Tue, 17 Jun 2025 10:12:00 GMT</lastBuildDate>
<atom:link href="https://social.vladcampos.com/rss.xml" rel="self" type="application/rss+xml"/>
<image>
<url>https://social.vladcampos.com/favicon-196x196.png</url>
<title>vladcampos Blog</title>
<link>https://vladcampos.com/blog</link>
</image>
<item>
<title>📃 Things you should know about Obsidian Publish —my struggles and how I'm dealing with them.</title>
<link>https://vladcampos.com/2025-06-16-things-you-should-know-about-obsidian-publish</link>
<guid isPermaLink="true">https://vladcampos.com/2025-06-16-things-you-should-know-about-obsidian-publish</guid>
<description>Obsidian Publish has been a game-changer for my online presence, but like any powerful tool, it comes with its quirks. Here are the hurdles I’ve faced and how I’m jumping them.</description>
<pubDate>Mon, 16 Jun 2025 11:32:00 GMT</pubDate>
</item>
<item>
<title>📃 Turning Bluesky into Instagram - my unexpected workflow.</title>
<link>https://vladcampos.com/2025-06-14-turning-bluesky-into-instagram-my-unexpected-workflow</link>
<guid isPermaLink="true">https://vladcampos.com/2025-06-14-turning-bluesky-into-instagram-my-unexpected-workflow</guid>
<description>Apps like Pinksky transform your Bluesky feed into a visual, Instagram-style experience, but there's a catch.</description>
<pubDate>Sun, 15 Jun 2025 10:31:00 GMT</pubDate>
<media:content url="https://publish-01.obsidian.md/access/54a5cde44e33737dbd9582dc8b12cf1f/vladcampos.com/_files/2025-06-14-pinksky-post-cover-art.png" medium="image" type="image/png"/>
</item>
</channel>
</rss>

But there’s a final touch. Each post item has the publication data inside <pubDate></pubDate>. If you take a look at the top of the feed, there’s also a date inside the <lastBuildDate></lastBuildDate>. That date and time has to be the same as or after the last post you added to the list. So, remember to always copy the date section of the last post published and paste it to the top of the feed.

That’s it. All you have to do from now on is keep adding the new <item></item> code blocks and updating the date at <lastBuildDate></lastBuildDate>.

Publishing the RSS Feed

But an RSS feed is only useful if the entire web can see it. So, you need to publish it.

Remember the GitHub repository I mentioned above? That’s where you’ll do it, and to make both of our lives easier, I suggest watching the video below where I go through each step.

Redirecting the /rss.xml

The last item in our list is to redirect the /rss.xml address to the new feed address. You have to do this because there’s no way to unpublish that rss page created by Obsidian Publish. At least I never figured out how.

The redirect will make sure everyone gets the correct feed, including feed aggregators trying to guess it. In my case, it is a redirect from vladcampos.com/rss.xml to social.vladcampos.com/rss.xml . If your website is powered by Obsidian Publish, you are probably using CloudFlare for your domain.

As for the address, share whatever is best for you. I’ll keep sharing vladcampos.com/rss.xml because it is easier to remember. As for aggregators trying to figure out your site’s feed, as long as you have the redirect running, they will always land at the one you’ve created.

One thing to keep in mind is that you’ll need to manually update your rss.xml file with each new post using the generator. While not fully automated, it’s a small price to pay for a fully functional blog feed.



Turning Bluesky into Instagram - my unexpected workflow.

Apps like Pinksky transform your Bluesky feed into a visual, Instagram-style experience, but there’s a catch.

When creating a Pinksky account, you have the option to either subscribe using your current Bluesky account or create a new profile. There are advantages and disadvantages to both options. In my case, I have decided to use my current account.

If that’s what you choose to do, remember to create a specific App Password to protect your Bluesky account.

I went with that route because of my experience with another decentralized protocol, the ActivityPub. In addition to my Mastodon account, I ended up creating profiles for Flipboard, Pixelfed, PeerTube, and many others. Long story short, it was a big mess, and, after a while, I had to invest some time reorganizing everything.

That said, the problem with using my current Bluesky account is that the Pinksky feed will include every single image people post. However, an image is not always equivalent to a picture. For example, news profiles usually include a cover image with the link to the article they are posting.

A collage featuring various objects and scenes including flowers, a microcontroller, digital interfaces, a book, a lamp, an e-reader, a Swiss Army knife, and a blooming plant bud.

There’s a filter in the top-left corner of the screen (a) where you can choose the option to see only photos, but that will not do it. At least it didn’t change anything on my feed, probably because of what I explained in the paragraph above.

Two red circles with letters inside flank a pink flamingo silhouette in the center, all on a black background.

Ideally, I would appreciate it if Pinksky had a setting to allow us to hide some profiles from our feed there, and I did send a suggestion to the developer. But you know me, I had to come up with an Unexpected Workflow, right? So this is what I did.

On Bluesky, I created a new List, which I titled Pinksky Feed, and added some of the people I follow. Specifically, the ones who frequently post pictures I like. Since Pinksky will only show me their posts with pictures, the next step was to set that list as my feed on Pinksky.

If you need help creating a List, check the video below. If you already know how to do it, keep reading to learn how to select it as your default feed on Pinksky.

On Pinksky, tap on the hashtag icon at the top right-corner of the screen (b). Now, at the bottom of the screen, you can see all the ones you created on Bluesky. In my case, one of the options is the Pinksky Feed, which is the one I’ve chosen. The hashtag icon at the top right-corner of the screen (b) now has a small blue dot on it, as a reminder that you are seeing pictures from a specific feed.

And that’s it! From now on, as I go about my Bluesky browsing, I’ll simply add any cool, photo-focused accounts I find to that list.



How to create a specific Bluesky password for each App

By creating a specific password for each app, you not only avoid sharing your Bluesky password, but you can also easily revoke access if you need to.

Go to Settings and then click on Privacy & Security. The option we are looking for is App Passwords. Click on it, and if it’s your first time there, you’ll only see the Add App Password button (1). However, as shown in the image below, in my case, there are already some passwords that can be revoked by clicking the trashcan icon (2).

To create a password, click on the Add App Password button and type a name in the box. I always type the name of the app where I’m using that password. It will help me remember where you used that password, in case I want to revoke it in the future.

There’s also a box to Allow access to your direct message . This is precisely what it says, and that’s why I prefer to never check that box. But, of course, it’s up to you.



Caliban's War

When was the last time I read a fiction book as quickly as Leviathan Wakes I don’t even remember. Even before finishing it I bought Caliban’s War, which I’m also enjoying very much. But this time I’m reading it on my Supernote.

I started reading it using the Supernote’s ePub reader, but after learning about the amazing BookFusion plugin for Obsidian, I had to install the BookFusion app on my Supernote, and that’s where I’m currently reading it. By the way, a video about all these tech adventures is coming soon.



🌞 Good morning from Porto. I wish you all a lovely weekend.



ep.4 - How I save Obsidian notes for the future

There are situations where we need to save information for the future and have no exact idea when we’ll need it. In today’s episode, I’m sharing a strategy I used this past weekend.

3 o’clock podcast

Practical tips and real-life examples of the Timeline System. Learn how to use Action, Static, and Timeline containers to improve your workflow. Subscribe on iTunes, PocketCasts, Spotify, YouTube, or RSS.

Transcript



ep.3 - My preferred method of notification is proactivity

When it comes to tasks in Obsidian or elsewhere, I prefer a more proactive approach rather than relying on notifications. As with everything else in the Timeline System, I’m looking for direction; the specifics of what and when I’ll do it depend on the situation at hand.

Resources and References

3 o’clock podcast

Practical tips and real-life examples of the Timeline System. Learn how to use Action, Static, and Timeline containers to improve your workflow. Subscribe on iTunes, PocketCasts, Spotify, YouTube, or RSS.

Transcript



What is Syncthing-Fork

After the Syncthing Foundation decided to discontinue the Android client, I’ve been using Syncthing-Fork, which is non-official open-source version based on the original Syncthing for Android.



Leviathan Wakes

I don’t remember what was the last time I couldn’t stop reading a book. Fortunately, when I was reading Leviathan Wakes, the first book in The Expanse series, it was comforting to know that I would be able to keep enjoying more stories set in that universe.

A science fiction book cover for Leviathan Wakes by James S. A. Corey features a spaceship in space with large structures in the background.

I developed a more in-depth understanding of the characters, and the most delightful aspect of this was that it occurred naturally as I was enveloped in the adventure narrative. It’s time to find out if the next books are as good as this one. However, if you like the TV show, you should probably read at least this first book.

I purchased it in paperback while on a recent trip to Ireland, but I chose to go digital for the second book, Calvin’s War. And I’m not using a Kindle or Kobo device or apps. This reading is |happening in my Supernote.



ep.2 - My Obsidian Templates—going beyond basic notes to stay organized

I love that Obsidian notes are just text files, but this can sometimes make organizing things a bit difficult. It took me a while, but I now have a group of Templates with the right Properties that are really helping me sort through all the information I have in the app. Will this change in the future. Maybe, but I’m okay for now.

Resources and References

3 o’clock podcast

Practical tips and real-life examples of the Timeline System. Learn how to use Action, Static, and Timeline containers to improve your workflow. Subscribe on iTunes, PocketCasts, Spotify, YouTube, or RSS.

Transcript



ep.1 - If you are doing, it should be an Action Container

One thing that was constantly on my mind when I was developing the Timeline System was that it needed to be intuitive. In simpler terms, it should not generate any friction; otherwise, people would abandon it.

3 o’clock podcast

Practical tips and real-life examples of the Timeline System. Learn how to use Action, Static, and Timeline containers to improve your workflow. Subscribe on iTunes, PocketCasts, Spotify, YouTube, or RSS.



ep.0 - Hi there 👋

I’m at a point in my Timeline System where I’m starting to get more and more questions about it. The idea for this podcast it to produce short episodes inspired by the conversations I have with clients, friends, and you guys about the system.

For now, I don’t have plans for the frequency, so you can expect episodes whenever I have something to share.

That’s it for this one. Talk to you soon. Very soon.

3 o’clock podcast

Practical tips and real-life examples of the Timeline System. Learn how to use Action, Static, and Timeline containers to improve your workflow. Subscribe on iTunes, PocketCasts, Spotify, YouTube, or RSS.

Transcript



I seriously need to use the bathroom…

“… anyway, what time is it?”

I am aware that I should not have done so, but I pressed the upper-left button on my Garmin to illuminate its display.

Every time this happens, there are two possible outcomes. When I see that it is about 2 or 3 in the morning, it’s so difficult to fall asleep again. Yes, I know, that’s why we should never check the time. Anyway, when it is past 5 a.m., I magically sleep seconds after checking the time or coming back from the bathroom. Our brains are so weirdly wired.

But this time I got a strong beam of light coming from the watch. Everything in the display was gone, but a flashlight icon. I had no idea this feature existed, but the moment I saw that, my brain went like: “wow, I can use this instead of turning on the bathroom light. Cool.

Yes, that was a neat feature, but none of the buttons on the watch worked anymore.

Okay, how do I turn this off?

Because there are so many features on this watch, a long time ago I had created a shortcut to bring the display back to the main screen. Well, you guessed it. Holding the bottom-left button for a few seconds didn’t do anything either.

I was already back in my sheets at that point, wide awake and still trying to figure out what to do. “How do I turn off this beam of light coming out of my wrist? I can’t believe I’ll have to get up and look this up online.

I don’t sleep with my phone nearby, so I would have to go get it in the other room. Then, my dog would wake up and want to play with me. “Definitely a terrible idea.

And, what time is it?

Click, click, click, and it was finally dark again. “How did I do that?” In any case, I could finally check the time. “Two something in the morning! Oh, no!”. But, it immediately clicked when I pressed the upper-left button to turn on the screen. “I bet it turns on and off by double-clicking the light button. I must have done that accidentally earlier.

Cool, that’s it. Now, all I need is a way to double-click to turn myself off.



Pebble fe504504 error

Yesterday I charged my old Pebble 2, and it seems to want to work. But before troubleshooting this error message, I have to fix the completely melted plastic buttons. And, of course, there’s a 3D file available to solve this. Pebble resurrection project here we go!



Supernote + VLC + Bluetooth Headset + some music = 🤯



My super simple Google Calendar hack for Obsidian

Having both Obsidian and Google Calendar constantly open, was driving me a little crazy because of all the back and forth. Now, one click and I’m there. So simple, so helpful.

Yes, I’m aware of the calendar plugins, but, after trying several options, I’m not happy with any of them. So, I came up with a temporary solution that, to be honest, I’m using for a while and, at least for the moment, it made me stop pursuing other alternatives.

Despite its simplicity, it’s been a game-changer for me, and that’s why I decided to share this hack with.

What I did was use the relatively new Web View feature to open Google Calendar inside Obsidian. But there’s more. I also set the Google-Calendar tab as pinned, which makes it always open when I open Obsidian. And because I use Obsidian in dark mode, I also set Google Calendar to dark mode, and it now blends perfectly as if it is an integral part of Obsidian.

If you are having a hard time visualizing all this, you can watch the video below. In my case, I had to also change some setting on another plugin, the ‘Hompage’, which I also explain why and show in the video.



I freed my Kindle library and have it synchronized with all my devices

First, I converted the books to ePub using Calibre. Next, they joined my Obsidian Timeline System for automatic sync across all devices, Supernote included.

Like many other modern conveniences, the Kindle ecosystem is built to keep us locked in. As you know, I’ve been taking down walls around digital goods I won, and now it’s time to do it with my books. This project has been on my list for a long time, but it was a recent feature removal from Amazon that motivated me to finally pull the trigger.

We used to be able to go to Amazon.com and download our Kindle books, but that’s not possible anymore. A while ago, when Amazon announced the policy change, I downloaded all my books. If you haven’t done that, I believe you can still have access to them by connecting your Kindle to a computer and manually coping the books.

But having the books is just part of the process, as the majority of them are linked to your account via what’s called DRM. Additionally, Amazon uses a proprietary format instead of ePub, which is the more widely adopted by e-book readers. In other words, it’s like having your books locked in a box that is locked in another box.

Calibre is the master key that can help us with all of these locks. Additionally, it works as a library management software, keeping all the books in a folder on our computer. That’s just perfect for the Digital Caveman project, right?

When you are first installing the app, it will suggest a folder for your library, but you can change it to what better suits you. In my case, I created a new Static Container (folder) called ‘eBooks’. And because the files in my Timeline System structure synchronize with multiple devices, my library is now widely available. But I’m getting ahead of myself.

As a tip, you can also move the library to a different folder in the future. Just click on the ‘eBooks’ button on the toolbar to choose a new location.

A software menu displays options for managing eBooks, including switching or creating a library, changing icons, and importing data.

Next, we need to prepare Calibre to be able to remove the DRM from our books. This is done in two parts. First, we need to install and set up a plugin. It’s only after doing this that we’ll be able to tell Calibre to remove the DRM and convert the books to ePub.

Preparing Calibre

  1. First you have to find you Kindle serial number.
  2. Then you can follow this instructions to instal the DeDRM_tools plugin

Converting to ePub

With all the above done, go to Calibre’s main window and click on the ‘Add books’ buttons. Select one or more books, and they will be added to your library’s folder. 

Next, select one or more books in the list and click on the ‘Convert books’ option. You’ll see a new window with countless details that you can tweak on each book. There are even several formats available in addition to ePub, which is the pre-selected on. In my case, I kept everything as it was and clicked on the button to convert.

The Supernote

To understand how my books are being automatically sent to my Supernote, I suggest watching the video below.

But remember, the books are in my Obsidian Vault. And looking at how Calibre creates folders for each author, I’m already having insights about making those folders somehow connected to other content I have in Obsidian. Specially, the ‘Knowledge Base’ notes, which share a strong relationship with the books I read. And that’s one of the reasons I chose to set the ‘eBooks’ folder as a Static Container.

The Digital Caveman Project

There are plenty of details I still would like to adjust, but all the digital content I create and own is now local first and free from walled gardens. In other words, 100% under my control.

In addition to my notes and website being created in Obsidian, my music, photos, now my books, every single file I use for my personal life and work, and even my passwords, are on my computer first. I even have my own ‘cloud’ system and a backup strategy.

🪨 I did it!



How to instal the DeDRM_tools plugin

Download the DeDRM_tools plugin, unzip the folder and set it apart. Next, go to the ‘Preferences’ under the ‘Calibre’ menu option. At the bottom of the page, you’ll see the ‘Plugins’ button. Click on it. Next, click on the button ‘Load plugin from file’.

A dropdown menu in the Calibre application displays options like Preferences, Services, and Quit Calibre.

Navigate to the ‘DeDRM_tools’ folder on your computer, find and select the ‘DeDRM_plugin.zip’ file. Click on ‘Open’, and you’ll see a dialog box asking if you are sure. Click on ‘Yes’ and in the next dialog box, also on ‘OK’.

Now we need to provide the plugin with your Kindle serial number. There are many plugins already installed, so if for some reason, you can’t see the one we just installed, simply search for ‘DeDRM’. Select it and click on the ‘Customize Plugins’ button and then on ‘Kindle eink ebooks’.

You be asked for your Kindle Serial Number. Add the serial number to the box and that’s it.