Project Design + build Rebuild

The system I built, then rebuilt while it kept running

Nitra Academy is a recognised examination centre: it trains construction workers in safety, equipment and fire prevention, and the certificates it issues get checked on site and in audits. I built the platform in 2016 in Zoho Creator, and it has run every working day since. Ten years of additions had left it crowded, so in 2026 I rebuilt it from the inside: same platform, same data, no day offline.

My role
Design Engineerbuilt and then modernised
When
2016 to nowrebuilt in place in 2026
With
NitraValderas
Outcome
Modernised without going offlineone certificate model, self-service, public verification

What the system has to do

Nitra Academy is not just a training company, it is a recognised examination centre. That distinction is the whole job. Diplomas get registered in Belgium's Central Diploma Register. VCA safety certificates stay valid for ten years and have to stay traceable. The companies that send their people here face annual audits, where an incomplete record can cost them their own certification.

So the system carries the full chain: a course catalogue, a company booking a session, who attended, who passed, the certificate that follows, and the lookup years later when someone needs proof. Four groups touch the same data: Nitra's own team, the contact people at client companies, the instructors, and the participants who end up holding the certificate.

The company overview in the portal: employees, certificates expiring soon, and upcoming sessions. The team list in the portal, with the button to add an employee and a confirmation that one was added.
The client portal. Left, a company's overview: who holds what, and what runs out soon. Right, the team list, where they add their own people.

Version one, and why low-code

Before the system, all of it lived in spreadsheets and manual steps. It worked, until the academy grew past forty courses and the admin started eating the time that should have gone into teaching.

I chose Zoho Creator because of the budget. Nitra is an SME, and it already ran on Zoho One: Creator came with that plan, hosting included, so the system added nothing to the monthly bill. It gave us a relational data model, workflow automation and a portal for external users. The price is the interface. Low-code limits what a screen can be, so I designed within those limits instead of fighting them, and what came out is genuinely useful to Nitra and to the companies that send their people there.

A tradeoff I made early: certificates are records of their own, not fields on a booking. It cost a little more up front, and the expiry tracking, the company overview and the public lookup all fell out of that one decision for free.

What ten years does to a system

A system in daily use collects history. Features get added under deadline, a payment provider gets swapped, a flow gets replaced but never removed. By 2026 the app held dead code, the remains of an old payment integration, an enrolment flow nobody used, and four separate forms doing the same job: issuing a certificate. Four forms means four places to change anything, and four chances to miss one.

The data had drifted too. Fields that filters depended on were empty on most records, so the overviews quietly told half-truths. Report criteria and permissions were wrong in places. None of this was visible from the outside: the app looked like it worked, and that is exactly why it was worth auditing.

The decision: not a big bang

The plan on the table was a rebuild from scratch, off low-code, in code of their own. I scoped it and started it, and the migration is where it broke down: a clean re-import of the live data could not be made to hold, and the cost of forcing it was going to be paid by a system people use every day, for a gain Nitra did not need yet.

So I changed course, which was the harder call and the right one. I rebuilt the app from the inside instead: the same platform, the same database, refactored in phases, with the users never asked to stop working. Choosing not to rebuild is the same skill as choosing to.

How it ran, in four phases

  • Clear and secure. Dead code and the old payment integration out, permissions and roles corrected, so that everything after this stood on a floor I trusted.
  • One data model. The four certificate forms became one form with a type field, and every existing certificate moved across to it.
  • One place for the logic. Functions regrouped into namespaces that say what they are for, with the certificate logic living in exactly one of them. Companies can now also record certificates their people earned elsewhere, so a team overview is the whole truth.
  • New capability. A certificate template that adapts to the type of training, a ZIP export, portal access that syncs itself, renewal detection, and public verification.
Before and after: five problems in the old app, each with what replaced it.
Before and after, from the Dutch original. Four separate certificate forms became one model with a type. Dead code and an old payment integration made way for fixed modules. Certificates nobody could check became publicly verifiable by code and QR. Portal access, once manual and forgotten, now follows the role. Mixed English terms became one Dutch vocabulary and one style.

Each change was built in a development environment, published to a staging environment, and tested there with a demo account per profile, so every role was checked from the seat of the person who actually uses it. Nitra decided what went to production, and every deletion and migration had a backup behind it.

Three steps, development, stage and production, which every release went through.
Every change took the same road, from a small fix to a new phase: built in development, tested on stage as every role with demo accounts, and published to production only after review and approval.

What each group got

Four user types, each on a card with their goal and what the rebuild gave them.
Four users, each with their own goal: Nitra's admin, the contact person at a client company, the instructor, and the participant. Each card lists what the rebuild gave them.
  • Nitra's team plans sessions with a start time, registers attendance and results, and issues certificates from one screen instead of four. Admin pages carry the numbers that used to need a manual count.
  • Client companies see their whole team at a glance: who holds what, what expires when, which sessions are coming. They add their own employees, keep their own company details current, and record outside certificates themselves.
  • Instructors get a simple inbox for attendance and results, and a mail a week before they teach with the session details and the participant list. If an outside instructor has no access to the course material, Nitra gets an automatic prompt to send it.
  • Participants get a PDF certificate with a QR code. Anyone can scan it and verify it on the Nitra Academy site, against a signed code that cannot be invented. On a construction site, a certificate that proves itself is worth more than one that asks to be believed.
Every certificate of the team, with filters by type, the most urgent ones on top. A planned session with the automatic reminder mail sent seven days ahead.
Left, every certificate in the team, the most urgent first. Right, a planned session, and the reminder mail that goes out by itself seven days ahead.
A certificate with a QR code next to a phone showing a valid verification result.
Every certificate can be checked: a code issued with it, a QR code on the PDF, and a verification page anyone can open.

A fixed look, and a fixed vocabulary

The last pass was visual. The app now runs on a small design system: one accent colour, a calm surface that keeps attention on the data, and a fixed vocabulary, so the same thing carries the same name on every screen and in every mail. The documentation went with it: a changelog, a navigation map per user type, and the design system itself, so whoever works on this next does not have to guess.

The short promo I made for Nitra to introduce the portal to their client companies. In Dutch, like the product.

How this was built, honestly

The pace of this rebuild came from building AI-assisted, and I would rather say that than let the speed look like magic. What AI did not decide: the phasing, what to delete, what to test, which roles to check from which seat, and what was allowed to go to production. That stayed with me and with Nitra. The judgement is the work; the typing is the part that got faster.

“You can always count on Inti as an enthusiastic entrepreneur, brimming with innovative ideas. I can highly recommend him.”
Kris Wauters, CEO, Nitra

What I take from it

The instinct, when a system has grown crooked, is to start over. Starting over is also the option that puts everything you already learned in the bin and asks the client to wait. This one did not need that. It needed an audit, a floor you can trust, one model instead of four, and then the new capability on top of it.

Ten years in, the platform does more than it did, is simpler inside than it was, and it never stopped working for a day while that happened. That is the version of “design and build” I am proudest of.

Got something to build?

This is the kind of thing I design and build end to end, at a fixed price.

Projects

Next case

Payflip

12 to 15 hours of supported work, down to around 2 →