Ethicode Projects: Contributio #1
Tags: elixir, reason, opensource
Published: 2021-02-03 13:09:47

Hey there! 
Today, I'm going to introduce you my latest (unreleased) project called Contributio. 

## What is Contributio

### 🛠 Technologies

Contributio is written in Elixir (with Phoenix, Absinthe) on server-side and in ReasonML/ReScript (with ReasonReact, Apollo Client, Snowpack, TailwindCSS) on client-side. Since Contributio doesn't rely on heavy computations but requires concurrency (and because it's been a while I wanted to learn it), I found Elixir would be a perfect fit for this task. 
So far, I've been impressed how easy it is to learn and smooth it is to write (when you have at least a basic __Functional Programming__ knowledge). 
I think I'm in love.

### 🧠 Concept 

Contributio is a tool made with a big idea in mind: __boost Open Source projects contributions and improve developers knowledge/curiosity for various technologies__. 
As developers from many horizons, we know how important Open Source Software is for us as we heavily rely on libraries, frameworks, languages... that many people spend their time on (most of time _for free_) to make our own stuff.
I felt this project was a great way to pay __my own tribute__ to this wonderful ideology that made the dev I am today.  

To do so, Contributio creates __a market__: a place where Maintainers and Contributors cross their paths.

It gathers projects and tasks from __multiple sources__ and will participate in the increasing of their visibility near people willing to help. 

Contributors would pick tasks, fulfil them then __get rewarded__ for their completions. One of the core ideas of Contributio is to __bring RPG functionalities to our work__!

Today, the rewards consist of "experience" depending on the difficulty and the time defined for a given task but I'm planning to add more content.

_In a few words: Contributio is some kind of gamified OSS project management tool!_

### ✨ Import Repositories and Issues

For now, only GitHub is supported but more platforms will come such as GitLab, Gitea, Gogs... in global and self-hosted versions. As long as projects remain public and comply with the Open Source Definition, it will work! 
You can import repos and issues you'd like some help for then let the magic happen.

### ✨ Find a Project

Contributio lists all projects and allows you to filter them by technologies (like languages used) or keywords. Say you'd like to help on a Ruby project, then just filter them and find the most suitable project.

## What Comes Next

Let's face it: Contributio in its current state is ugly and lacks a decent User Experience. Its structure (frontend, backend, staging deployment on Heroku) is ready but needs many improvements and many features I have in mind will take time to be implemented. 
At a given time, Contributio will be "self-hosted": its own tasks will be listed there so people can contribute to it.
For now, I'm focusing on the minimal features (imports, tasks/projects management, account linking, rewards and experience), a decent UI/UX in order to release an alpha version soon!

I'll publish some updates on the project on both technical (like what blocked or surprised me) and feature improvements aspects. This will be a good occasion to learn more about Elixir and ReasonML with me!

## Resources

Contributio on GitHub: https://github.com/Laegel/contributio/tree/dev
Contributio Staging (may be offline): https://contributio.herokuapp.com/
ReScript website: https://rescript-lang.org/
Reason React website: https://reasonml.github.io/reason-react/en/
Elixir website: https://elixir-lang.org/
Phoenix website: https://www.phoenixframework.org/
Snowpack website: https://www.snowpack.dev/
TailwindCSS website: https://tailwindcss.com/

---

Thanks for reading!

Before you leave...
Since I've not seen a lot of companies using those loving technologies (at least in France) and that I have an idea of the reason why, I've got some questions:
- Did you know those technologies before today? 
- Are you curious about them? 
- What prevents you from learning/using them?