Motto: must provide the confidence to the users their input is anonymous and useful for their scrum master.

'Regular' user

The team member receive a URL from her/his scrum master, e.g.:

This basic web page invites the member to vote: Vote form

Scrum Master

As a scrum master, you have a dashboard of your teams to manage them and their surveys, desktop view: My teams dashboard, desktop version

Mobile view: My teams dashboard, mobile version

You can have an overview of the votes and comments: Carousel on all votes and comments The clipboard icon copies the comments and votes. The checkbox emphasis the comments.

And of course you can follow the trend of your team's happiness: Happiness chart

Data Privacy and anonymous votes are the key of getting actual feedback.


One cookie is used to store the authentication token when you are logged in. Which applies to scrum masters only. Another cookie is used to store the language you select when clicking on the footer. In short, if you do not change the default language and are not a scrum master, no cookies is set! Hence, cookies are absolutely not required to vote.

Local Storage

Local Storage is used to gently prevent a user from voting twice. Only the UUID of the survey is put, no data entered by the user is set.

PHP is a controversial language... even better!


I chose PHP because it's by far the language I know the best. That being said, it's been a while since I coded for real! I wanted a quick win with a REST implementation. My MVP was these 2 end points: POST /surveys/{survey_uuid}/votes and GET /teams/{team_id}/chart. Slim was like an easy choice.

Weeks in, weeks out, I asked my teams to use a cURL command to vote. That was a great success with my developers, not really for my POs! It was time to create a user friendly web page for them. I chose BULMA for the CSS framework and Twig for the templating.

PHP is still often taken has a second (or 3rd!) class language. I did my best as a PHP architect within ADP to elevate the best practices. We were not ashamed at all when comparing the code base of the other legitimate 'Java' teams, especially when comparing the performance and scaling!


It's an issue in GitHub!

In short: keep it simple!


That's the default role, obviously with no need to log in. Guests can see the information (including this page!), but above all: can vote via the link created by the scrum master.


Basically the Scrum Master. This role allows the scrum master to manage her/his teams, manage the surveys and get the charts.


This role allows the logged user to edit any teams, even if this user is not the owner.


A Scrum Master of multiple teams or a director level. This role enables the organization view and an access to the aggregated chart.


This role allows the logged user to edit any organizations, even if this user is not the owner.


This role allows the logged user to approve the self-registered users.

Willing to help and support a new language? You are more than welcome!


Not a big fan of re-inventing the wheel. I've been using gettext for years and it helped me so greatly that I haven't tried to challenge it!


Of course you can edit the .PO files manually but I personally like the help of tools. In this case, I'm using POEDIT: so useful that I highly suggest it.

How To

Because the Git repository is not public yet, contact the author to get the updated .PO file. The process will be using the regular pull request. If you are not a developer, requesting and sending the update to the author can still be used.

This how to is based on the previous suggested tool POEDIT.

Improving an existing translation

Opening the tool:

Click the button 'Edit a Translation' and choose the .PO file of the language you'd like to improve:

Updating the translations using 'Catalog/Update from the .POT file...':

Correct/add a missing translation:

Once your translations are done, save your work via the 'Save' button: For a mysterious reason, you might have this error message, simply discard it:

The .PO file contains your updates. The tool automatically compile it to a .MO file. If you can create a PR, create a translation issue, then a PR referencing it. In case you can not (let's say, the Git Repo is not public yet!), simply send the author the 2 files. I'll make sure your name is on the credits.

Translate to a new language

Opening the tool, and choose the .POT file. Select the language you'd like to provide a translation: Language selection

When saving the .PO and .MO files, the structure has to be followed: ~/src/locale/{language}[-{optional region}]/LC_MESSAGES And the filename has to be: happiness.po Save as...

Eager for a quick win?

The most used page is by far the vote one. So, why not translate this page to quickly gain some popularity?

You got it! Instead of the full happiness.pot file, just use the vote.pot!