Inspiration

Hey there, we're Jan, Felix & Philip ✌️ We initially planned on passing for this year's codegeist, but we changed our mind in the very last week, as we became eager to finally get our hands on forge. With the very limited time, we still had, making a decision about what we wanted to build was crucial, as we wanted to build something actually useful, polished, and collaborative. Finding the right idea however was no easy task, and after some frustrating back and forth we finally decided on helping users make decisions easier, as this was what we struggled with at the moment.

What it does

Mantra is an intuitive and modern poll-maker that helps you make complex decisions easily.

Core features

  • Simple single-choice polls 🗳️
  • Multiple-choice polls 📶
  • Configure if users can change their vote ⚙️
  • Vote publicly or anonymously 🥸
  • Complex decisions with "matrix" polls 🚀, for example:
    • Find the right time slot for a meeting ⏱️
    • Make a decision about the next team event 📅
    • Estimate the impact of growth experiments 🃏
    • And many more 🌟

Other quality-of-life features

  • Dark mode ready. Confluence might not be quite there yet, but we are! Ready to make the switch as soon as you are, Atlassian! 🌙
  • Animated results for simple polls 💃🏽
  • Automatic background refreshes to make sure poll data is up to date, even without reloading the page 🔄

How we built it

Tech stack

  • Framework: React
  • Language: Typescript
  • Custom-UI: stitches & radix
  • Bundler: vite / esbuild

All custom-ui resources are provided by a single frontend resource, which is served and compiled by vite. We route to the correct resource by connecting the react-router library to the context from the view.getContext function from the @forge/bridge module.

Forge modules

Macro

The macro is using the custom-ui frontend to display a single poll. The poll to be displayed can be configured in the macro's configuration panel, which uses forge's ui-kit. It contains a select element that includes all active polls. Because polls are saved globally, the macro can be used on different pages/spaces without getting duplicate results.

Confluence:spacePage

We've set up a space page that contains an overview of all polls. This is where you create new polls. Furthermore, you can edit polls that haven't started yet or view the results of ongoing polls and even submit your own vote from there.

Forge Bridge Modal

We've also leveraged the power of the native modal to display a full view of all users that have voted for a certain option, as well as for the entire poll.

Challenges we ran into

  • Before being able to insert a poll macro, you need to configure it on a separate page and reference it in the macro configuration. Having an overview of all polls is nice, but for a better user experience, we'd like to offer users the flexibility of creating new polls directly from the macro configuration. In order to achieve this, we'd need a fullscreen custom-ui editor for the macro configuration, as the current ui-kit solution is not flexible enough to provide the same feature set in such a small section.
  • We'd like to provide the option to create polls that can be voted for by anonymous visitors. This can't be achieved at the moment as forge macros don't show for anonymous users.
  • The PDF export didn't seem to work for our custom-ui macro. Being able to include poll results in the PDF export would be nice.

Accomplishments that we're proud of

We've built the mantra MVP in less than a week from scratch. While there are a lot of possible improvements, it's already a very flexible app that allows you to solve complex decisions easily.

What we learned

Coming from Connect, we were really surprised at how quickly we were able to adopt the forge modules. We can't wait to bring our existing apps to forge, once forge implements the missing features that we'd need for that.

What's next for Mantra

We've had a ton of fun developing the app and experimenting with forge and we can't wait to bring this to the Atlassian marketplace. But before we do so, there are still a couple of things left to do:

  • Better permissions: Only allow the creator of a poll to update or delete the poll
  • Add filters to the poll overview page, to find polls that are relevant to you
  • Improve the layout of the matrix poll so that you can add more text
  • Drag&Drop for the options in the poll editor

In the future we'd also like to:

  • Allow users to restrict polls to certain user groups or spaces
  • Add better insights for poll results, especially for matrix polls
    • A setting to swap the y-axis with the options that users have voted for would be very useful for some use-cases
  • Add start and end dates to polls
  • Add templates to make poll creation even easier
  • Provide more custom colors and styling options 🌈

Thank you for reading!

Jan, Felix & Philip 🤟

Built With

+ 1 more
Share this project:

Updates