• .NET
  • React
  • The application aimed at providing efficient and professional solutions for transportation management


    Profio Application – 🚛 A Modern Logistics Management System ✈️

    Profio Application is a monorepo project built with Nx technology. It is a set of extensible dev tools for monorepos, which helps you develop like Google, Facebook, and Microsoft.

    Table of Contents

    Overview

    Profio – the symbol of professionalism in transportation management. Whether you need a solution for managing a fleet of vehicles or ships, Profio provides a powerful tool, optimizing and simplifying the process, ensuring every movement is quick, safe, and efficient.

    This is a product of the CJ Code your Future 2023 contest. The purpose of this project is to help CJ Logistics improve the quality of transportation management. All components in the project are free. This project is not for commercial purposes 👍

    We are a group of students from Hutech University. We are very happy to be able to participate in this contest. We hope that our project will be useful to CJ Logistics and CJ Olive Networks Vina in the future 🤝

    📑 Read documentation for more information about the project.

    If you want to find out more about the contest, please visit the CJ Code Your Future from the Hutech IT Fanpage.

    Tentative technologies

    Building blocks

    Building Blocks

    Name Usecase Technology
    CMS

    It will show the information of orders, vehicles, drivers, and other information related to the transportation process. It will also provide a dashboard for managers to monitor the transportation process.

    Next.js

    Customer Website

    It will provide pages for customers look up the information of orders. It will also provide a table for customers to see the history of orders.

    Blazor Server

    Load Balancer

    It will distribute the load to the available servers. It will also provide a dashboard for managers to monitor the load of the servers.

    YARP

    Driver App

    It provides a dashboard for drivers to monitor the transportation process. It will send the location of the vehicle to the server.

    Flutter

    MQTT Broker

    It will receive the location of the vehicle from the driver app and send it to the server.

    EMQX

    Identity Server

    It will manage the users of the application. It will also provide a dashboard for managers to manage the users. We have set up the SSO for the application.

    Keycloak

    API Server

    It will receive the location of the vehicle from the MQTT Broker and send it to the database. It will also send the information of orders, vehicles, drivers, and other information related to the transportation process to the client.

    ASP.NET Core

    Database

    It will store the information of orders, vehicles, drivers, and other information related to the transportation process. We use Redis to cache the data.

    PostgreSQL, Redis

    OpenTelemetry Collector

    It will receive the telemetry data from the OpenTelemetry. It will send the telemetry data to the OpenTelemetry Processor.

    OpenTelemetry Collector

    Health Check

    It will check the health of the servers. It will send the health status of the servers to the Load Balancer.

    ASP.NET Core

    Exporter

    It will export the telemetry data to the OpenTelemetry Collector.

    Grafana, Prometheus, Jaeger, Seq, Zipkin

    Screenshots

    Home page

    Homepage

    Lookup page

    Lookup

    Contact page

    Contact

    Login page

    Login

    Note If you want to see more, please visit the Getting Started section below.

    Getting Started

    💻 Infrastructure

    • Nx – Nx is a set of extensible dev tools for monorepos.
    • node.js – Node. js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.
    • npm – npm is the package manager for the Node JavaScript platform.
    • Flutter – Flutter is Google’s toolkit for creating sleek apps across mobile, web, and desktop from a single codebase.
    • Docker (Kubernetes Enabled) / Podman – Docker is an open platform for app development and management. Podman is a daemonless container engine for OCI Containers on Linux.
    • Kubernetes / AKS / Nomad – The container orchestration platform for Kubernetes, AKS, and Nomad.
    • Helm – Helm is the best way to find, share, and use software built for Kubernetes.
    • Tye – Tye is a tool that makes developing, testing, and deploying applications easier.
    • WSL 2 – Ubuntu OS – WSL 2 enables running Linux ELF64 binaries on Windows.
    • Visual Studio Code – Visual Studio Code is a code editor for modern web and cloud app development.
    • JetBrains Rider / Visual Studio 2022 – JetBrains Rider is a cross-platform .NET IDE built on IntelliJ and ReSharper. Visual Studio is Microsoft’s IDE.
    • .NET Core 7 – .NET Framework and .NET Core, including ASP.NET and ASP.NET Core.
    • Python – Python is a programming language that lets you work quickly and integrate systems more effectively.

    📦 Services

    • Render – Render is a unified platform for apps and websites with free SSL, global CDN, private networks, and Git auto-deploys.
    • Redis Labs – Redis Labs is the home of Redis, the world’s most popular in-memory database.
    • Azure – Azure is an ever-expanding set of cloud computing services to help your organization meet its business challenges.
    • CloudAMQP – CloudAMQP automates RabbitMQ setup, running, and scaling on all major platforms.
    • EMQX – EMQ X Broker is an open-source, scalable MQTT messaging broker for IoT, M2M, and mobile apps, handling millions of concurrent clients.
    • Google Cloud Platform – Google Cloud Platform (GCP) is a suite of cloud services running on the same infrastructure as Google’s user products like Search, Gmail, and YouTube.
    • Supabase – Supabase is an open-source alternative to Firebase that adds real-time and RESTful APIs to your PostgreSQL database without any coding.
    • Twilio – Twilio is a cloud communications platform as a service company based in San Francisco, California.

    🛠️ Setup

    First, clone the repository to your local machine:

    git clone https://github.com/HutechCJ/ProfioApp.git

    Next, navigate to the root directory of the project and install the dependencies:

    npm install --force

    To learn more about the project, please visit the Wiki

    🚀 Running the application

    For the CMS, navigate to the apps/cms directory and run the following command:

    npx nx serve cms --verbose

    It will open the CMS in your browser at http://localhost:4200/.

    For the API, navigate to the apps/Profio.Api directory and run the following command:

    npx nx serve Profio.Api --verbose

    It will open the API in your browser at http://localhost:9023/.

    For the Proxy, navigate to the apps/Profio.Proxy directory and run the following command:

    npx nx serve Profio.Proxy --verbose

    It will open the Proxy in your browser at http://localhost:7221/.

    For the Web App, navigate to the apps/Profio.Website directory and run the following command:

    npx nx serve Profio.Website --verbose

    It will open the Web App in your browser at http://localhost:5272/.

    For the documentation, navigate to the apps/docs directory and run the following command:

    npx nx serve docs --verbose

    It will open the documentation in your browser at http://localhost:3000/.

    For the Driver App, navigate to the apps/profio-app directory and run the following command:

    npx nx serve profio-app --verbose

    For running all applications, navigate to the root directory of the project and run the following command:

    npx nx run-many --target=serve --all

    For running by tye, navigate to the root directory of the project and run the following command:

    tye run --dashboard

    Warning All connections strings will be unavailable when this repository is public.

    🐳 Running services with Container

    For running all external services, navigate to the root directory of the project and run the following command:

    podman-compose|docker-compose up -d

    For running api & proxy, navigate to the root directory of the project and run the following command:

    # Pull the latest images
    docker pull ghcr.io/hutechcj/profio-api:latest
    docker pull ghcr.io/hutechcj/profio-proxy:latest
    docker pull ghcr.io/hutechcj/profio-cms:latest
    docker pull ghcr.io/hutechcj/profio-webiste:latest
    
    # Run the containers
    docker run -d -p 5023:80 ghcr.io/hutechcj/profio-api:latest
    docker run -d -p 7221:80 ghcr.io/hutechcj/profio-proxy:latest
    docker run -d -p 4200:80 ghcr.io/hutechcj/profio-cms:latest
    docker run -d -p 5272:80 ghcr.io/hutechcj/profio-webiste:latest

    API development

    We use Clean Architecture for the API development. You can read more about Clean Architecture here. The CQRS and Mediator patterns are also used in the API development. Besides, we also use some design patterns such as: Repository Pattern, Unit of Work, Specification Pattern, Inversion of Control / Dependency injection, Options Pattern.

    Clean Architecture

    Clean Architecture

    CQRS

    CQRS with Mediator

    Open API

    Open API

    Note We have implemented Redoc to generate the API documentation.

    Dependency Graph

    You can see the dependency graph of the project by running the following command:

    npx nx dep-graph

    Here is the dependency graph of the project, generated by Nx:

    Dependency Graph

    CI/CD

    Dependency Graph

    External services

    📦 Container Management

    We used the Portainer service to manage the containers. Portainer is an open-source lightweight management UI which allows you to easily manage your Docker environments.

    Dependency Graph

    🧑‍⚕️ Health Check

    For the API health check, We have used the ASP.NET Core Health Checks library to monitor the health of the application. The health check endpoint is exposed at /hc or /hc-ui and can be accessed via HTTP GET.

    Dependency Graph

    📊 Monitoring

    For the monitoring service, We have used the Prometheus and Grafana services to collect and analyze metrics.

    Prometheus

    Grafana

    📈 Tracing

    For the tracing service, We have used the Jaeger service to collect and analyze traces.

    Jaeger

    We also set up the Zipkin service to collect and analyze traces.

    Zipkin

    📝 Logging

    We set up the seq service to collect and analyze logs.

    seq

    📦 Database Management

    For the database management service, We have used the PgAdmin service to manage the PostgreSQL database.

    pg4admin

    🔒 Identity Server

    For the identity server, We have used the Keycloak service to manage the users. With SSO, you can log in to multiple applications with a single account. You can also use Keycloak to manage the users of your applications.

    keycloak

    Our Presentation

    We have presented our project at the school-level finals and the city-level finals of the Code Your Future competition. We also presented our project at the final round of the Code Your Future competition.

    Contributing

    Wanna be here? Contribute.

    • Fork this repository.
    • Create your new branch with your feature: git checkout -b my-feature.
    • Commit your changes: git commit -am 'feat: My new feature'.
    • Push to the branch: git push origin my-feature.
    • Submit a pull request 👌.

    Contributors

    Thanks goes to these wonderful people (emoji key)


    Xuan Nhan

    💻 📖 🚇 🔧 🧑‍🏫


    Hong Thai

    💻 🚇 📆 🚧 👀


    Truong Nhon

    💻 🤔 🔣 💼


    Tien Dat

    💻 🎨 🖋 🚧


    Thuc Van

    💻 🎨 🖋 📢

    Support and Organization

    CJ CJ

    License

    This project is made available under the MIT license. See the LICENSE file for details

    Project Reference

    Github: https://github.com/HutechCJ/ProfioApp

    Description: https://hutechcj.github.io/ProfioApp/

    Để lại một bình luận

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

    10 mins