Juraj Petráš
Project for p-mat

Pikomat / Pikofyz

Complex website for hosting yearly online competitions in physics and mathematics. This projects includes 3 websites. Pikomat, Pikofyz and internal pages for managing content of these two.

website-previewwebsite-preview

#Technologies used

This is the primary project we work on and maintain at P-MAT. I wasn't there when the project was started, but the original goal went roughly like this:

Create website and technology for managing online competitions. It has to be simple and easy to use, but also very flexible. It also has to be easy to develop. Meaning it has to be easy to get new people onboard, even very junior devleopers.

With these requiremenst, decisions were made. Some good, some not so good.
Backdend:
The choince of Django turned out to be very good. As a non-profit organization, it gives us everything we might ever need. Django admin is also a huge plus. We don't need to develop a separate UI for every little thing. We can use Django admin to manage things that don't need to be touched very often, and it costs us nothing to maintain or develop.
Personaly I would perefer having staticaly typed language on the backend. But this sacrafice is well worth it, for everything that django provieds for us.

Frontend:
The frontend story turned out to be not that great. It is written in JavaScript with Vue 2.0. It is pretty easy to understand, but there is a very high surface area for weird bugs. Vue 2.0 did not scale very well with us. We used pure Vue, so we don't have SSR. Just a simple SPA.
The development experience is something similar. Retrospectively, we should have used Typescript. Every new project is started with Typescript. I have't observed people having any issues with typescript. Even very new developers. And when you jump to a new codebase, it gives you a whole new level of confidence. We could change response from one API endpoint, and everything you need to do is change the interface and fix every TS error. This is not something we have right now.
There isn't any functioning setup for end-to-end/integration testing. Unit testing frontend is not something we observed as a useful thing and we don't do it. I can't recall any bug that could have been caught by unit test alone. Having end-to-end testing, which could test things like register, login, password reset, etc. would help us a lot. Before every release, we conduct beta testing. Large part of this beta testing is spent testing the same thing over and over. Automating this would be a huge help and would let us focus on the new features.