Distribution System
This application is a simple solution for managing the purchase and shipment of goods. In the demo application, I am only providing an initial version or MVP (Minimum Viable Product), which currently includes features for user data and access level management. This application is divided into two parts, namely the frontend application based on Next.js and the backend application built using Golang.

Frontend
Why Choose Next.js Over React?
Next.js offers several advantages that make it a compelling choice compared to using React.js on its own. Here are some reasons why Next.js stands out:
Integrated Routing System: Next.js comes with a built-in routing system, making it easy to define page routes without the need for additional packages or complex configurations.
Automatic Code Splitting: One of Next.js's key features is its ability to perform automatic code splitting. This allows the application to load only the necessary code for the currently viewed page, reducing page load times and improving overall efficiency.
Support for Static Site Generation (SSG): In addition to Server-Side Rendering (SSR), Next.js also supports Static Site Generation (SSG). This enables you to generate static pages that can be efficiently cached, enhancing the speed and efficiency of your website.
On the frontend application side, some of the technologies I use include:
- React Redux: Redux is one of the popular state management solutions that helps manage application state effectively.
- Redux Toolkit: Redux Toolkit simplifies the setup of multiple Redux providers, making development more efficient.
- Tailwindcss: Tailwind CSS is a utility-first CSS framework that simplifies CSS writing and boosts development productivity.
- Tremor UI: Tremor UI provides a range of basic components for building user interfaces. Additionally, Tremor UI is a UI library that integrates Tailwind CSS for faster and more efficient development.
- Docker: I use Docker for distributing completed applications, ensuring consistent application performance across various environments.
Backend
On the backend side, I chose Go (Golang) as the primary programming language for strong reasons. Go is not only a compiled language but is also renowned for its exceptional performance. I have a preference for compiled languages because they provide me with the ability to safeguard my code. Moreover, Go also simplifies the distribution of applications as it requires fewer additional dependencies.
Comparing the image sizes of the frontend and backend applications, you will notice that the backend application is significantly lighter. This is one of the advantages of compiled languages over interpreted ones.
In the development of this backend application, I rely on several highly useful libraries, including:
- Gin: For routing management, Gin is a powerful library that is also very user-friendly.
- Golang-migrate: I utilize this library to automate the database migration process, which is highly beneficial for database management.
- Viper: This library is used to fetch environment variables, a best practice in application configuration.
- Paseto: Paseto is a library that is comparable to JWT (JSON Web Tokens) but is better known for its higher security levels.
- Sqlc & Pgx: Sqlc is a highly useful tool for converting SQL queries into code that is compatible with Pgx, which is the PostgreSQL database driver for Go.
- Testify: This library simplifies the testing process in application development, allowing us to ensure better software quality.
- Docker: Just as I did with the frontend application, I also use Docker to streamline the distribution and management processes of the application.
With this combination, I can ensure that this backend application is well-built, high-performing, and easy to manage and implement.