- Product overview.
- Demo.
- How to run locally.
- How to host on-premises.
- Architecture and design decisions.
click2approve is a free, open-source, cross-platform document approval system with a responsive user interface that allows you to:
- Upload documents.
- Send documents for approval by specifying a list of approvers' email addresses.
- Notify requesting and approving parties via email.
- Keep track of approval requests.
Please visit click2approve.com to see how it works.
⭐ If you find this project useful, please give the repository a star to support ongoing development and visibility.
- You have installed the latest version of Docker Desktop.
- You have installed a Git client.
Run in a terminal:
git clone git@github.com:luarvic/click2approve.gitRun in a terminal:
cd click2approveRun in a terminal:
docker compose build --no-cache
docker compose up -dWait until you see:
✔ Network click2approve_default Created
✔ Container click2approve-db-1 Created
✔ Container click2approve-api-1 Created
✔ Container click2approve-ui-1 Created
Run in a terminal:
docker ps -aMake sure all of the following containers are up and running:
click2approve-api-1.click2approve-db-1.click2approve-ui-1.
(Find more details about those containers below in Architecture and design decisions.)
In the web browser open http://localhost:3333/.
You should see a page with the click2approve title.
Welcome to the click2approve service! 🎉🎉🎉
The same Docker-based setup can be used as a foundation: run the containers on your own servers, place the UI and API behind your internal load balancer or reverse proxy, and persist the database volume on managed storage. The steps above cover a local run, but the approach is identical for an on-prem deployment with your environment-specific networking, DNS, and TLS configuration.
For production on-prem, consider using a dedicated VM or Kubernetes node pool, configuring externalized secrets for database credentials and email settings, and enabling regular backups for the database volume. These details depend on your infrastructure, so adapt them to your internal standards.
The application consists of the following microservices:
- Client-side UI (
React TypeScript v18.2). - Server-side API (
ASP.NET Core v10.0). - Relational database (
MySQL 8.4.0).
All microservices are containerized with Docker.
It provides a graphical interface, allowing users to interact with the application via a web browser.
It is written in TypeScript and uses:
- React library;
- Material UI CSS framework;
- MobX state management framework.
The build transforms the TypeScript code into a JavaScript single-page application (SPA). The ui container hosts Nginx web server that returns the SPA to the users. The SPA handles HTTP requests coming from the users and interacts with the Server-side API microservice.
It provides HTTP endpoints that implement business logic.
It is written in C# and uses:
- ASP.NET Core framework.
- Entity Framework.
- ASP.NET Identity framework.
The build compiles the C# code into a self-hosted web API application that handles HTTP requests coming from the UI. The application interacts with the relational database and the filesystem to manage user data.
It provides the relational data storage required for system operation.