Blogring is super simple Forge macro that automatically displays a link to the next blog post in a series. We write a lot of blogs at our company, and that makes it hard to find the next blog in a series because you have to hunt through a lot of unrelated ones in the navigation bar.
But I'm old enough to remember the 'webrings' of the 1990s which would link related blogs together with 'Next' and 'Prev' links. So I decided to give that a try for Confluence blogs...
What it does
The macro automatically finds the next and previous blog posts in a series then displays links to them. It can be configured to link just blog posts you created, or link all blog posts with a particular label.
The links are determined automatically, so when you add your next blog post in the series then your previous blog post automatically gets a link to it. No need to remember to go back and update your last blog post!
How I built it
Blogring is a Forge app. I wanted to try a few Forge apps to learn how Forge works, and this idea seemed like a great fit for Forge.
Challenges I ran into
Though this is a super simple macro I did hit a lot of challenges with Forge. I actually find it quite enjoyable to build with Forge — the development process is so quick and simple! — but I did feel the limitations quite a lot. Here's a list of those:
- Text alignment: I couldn't right-align the 'Next' link so it looks out of place. It would look better if Forge could right-align text in table cells.
- Macro height: There is a gap under the links which I think comes from a minimum height for macros. It would look better if macros could be a little shorter.
- Date picker indicators: I tried adding a date picker to let you jump to a day, but it doesn't work well because there is no way to indicate which days have a blog post, and no way to disable days without posts. Some kind of visual indicator of valid days would help.
- No action when picking a date: When you click on a date in the date picker nothing happens. There is no way to take an action when a date is picked, no 'onClick' handler. You have to click a form button to trigger something to happen, which seems unnecessary and isn't how most date pickers work.
- No browser navigation: When you click on a date I can't take you to the blog post for that day, because there is no way for a Forge app to navigate to a different page. So I have to show a link for someone to click on, which is isn't how websites would normally work.
- No indication that the config popup is loading: The configuration popup on the macro can take a little while to render because it has to load a list of page labels first. But Forge doesn't show any loading indicator, so it can feel like it is broken — you click the edit button then wait two seconds with no indication that it is doing anything.
- Configuration popup only saves to the page: The configuration popup can't save shared configuration, such as configuration on the space or user.
- No rendering before async functions complete: Blogring is slower than I would like, it takes a few seconds to display the links because it is searching for matching blog posts first. It needs to do this every time the page is loaded just in case a new blog has been added... however, most the time it's going to return the same result as last time. It would be so much faster if Forge could instead cache the state between invocations: render the state from last time immediately, then run the async functions to get the latest data — if (and only if) the state changes after those functions then render it again. Most of the time this would make the macro render instantly!