diff --git a/.env.example b/.env.example
index f723e1c66a..cfd45e9ee2 100644
--- a/.env.example
+++ b/.env.example
@@ -43,9 +43,9 @@ NEXT_PRIVATE_WEBHOOK_SSRF_BYPASS_HOSTS=
PORT=3000
# [[DATABASE]]
-NEXT_PRIVATE_DATABASE_URL="postgres://documenso:password@127.0.0.1:54320/documenso"
+NEXT_PRIVATE_DATABASE_URL="postgres://keepcontracts:password@127.0.0.1:54320/keepcontracts"
# Defines the URL to use for the database when running migrations and other commands that won't work with a connection pool.
-NEXT_PRIVATE_DIRECT_DATABASE_URL="postgres://documenso:password@127.0.0.1:54320/documenso"
+NEXT_PRIVATE_DIRECT_DATABASE_URL="postgres://keepcontracts:password@127.0.0.1:54320/keepcontracts"
# [[SIGNING]]
# The transport to use for document signing. Available options: local (default) | gcloud-hsm
@@ -114,9 +114,9 @@ NEXT_PRIVATE_SMTP_SECURE=
# OPTIONAL: if this is true and NEXT_PRIVATE_SMTP_SECURE is false then TLS is not used even if the server supports STARTTLS extension
NEXT_PRIVATE_SMTP_UNSAFE_IGNORE_TLS=
# REQUIRED: Defines the sender name to use for the from address.
-NEXT_PRIVATE_SMTP_FROM_NAME="Documenso"
+NEXT_PRIVATE_SMTP_FROM_NAME="Keep Contracts"
# REQUIRED: Defines the email address to use as the from address.
-NEXT_PRIVATE_SMTP_FROM_ADDRESS="noreply@documenso.com"
+NEXT_PRIVATE_SMTP_FROM_ADDRESS="noreply@keepcontracts.com"
# OPTIONAL: Defines the service for nodemailer
NEXT_PRIVATE_SMTP_SERVICE=
# OPTIONAL: The API key to use for Resend.com
diff --git a/CLA.md b/CLA.md
deleted file mode 100644
index 9bdc1bd2b3..0000000000
--- a/CLA.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# Documenso Contributors License Agreement
-
-This Contributors License Agreement ("CLA") is entered into between the Contributor, and Documenso Inc. ("Documenso"), collectively referred to as the "Parties."
-
-## Background:
-
-Documenso is an open-source project aimed at providing an open-source document signing platform for all parties. This CLA governs the rights and contributions made by the Contributor to the Documenso project.
-
-## Agreement:
-
-**Contributor Grant of License:**
-
-By submitting code, documentation, or any other materials (collectively, "Contributions") to the Documenso project, the Contributor grants Documenso a perpetual, worldwide, non-exclusive, royalty-free, sublicensable license to use, modify, distribute, and otherwise exploit the Contributions, including any intellectual property rights therein, for the purposes of the Documenso project.
-
-**Representation of Ownership and Right to Contribute:**
-
-The Contributor represents that they have the legal right to grant the license stated in Section 1, and that the Contributions do not infringe upon the intellectual property rights of any third party. The Contributor also represents that they have the authority to submit the Contributions on their own behalf or, if applicable, on behalf of their employer or any other entity.
-
-**Patent Grant:**
-
-If the Contributions include any method, process, or apparatus that is covered by a patent, the Contributor agrees to grant Documenso a non-exclusive, worldwide, royalty-free license under any patent claims necessary to use, modify, distribute, and otherwise exploit the Contributions for the purposes of the Documenso project.
-
-**No Implied Warranties or Support:**
-
-The Contributor acknowledges that the Contributions are provided "as is," without any warranties or support of any kind. Documenso shall have no obligation to provide maintenance, updates, bug fixes, or support for the Contributions.
-
-**Retention of Contributor Rights:**
-
-The Contributor retains all right, title, and interest in and to their Contributions. This CLA does not restrict the Contributor from using their own Contributions for any other purpose.
-
-**Governing Law:**
-
-This CLA shall be governed by and construed in accordance with the laws of California (CA), without regard to its conflict of laws principles.
-
-**Entire Agreement:**
-
-This CLA constitutes the entire agreement between the Parties with respect to the subject matter hereof and supersedes all prior and contemporaneous understandings, agreements, representations, and warranties.
-
-**Acceptance:**
-
-By submitting Contributions to the Documenso project, the Contributor acknowledges and agrees to the terms and conditions of this CLA. If the Contributor is agreeing to this CLA on behalf of an entity, they represent that they have the necessary authority to bind that entity to these terms.
-
-**Effective Date:**
-
-This CLA is effective as of the date of the first Contribution made by the Contributor to the Documenso project.
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
deleted file mode 100644
index 5cf6aad4ef..0000000000
--- a/CODE_OF_CONDUCT.md
+++ /dev/null
@@ -1,126 +0,0 @@
-# Contributor Covenant Code of Conduct
-
-## Our Pledge
-
-We as members, contributors, and leaders pledge to make participation in our
-community a harassment-free experience for everyone, regardless of age, body
-size, visible or invisible disability, ethnicity, sex characteristics, gender
-identity and expression, level of experience, education, socio-economic status,
-nationality, personal appearance, race, caste, color, religion, or sexual
-identity and orientation.
-
-We pledge to act and interact in ways that contribute to an open, welcoming,
-diverse, inclusive, and healthy community.
-
-## Our Standards
-
-Examples of behavior that contributes to a positive environment for our
-community include:
-
-- Demonstrating empathy and kindness toward other people
-- Being respectful of differing opinions, viewpoints, and experiences
-- Giving and gracefully accepting constructive feedback
-- Accepting responsibility and apologizing to those affected by our mistakes,
- and learning from the experience
-- Focusing on what is best not just for us as individuals, but for the overall
- community
-
-Examples of unacceptable behavior include:
-
-- The use of sexualized language or imagery, and sexual attention or advances of
- any kind
-- Trolling, insulting or derogatory comments, and personal or political attacks
-- Public or private harassment
-- Publishing others' private information, such as a physical or email address,
- without their explicit permission
-- Other conduct which could reasonably be considered inappropriate in a
- professional setting
-
-## Enforcement Responsibilities
-
-Community leaders are responsible for clarifying and enforcing our standards of
-acceptable behavior and will take appropriate and fair corrective action in
-response to any behavior that they deem inappropriate, threatening, offensive,
-or harmful.
-
-Community leaders have the right and responsibility to remove, edit, or reject
-comments, commits, code, wiki edits, issues, and other contributions that are
-not aligned to this Code of Conduct, and will communicate reasons for moderation
-decisions when appropriate.
-
-## Scope
-
-This Code of Conduct applies within all community spaces, and also applies when
-an individual is officially representing the community in public spaces.
-Examples of representing our community include using an official e-mail address,
-posting via an official social media account, or acting as an appointed
-representative at an online or offline event.
-
-## Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported to the community leaders responsible for enforcement at
-support@documenso.com.
-All complaints will be reviewed and investigated promptly and fairly.
-
-All community leaders are obligated to respect the privacy and security of the
-reporter of any incident.
-
-## Enforcement Guidelines
-
-Community leaders will follow these Community Impact Guidelines in determining
-the consequences for any action they deem in violation of this Code of Conduct:
-
-### 1. Correction
-
-**Community Impact**: Use of inappropriate language or other behavior deemed
-unprofessional or unwelcome in the community.
-
-**Consequence**: A private, written warning from community leaders, providing
-clarity around the nature of the violation and an explanation of why the
-behavior was inappropriate. A public apology may be requested.
-
-### 2. Warning
-
-**Community Impact**: A violation through a single incident or series of
-actions.
-
-**Consequence**: A warning with consequences for continued behavior. No
-interaction with the people involved, including unsolicited interaction with
-those enforcing the Code of Conduct, for a specified period of time. This
-includes avoiding interactions in community spaces as well as external channels
-like social media. Violating these terms may lead to a temporary or permanent
-ban.
-
-### 3. Temporary Ban
-
-**Community Impact**: A serious violation of community standards, including
-sustained inappropriate behavior.
-
-**Consequence**: A temporary ban from any sort of interaction or public
-communication with the community for a specified period of time. No public or
-private interaction with the people involved, including unsolicited interaction
-with those enforcing the Code of Conduct, is allowed during this period.
-Violating these terms may lead to a permanent ban.
-
-### 4. Permanent Ban
-
-**Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior, harassment of an
-individual, or aggression toward or disparagement of classes of individuals.
-
-**Consequence**: A permanent ban from any sort of public interaction within the
-community.
-
-## Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage],
-version 2.1, available at
-[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
-
-Community Impact Guidelines were inspired by
-[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
-
-For answers to common questions about this code of conduct, see the FAQ at
-[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
-[https://www.contributor-covenant.org/translations][translations].
diff --git a/CODE_STYLE.md b/CODE_STYLE.md
index c58c7255fe..435ad64a77 100644
--- a/CODE_STYLE.md
+++ b/CODE_STYLE.md
@@ -1,6 +1,6 @@
-# Documenso Code Style Guide
+# Keep Contracts Code Style Guide
-This document captures the code style, patterns, and conventions used in the Documenso codebase. It covers both enforceable rules and subjective "taste" elements that make our code consistent and maintainable.
+This document captures the code style, patterns, and conventions used in the Keep Contracts codebase. It covers both enforceable rules and subjective "taste" elements that make our code consistent and maintainable.
## Table of Contents
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index 5cd7a6887c..0000000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,108 +0,0 @@
-# Contributing to Documenso
-
-If you plan to contribute to Documenso, please take a moment to feel awesome ✨ People like you are what open source is about ♥. Any contributions, no matter how big or small, are highly appreciated.
-
-## Before getting started
-
-- Before jumping into a PR be sure to search [existing PRs](https://github.com/documenso/documenso/pulls) or [issues](https://github.com/documenso/documenso/issues) for an open or closed item that relates to your submission.
-- Select an issue from [here](https://github.com/documenso/documenso/issues) or create a new one
-- Consider the results from the discussion on the issue
-- Accept the [Contributor License Agreement](https://documen.so/cla) to ensure we can accept your contributions.
-
-## English only PRs and Issues
-
-Please write all issues, pull requests, and related comments in English so maintainers and the wider contributor community can follow the discussion.
-
-## Taking issues
-
-Before taking an issue, ensure that:
-
-- The issue has been assigned the public label
-- The issue is clearly defined and understood
-- No one has been assigned to the issue
-- No one has expressed intention to work on it
-
-You can then:
-
-1. Comment on the issue with your intention to work on it
-2. Begin work on the issue
-
-Always feel free to ask questions or seek clarification on the issue.
-
-## Developing
-
-The development branch is main. All pull requests should be made against this branch. If you need help getting started, [join us on Discord](https://documen.so/discord).
-
-1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your
- own GitHub account and then
- [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device.
-2. Create a new branch:
-
-- Create a new branch (include the issue id and something readable):
-
- ```sh
- git checkout -b feat/doc-999-somefeature-that-rocks
- ```
-
-3. See the [Developer Setup](https://github.com/documenso/documenso/blob/main/README.md#developer-setup) for more setup details.
-
-## Building
-
-> **Note**
-> Please ensure you can make a full production build before pushing code or creating PRs.
-
-You can build the project with:
-
-```bash
-npm run build
-```
-
-## AI-Assisted Development with OpenCode
-
-We use [OpenCode](https://opencode.ai) for AI-assisted development. OpenCode provides custom commands and skills to help maintain consistency and streamline common workflows.
-
-OpenCode works with most major AI providers (Anthropic, OpenAI, Google, etc.) or you can use [Zen](https://opencode.ai/zen) for optimized coding models. Configure your preferred provider in the OpenCode settings.
-
-> **Important**: All AI-generated code must be thoroughly reviewed by the contributor before submitting a PR. You are responsible for understanding and validating every line of code you submit. If we detect that contributors are simply throwing AI-generated code over the wall without proper review, they will be blocked from the repository.
-
-### Getting Started
-
-1. Install OpenCode (see [opencode.ai](https://opencode.ai) for other install methods):
- ```bash
- curl -fsSL https://opencode.ai/install | bash
- ```
-2. Configure your AI provider (or use Zen for optimized models)
-3. Run `opencode` in the project root
-
-### Available Commands
-
-Use these commands in OpenCode by typing the command name:
-
-| Command | Description |
-| ------------------------------ | -------------------------------------------------------- |
-| `/implement ` | Implement a spec from `.agents/plans/` autonomously |
-| `/continue ` | Continue implementing a spec from a previous session |
-| `/interview ` | Deep-dive interview to flesh out a spec or design |
-| `/document ` | Generate MDX documentation for a module or feature |
-| `/commit` | Create a conventional commit for staged changes |
-| `/create-plan ` | Create a new plan file in `.agents/plans/` |
-| `/create-scratch ` | Create a scratch file for notes in `.agents/scratches/` |
-| `/create-justification ` | Create a justification file in `.agents/justifications/` |
-
-### Typical Workflow
-
-1. **Create a plan**: Use `/create-plan my-feature` to draft a spec for a new feature
-2. **Flesh out the spec**: Use `/interview .agents/plans/.md` to refine requirements
-3. **Implement**: Use `/implement .agents/plans/.md` to build the feature
-4. **Continue if needed**: Use `/continue .agents/plans/.md` to pick up where you left off
-5. **Commit**: Use `/commit` to create a conventional commit
-
-### Agent Files
-
-The `.agents/` directory stores AI-generated artifacts:
-
-- **`.agents/plans/`** - Feature specs and implementation plans
-- **`.agents/scratches/`** - Temporary notes and explorations
-- **`.agents/justifications/`** - Decision rationale and technical justifications
-
-These files use a unique ID format (`{word}-{word}-{word}-{slug}.md`) to prevent conflicts.
diff --git a/MANIFEST.md b/MANIFEST.md
deleted file mode 100644
index 2f62eb455f..0000000000
--- a/MANIFEST.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# The Documenso Manifest
-Signing documents is a fundamental building block of private, economic, and government interactions. Access to easy and secure signing to participate in society should therefore be a fundamental right for everyone. The technology to enable this should be accessible and widespread.
-
-We know that open source is the key to solving this need once and for all to benefit all humankind. Using open source kickstarts innovation by putting the open sharing of ideas and solutions first. With Documenso, we will create an open and globally accessible signing platform to empower users, customers, and developers to fulfill their needs. Documenso is built by and for the global community, listening and implementing what is needed. Being transparent with the code and the processes that use it brings trust and security to the platform.
-
-We build Documenso for longevity and scale by embracing the capital efficiency and inclusiveness of the Commercial Open Source (COSS) movement. We are building a global commodity for the world.
diff --git a/README.md b/README.md
index b522205547..f97bf26ea2 100644
--- a/README.md
+++ b/README.md
@@ -1,227 +1,94 @@
-
-
-
-
-## About Documenso
-
-Signing documents digitally should be fast and easy and should be the best practice for every document signed worldwide. This is technically quite easy today, but it also introduces a new party to every signature: The signing tool providers. While this is not a problem in itself, it should make us think about how we want these providers of trust to work. Documenso aims to be the world's most trusted document-signing tool. This trust is built by empowering you to self-host Documenso and review how it works under the hood.
-
-Join us in creating the next generation of open trust infrastructure.
-
-## Recognition
-
-
-
-
-
-
-## Community and Next Steps 🎯
-
-- Check out the first source code release in this repository and test it.
-- Tell us what you think in the [Discussions](https://github.com/documenso/documenso/discussions).
-- Join the [Discord server](https://documen.so/discord) for any questions and getting to know to other community members.
-- ⭐ the repository to help us raise awareness.
-- Spread the word on Twitter that Documenso is working towards a more open signing tool.
-- Fix or create [issues](https://github.com/documenso/documenso/issues), that are needed for the first production release.
-
-## Contributing
-
-- To contribute, please see our [contribution guide](https://github.com/documenso/documenso/blob/main/CONTRIBUTING.md).
-
-## Contact us
-
-Contact us if you are interested in our Enterprise plan for large organizations that need extra flexibility and control.
-
-
+# Keep Contracts
-## Tech Stack
+Simple, secure document signing for DataThink's internal teams and products.
-
-
-
-
-
-
-
-
-
-
-
-- [Typescript](https://www.typescriptlang.org/) - Language
-- [ReactRouter](https://reactrouter.com/) - Framework
-- [Prisma](https://www.prisma.io/) - ORM
-- [Tailwind](https://tailwindcss.com/) - CSS
-- [shadcn/ui](https://ui.shadcn.com/) - Component Library
-- [react-email](https://react.email/) - Email Templates
-- [tRPC](https://trpc.io/) - API
-- [@documenso/pdf-sign](https://www.npmjs.com/package/@documenso/pdf-sign) - PDF Signatures (launching soon)
-- [React-PDF](https://github.com/wojtekmaj/react-pdf) - Viewing PDFs
-- [PDF-Lib](https://github.com/Hopding/pdf-lib) - PDF manipulation
-- [Stripe](https://stripe.com/) - Payments
-
-
+Keep Contracts is a white-labeled, self-hosted document signing service built on top of [Documenso](https://documenso.com) (v2.11.0) and maintained by [DataThink](https://datathink.dev).
-## Local Development
+## About
-### Requirements
+Keep Contracts powers document signing workflows across DataThink's products. It is not a public SaaS product; accounts are provisioned by DataThink admins.
-To run Documenso locally, you will need
+Documents are sent and managed via API. End recipients (contractors, parents, etc.) sign through a standard signing link without needing a Keep Contracts account.
-- Node.js (v22 or above)
-- Postgres SQL Database
-- Docker (optional)
+## Tech Stack
+
+- [TypeScript](https://www.typescriptlang.org/) — Language
+- [React Router v7](https://reactrouter.com/) — Framework
+- [Prisma](https://www.prisma.io/) — ORM
+- [PostgreSQL](https://www.postgresql.org/) — Database
+- [Tailwind CSS](https://tailwindcss.com/) — Styling
+- [shadcn/ui](https://ui.shadcn.com/) — Component library
+- [react-email](https://react.email/) — Email templates
+- [tRPC](https://trpc.io/) — API layer
+- [Turborepo](https://turbo.build/) — Monorepo build system
-### Developer Quickstart
+## Local Development
-> **Note**: This is a quickstart for developers. It assumes that you have both [docker](https://docs.docker.com/get-docker/) and [docker-compose](https://docs.docker.com/compose/) installed on your machine.
+### Requirements
-Want to get up and running quickly? Follow these steps:
+- Node.js v22+
+- Docker and Docker Compose
-1. [Fork this repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks) to your GitHub account.
+### Quickstart
-After forking the repository, clone it to your local device by using the following command:
+1. Clone the repo and copy the env file:
```sh
-git clone https://github.com//documenso
+cp .env.example .env
```
-2. Set up your `.env` file using the recommendations in the `.env.example` file. Alternatively, just run `cp .env.example .env` to get started with our handpicked defaults.
+2. Start the database, mail catcher, and S3-compatible storage:
-3. Run `npm run dx` in the root directory
+```sh
+npm run dx
+```
- - This will spin up a postgres database and inbucket mailserver in a docker container.
+3. Start the dev server:
-4. Run `npm run dev` in the root directory
+```sh
+npm run dev
+```
-5. Want it even faster? Just use
+Or run both at once:
```sh
npm run d
```
-#### Access Points for Your Application
-
-1. **App** - http://localhost:3000
-2. **Incoming Mail Access** - http://localhost:9000
-3. **Database Connection Details**
-
- - **Port**: 54320
- - **Connection**: Use your favorite database client to connect using the provided port.
-
-4. **S3 Storage Dashboard** - http://localhost:9001
-
-## Developer Setup
-
-### Manual Setup
-
-Follow the [manual setup guide](https://docs.documenso.com/docs/developers/local-development/manual) to configure Documenso on your local machine.
-
-### Run in Gitpod
-
-- Click below to launch a ready-to-use Gitpod workspace in your browser.
-
-[](https://gitpod.io/#https://github.com/documenso/documenso)
-
-### Run in DevContainer
-
-We support DevContainers for VSCode. [Click here to get started.](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/documenso/documenso)
-
-### Video walkthrough
+### Local Access Points
-If you're a visual learner and prefer to watch a video walkthrough of setting up Documenso locally, check out this video:
+| Service | URL |
+|---|---|
+| App | http://localhost:3000 |
+| Email (Inbucket) | http://localhost:9000 |
+| S3 dashboard (MinIO) | http://localhost:9001 |
+| Database | `postgres://keepcontracts:password@127.0.0.1:54320/keepcontracts` |
-[](https://youtu.be/Y0ppIQrEnZs)
+### Test Login
-## Docker
-
-We provide official Docker images on [DockerHub](https://hub.docker.com/r/documenso/documenso) and [GitHub Container Registry](https://ghcr.io/documenso/documenso).
-
-For setup instructions, see the [Docker Deployment](https://docs.documenso.com/docs/self-hosting/deployment/docker) and [Docker Compose](https://docs.documenso.com/docs/self-hosting/deployment/docker-compose) guides.
-
-## Self Hosting
-
-We support a variety of deployment methods including Docker, Docker Compose, Railway, Kubernetes, and manual deployment.
-
-For full instructions, requirements, and configuration details, see the [Self Hosting documentation](https://docs.documenso.com/docs/self-hosting).
-
-### One-Click Deploys
-
-#### Railway
-
-[](https://railway.com/deploy/DjrRRX?referralCode=EZR3s0&utm_medium=integration&utm_source=template&utm_campaign=generic)
-
-#### Render
-
-[](https://render.com/deploy?repo=https://github.com/documenso/documenso)
-
-#### Koyeb
-
-[](https://app.koyeb.com/deploy?type=git&repository=github.com/documenso/documenso&branch=main&name=documenso-app&builder=dockerfile&dockerfile=/docker/Dockerfile)
-
-#### Elestio
-
-[](https://elest.io/open-source/documenso)
-
-## Troubleshooting
-
-For troubleshooting self-hosted deployments, see the [Troubleshooting guide](https://docs.documenso.com/docs/self-hosting/maintenance/troubleshooting) and [Tips & Common Pitfalls](https://docs.documenso.com/docs/self-hosting/getting-started/tips).
+```
+Email: example@keepcontracts.com
+Password: password
+```
-### I'm not receiving any emails when using the developer quickstart.
+### Email
-When using the developer quickstart, an [Inbucket](https://inbucket.org/) server will be spun up in a docker container that will store all outgoing emails locally for you to view.
+Locally, all outgoing email is captured by [Inbucket](https://inbucket.org/) at http://localhost:9000. No real emails are sent.
-The Web UI can be found at http://localhost:9000, while the SMTP port will be on localhost:2500.
+SMTP credentials in `.env` point to `127.0.0.1:2500`, which is the Inbucket container.
-### I can't see environment variables in my package scripts.
+### Seeding
-Wrap your package script with the `with:env` script like such:
+To reset and reseed the local database with sample data:
+```sh
+npm run prisma:seed
```
-npm run with:env -- npm run myscript
-```
-
-The same can be done when using `npx` for one of the bin scripts:
-```
-npm run with:env -- npx myscript
-```
+## Upstream
-This will load environment variables from your `.env` and `.env.local` files.
+This project is a fork of [documenso/documenso](https://github.com/documenso/documenso) at v2.11.0, licensed under AGPLv3. Upstream documentation is available at [docs.documenso.com](https://docs.documenso.com).
-## Repo Activity
+## Support
-
+Internal support: [mangelsona@datathink.dev](mailto:mangelsona@datathink.dev)
diff --git a/WRITING_STYLE.md b/WRITING_STYLE.md
deleted file mode 100644
index cc9c21419b..0000000000
--- a/WRITING_STYLE.md
+++ /dev/null
@@ -1,343 +0,0 @@
-# Documentation Writing Style Guide
-
-This document defines the writing conventions for Documenso documentation.
-
-Documentation lives in `apps/docs/` as MDX files and uses [Fumadocs](https://fumadocs.dev).
-
-## Core Principles
-
-1. **Task-based navigation** - Organize by what users want to do, not by feature hierarchy
-2. **Progressive examples** - Start simple, build to complex
-3. **Explicit limitations** - List what's NOT supported clearly
-4. **Real-world context** - Explain document signing concepts with familiar comparisons
-
-## Tone
-
-- Direct and action-oriented
-- Second person ("you") with imperative voice
-- Technical but accessible
-- Acknowledge complexity without condescension
-- No emojis or excessive personality
-
-## Anti-Patterns to Avoid
-
-- Assuming document signing domain knowledge
-- Hiding default values
-- Separate "TypeScript" sections (types integrated throughout)
-- Monolithic single-page references
-- Examples that don't work with current API
-
-## Documentation Audiences
-
-The docs serve three distinct audiences:
-
-1. **Users** - People using the Documenso web application to send and sign documents
-2. **Developers** - Building integrations with the API or SDKs
-3. **Self-hosters** - Running their own Documenso instance
-
-Tailor content to the audience:
-
-- User docs: Focus on UI workflows, no code required
-- Developer docs: API/SDK examples, authentication, webhooks
-- Self-hosting docs: Deployment, configuration, infrastructure
-
-## File Structure
-
-```
-apps/docs/
-├── index.mdx # Landing page with audience navigation
-├── getting-started/ # Quick starts for each audience
-├── users/ # Application usage guides
-│ ├── documents/ # Creating and managing documents
-│ ├── templates/ # Working with templates
-│ ├── signing/ # Signing documents
-│ └── settings/ # Account and team settings
-├── developers/ # API and SDK documentation
-│ ├── api/ # REST API reference
-│ ├── sdk/ # SDK guides
-│ ├── webhooks/ # Webhook integration
-│ └── examples/ # Code examples and recipes
-├── self-hosting/ # Self-hosting documentation
-│ ├── deployment/ # Deployment guides
-│ ├── configuration/ # Environment and settings
-│ └── maintenance/ # Upgrades and backups
-├── concepts/ # Shared concepts across audiences
-└── migration/ # Migration guides
-```
-
-Each directory has a `meta.json` controlling navigation order:
-
-```json
-{
- "title": "Section Title",
- "pages": ["index", "page-one", "page-two"]
-}
-```
-
-Use `---Label---` for section dividers in `meta.json`.
-
-## MDX Frontmatter
-
-Every page needs frontmatter for search and SEO:
-
-```yaml
----
-title: Working with Pages
-description: Add, remove, reorder, copy, and merge PDF pages.
----
-```
-
-## Page Structure
-
-### User Documentation
-
-```mdx
----
-title: Feature Name
-description: Brief description for SEO and previews.
----
-
-# Feature Name
-
-Brief description of what this does and when to use it.
-
-## Steps
-
-1. Navigate to **Settings > Feature**
-2. Click **Add New**
-3. Fill in the required fields
-
----
-
-## See Also
-
-- [Related Guide](/docs/users/related)
-```
-
-### Developer Documentation
-
-```mdx
----
-title: Feature Name
-description: Brief description for SEO and previews.
----
-
-# Feature Name
-
-Brief description of what this does and when to use it.
-
-## Quick Start
-
-\`\`\`typescript
-// Minimal working example
-\`\`\`
-
----
-
-## Section Name
-
-Content organized by task or concept.
-
----
-
-## See Also
-
-- [Related Guide](/docs/developers/related)
-```
-
-### Self-Hosting Documentation
-
-```mdx
----
-title: Configuration Topic
-description: Brief description for SEO and previews.
----
-
-# Configuration Topic
-
-Brief description of what this configures.
-
-## Environment Variables
-
-| Variable | Required | Default | Description |
-| ---------- | -------- | ------- | ------------ |
-| `VAR_NAME` | Yes | - | What it does |
-
----
-
-## See Also
-
-- [Related Guide](/docs/self-hosting/related)
-```
-
-## Parameter Tables
-
-Use Sharp-style nested parameter tables for developer documentation (API/SDK):
-
-```markdown
-### methodName(param, options?)
-
-Description of what the method does.
-
-| Param | Type | Default | Description |
-| ------------------- | --------- | -------- | --------------------- |
-| `param` | `string` | required | What it does |
-| `[options]` | `Options` | | |
-| `[options.setting]` | `boolean` | `false` | Nested option |
-| `[options.timeout]` | `number` | `5000` | Another nested option |
-
-**Returns**: `Promise`
-
-**Throws**:
-
-- `SpecificError` - When something goes wrong
-```
-
-Key conventions:
-
-- Square brackets `[param]` indicate optional parameters
-- Nested options indented with `[options.name]` pattern
-- Always show default values
-- Group related options under their parent
-
-## Code Examples
-
-For developer documentation, use progressive complexity:
-
-```typescript
-// Basic usage
-const document = await documenso.documents.create({
- title: "Contract",
- file: pdfBuffer,
-});
-
-// With recipients
-const document = await documenso.documents.create({
- title: "Contract",
- file: pdfBuffer,
- recipients: [{ email: "signer@example.com", name: "John Doe" }],
-});
-
-// Full example with error handling
-try {
- const document = await documenso.documents.create({
- title: "Contract",
- file: pdfBuffer,
- recipients: [{ email: "signer@example.com", name: "John Doe" }],
- });
-} catch (error) {
- if (error instanceof DocumentError) {
- // Handle document creation error
- }
-}
-```
-
-### Example Guidelines
-
-- All examples must be valid TypeScript
-- Show imports when not obvious
-- Include expected output in comments where helpful
-- Use realistic values, not `foo`/`bar`
-
-## UI Instructions
-
-For user documentation, use clear step-by-step instructions:
-
-- Bold UI elements: **Settings**, **Save**, **Documents**
-- Use `>` for navigation paths: **Settings > Team > Members**
-- Number sequential steps
-- Include screenshots sparingly for complex workflows
-- Describe what the user should see after each action
-
-## Callouts
-
-Use Fumadocs callouts sparingly for important information:
-
-```mdx
-Informational note about behavior.
-
-Warning about potential issues or breaking changes.
-
-Critical warning about data loss or security.
-```
-
-Reserve callouts for:
-
-- Beta/unstable features
-- Security considerations
-- Common mistakes
-- Breaking changes
-
-## Tables
-
-Use tables for:
-
-- Feature matrices
-- Parameter documentation
-- Comparison charts
-- Error catalogs
-
-```markdown
-| Feature | Status | Notes |
-| ---------------- | ------ | ------------------------ |
-| Email signing | Full | All recipient types |
-| Embedded signing | Full | Via SDK or direct links |
-| Templates | Full | Create and use templates |
-```
-
-## Linking
-
-- Link to related docs: `[Documents](/docs/api/documents)`
-- Use relative paths within docs
-- Add "See Also" sections for discoverability
-
-## Error Documentation
-
-Categorize errors by when they occur:
-
-```markdown
-## Document Errors
-
-Thrown when creating or updating documents.
-
-### InvalidDocumentError
-
-Document could not be processed.
-
-**Common causes:**
-
-- File is not a valid PDF
-- File exceeds size limits
-
-**Solution:** Verify the file is a valid PDF within size limits.
-```
-
-## Concept Explanations
-
-Use analogies for document signing concepts:
-
-```markdown
-Think of a **signing workflow** like passing a physical document around an office.
-
-Each recipient gets the document in turn, adds their signature or initials,
-and passes it to the next person. The **document status** tracks where it
-is in this journey.
-```
-
-## Self-Hosting Specific
-
-For self-hosting documentation:
-
-- Always specify required vs optional environment variables
-- Include example `.env` snippets
-- Document Docker and non-Docker approaches where applicable
-- Link to troubleshooting for common deployment issues
-- Specify minimum system requirements
-
-## Maintenance
-
-- Include types inline so docs don't get stale
-- Reference source file locations for complex behavior
-- Update examples when API changes
-- Test all code examples work
-- Keep environment variable documentation in sync with actual defaults
diff --git a/apps/remix/app/components/dialogs/account-delete-dialog.tsx b/apps/remix/app/components/dialogs/account-delete-dialog.tsx
index d23a0a74b6..25b16f34dc 100644
--- a/apps/remix/app/components/dialogs/account-delete-dialog.tsx
+++ b/apps/remix/app/components/dialogs/account-delete-dialog.tsx
@@ -103,8 +103,8 @@ export const AccountDeleteDialog = ({ className }: AccountDeleteDialogProps) =>
- Documenso will delete all of your documents, along with all
- of your completed documents, signatures, and all other resources belonging to your Account.
+ Keep Contracts will delete all of your documents, along with
+ all of your completed documents, signatures, and all other resources belonging to your Account.
diff --git a/apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx b/apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
index 750ab38f24..7a3b95c9a4 100644
--- a/apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
+++ b/apps/remix/app/components/dialogs/envelope-distribute-dialog.tsx
@@ -306,7 +306,7 @@ export const EnvelopeDistributeDialog = ({
))}
- Documenso
+ Keep Contracts
diff --git a/apps/remix/app/components/dialogs/organisation-create-dialog.tsx b/apps/remix/app/components/dialogs/organisation-create-dialog.tsx
index 183dfbeecf..da9c2dfd44 100644
--- a/apps/remix/app/components/dialogs/organisation-create-dialog.tsx
+++ b/apps/remix/app/components/dialogs/organisation-create-dialog.tsx
@@ -30,10 +30,9 @@ import type { MessageDescriptor } from '@lingui/core';
import { msg } from '@lingui/core/macro';
import { Trans, useLingui } from '@lingui/react/macro';
import type * as DialogPrimitive from '@radix-ui/react-dialog';
-import { ExternalLinkIcon } from 'lucide-react';
import { useEffect, useMemo, useState } from 'react';
import { useForm } from 'react-hook-form';
-import { Link, useSearchParams } from 'react-router';
+import { useSearchParams } from 'react-router';
import { match } from 'ts-pattern';
import type { z } from 'zod';
@@ -378,33 +377,6 @@ const BillingPlanForm = ({ value, onChange, plans, canCreateFreeOrganisation }:
))}
-
-
-
-
- Enterprise
-
-
- Contact sales here
-
-
-
-
-
-
-
-
- Compare all plans and features in detail
-
-
);
diff --git a/apps/remix/app/components/dialogs/organisation-member-invite-dialog.tsx b/apps/remix/app/components/dialogs/organisation-member-invite-dialog.tsx
index a033e7bff2..1df73429c0 100644
--- a/apps/remix/app/components/dialogs/organisation-member-invite-dialog.tsx
+++ b/apps/remix/app/components/dialogs/organisation-member-invite-dialog.tsx
@@ -233,9 +233,9 @@ export const OrganisationMemberInviteDialog = ({ trigger, ...props }: Organisati
const downloadTemplate = () => {
const data = [
- { email: 'admin@documenso.com', role: 'Admin' },
- { email: 'manager@documenso.com', role: 'Manager' },
- { email: 'member@documenso.com', role: 'Member' },
+ { email: 'admin@keepcontracts.com', role: 'Admin' },
+ { email: 'manager@keepcontracts.com', role: 'Manager' },
+ { email: 'member@keepcontracts.com', role: 'Member' },
];
const csvContent = 'Email address,Role\n' + data.map((row) => `${row.email},${row.role}`).join('\n');
@@ -245,7 +245,7 @@ export const OrganisationMemberInviteDialog = ({ trigger, ...props }: Organisati
});
downloadFile({
- filename: 'documenso-organisation-member-invites-template.csv',
+ filename: 'keepcontracts-organisation-member-invites-template.csv',
data: blob,
});
};
diff --git a/apps/remix/app/components/dialogs/webhook-create-dialog.tsx b/apps/remix/app/components/dialogs/webhook-create-dialog.tsx
index 49ecd7968f..8738c89c51 100644
--- a/apps/remix/app/components/dialogs/webhook-create-dialog.tsx
+++ b/apps/remix/app/components/dialogs/webhook-create-dialog.tsx
@@ -127,7 +127,7 @@ export const WebhookCreateDialog = ({ trigger, ...props }: WebhookCreateDialogPr
- The URL for Documenso to send webhook events to.
+ The URL for Keep Contracts to send webhook events to.
@@ -196,8 +196,8 @@ export const WebhookCreateDialog = ({ trigger, ...props }: WebhookCreateDialogPr
- A secret that will be sent to your URL so you can verify that the request has been sent by
- Documenso.
+ A secret that will be sent to your URL so you can verify that the request has been sent by Keep
+ Contracts.
diff --git a/apps/remix/app/components/dialogs/webhook-edit-dialog.tsx b/apps/remix/app/components/dialogs/webhook-edit-dialog.tsx
index 4b89d10253..f2f5d2e357 100644
--- a/apps/remix/app/components/dialogs/webhook-edit-dialog.tsx
+++ b/apps/remix/app/components/dialogs/webhook-edit-dialog.tsx
@@ -111,7 +111,7 @@ export const WebhookEditDialog = ({ trigger, webhook, ...props }: WebhookEditDia
- The URL for Documenso to send webhook events to.
+ The URL for Keep Contracts to send webhook events to.
@@ -178,8 +178,8 @@ export const WebhookEditDialog = ({ trigger, webhook, ...props }: WebhookEditDia
- A secret that will be sent to your URL so you can verify that the request has been sent by
- Documenso.
+ A secret that will be sent to your URL so you can verify that the request has been sent by Keep
+ Contracts.
diff --git a/apps/remix/app/components/embed/embed-document-completed.tsx b/apps/remix/app/components/embed/embed-document-completed.tsx
index da11e59efd..37e5648dbd 100644
--- a/apps/remix/app/components/embed/embed-document-completed.tsx
+++ b/apps/remix/app/components/embed/embed-document-completed.tsx
@@ -18,7 +18,7 @@ export const EmbedDocumentCompleted = ({ name, signature }: EmbedDocumentComplet
{match(license.status)
diff --git a/apps/remix/app/components/general/admin-license-status-banner.tsx b/apps/remix/app/components/general/admin-license-status-banner.tsx
index 6651d6dfdd..1a86ec53cf 100644
--- a/apps/remix/app/components/general/admin-license-status-banner.tsx
+++ b/apps/remix/app/components/general/admin-license-status-banner.tsx
@@ -37,10 +37,11 @@ export const AdminLicenseStatusBanner = ({ license }: AdminLicenseStatusBannerPr
.with('UNAUTHORIZED', () =>
license ? (
- Invalid License Type - Your Documenso instance is using features that are not part of your license.
+ Invalid License Type - Your Keep Contracts instance is using features that are not part of your
+ license.
) : (
- Missing License - Your Documenso instance is using features that require a license.
+ Missing License - Your Keep Contracts instance is using features that require a license.
),
)
.otherwise(() => null)}
diff --git a/apps/remix/app/components/general/app-nav-mobile.tsx b/apps/remix/app/components/general/app-nav-mobile.tsx
index 7530ec4008..68ce89c6ea 100644
--- a/apps/remix/app/components/general/app-nav-mobile.tsx
+++ b/apps/remix/app/components/general/app-nav-mobile.tsx
@@ -81,7 +81,7 @@ export const AppNavMobile = ({ isMenuOpen, onMenuOpenChange }: AppNavMobileProps
-
+