{"id":22097228,"url":"https://github.com/luarvic/click2approve","last_synced_at":"2025-08-01T23:09:07.461Z","repository":{"id":219467287,"uuid":"748984749","full_name":"luarvic/click2approve","owner":"luarvic","description":"Free, open-source, cross-platform document approval system with a responsive UI","archived":false,"fork":false,"pushed_at":"2025-04-17T11:55:49.000Z","size":4379,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-18T02:09:33.316Z","etag":null,"topics":["approval-process","approval-workflow","document-management","electronic-document","file-uploader","sign-documents","website"],"latest_commit_sha":null,"homepage":"https://click2approve.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luarvic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-01-27T08:33:08.000Z","updated_at":"2025-04-17T11:55:53.000Z","dependencies_parsed_at":"2024-03-17T16:31:11.412Z","dependency_job_id":"8bd054ab-f817-4689-bcbb-322d71749617","html_url":"https://github.com/luarvic/click2approve","commit_stats":null,"previous_names":["luarvic/file-manager","luarvic/click2approve"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/luarvic/click2approve","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luarvic%2Fclick2approve","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luarvic%2Fclick2approve/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luarvic%2Fclick2approve/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luarvic%2Fclick2approve/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luarvic","download_url":"https://codeload.github.com/luarvic/click2approve/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luarvic%2Fclick2approve/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268310796,"owners_count":24230185,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-01T02:00:08.611Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["approval-process","approval-workflow","document-management","electronic-document","file-uploader","sign-documents","website"],"created_at":"2024-12-01T04:14:32.203Z","updated_at":"2025-08-01T23:09:07.453Z","avatar_url":"https://github.com/luarvic.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Dev build status](https://github.com/luarvic/click2approve/actions/workflows/dev-build.yml/badge.svg)\n![Prod build status](https://github.com/luarvic/click2approve/actions/workflows/prod-build.yml/badge.svg)\n\n# Table of Contents\n\n1. [Click2approve specification.](#click2approve-specification)\n2. [Demo.](#demo)\n3. [How to run locally.](#how-to-run-locally)\n4. [Architecture and design decisions.](#architecture-and-design-decisions)\n\n# Click2approve Specification\n\nClick2approve is a free, open-source, cross-platform document approval system with a responsive user interface that allows you to:\n\n- Upload documents.\n- Send documents for approval specifying a list of approvers' email addresses.\n- Notify the requesting and approving parties via email.\n- Keep track the approval requests.\n\n# Demo\n\nPlease, visit [click2approve.com](https://click2approve.com/) to check how it works.\n\n# How to Run Locally\n\n## Prerequisites\n\n- You have installed the latest version of [Docker Desktop](https://docs.docker.com/get-docker/).\n- You have installed a [Git client](https://git-scm.com/downloads).\n\n## Getting Started\n\n### 1. Clone the Repository\n\nRun in terminal:\n\n```bash\ngit clone git@github.com:luarvic/click2approve.git\n```\n\n### 2. Open `click2approve` Directory\n\nRun in terminal:\n\n```bash\ncd click2approve\n```\n\n### 3. Build and Run Docker Images\n\nRun in terminal:\n\n```bash\ndocker compose up -d\n```\n\nWait until you see:\n\n```\n ✔ api                            Built\n ✔ ui                             Built\n ✔ Network click2approve_default  Created\n ✔ Container db                   Started\n ✔ Container api                  Started\n ✔ Container ui                   Started\n```\n\n### 4. Verify Running Docker Containers\n\nRun in terminal:\n\n```bash\ndocker ps -a\n```\n\nMake sure all of the following containers are up and running:\n\n- `api`.\n- `db`.\n- `ui`.\n\n(Find more details about those containers below in [Architecture and design decisions](#architecture-and-design-decisions).)\n\n### 5. Open the Web Page\n\nIn the web browser open [http://localhost:3333/](http://localhost:3333/).\n\nYou should see a page with `click2approve` title.\n\nWelcome to the `click2approve` service! 🎉🎉🎉\n\n# Architecture and Design Decisions\n\nThe application consists of the following microservices:\n\n- Client-side UI (`React TypeScript v18.2`).\n- Server-side API (`ASP.NET Core v8.0`).\n- Relational database (`MySQL 8.3.0`).\n\nAll microservises are containerized with [Docker](https://docs.docker.com/).\n\n## Client-side UI\n\nIt provides a graphical interface, allowing users to interact with the application via a web browser.\n\nIt is written in [TypeScript](https://www.typescriptlang.org/) and uses:\n\n- [React](https://react.dev/) library;\n- [Material UI](https://mui.com/material-ui/) CSS framework;\n- [MobX](https://mobx.js.org/react-integration.html) state management framework.\n\nThe build transforms the TypeScript code into a JavaScript single-page application (SPA). The `ui` container hosts [Nginx](https://www.nginx.com/) 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.\n\n## Server-side API\n\nIt provides HTTP endpoints that implement business logic.\n\nIt is written in [C#](https://learn.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/) and uses:\n\n- [ASP.NET Core](https://dotnet.microsoft.com/en-us/apps/aspnet) framework.\n- [Entity Framework](https://learn.microsoft.com/en-us/ef/).\n- [ASP.NET Identity](https://learn.microsoft.com/en-us/aspnet/core/security/authentication/identity) framework.\n\nThe build compiles the C# code into a self-hosted web API application that handles HTTP requests coming from the UI.\nThe application interacts with the relational database and the filesystem to manage user data.\n\n## Relational Database\n\nIt provides the relational data storage required for system operation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluarvic%2Fclick2approve","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluarvic%2Fclick2approve","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluarvic%2Fclick2approve/lists"}