Elektronisk Egenkontrol / Food safety documentation

My professional journey from 2010 to 2015 was quite a mix. I worked at a company where my days spanned from handling system administration—both hardware and software—to diving deep into software development. You could say I covered all the bases.

In 2013, a particularly interesting task landed on my desk: “We need a food safety documentation program/website.” This project immediately resonated with me. You see, I have a background as a cook, which had to be cut short due to food allergies. This personal history meant I already had a good grasp of food safety, particularly HACCP schemas and how they worked.


The Genesis of a Digital Food Safety Solution

So, alongside a client who specialized in creating those very physical schemas, I embarked on a mission to bring them into the digital realm, with all the results neatly stored in a database. As the sole developer on this, you’d think I’d have had endless, uninterrupted time for it, right? Well, not exactly. I squeezed in work on this project whenever I could.

But I had an ace up my sleeve. Back in 2006-2008, I’d been tinkering with a personal project called TOCMS, or “Tetrahedron Ollin CMS.” This was my vision for an Object-Oriented system—a scaffolding that allowed you to merge or add classes and modules with just a few settings. This forgotten project became the perfect foundation for the new food safety system.


Crafting a Robust Backend and User Experience

For the database, I designed a User table with basic details like UID, name, email, and arrays for roles and company IDs, plus admin status. I also created a table for overall roles, linked to organizational IDs. The core idea was to enable users, especially consultants, to be members of multiple organizations, allowing them to manage different entities, create schemas, and even set up new companies or sub-departments as an admin. This was far more complex than a simple username-password verification system.

To keep everything compartmentalized and secure, I created separate databases with unique prefixes for each company. This meant users could only access the data assigned to their specific company once they logged in. It also allowed admins and supervisors to easily “hop” between company or department views from a dropdown list. This was crucial for supervisors overseeing multiple departments, or for users who needed access to a couple of departments but not a third.


The “Genius” of Dynamic Schemas

The most intricate part of the system was enabling dynamic schemas. One schema could encompass multiple checkpoints, forming a cohesive workflow. For instance, a “washing the floor” task could break down into:

  • Test water temperature
  • Measure cleaning agent amount
  • Ensure the floor mop is freshly cleaned
  • Test water temperature after 10 min
  • Evaluate if water needs changing

These schemas were built either by a consultant or the company’s own admin. The “genius” aspect was that the content in the database was simply objects that could be transformed into forms for completion, with modifiable looks and rules. Every time a form was filled out, the object was stored alongside the results. This ensured that even if the schema object was later updated, all the old versions remained valid for historical testing and auditing.


Personalization and Oversight

The platform also offered customization, like logo uploading, so it truly felt like an internal company system. Upon logging in, users were greeted with a calendar view displaying upcoming, ongoing, and failed results. This personalized view showed users their assigned schemas for the week, while admins had a comprehensive view to see who had filed what and if anything had been missed.

There are probably many more features I built into that system, but given it was 11-12 years ago and I wrote it all myself, some details have naturally slipped my mind. Unfortunately, the project eventually faded away. I believe it was perhaps ahead of its time, and frankly, it seemed some people were more interested in quick profits than in truly understanding and developing such an innovative solution. It’s a shame when good ideas go to waste.