You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
docuseal/README.md

179 lines
8.0 KiB

# DocuSeal like-a-Pro (Community Edition)
> Fork of [DocuSeal](https://github.com/docusealco/docuseal) with select Pro features "unlocked" (read: vibe-coded) as open source.
This fork adds features that are not part of the opensource version of DocuSeal, making them available for self-hosted deployments under the same AGPL-3.0 license.
Disclaimer:
I never had any access to the Pro Version and I have no idea how DocuSeal LLC implemented these features. I don't even think that "white-room copy" would be the right description here.
I did not review, copy, or use any copyright-protected source code from DocuSeal LLC. The changes in this repo are "designed" based on the official API documentation and feature spotlights on the website or what I thought these features should look like.
The plan of this repo is not to challenge Docuseal's position; I just needed some features that I thought were simple enough to vibe code and play around with. I would not recommend using this fork for a production environment, and I can't guarantee maintenance at all.
If you need a professional, reliable solution, stick with the upstream project or buy a subscription with Docuseal!
Support companies that are providing open-source solutions!
## vibe-coded "Pro" Features
| Feature | Status | Description |
|---------|--------|-------------|
| Company logo / white-label | Done | Upload your logo in Settings > Personalization. Displayed in signing forms and emails. |
| Automated reminders | Done | Scheduled follow-up emails with customizable templates, reminder queue visibility, and skip controls. |
| Template creation via API | Done | `POST /api/templates/pdf` and `PUT /api/templates/:id/documents` — create and manage templates programmatically with field coordinates or embedded text tags. |
| Professional email design | Done | Table-based responsive email layout with company branding, styled CTA buttons, and proper footer. |
| Teams & user roles | Done | Multi-team support with admin/editor roles. Editors see only their team's documents. Admins can move folders between teams. |
See [`docs/API.md`](docs/API.md) for full API reference on the new endpoints.
## Teams & Roles
This fork implements team-based access control with two roles:
| Role | Access |
|------|--------|
| **Admin** | Full access to all teams, users, settings, and resources in the account |
| **Editor** | Full access to templates, submissions, and documents within their team only. Can manage personalization, API keys, and webhooks. Cannot manage users, teams, or account settings. |
**Key features:**
- Create multiple teams per account (Settings > Teams)
- Assign users to teams with role selection
- Editors are scoped to their team — they only see templates, submissions, and folders belonging to their team
- Admins can move entire folders (with all templates and submissions) to another team via the folder edit modal
- API tokens respect the user's role and team membership
- Migrations handle both greenfield installs and existing deployments (auto-creates a "Default" team and backfills)
## Automated Reminders
Reminder emails are sent to pending signers on a configurable schedule.
**Configuration:**
- Set reminder interval (e.g., every 2 days) in Settings > Notifications
- Customize reminder email subject and body at account level (Settings > Personalization) or per-template
- Supports the same template variables as invitation emails (submitter name, template name, link, etc.)
**Visibility & Controls:**
- Submission page shows the next scheduled reminder time per submitter (with timezone tooltip)
- Settings > Notifications includes a pending reminders queue table showing all upcoming reminders
- Skip button lets you advance past a pending reminder without sending it (fires a `skip_reminder_email` event)
**Reliability:**
- Deduplication guard prevents the same reminder from being sent twice within 1 minute
- Job scheduling handles container restarts gracefully (clears stale scheduled jobs before re-registering)
## Paperless-ngx Integration
Automatically upload completed, fully-signed documents to a [paperless-ngx](https://docs.paperless-ngx.com/) instance for archival and full-text search.
**How it works:**
- When all parties have signed a submission, the combined result PDF and audit trail are uploaded to paperless-ngx via its REST API.
- If the combined PDF feature is not enabled, individual per-submitter result PDFs are uploaded instead.
- Documents are titled `"Template Name - Signer 1, Signer 2"` with the signing completion date.
- Uploads run as a background job with exponential retry (up to 10 attempts) — they never block the signing flow.
**Configuration (env vars only — no GUI):**
| Variable | Description |
|----------|-------------|
| `PAPERLESS_NGX_URL` | Base URL of your paperless-ngx instance (e.g., `http://paperless:8000`) |
| `PAPERLESS_NGX_TOKEN` | API token for authentication ([how to get one](https://docs.paperless-ngx.com/api/#authorization)) |
The feature is inactive unless both variables are set.
## What's NOT included
These Pro features remain unavailable in this fork (they require significant UI/infrastructure work):
- SMS invitation and verification
- Conditional fields and formulas
- Bulk send with CSV/XLSX import
- SSO / SAML
- Template creation with HTML or DOCX API
- Embedded form builder components
## Deploy
Pre-built images are published to GitHub Container Registry on every release tag.
```
ghcr.io/s256/docuseal-with-some-pro-features:latest
ghcr.io/s256/docuseal-with-some-pro-features:2.5.3-fork.2
```
Images are signed with [cosign](https://github.com/sigstore/cosign) and include an SBOM and build provenance attestation.
#### Docker Compose (recommended)
```sh
curl -O https://raw.githubusercontent.com/s256/docuseal-with-some-pro-features/master/docker-compose.yml
docker compose up
```
This starts the app with PostgreSQL. Available at `http://localhost:3000`.
Data is persisted in `./docuseal` (uploads, active storage) and `./pg_data` (database).
#### With SSL (reverse proxy)
Uncomment the Caddy service in `docker-compose.yml` and set your domain:
```sh
HOST=your-domain.com docker compose up
```
Caddy auto-provisions TLS certificates via Let's Encrypt.
#### Docker (standalone)
```sh
docker run --name docuseal \
-p 3000:3000 \
-v ./docuseal:/data/docuseal \
-e DATABASE_URL=postgresql://user:pass@host:5432/docuseal \
ghcr.io/s256/docuseal-with-some-pro-features:latest
```
Without `DATABASE_URL`, the app falls back to SQLite (stored in `/data/docuseal`).
#### Build from source
```sh
git clone https://github.com/s256/docuseal-with-some-pro-features.git
cd docuseal-with-some-pro-features
docker build -t docuseal .
docker compose up # edit docker-compose.yml to use `build: .` instead of `image:`
```
#### Environment variables
| Variable | Description |
|----------|-------------|
| `DATABASE_URL` | PostgreSQL connection string. Omit for SQLite. |
| `SECRET_KEY_BASE` | Rails secret key (auto-generated if not set). |
| `APP_URL` | Public-facing URL for links in emails. |
| `FORCE_SSL` | Set to your domain to enforce HTTPS redirects. |
| `SMTP_ADDRESS`, `SMTP_PORT`, `SMTP_USERNAME`, `SMTP_PASSWORD` | SMTP for outgoing emails (invitations, reminders). |
See the [environment reference](https://www.docuseal.com/docs/hosting#docker) in the upstream docs for the full list.
## Upstream Features
All features from the base DocuSeal OSS are included:
- PDF form fields builder (WYSIWYG)
- 12 field types (Signature, Date, File, Checkbox, etc.)
- Multiple submitters per document
- Automated emails via SMTP
- File storage on disk or S3/GCS/Azure
- Automatic PDF eSignature and verification
- Users management
- Mobile-optimized
- UI in 7 languages, signing in 14 languages
- API and Webhooks
- Easy deployment
## License
Distributed under the AGPLv3 License with Section 7(b) Additional Terms. See [LICENSE](LICENSE) and [LICENSE_ADDITIONAL_TERMS](LICENSE_ADDITIONAL_TERMS) for more information.
Original work © 2023-2026 DocuSeal LLC. Modifications in this fork are released under the same license.