Simple, secure document signing for DataThink's internal teams and products.
Keep Contracts is a white-labeled, self-hosted document signing service built on top of Documenso (v2.11.0) and maintained by DataThink.
Keep Contracts powers document signing workflows across DataThink's products. It is not a public SaaS product; accounts are provisioned by DataThink admins.
Documents are sent and managed via API. End recipients (contractors, parents, etc.) sign through a standard signing link without needing a Keep Contracts account.
- TypeScript — Language
- React Router v7 — Framework
- Prisma — ORM
- PostgreSQL — Database
- Tailwind CSS — Styling
- shadcn/ui — Component library
- react-email — Email templates
- tRPC — API layer
- Turborepo — Monorepo build system
- Node.js v22+
- Docker and Docker Compose
- Clone the repo and copy the env file:
cp .env.example .env- Start the database, mail catcher, and S3-compatible storage:
npm run dx- Start the dev server:
npm run devOr run both at once:
npm run d| Service | URL |
|---|---|
| App | http://localhost:3000 |
| Email (Inbucket) | http://localhost:9000 |
| S3 dashboard (MinIO) | http://localhost:9001 |
| Database | postgres://keepcontracts:[email protected]:54320/keepcontracts |
Email: [email protected]
Password: password
Locally, all outgoing email is captured by Inbucket at http://localhost:9000. No real emails are sent.
SMTP credentials in .env point to 127.0.0.1:2500, which is the Inbucket container.
To reset and reseed the local database with sample data:
npm run prisma:seedThis project is a fork of documenso/documenso at v2.11.0, licensed under AGPLv3. Upstream documentation is available at docs.documenso.com.
Internal support: [email protected]