Welcome! This guide is your first step into the world that we call 'concrexit'.
'concrexit?', yup. It's the name we gave the system that is Thalia's website.
In July of 2015 we moved from the archaic Thalia-system to a Concrete5-based website where a lot of work had been put into. However, roughly one year later we were discussing our reluctance to maintaining the system that we had build. We had developed an aversion against Concrete5, its community and the horrible documentation (never mention it's maintainer, Andrew Embler). The CMS was never meant to do the job we wanted it to do.
Thus we initiated Project #concrexit (Brexit was in the news at that time, update fall 2019: 4 years later it still is) to make things 'makkelijk en leuk' (easy and fun) again. The name eventually stuck.
Now let's go back to the present. What's 'concrexit' exactly?
We based our system on the Django framework, which means that everything is written in Python, specifically Python 3. This choice was made because Python is easy to learn and maintain.
Django has some kind of modules that they call 'apps'. concrexit has multiple apps that you can find inside the website directory in the repo. At the time of writing we have 15 of them, but this may change based on the needs of the association.
There are three apps that form the foundation:
This is the entry point of the system, it holds everything together.
Basically everything related to the association member administration.
Holds the code to manage boards, committees and their permissions.
Concrexit is multilingual, since our association will(/has) switch(ed) to English as main communication language mid-2018 and supports Dutch and English. To make this easier we have added utilities that provide an easy way to create multilingual fields (i.e. a title in English and in Dutch). However, we use Django's default tools for most of the internationalisation.
To manage our work we're using GitLab's built-in issues system and some templates. This list contains the bugs, new features and changes that we are planning on doing some time. We can use tags to differentiate types of issues, some may have a higher priority than others for example. You can find our current issue list here.
Working on your own issue basically goes like this:
Someone else will merge your changes once they've been checked.
Once in a while (at the time of writing: roughly each month) we deploy a new version of concrexit. This is most likely coordinated by the committee's chair. He or she collects all issues that should be included in the release, creates a release branch and tag, writes release notes and makes an announcement. Nothing you should worry about yet :)
Setting up your environment
Before you can dive into the project you need to setup your development environment.
We're assuming that you have installed Git and a version of Python. Which version you need depends on when you're reading this. Just check the 'Getting started' section in the README for more details.
Once you have cloned the repository and installed all requirements you can open the project. At the time of writing there is an awesome JetBrains discount for students that offers their products, including PyCharm, for free. But Sublime Text, VS Code or Atom would do too. And if you're not really into IDE's you could just use VIM 🤷.
Your first issue
Now that you have the environment ready you can start working on your first issue:
We would like to know the shoe size of our members so that we can reserve shoes at the bowling alley and skiing resort without asking for the same information each year.
However, the sizes should be restricted to values between 39 and 47, since there are no smaller/larger shoes at those places. Since not everyone might have a size in this range the field can be empty.
We want to edit the field on the member edit page in the admin and show the shoe size on the public user profiles.
Let's analyse this issue:
It's about users.
We need to add a field to the profile.
It's a field for the shoe size.
The field should only accept values from 39 until 47.
It can be empty.
It should be editable on the admin member edit page.
It should be visible on the public user profiles.
And now you're on your own. Solve this issue for us and learn the basic in-and-outs of concrexit. Although you can work on your own branch, please don't make a merge request on our repository, just ask a Technicie member to review your work ;)
Help I don't know what to do!
We're not horrible people and you're welcome to ask every question you want. However, we prepared hints that you can use if you're stuck. You can find the first one here.
Interested in the final implementation of this issue? Take a look at this commit.