Codegeist 2020

This Confluence Cloud Addon is an entry in Codegeist 2020, the annual contest run by Atlassian every year to promote their marketplace ecosystem.

Technology Stack

The Addon is developer using node.js and express.js framework, kickstarted with the atlassian-connect-express scaffold, Addon is hosted on Heroku and the datastore is Postgres. On the front-end I am using vanilla JS because the display & interaction are so simple that I wanted to keep it to a minimal load.


As a team member, team lead or scrum master I am always sensible to people feelings and moods when contributing to a project but I find it hard to remember "how was I feeling on this day last week or last sprint" and I always liked the concept of the niko niko calendar - I wanted an easy way to capture those moods that I could then browse over time, especially at retrospective time.

What it does

This tool is a calendar that aligns to your sprint cadence and allows to capture the teams mood in a fun and easy interface.

How I built it

I followed the Atlassian connect tutorial using express.js on node.js, using vanilla JS & HTML5, using sequelize for the mapping the object model to the database.

Challenges I ran into

I had a prototype using google for authentication, which was working decently, but moving to Atlassian Connect I realised most of the data exchange didn't make sense and the only data I needed was the accountId which makes the stored data as anonymous as possible.

I started developing on sqlite and the move to postgres was harder than I though because I had to write some custom SQL and rewrite it again for the new db.

Calculating the start and end date of a sprint was though, especially taking into account the user timezone preferences and locale time format.

Accomplishments that I'm proud of

Managing to complete a plugin that is functional and fun to interact with, while enjoying myself getting acquainted with Atlassian stack again.

What I learned

I discovered the MutationObserver class in javascript and this how I implemented the custom mood selector. I also learner about Intl.DateTimeFormat to leverage browser knowledge of locale formatting.

What's next for Niko niko calendar for Confluence Cloud

There is so much more we could be doing, like going anonymous and having notification and reminders to fill-in the calendar. Also a customisable retrospective view/export is in the work.

How to test the plugin

Install the plugin from

Once this is done, edit any page and add the “niko niko calendar” macro.

In the configuration panel, add a few users in the order they will appear in the calendar, enter the sprint start date (which can be in the past) and the length of the sprint, you also have the option to choose the theme, click save and publish.

Users are now able to record their mood on past day of the sprint. Only the listed users can update their own mood, and we can’t submit mood for future date.