# π Ackify > **Proof of Read. Compliance made simple.** Secure document reading validation with cryptographic signatures and irrefutable proof. [](https://github.com/btouchard/ackify-ce/actions/workflows/ci.yml) [](https://codecov.io/gh/btouchard/ackify-ce) [](https://en.wikipedia.org/wiki/EdDSA) [](https://golang.org/) [](LICENSE) > π«π· [Version franΓ§aise disponible ici](README_FR.md) **Website**: https://www.ackify.eu --- ## π― Why Ackify? Prove that collaborators have read and acknowledged important documents with **Ed25519 cryptographic signatures**. **Use Cases**: - Security policy validation - Training attestations - GDPR acknowledgment - Contractual agreements - Compliance procedures **Key Features**: - β Ed25519 cryptographic signatures - β **Flexible authentication**: OAuth2 (Google, GitHub, GitLab, custom) or MagicLink (passwordless email) - β One signature per user/document (database enforced) - β Immutable audit trail - β Expected signers tracking with email reminders - β Document checksum verification (SHA-256/512, MD5) - β Optional document storage (local filesystem or S3-compatible) - β Public embeddable widgets (Notion, Outline, etc.) - β Admin dashboard (Vue.js 3 + dark mode) - β Multilingual (fr, en, es, de, it) --- ## β‘ Quick Start ### Prerequisites - Docker & Docker Compose - **At least ONE authentication method**: - OAuth2 credentials (Google, GitHub, or GitLab), OR - SMTP server for MagicLink (passwordless email authentication) ### Installation #### Option 1: Automated Installation Script (Recommended) ```bash # Download and run installation script bash <(curl -fsSL https://raw.githubusercontent.com/btouchard/ackify-ce/main/install/install.sh) # Navigate to installation directory cd ackify-ce # Edit configuration with your OAuth2 credentials nano .env # Start services docker compose up -d # Access web interface open http://localhost:8080 ``` **What the script does:** - Downloads `compose.yml` and `.env.example` - Generates secure secrets automatically: - `ACKIFY_OAUTH_COOKIE_SECRET` (AES-256 session encryption) - `POSTGRES_PASSWORD` (database password) - Creates ready-to-use `.env` file - You only need to add your OAuth2 credentials #### Option 2: Manual Installation ```bash # Clone repository git clone https://github.com/btouchard/ackify-ce.git cd ackify-ce # Configure cp .env.example .env nano .env # Edit with your OAuth2 credentials and generate secrets # Start services docker compose up -d # Verify curl http://localhost:8080/api/v1/health # Expected: {"status":"healthy","database":"connected"} # Access web interface open http://localhost:8080 ``` ### Required Environment Variables ```bash # Application APP_DNS=sign.your-domain.com ACKIFY_BASE_URL=https://sign.your-domain.com ACKIFY_ORGANISATION="Your Organization" # Database POSTGRES_USER=ackifyr POSTGRES_PASSWORD=your_secure_password POSTGRES_DB=ackify # Security (generate with: openssl rand -base64 32) ACKIFY_OAUTH_COOKIE_SECRET=your_base64_secret # ============================================================================ # Authentication (choose AT LEAST ONE method) # ============================================================================ # Option 1: OAuth2 (Google, GitHub, GitLab, custom) ACKIFY_OAUTH_PROVIDER=google ACKIFY_OAUTH_CLIENT_ID=your_client_id ACKIFY_OAUTH_CLIENT_SECRET=your_client_secret # Option 2: MagicLink (passwordless email authentication) # ACKIFY_MAIL_HOST=smtp.example.com # ACKIFY_MAIL_PORT=587 # ACKIFY_MAIL_USERNAME=your_smtp_username # ACKIFY_MAIL_PASSWORD=your_smtp_password # ACKIFY_MAIL_FROM=noreply@example.com ``` **Auto-detection**: - OAuth is enabled automatically if `ACKIFY_OAUTH_CLIENT_ID` and `ACKIFY_OAUTH_CLIENT_SECRET` are set - MagicLink is enabled automatically if `ACKIFY_MAIL_HOST` is configured - You can use **both methods simultaneously** for maximum flexibility See [docs/en/configuration.md](docs/en/configuration.md) for all options. --- ## πΈ Screenshots
Home![]() |
Document Upload![]() |
Add Readers![]() |
Integrated Reader![]() |
Reading Confirmed![]() |
My Confirmations![]() |
My Documents![]() |
Admin Settings![]() |