The calendar, payments and servers all had their difficult weeks, but each of those problems was eventually closed. Tasks are different, because they have kept me busy from the first days of January until today. A maths task is not just text. It is also formulas that have to look like the ones in a textbook, answers that have to be correct, and drawings that have to show exactly what the question describes. Each of these three things broke in its own way.
The formula sheet
One of the first things in the student panel was a formula sheet, the equivalent of the official tables students use during the Matura (Polish school-leaving exam). On a normal screen it looked fine. But as soon as you zoomed in on the page, the text grew while the formulas and graphs stayed the same size, because their size was fixed.
I fixed this twice on the same day. First the drawings learned to grow along with the rest of the sheet, and then the sheet took over Ctrl plus mouse wheel zooming itself, so that it would all scale at once. Two days later the sheet window could be resized and its double scrollbar was gone, and at the beginning of February the graphs started opening in a separate window, where you can look at them in a large size.
How the tasks got onto the site
Around the same time the first Matura tasks went into the database, together with 408 images. Each one had a question, answers and a solution, and the formulas were written in a special code from which a program on the page builds fractions and roots that look like the ones in a textbook. It soon turned out that for tasks fetched after the page had already opened, that program did not know it had to look at them again, so instead of a formula the student saw raw code full of backslashes.
By the end of February there were more than four thousand tasks, collected from various sources, and they needed sorting out: assigning them to topics, rating their quality and weeding out the ones where something was missing. I built several AI-based programs for this, each responsible for one step: sorting into topics, cutting out the drawings, quality control or correcting the text. All four thousand tasks got a topic, but that was only the beginning of the clean-up.
A thousand drawings and their many versions
At the beginning of March more than a thousand drawings for tasks went onto the server. Some of them were broken even then, so as a quick fix I hid the ones that would not load, so that students would not be looking at empty frames. It was meant to be a temporary solution, and it stayed for several months.
In June I started cleaning up properly. Out of 1078 old files I kept only 34 that were genuinely correct, but on the same day it turned out the clean-up had gone too far: it had also removed 467 drawings used by tasks that students could see, so they had to be restored. Along the way I switched off 394 multiple-choice tasks in which the drawing or the answers did not match the question. At the end of July the task bank was finished: 3709 tasks were ready to use, and 1642 permanently broken ones went in the bin.
It was a lesson in humility. Any large-scale clean-up can remove something that works, and you only notice when someone opens a task and finds an empty space instead of a drawing.
Answers that looked different
Over the summer, the exam tasks were joined by a pool of tasks built from patterns: a program picks the numbers at random and the result is calculated automatically. The pool grew to 6608 tasks across twenty-one topics, and a second, independent program recalculates every one of them, working from the question alone. Even so, one pattern produced a bug that shows well how treacherous maths can be in the hands of a computer.
In a task about the radius of the circle circumscribed around an equilateral triangle with side a, the correct answer was a√3/3, and one of the wrong ones was a/√3, which the program described as the result of someone who forgot to remove the root from the denominator. Except that it is the same number, just written differently. A student who picked the “wrong” answer was right, and the program would not give them the point. The check did not catch it, because it compared the answers character by character, like ordinary text, and to it four differently written answers looked like four different ones. There were 52 such tasks. Today the check compares values, not notation.
Drawings straight from the whiteboard
Since the end of July, Algebra has had exam papers that solve themselves, step by step. They needed drawings exactly like the ones in the papers from the Polish Central Examination Board (CKE). At the beginning of September I recreated 34 such drawings, but each one made on its own was yet another source of errors, and on top of that it looked different from what the student saw during lessons.
The solution lay in the whiteboard I teach on. It calculates its figures, solids and graphs itself, straight from geometry, instead of using ready-made programs like GeoGebra, so a point on a circle lies on it by definition, not because someone carefully placed it there. At the end of September I used that same mechanism to generate all the drawings for the papers: 560 across 99 papers, since the remaining ones simply have none. I mark right angles on them the way it is done at school, with an arc and a dot in the middle.
On the same day I also compared all the tasks with the original CKE papers in PDF. That turned up thirteen discrepancies in the questions and data, which I corrected and published straight away.

What I take from it
From the whole story of the tasks I drew one conclusion, which only seems obvious after the fact. A drawing, a formula and an answer have to be treated like the rest of the content, which means creating them from a single source and checking them automatically. A hand-made picture looks fine until the first change, while a drawing calculated from geometry is fixed in one place and the fix reaches every paper at once.
The whole series
This is the last part of the series about how Algebra i Spółka came to be:
- The first Algebra: Flask, templates and the PHP I quickly gave up on
- Bookings that disappeared with every deployment
- Algebra from scratch: from Flask templates to React and TypeScript
- A price list in a file, Premium and my first payment gateway
- Tasks, a formula sheet and drawings that would not add up
What the whole thing looks like today, I describe in the post Algebra i Spółka from the inside.

