Hiring platform
A marketplace where hiring and freelance work run on the same four steps.
Next.js · React · TypeScript · PostgreSQL · Prisma · Neon
Read the full storyEveryone sits the same paper, under the same clock
An exam platform the institute runs itself, from question bank to results.
Two years after I delivered their administration system, the same technical institute came back with a new request: examine the final-year students across several modules, mark every paper, and rank the students for real prizes. On paper that is slow to run, slower to mark, and the ranking is open to challenge.
A ranking that hands out prizes only holds if every student sat the same exam under the same conditions. That is the hard part. A clock running on the student's own laptop, a paper that can be reopened, a question edited after marking that moves an old mark: any one of those is enough to make the whole ranking arguable.
I trusted nothing the student's hand can reach. The server fixes the deadline the moment an attempt starts, the countdown on screen is only a display of it, and every save is checked on the server before it is accepted. Answers are saved as they are written, so a laptop that dies mid-paper costs its owner the walk back to the invigilator, not the work.
Each paper keeps its own copy of the questions and the marking keys exactly as they were handed to the student. Correcting a question next term cannot move a mark given this term. Even the order of questions and options is generated from a stored seed, so the exact paper one student saw can be rebuilt months later if there is an appeal.
The other half of the job was making myself unnecessary. Programmes, levels, modules, cohorts, question banks and grade scales are all created by the staff, on their own screens. That is why the system kept growing after I handed it over.
The deadline is computed and stored on the server the moment the attempt starts, and every save is measured against it. A machine an hour slow, by accident or on purpose, buys not one minute.
Every attempt keeps its own copy of the questions and marking keys as the student saw them. Editing the question bank later touches no old mark, and the exact paper can be rebuilt for any appeal.
Multiple choice, true or false, numbers with a tolerance, short answers with accepted spellings, blanks each carrying its own weight, matching, ordering, and essays that go to a human marker. Partial credit where partial credit means something.
Who has started, who is close to their deadline, who has stopped answering: all in front of the invigilator while the sitting runs. Extra time is granted or an attempt voided mid-exam, and every action is recorded with its author and its reason.
Out of twenty with a mention, a letter, a percentage, or pass and fail. The grade scale is a table the staff edit, and the system refuses a table with a gap or an overlap in it.
After marking, every question gets a difficulty figure and a measure of how well it told the strong students apart, and each wrong option is analysed for whether it fooled anyone. A question the best students all missed usually has the wrong key.
On the server. The countdown in the browser is only a display.
A machine in an exam hall can be an hour slow, by accident or on purpose. If the browser owns the clock, the fastest route to extra time is changing the time. The server fixes the deadline once and checks every save against it, so everyone gets the same answer to how much is left.
On a poor connection the countdown can lag a second or two, and a student who loses their session loses that time. It is the same rule as a paper exam, and it still has to be explained on the day.
One attempt, and a handed-in paper does not reopen.
The ranking hands out real prizes. A second attempt is a different exam, so the moment one student gets one, the ranking is comparing two different things. Every other rule was open to discussion. This one was the product.
A real accident, a power cut or a crashed browser, cannot be fixed by quietly starting again. Someone has to void the attempt on the record, with a written reason. That is slower, and on the day nobody likes it.
The institute. Programmes, levels, cohorts and questions are all in its staff's hands.
A system where every change is a phone call to the developer stops being used the week the developer is busy. Letting the staff build their own structure cost far more to build, and it is the only version of this that outlives me.
Far more to build, and more ways to go wrong, because staff can now create a structure that makes no sense. The other road had fewer sharp edges, and it would have needed me forever.
Nothing. Editing a question that has been sat creates a new version of it, and the old one stays exactly as the papers were marked against it.
Fixing a question this term must not move a mark given last term. Without that, editing the question bank becomes a silent rewriting of history, and the first to notice is a student whose result changed on its own.
One question exists in several versions in the database. That costs storage, and asking how a question performed becomes a question about versions.
They had worked with me before, so we started from the exam, not from a brief: which modules, how many students, what the marks decide. That the ranking carried prizes came out early, and it became the rule every later rule was measured against.
I drew the system around two moments that have to hold: the moment a paper reaches a student, and the moment a mark is given. The clock with the server, the paper keeping its own copy, and everything else arranged behind those two.
I built it in the order the institute would use it. The question bank first, so the staff could start writing while the exam screen was still being built, and one module went the whole way through before the rest were added.
The exams ran for real, and the system still runs. What a first real sitting exposes is mostly not bugs. It is the settings nobody can guess in advance, such as how much a student may see once results are out.
Delivered in 2025 and still in use, and the institute has added modules of its own since. That is the part that matters: nobody had to ask me first. I then took the same system further and generalised it into a platform where any institute or university opens its own account and runs its programmes, cohorts, question banks and exams in full, each institution sealed off from every other.
Revenue and growth belong to the client. I do not publish numbers I did not measure myself.
A marketplace where hiring and freelance work run on the same four steps.
Next.js · React · TypeScript · PostgreSQL · Prisma · Neon
Read the full storyBooking for beauty centres: WhatsApp at the front, a full system behind it.
Next.js · TypeScript · Prisma · Neon · Better Auth · WhatsApp Business API
Read the full storyAn idea, no technical co-founder, no obvious next step. That is the normal starting position.
Tell me about your idea