Operations Management System

A web application for managing audits, training and documentation.

Hero

Integrated workflow designed to make audits a breeze

OMS can integrate with other tools to make your audit process more efficient. Import and exporting data is just a click away.

74K
Work hours saved
224%
Efficiency increased
$350K
Money saved

The Tech Stack Used

NextJs

file_type_typescript_official

TypeScript

PostgreSQL

Django

file_type_tailwind

TailwindCSS

Cypress

Packed with features

The Best Features

A brief overview of the features and how they will benefit the user.

Features 01
Audits, Training and Documentation

Create, Track, and Train.

Audits are used to check if the company is following the correct procedures.

  • Create, read, update and delete audits.
  • Filter audits by status, date and type.
  • Sort audits by status, date and type.
Features 01
Beautiful Statistics

Love Stats? We do too.

The dashboard displays the status of the audits, the time spent training and the payscales.

  • Filter audits by status, date and type.
  • Sort audits by status, date and type.
  • Filter payscales by date.
Features 01
It's 2023

Responsive Design, Dark/Light Mode

The application is responsive and has a dark/light mode.

  • Responsive design for mobile, tablet and desktop.
  • Supports multiple languages.
  • Simple and clean design.

As with everything, there are always new things to learn.

Here are some of the things I've learned while working on this project.

REST API

DRF provide me with an entry point to learn how to create a REST API. From serialization and authentication to pagination and filtering.

SPAs

React(NextJs) taught me how to constantly reuse code, DRY, DRY. I learned how to use them and how to create a frontend for a REST API.

E2E Testing

End to end testing was a new concept for me. I learned how to use Cypress to test interaction, components, intercept request and a lot more.

TailwindCss

I learned how to implement responsiveness, dark/light mode. The beauty of TailwindCss is how fast can you create a beautiful design.

Data Security

From AES/CBC encryption and Argon2 hashing to implementing encryption at rest, this project taught me a lot about data security.

Challenges

No project is without its challenges. Here are some of the challenges we faced.

Encryption at rest.

Since the data is sensitive, I had to choose an encryption algorithm that is secure and fast. We implemented AES CBC encryption to encrypt the data before it is sent to the database. For passwords I decided to go with argon2, which is a password hashing function that is designed to be slow to prevent brute force attacks.

From Django to DRF/NextJs

This was a big challenge since we had to learn a new framework. I started with React and then moved to NextJs (loved NextJs). We had to learn how to create a REST API, how to serialize data, authenticate users, JWT, CORS policy, Swagger for documentation, and best practices for REST API.

Performance improvements

Performance was an issue since thousands of records were being fetched from the database. Pagination, filtering and caching were implemented to improve performance. Endpoints were also optimized to reduce the data returned from the database. There was no need to pull all the data for no reason.