Compare commits

...

1249 Commits

Author SHA1 Message Date
077da72b68 feat: implement webhooks (#913) 2024-02-28 18:31:48 +11:00
c8869b3088 chore: fixed UI for webhooks team 2024-02-28 09:18:05 +02:00
8bd1647a2d chore: fixed UI 2024-02-28 09:14:10 +02:00
00a7389af3 chore: implemented feedback 2024-02-28 08:13:28 +02:00
ae00290b6f fix: add reference to swagger docs 2024-02-28 04:34:33 +00:00
93e34a5abd Merge branch 'main' into feat/webhook-implementation 2024-02-27 16:37:29 +02:00
f0a511e238 chore: refactor code 2024-02-27 15:22:02 +02:00
b02263eea1 Chore/blog (#964)
day 2 blogpost
2024-02-27 11:49:16 +01:00
f5a0c1733f chore: tags 2024-02-27 11:47:52 +01:00
18368b5801 chore: day 2 blogpost 2024-02-27 11:47:22 +01:00
af30443f5a Merge branch 'main' into feat/webhook-implementation 2024-02-27 18:17:54 +11:00
a4b1f7c983 feat: support team webhooks 2024-02-27 16:56:32 +11:00
7dd2bbd8ab feat: update webhook handling and triggering 2024-02-27 15:16:14 +11:00
488464e3e7 chore: add team to webhook model 2024-02-27 13:38:12 +11:00
1ec549b869 chore: add webhook-call model 2024-02-27 13:37:24 +11:00
c2daa964c0 chore: use cuids for webhooks 2024-02-27 12:13:56 +11:00
53d18eb3c8 chore: typo (#963) 2024-02-26 17:13:19 +01:00
21016216b6 chore: typo 2024-02-26 17:13:01 +01:00
b5b0aeef6d chore: typo (#962)
---
name: Pull Request
about: Submit changes to the project for review and inclusion
---

## Description

<!--- Describe the changes introduced by this pull request. -->
<!--- Explain what problem it solves or what feature/fix it adds. -->

## Related Issue

<!--- If this pull request is related to a specific issue, reference it
here using #issue_number. -->
<!--- For example, "Fixes #123" or "Addresses #456". -->

## Changes Made

<!--- Provide a summary of the changes made in this pull request. -->
<!--- Include any relevant technical details or architecture changes.
-->

- Change 1
- Change 2
- ...

## Testing Performed

<!--- Describe the testing that you have performed to validate these
changes. -->
<!--- Include information about test cases, testing environments, and
results. -->

- Tested feature X in scenario Y.
- Ran unit tests for component Z.
- Tested on browsers A, B, and C.
- ...

## Checklist

<!--- Please check the boxes that apply to this pull request. -->
<!--- You can add or remove items as needed. -->

- [ ] I have tested these changes locally and they work as expected.
- [ ] I have added/updated tests that prove the effectiveness of these
changes.
- [ ] I have updated the documentation to reflect these changes, if
applicable.
- [ ] I have followed the project's coding style guidelines.
- [ ] I have addressed the code review feedback from the previous
submission, if applicable.

## Additional Notes

<!--- Provide any additional context or notes for the reviewers. -->
<!--- This might include details about design decisions, potential
concerns, or anything else relevant. -->
2024-02-26 17:11:53 +01:00
8faf3afbbe chore: typo 2024-02-26 17:11:09 +01:00
0044b1f617 Update README.md (#961) 2024-02-26 14:22:00 +01:00
75f8305023 Update README.md 2024-02-26 14:20:44 +01:00
36e32639c9 chore: blog day 1 (#960)
deploy day 1
2024-02-26 13:12:10 +01:00
25164abc14 chore: capitals 2024-02-26 13:11:44 +01:00
1b8b81b16c chore: capitals 2024-02-26 13:11:08 +01:00
4bdd41c7c5 chore: blog day 1 2024-02-26 13:09:15 +01:00
a31057d0d1 fix: add updated badge 2024-02-26 22:35:10 +11:00
70165c4469 chore: ui updates 2024-02-26 22:24:23 +11:00
8dceeffff7 chore: pricing update (#952)
new pricing, ready to be merged when the launchweek day 1 article drops
2024-02-26 12:09:28 +01:00
15c22d3897 feat: updated the triggerWebhook function 2024-02-26 12:52:30 +02:00
a54d09ab19 Merge branch 'main' into chore/pricing-update 2024-02-26 09:44:16 +01:00
15ebe6dbaf fix: add cascade delete to recipient fields 2024-02-26 03:51:28 +00:00
5805d8a903 Merge branch 'main' into feat/webhook-implementation 2024-02-26 12:47:21 +11:00
f7c6b53258 feat: public api start (#674)
This PR adds the public-facing API.

![API high-level
workings](https://github.com/documenso/documenso/assets/25515812/9f866889-164f-401f-bf4e-d3e69b6382f1)

The public API will allow users to interact with Documenso
programmatically. At the moment, there are 5 available endpoints:
1. `GET /documents`
    - get all documents of the user making the API call
- it accepts 2 URL query parameters - `page` and `perPage`, but they are
not mandatory
2. `GET /documents/:id`
    - get a specific document of the user making the API call
- it requires 1 URL parameter, which represents the ID of the document
that needs to be retrieved
3. `DELETE /documents/:id`
    - delete a specific document of the user making the API call
- it requires 1 URL parameter, which represents the ID of the document
that needs to be deleted
4. `POST /documents`
- making a POST request to this endpoint will return an S3 pre-signed
URL where you can upload the document
    - it requires you to pass the file name and the file content type
5. `PATCH /documents/:id/send-for-signing`
    - send a document for signing
    - it allows you to pass the following:
        - signer email *(required)*
        - signer name *(optional)*
        - field type (signature, email, name, etc.) *(required)*
        - page number where to insert the field *(required)*
        - page X *(required)*
        - page Y *(required)*
        - page width *(required)*
        - page height *(required)*
        - email subject *(optional)*
        - email body *(optional)*

The users are authenticated through API tokens. The users can create one
or more tokens in their account settings, and each token will be
available for 1 year _(duration open to suggestions/changes)_.

Each time the user makes a request, the app checks if the token exists
and if it's valid. The app will return `401` *(unauthorized)* and the
appropriate error message if either is false. If both are true AND the
user uses the correct HTTP verb and passes the required URL parameters
and body, the API call will be successful.

Code overview:
- `@documenso/packages/lib/trpc/api-contract` - this folder contains the
`contract` and `schema` files. The `contract.ts` file describes the
structure of the API, the format of the requests and responses, and how
to authenticate your API calls, among others. The `schema.ts` file
contains the Zod schemas used in the API contract.
- `@documenso/packages/trpc/server/api-token-router` - this folder
contains the `router.rs` and `schema.ts` files. Here are the tRPC
procedures used on the frontend. That is, the user's settings page,
where the user can list/create/delete API tokens.
- `@documenso/packages/trpc/tsconfig.json` - I added `"strict": true`
because that's what's suggested in the `ts-rest` documentation.
*([source](https://ts-rest.com/docs/quickstart#create-a-contract))*
- `[...ts-rest].tsx` - This file contains the implementation of the API.
You can see the logic behind each route.
- the rest of the code represents the code for the API tokens page in
the user's settings.
2024-02-26 12:41:16 +11:00
4778270d3c fix: use template dialog to pass teamId 2024-02-26 12:20:50 +11:00
3c51a1bc3d Merge branch 'main' into feat/public-api 2024-02-26 12:15:33 +11:00
fcfb741363 feat: edit recipients when creating document from template (#953)
https://github.com/documenso/documenso/assets/55143799/85a840e3-4fb4-4c02-ba63-b9626f4cea58
2024-02-26 12:00:23 +11:00
a54159a9ec fix: add missing teamId references 2024-02-26 11:59:32 +11:00
5bd0dde4a5 fix: e2e tests 2024-02-26 10:50:46 +11:00
6b8e11b535 fix: template router update 2024-02-26 10:31:24 +11:00
c7dac2f4de fix: update delete endpoint and add limits 2024-02-26 10:01:13 +11:00
4cb0d6999d fix: build errors from merge 2024-02-26 09:13:46 +11:00
2a74ce06ef Merge branch 'main' into feat/public-api 2024-02-26 00:21:25 +11:00
6ea6dda99d feat: add transparent background to fields (#899) 2024-02-26 00:10:35 +11:00
187a988f9c Merge branch 'main' into transparent-fields 2024-02-26 00:02:56 +11:00
5bef2fba91 fix: follow figma design 2024-02-25 13:02:09 +00:00
df3ba11655 feat: account deletion (#846)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
	- Added two-factor authentication form handling in profile settings.
- Introduced account deletion functionality, including Stripe customer
data removal.
- Updated UI components and styles for improved user interaction, such
as enhanced visual feedback for destructive actions.
- **Refactor**
- Improved code quality by updating import statements for type-only
imports.
- **Chores**
- Restructured the `forwardPorts` array in dev container configuration
for clarity.
- Removed a trailing comma in the `vscode` extensions list to adhere to
JSON format rules.
- **Documentation**
- Added comments to clarify the handling of undefined values in
two-factor authentication verification.
- **Database**
- Implemented a SQL migration script for creating a default deleted user
in the system.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-02-25 22:49:55 +11:00
9cf72e1442 chore: tidy code and extract alert-dialog 2024-02-25 11:12:18 +00:00
7226d5ac53 Merge branch 'main' into feat/account-deletion 2024-02-24 23:18:14 +11:00
dbd63498e0 feat: custom text field (#945)
https://github.com/documenso/documenso/assets/55143799/c0f296ce-1e91-4b49-9c19-1bdffbd3163f
2024-02-24 22:55:16 +11:00
4ca154d88a fix: update e2e test? 2024-02-24 11:54:13 +00:00
d34c862688 fix: switch custom text to input rather than textarea 2024-02-24 11:25:12 +00:00
a5e51e63a1 Merge branch 'main' into custom-text-field 2024-02-24 22:23:17 +11:00
14c77d7c92 fix: update e2e test 2024-02-24 11:19:07 +00:00
a5a0fd9187 fix: update e2e test 2024-02-24 10:55:48 +00:00
77193b93c4 fix: resolve build error and update dialog width 2024-02-24 10:36:27 +00:00
a10957d909 Merge branch 'main' into feat/improve-create-document-from-template 2024-02-24 21:26:11 +11:00
688e32dfc2 feat: add roles to templates recipients (#935) 2024-02-24 21:24:26 +11:00
b1b3b84d82 Merge branch 'main' into feat/template-recipient-roles 2024-02-24 21:01:45 +11:00
b09acaf94e feat: custom banner (#956) 2024-02-24 20:40:41 +11:00
fab4992e13 feat: add zapier support 2024-02-24 11:18:58 +02:00
d103c68a73 fix: remove console logs 2024-02-24 08:08:14 +00:00
a06b40af3c fix: revert hardcoded env 2024-02-24 15:11:12 +11:00
0900836040 fix: missing marketing env variables 2024-02-24 14:56:11 +11:00
9ea56bddd1 chore: pricing update 2024-02-23 17:02:20 +01:00
0b83671c78 fix: hardcode signup until env issue is fixed (#958)
hotfix for broken signup links
2024-02-23 16:50:43 +01:00
41cbf3ba3c fix: hardcode signup until env issue is fixed 2024-02-23 16:49:17 +01:00
8165a090d1 feat: migrate to site-settings 2024-02-23 10:47:01 +00:00
c436559787 feat: create a banner with custom text by admin 2024-02-22 20:20:49 +00:00
15e191f62d fix: e2e tests (#955) 2024-02-22 23:58:51 +11:00
f973dfd09c feat: add document page view (#926)
## Description

This feature allows us to have a dedicated page to view details for a
document.

The current `/documents/[id]` page has been moved to
`/documents/[id]/edit`.

The new `/documents/[id]` page will now display general information on
the document itself.

This will allow us to provide more details relating to a document in the
future, such as version history.

## Examples

These may be outdated as deployment failed

Login via example@documenso.com

Draft document no recipients:

https://stg-7hpkvyc5i-documenso.vercel.app/documents/446

Draft document with recipients:

https://stg-7hpkvyc5i-documenso.vercel.app/documents/440

Pending document:

https://stg-7hpkvyc5i-documenso.vercel.app/documents/447

Completed document:

https://stg-7hpkvyc5i-documenso.vercel.app/documents/448

Pending teams document:

https://stg-7hpkvyc5i-documenso.vercel.app/t/hello/documents/449/

## Checklist

<!--- Please check the boxes that apply to this pull request. -->
<!--- You can add or remove items as needed. -->

- [ ] I have tested these changes locally and they work as expected.
- [ ] I have added/updated tests that prove the effectiveness of these
changes.
- [X] I have followed the project's coding style guidelines.

## Additional Notes

When a user "sends" a document (DRAFT -> PENDING), should we redirect
them to the document/id page, or keep it how it currently is and have it
redirect to `/documents` page?
2024-02-22 23:25:22 +11:00
a58fee2da6 fix: e2e tests 2024-02-22 22:58:51 +11:00
1232f54a23 Merge branch 'main' into feat/separate-document-page 2024-02-22 22:54:15 +11:00
306e5ff31f fix: add timeouts to longer transactions 2024-02-22 11:05:49 +00:00
34825aaf3a feat: add separate document audit page 2024-02-22 19:14:01 +11:00
dd29845934 fix: put max height in teams section in profile dropdown (#947)
fixes: #942
2024-02-22 16:49:54 +11:00
a48bda0d27 feat: add page numbers to documents (#946) 2024-02-22 16:36:34 +11:00
48321f2f62 Merge branch 'main' into feat/separate-document-page 2024-02-22 16:13:33 +11:00
2abcdd7533 feat: team api tokens 2024-02-22 13:39:34 +11:00
df132a51ab feat: ability to download all the 2FA recovery codes (#944)
fixes #938 



https://github.com/documenso/documenso/assets/81948346/8bf807ae-41b0-417b-9f55-d96584e71acb
2024-02-21 13:39:08 +11:00
8287722f59 fix: update view dialog to use new download api 2024-02-21 02:29:19 +00:00
aba6b58c14 fix: simplify download api 2024-02-21 02:19:35 +00:00
b6c9213b66 fix: disable static generation of marketing site pages
Disables the generation of the blog and content pages using
generateStaticPaths to deal with a regression with routing
introduced with next-runtime-env.
2024-02-21 00:58:57 +00:00
22e3a79a72 Merge branch 'main' into feat/public-api 2024-02-21 11:29:36 +11:00
6ee896048e feat: dialog to enter custom recipients for creating document from template 2024-02-20 19:11:12 +00:00
4d286e01d1 feat: allow recipients when creating document from template 2024-02-20 17:20:03 +00:00
b9e5905469 feat: create from template 2024-02-20 19:46:18 +11:00
39c6cbf66a feat: ability to download 2FA recovery codes 2024-02-19 11:25:15 +00:00
c6dbaaea21 Merge branch 'main' into feat/webhook-implementation 2024-02-19 10:02:06 +02:00
ac6da9ab45 feat: add feature flag 2024-02-19 14:31:26 +11:00
791a22cb5f refactor: add comments 2024-02-19 13:22:48 +11:00
11299d3f92 feat: add custom text to singleplayer 2024-02-17 11:24:47 +00:00
9301b8ef4d fix: multiple text fields sharing the same text value 2024-02-17 10:50:19 +00:00
ad6fad1182 fix: custom text with multiline throwing an error
took me hours
2024-02-17 10:43:22 +00:00
5687503dfc feat: sign document with a custom text 2024-02-17 08:26:30 +00:00
0186f2dfed feat: ability to download 2FA recovery codes 2024-02-17 13:19:03 +05:30
f98567ea87 feat: request usee to disable 2fa before deleting account 2024-02-17 07:34:21 +00:00
2815b1a809 feat: add enterprise billing (#939)
## Description

Add support for enterprise billing plans.

Enterprise billing plans by default get access to everything early
adopters do:
- Unlimited teams
- Unlimited documents

They will also get additional features in the future.

## Notes

Pending webhook updates to support enterprise onboarding.
Rolled back env changes `NEXT_PUBLIC_PROJECT` since it doesn't seem to
work.
2024-02-17 12:42:00 +11:00
5d6cdbef89 feat: ability to download all the 2FA recovery codes 2024-02-16 20:46:27 +00:00
26d4bbf010 chore: ui updates 2024-02-16 13:58:03 +02:00
960914aeb5 fix: undo operation on signature pad (#868)
fixes: #864
2024-02-16 22:57:14 +11:00
d83769b410 chore: use unsafe effect 2024-02-16 11:56:02 +00:00
cd240ae8a4 chore: loading spinner 2024-02-16 13:55:47 +02:00
a1459b41fd Merge branch 'main' into feat/webhook-implementation 2024-02-16 13:04:38 +02:00
a0cf2a2c75 fix: improved document-dropzone ui for small vertical screens (#857)
improved document-dropzone ui for small vertical screens (screens less
than 800px vertically)
Although it can still become congested on really small vertical screens,
but possibility is really low.

fixes: #840
2024-02-16 22:03:24 +11:00
a30b73ce86 fix: update css 2024-02-16 11:02:04 +00:00
46d163d9d6 fix: highlighting issue in recipient selection (#937)
fixes: #920 

<img width="391" alt="image"
src="https://github.com/documenso/documenso/assets/75713174/08b2f5ab-4a6f-423a-a2fa-8f7b04789bb8">
2024-02-16 21:50:53 +11:00
681a89cfe1 chore: minor lint fixes (#934) 2024-02-16 21:48:45 +11:00
4d6e780abe chore: merge main 2024-02-16 12:12:54 +02:00
7f3f6f5312 feat: hide secret field 2024-02-16 11:44:03 +02:00
019db27b1d feat: trigger webhook functionality 2024-02-16 11:04:11 +02:00
e5f4edc120 chore: create security.txt (#878)
Adding a security.txt file enables security researchers to quickly and
easily see where they can submit security issues and know that they are
being taken serious. From the proposal website:

> "When security risks in web services are discovered by independent
security researchers who understand the severity of the risk, they often
lack the channels to disclose them properly. As a result, security
issues may be left unreported. security.txt defines a standard to help
organizations define the process for security researchers to disclose
security vulnerabilities securely.”

See also https://securitytxt.org
2024-02-16 12:34:41 +11:00
25291b64eb fix: highlighting issue in recipient selection 2024-02-15 22:25:23 +05:30
fddd860d15 chore: code refactor to avoid repetitions 2024-02-15 11:33:43 +00:00
fe2093fe7c feat: add next-runtime-env (#869)
This PR adds the package
[next-runtime-env](https://github.com/expatfile/next-runtime-env/) to
populate the public environment variables at runtime.
2024-02-15 22:10:21 +11:00
7fbe9b519c fix: styling 2024-02-15 20:42:17 +11:00
bd3c64658a feat: add document version history UI 2024-02-15 20:39:26 +11:00
769eaa0ed9 feat: add roles to templates recipients 2024-02-15 07:01:41 +00:00
49cddfab38 chore: lint with oxc 2024-02-15 06:11:50 +00:00
3e12a05ab8 chore: more grammar 2024-02-14 17:19:48 +01:00
a76504c0a4 Merge branch 'main' into chore-security-text 2024-02-14 17:16:44 +01:00
abab0c0a22 chore: grammer and format 2024-02-14 17:14:43 +01:00
c680cfc24f chore: update pr based on review 2024-02-14 14:55:46 +00:00
cab875f68a fix: update create delete user sql script 2024-02-14 14:55:46 +00:00
6daaa3a6d4 Merge branch 'main' into feat/account-deletion 2024-02-14 14:54:26 +00:00
61958989b4 feat: more webhook functionality 2024-02-14 14:38:58 +02:00
4c5b910a59 chore: add examples 2024-02-14 13:15:35 +11:00
f72b669f67 feat: restrict app access for unverified users (#835) 2024-02-13 20:22:43 +11:00
536cafde31 Merge branch 'main' into feat/disable-access-unverified-users 2024-02-13 20:19:16 +11:00
d052f02013 chore: refactor code 2024-02-13 06:01:25 +00:00
4878cf388f chore: add the missing signIn function 2024-02-13 07:53:36 +02:00
149f416be7 chore: refactor code 2024-02-13 07:50:22 +02:00
524a2f4ea9 Merge branch 'main' into feat/separate-document-page 2024-02-13 11:15:31 +11:00
82b87739d0 fix: update document links 2024-02-12 19:00:47 +11:00
c432261dd8 chore: disable button while form is submitting 2024-02-12 09:49:59 +02:00
1852aa4b05 chore: add info 2024-02-12 09:49:59 +02:00
a868ecf2d2 fix: restrict team verification tokens (#927)
## Description

Currently we're not restricting team transfer and email verification
tokens from flowing into the frontend.

This changes restricts it to only return the required information
instead of the whole data object.
2024-02-12 18:23:07 +11:00
071475769c feat: add document page view 2024-02-12 17:30:23 +11:00
b1bb345929 fix: redirect URL preventing document flow (#925)
## Description

Currently the document redirect URL feature is preventing documents from
being created unless a redirect URL is provided.

During the document edit flow, the redirect URL is hidden in an advanced
tab with the value of an empty string, which will always fail the
current Zod validation since `optional` requires undefined to pass.

There are multiple ways to fix this, but I think this is the easiest
method where we can assume an empty string is valid.
2024-02-12 15:23:15 +11:00
1a82740d0f feat: support recipient roles 2024-02-12 15:16:09 +11:00
51608ed390 fix: lint issue 2024-02-12 02:02:43 +00:00
8ebef831ac Merge branch 'main' into feat/add-runtime-env 2024-02-12 12:30:35 +11:00
20e2976731 fix: build issues 2024-02-12 01:29:22 +00:00
3a32bc62c5 feat: initial document audit logs implementation (#922)
Added initial implementation of document audit logs.
2024-02-12 12:04:53 +11:00
0209127136 feat: delete webhook functionality 2024-02-09 16:28:18 +02:00
ddb9dd11d7 feat: added backend stuff 2024-02-09 16:07:33 +02:00
b3ba77dfed feat: allow user to choose expiry date 2024-02-09 11:35:09 +02:00
4f990a7030 feat: redirect users upon signing completion (#888)
**Description:** 

- This PR adds a feature to redirect the users to a specific URL upon
signing
2024-02-09 13:31:01 +05:30
e26debe836 Merge branch 'main' into feat/sign-redirect 2024-02-09 12:10:20 +05:30
e91bb78f2d Merge branch 'main' into feat/public-api 2024-02-09 16:00:40 +11:00
8641884515 fix: recipients with CC role not being editable (#918)
## Description

Fixed issue where setting a recipient role as CC will prevent any
further changes as it is considered as "sent" and "signed".

## Other changes

- Prevent editing document after completed
- Removed CC and Viewers from the field recipient list since they will
never be filled
- Minor UI issues

## Checklist

- [X] I have tested these changes locally and they work as expected.
- [X] I have added/updated tests that prove the effectiveness of these
changes.
- [X] I have followed the project's coding style guidelines.
2024-02-09 12:37:17 +11:00
748bf6de6b fix: add dropped constants from merge 2024-02-08 22:12:04 +11:00
d13cf743bf Merge branch 'main' into feat/add-runtime-env 2024-02-08 22:06:59 +11:00
09b5621542 Merge branch 'main' into feat/sign-redirect 2024-02-08 12:56:42 +05:30
98df273ebc feat: add field and recipient endpoints 2024-02-08 16:58:44 +11:00
47b8cc598c fix: add validation and error message display 2024-02-08 04:28:16 +00:00
e97b9b4f1c feat: add team templates (#912) 2024-02-08 12:33:20 +11:00
b3514bd0c7 add new webhook dialog 2024-02-07 16:04:12 +02:00
e0889426bb feat: blog article why i started documenso (#914)
- New Blogarticle
- First Draft
- Input and impressions welcome
- Not Grammer fixed yet, will do that later (grammerly account broken)
2024-02-07 13:13:33 +01:00
e2a5638f50 chore: fixed 2024-02-07 13:07:22 +01:00
33ab8797a5 chore: text 2024-02-07 12:22:07 +01:00
c7e0b73c97 Merge branch 'main' into feat/why-i-started-documenso 2024-02-07 12:00:22 +01:00
b6bdbf72a7 Update apps/marketing/content/blog/why-i-started-documenso.mdx
Co-authored-by: Adithya Krishna  <aadithya794@gmail.com>
2024-02-07 12:00:12 +01:00
718f5664ac Update apps/marketing/content/blog/why-i-started-documenso.mdx
Co-authored-by: Adithya Krishna  <aadithya794@gmail.com>
2024-02-07 12:00:01 +01:00
58477e060a Update apps/marketing/content/blog/why-i-started-documenso.mdx
Co-authored-by: Adithya Krishna  <aadithya794@gmail.com>
2024-02-07 11:41:40 +01:00
2e719288ff Update apps/marketing/content/blog/why-i-started-documenso.mdx
Co-authored-by: Adithya Krishna  <aadithya794@gmail.com>
2024-02-07 11:41:32 +01:00
2431db06f5 Update apps/marketing/content/blog/why-i-started-documenso.mdx
Co-authored-by: Adithya Krishna  <aadithya794@gmail.com>
2024-02-07 11:41:14 +01:00
754e9b15f7 Update apps/marketing/content/blog/why-i-started-documenso.mdx
Co-authored-by: Adithya Krishna  <aadithya794@gmail.com>
2024-02-07 11:40:11 +01:00
7d39e3d065 feat: add team feature flag (#915)
## Description

Add the ability to feature flag the teams feature via UI.

Also added minor UI changes

## Checklist

- [X] I have tested these changes locally and they work as expected.
- [X] I have added/updated tests that prove the effectiveness of these
changes.
- [X] I have followed the project's coding style guidelines.
2024-02-07 21:32:44 +11:00
7bb00c1c89 Merge branch 'main' into feat/why-i-started-documenso 2024-02-07 14:05:28 +05:30
7ef771533a Merge branch 'main' into transparent-fields 2024-02-07 13:34:46 +05:30
70c58470c1 fix: update field remove logic (#916)
## Description

Fixed issue where you are prevented from removing fields for a recipient
that has multiple fields.

Example:

Recipient has 3 fields, you remove 1 and proceed to next step. In the
next step the field reappears as it was not deleted.

## Checklist

- [X] I have tested these changes locally and they work as expected.
- [X] I have added/updated tests that prove the effectiveness of these
changes.
- [X] I have followed the project's coding style guidelines.
2024-02-07 16:39:54 +11:00
cad48236a0 Merge branch 'main' into feat/disable-access-unverified-users 2024-02-07 16:30:22 +11:00
bf26f2cb9d fix: empty document titles (#917)
fixes: #909
2024-02-07 16:25:39 +11:00
58e2eda5e9 fix: update field remove logic 2024-02-07 14:40:15 +11:00
94ddb0252b fix: stuff 2024-02-06 19:09:27 +01:00
2f696ddd13 feat: blog article why i started documenso 2024-02-06 18:55:16 +01:00
edeeaa5651 feat: implement webhooks 2024-02-06 16:12:31 +02:00
1dd543247e chore: update branch
Signed-off-by: Adithya Krishna <adi@documenso.com>
2024-02-06 18:07:24 +05:30
2636d5fd16 chore: finish and clean-up redirect post signing
Signed-off-by: Adithya Krishna <adi@documenso.com>
2024-02-06 18:04:56 +05:30
fe4345eeb9 fix: add responsive for blog preview mobile view (#906)
This Issue https://github.com/documenso/documenso/issues/904
2024-02-06 16:45:46 +11:00
0c339b78b6 feat: add teams (#848)
## Description

Add support for teams which will allow users to collaborate on
documents.

Teams features allows users to:

- Create, manage and transfer teams
- Manage team members
- Manage team emails
- Manage a shared team inbox and documents

These changes do NOT include the following, which are planned for a
future release:

- Team templates
- Team API
- Search menu integration

## Testing Performed

- Added E2E tests for general team management
- Added E2E tests to validate document counts

## Checklist

- [X] I have tested these changes locally and they work as expected.
- [X] I have added/updated tests that prove the effectiveness of these
changes.
- [ ] I have updated the documentation to reflect these changes, if
applicable.
- [X] I have followed the project's coding style guidelines.
2024-02-06 16:16:10 +11:00
30752815e7 feat: soft-delete transfered documents 2024-02-05 13:06:36 +00:00
bc989075ba Merge branch 'main' into feat/account-deletion 2024-02-05 13:01:59 +00:00
4c09867b55 feat: transfer completed and pending documents to deleted email 2024-02-05 12:47:22 +00:00
4d93ed60c5 feat: add deleted account migration 2024-02-05 12:12:02 +00:00
9ed16c64d8 Merge branch 'main' of https://github.com/documenso/documenso into feat/sign-redirect 2024-02-05 13:13:16 +05:30
94e72534e0 chore: updated redirection
Signed-off-by: Adithya Krishna <adi@documenso.com>
2024-02-05 13:13:12 +05:30
c6457e75e0 feat: migration for verifying paid users (#889) 2024-02-05 14:17:01 +11:00
f5930dc934 perf: mentioned type and size of the doc to be uploaded (#867)
explicitly mentioned "PDF" to upload, and added a toast if pdf size is
greater than 50mb

fixes: #621
2024-02-05 12:50:35 +11:00
c970abc871 added onchange handler 2024-02-02 20:46:54 +05:30
d5b3df1648 fixed variable declaration 2024-02-02 19:32:39 +05:30
142c1c003e changed useEffect variables 2024-02-02 18:16:54 +05:30
a06c628653 Merge branch 'main' of https://github.com/plxity/documenso into fix/undo-button-in-canvas 2024-02-02 17:56:58 +05:30
7ca3697303 Merge branch 'main' of https://github.com/plxity/documenso into fix/undo-button-in-canvas 2024-02-02 14:49:06 +05:30
d598677dc5 feat: add transparent background to fields 2024-02-02 08:36:54 +00:00
8ac2209493 Merge branch 'main' into chore-security-text 2024-02-02 16:16:25 +11:00
8f3a52e1fd fix: update e2e test 2024-02-02 04:49:42 +00:00
861225b7c4 fix: Prevent users from bypassing document limitations (#898)
## Description

**Fixed document limitation bypassing issues through templates.**
Previously, users could bypass document restrictions by utilizing
templates even after reaching their limitations. This fix ensures that
templates will no longer function as a workaround when users reach their
document limits.

## Changes
1. imported `useLimits` hook on `data-table-templates.tsx`
2. Disabled the 'Use Template' button when the user reaches their limit.
3. Added an Alert Component on top of the templates page to notify users
that they can't use templates anymore because they have reached their
limit.
4. Used `getServerLimits` hook on `template-router` to a condition on
the server.

## Example

![image](https://github.com/documenso/documenso/assets/87828904/275e83ea-ca7b-4b0e-83f4-ac10da9aff6a)

## Issue
Closes #883
2024-02-02 15:48:42 +11:00
7210d48b64 fix: update dockerfile to support encryption keys 2024-02-02 04:37:29 +00:00
5cf2f0a30e fix: only throw crypto key errors on server 2024-02-02 04:24:49 +00:00
9c4ec34a3c fix: add precommit step for .well-known 2024-02-02 04:00:28 +00:00
7ece6ef239 feat: add recipient roles (#716)
Fixes #705

---------

Co-authored-by: Lucas Smith <me@lucasjamessmith.me>
Co-authored-by: David Nguyen <davidngu28@gmail.com>
2024-02-02 10:45:02 +11:00
e42088a5bf feat: add user security audit logs (#884)
## Description

Adds the ability to see the events relating to the account.

Event data includes:
- Device
- IP Address
- Time
- Action

Actions are:

- Profile update
- Account linked to SSO (Example user signs in with Google after
creating a email/password account)
- Enable 2FA
- Disable 2FA
- Reset password
- Update password
- Sign out
- Sign in
- Sign in fail
- Sign in 2FA fail

## Changes

- Added audit logs
- Updated 2FA dialogs to have consistent footers
- Update `/settings/security/page` layout

## Testing Performed

Tested events:


![image](https://github.com/documenso/documenso/assets/20962767/8ab9e055-aa58-4621-86fe-24681cce6418)

More tested events:


![image](https://github.com/documenso/documenso/assets/20962767/b6b42e13-626e-4fed-8e1a-097e5324aa6d)

## Checklist

- [X] I have tested these changes locally and they work as expected.
- [X] I have followed the project's coding style guidelines.

## Additional Notes

- Not sure if we really want to record the sign out event or not
- Might want to design breadcrumbs for nested setting pages
2024-02-02 09:42:25 +11:00
ec3ba0e922 fix: active-tab changes correctly (#897)
fixes: #890
2024-02-02 08:30:02 +11:00
56683aa998 fix: Added signing pad disable state while submitting form (#892)
Fixes : #891
2024-02-01 19:14:37 +11:00
39be53ace8 fix: show fields on every step while editing documents (#881)
![CleanShot 2024-01-29 at 00 51
31@2x](https://github.com/documenso/documenso/assets/55143799/d577e027-92d1-48fa-940b-1359386367c5)

![CleanShot 2024-01-29 at 00 51
39@2x](https://github.com/documenso/documenso/assets/55143799/ce2df10e-e254-4854-89a1-ba86d7b05a42)
2024-02-01 12:55:31 +11:00
7fbf124b89 fix: use div instead of rnd for preview fields 2024-02-01 01:10:50 +00:00
1f142e334a Merge branch 'main' into chore-security-text 2024-01-31 20:31:34 +01:00
f4c24fd944 feat: add a feature for redirecting users on signing
Signed-off-by: Adithya Krishna <adi@documenso.com>
2024-01-31 18:17:43 +05:30
3541a805e5 chore: add migration file
Signed-off-by: Adithya Krishna <adi@documenso.com>
2024-01-31 18:16:07 +05:30
08f82b23dc fix: update env entries to evaluate at runtime 2024-01-31 22:32:42 +11:00
27d8098511 fix: document count period filter (#882)
## Description

Currently the count for the documents table tabs do not display the
correct values when the period filter is applied.

## Changes Made

- Updated `getStats` to support filtering on period

## Testing Performed

- Tested to see if the documents tab count were being filtered based on
the period

## Checklist

- [X] I have tested these changes locally and they work as expected.
- [X] I have followed the project's coding style guidelines.
2024-01-31 12:40:37 +11:00
ada46a5f47 feat: add auth fail logs 2024-01-31 12:27:40 +11:00
747a7b0aea chore: security contacts and descr 2024-01-30 16:15:32 +01:00
6053a4a40a chore: refactor 2024-01-30 12:56:32 +02:00
cc090adce0 chore: refactor 2024-01-30 12:54:48 +02:00
1bda74b3aa fix: add cascade delete for audit logs 2024-01-30 18:37:48 +11:00
9427143951 fix: remove account create log 2024-01-30 18:26:46 +11:00
7e15058a3a feat: add user security audit logs 2024-01-30 17:32:20 +11:00
620ae41fcc feat: added password validation (#469)
This PR Fixes #464
2024-01-30 14:26:47 +11:00
f8125aec54 feat: show fields on other sections 2024-01-30 00:09:22 +00:00
375df71f5c Merge branch 'main' into chore-security-text 2024-01-29 16:43:57 +01:00
c0bb5205e1 chore: merged main 2024-01-29 10:14:56 +02:00
1676f5bf6c chore: removed unused code 2024-01-29 09:43:38 +02:00
f514d55d27 chore: removed unused schema 2024-01-29 09:41:02 +02:00
9d6ee94708 chore: add title and description to individual pages (#847)
Add Title and Description to Individual Pages.
eg:- Security | Documenso, Profile | Documenso etc.
2024-01-29 17:53:44 +11:00
f3df0d9c13 fix: add env example crypto defaults back 2024-01-29 16:24:13 +11:00
a3a4480b03 Merge branch 'main' into fix/show-fields-subject 2024-01-29 01:40:49 +00:00
4af5ce3a6b chore: remove border color for field item 2024-01-29 01:38:44 +00:00
4ae19a9e63 chore: tidy code 2024-01-29 00:59:08 +00:00
6d5fe4eea3 fix: show the fields on the document at the subject selection page 2024-01-29 00:47:11 +00:00
354e16901c fix: sign dialog completed title color in dark mode (#879) 2024-01-29 11:08:31 +11:00
09aa10dad6 chore: rewording to avoid confusion between signed and original document (#880) 2024-01-29 11:04:57 +11:00
014c09bd91 fix: account deletion error for users without two factor authentication 2024-01-28 18:43:20 +00:00
927a656c57 Create security.txt
See also https://securitytxt.org
2024-01-28 01:00:07 +01:00
671fd916b5 fix: resolve conflicting z-index values btwn avatar in document list and header (#872)
## Description

This pull request solves the problem where the avatar component within
the document list has the same z-index value as the header component,
causing the avatar to be above the header. When two elements have the
same z-index value, the last one takes priority!

## Related Issue
Fixes #870 

## Changes Made

1. Increases the value of the header's `z-index` by `10` (the current
value is `50`
2024-01-27 13:16:59 +11:00
751fb5275c Merge branch 'main' into feat/add-runtime-env 2024-01-26 14:04:54 +02:00
a3ddbc15e9 Feat/commodifying signing (#874) 2024-01-26 12:36:33 +01:00
b2cca9afb6 chore: refactor 2024-01-26 13:27:36 +02:00
c7a04c7184 Merge branch 'main' into feat/commodifying-signing 2024-01-26 12:03:33 +01:00
8619e02d04 chore: quote fix 2024-01-26 12:02:30 +01:00
91c89e8bfb chore: quote fix 2024-01-26 12:01:53 +01:00
fdeab19a7f chore: fix paragh quote break 2024-01-26 12:00:00 +01:00
fd2a61f651 feat: commodifying signing (#865)
Adding the new blog article: Commodifying Signing
2024-01-25 17:01:30 +01:00
e2fa01509d chore: avoid returning unnecessary info 2024-01-25 17:33:35 +02:00
311c8da8fc chore: encrypt and decrypt email addr 2024-01-25 17:24:37 +02:00
56f65f3bb3 chore: typos 2024-01-25 15:39:34 +01:00
75ad8a4885 chore: typos 2024-01-25 15:35:57 +01:00
db36f69273 Merge branch 'main' into feat/commodifying-signing 2024-01-25 15:26:25 +01:00
49ecfc1a2c chore: refactor 2024-01-25 15:42:40 +02:00
ffee2b2c9a chore: merged main 2024-01-25 13:43:11 +02:00
2f18518961 chore: merged main 2024-01-25 10:53:05 +02:00
d451a7acce feat: add next-runtime-env 2024-01-25 10:48:20 +02:00
d8aecc4092 fixed undo operation on signature pad 2024-01-25 13:21:55 +05:30
d766b58f42 feat: add server crypto (#863)
## Description

Currently we are required to ensure PII data is not passed around in
search parameters and in the open for GDPR reasons.

Allowing us to encrypt and decrypt values with expiry dates will allow
us to ensure this doesn't happen.

## Changes Made

- Added TPRC router for encryption method

## Testing Performed

- Tested encrypting and decrypting data with and without `expiredAt`
- Tested via directly accessing API and also via trpc in react
components
- Tested parsing en email search param in a page and decrypting it
successfully

## Checklist

- [X] I have tested these changes locally and they work as expected.
- [X] I have followed the project's coding style guidelines.
2024-01-25 16:07:57 +11:00
e90dd518df fix: auto verify google sso emails (#856) 2024-01-25 13:30:50 +11:00
ee0af566a9 fix: correct document tab count for pending and completed (#855)
completed/pending status gets incremented once if sender is one of the
recipients

fixes #853
2024-01-25 11:29:04 +11:00
11dd93451a feat: sign up with Google (#862)
This PR links to this issue: #791 
Now users can see a new option to sign up with Google on the signup
page.
2024-01-25 11:22:19 +11:00
2be022b9fc feat: commodofying signing blogpost 2024-01-24 18:01:26 +01:00
0fac7d7b70 chore: add tags to manifest 2024-01-24 16:52:38 +01:00
b115d85fb7 fix: disabled signing pad when submitting form (#842)
fixes : #810
2024-01-24 17:12:33 +11:00
51d140cf9a feat: command group distinction (#854)
fixes #836 

- Explicit `div` is used instead of `<CommandSeparator/>` , since it
failed to render borders for dynamic search results, but only works for
initial menu.

(initial menu)

![cgrp](https://github.com/documenso/documenso/assets/85569489/0ee0aabb-c780-4c03-97e7-cf9905bb9b61)

(search results)

![dyanmic](https://github.com/documenso/documenso/assets/85569489/74b0a714-a952-4516-9787-53d50a60b78c)
2024-01-24 17:03:57 +11:00
caec2895cc chore: first small step to tracking growth mechanics (#859) 2024-01-24 14:03:16 +11:00
61967b22c1 fix: visibility of security fields using identityprovider (#709)
fixes #690
2024-01-24 11:34:30 +11:00
8b8ca8578b chore: add adi to open page (#858)
name: Add addi to open page
2024-01-23 23:11:19 +05:30
576544344f chore: first small step to tracking growth mechanics 2024-01-23 16:20:25 +01:00
1efadb19f5 chore: add addi to open page 2024-01-23 15:54:57 +01:00
e5c2263e92 fix: imporoved document-dropzone ui for small vertical screens 2024-01-23 18:37:02 +05:30
bc1d5cea0a fix: docker compose variable (#845)
Actually:

![Uz9ioXw](https://github.com/documenso/documenso/assets/26726263/553bb75a-a7fd-4707-9817-14a053ed75f4)
2024-01-23 19:50:49 +11:00
6aed075c56 fix: add conditional rendering of OAuth providers (#736)
Now google OAuth provider is not rendered if client id is not provided
2024-01-23 17:08:48 +11:00
e63122a718 chore: update github feature template (#849) 2024-01-23 11:28:11 +11:00
08011f9545 chore: added target blank for github link: (#851) 2024-01-23 11:27:10 +11:00
4909eee401 feat: add viewing on completed page for pending documents 2024-01-22 21:36:46 +11:00
5a28eaa4ff feat: add recipient creation 2024-01-22 17:38:02 +11:00
e8c2ca8890 fix: mask documents in search 2024-01-22 12:32:19 +11:00
9e433af112 feat: require 2fa code before account is deleted 2024-01-21 15:38:32 +00:00
7762b1db65 feat: add loading to button 2024-01-21 09:47:50 +00:00
a3e560899a feat: delete user from db and unsubscribe from stripe 2024-01-20 23:30:56 +00:00
f652ca9b73 feat: account deletion confirmation dialog 2024-01-20 19:07:47 +00:00
9cc8bbdfc3 fix: docker compose variable 2024-01-20 17:45:59 +01:00
1191e1d9c3 feat: linear-gh blogpost (#827) 2024-01-20 12:18:23 +11:00
9c1e1f50a8 fix: mask recipient tokens for non-owners 2024-01-20 01:14:34 +00:00
b6aface982 chore: update api description 2024-01-19 16:59:48 +02:00
b28a7f9702 chore: add openapi 2024-01-19 16:55:16 +02:00
efb9e9f3ec Merge branch 'main' into feature/linear-gh 2024-01-18 17:17:01 +01:00
a7672545d7 Update apps/marketing/content/blog/linear-gh.mdx
Co-authored-by: Adithya Krishna  <aadithya794@gmail.com>
2024-01-18 17:16:49 +01:00
1a10cd2ae1 Update apps/marketing/content/blog/linear-gh.mdx
Co-authored-by: Adithya Krishna  <aadithya794@gmail.com>
2024-01-18 17:16:28 +01:00
204388888d fix: fix bug for completed document shortcut (#839)
When you're in the `/documents` page in the dashboard, if you hover over
a draft and a completed document, you'll see different URLs.

At the moment, the shortcut tries to go to the following URL for a
completed document `/documents/{doc-id}`.

However, that's the wrong URL, since the URL for a completed doc is
`/sign/{token}` when the user is the recipient, not the one that sent
the document for signing.

If it's the document owner & the document is completed, the URL is fine
as `/documents/{doc-id}`.

---------

Co-authored-by: Lucas Smith <me@lucasjamessmith.me>
2024-01-18 09:38:42 +02:00
0d977e783e refactor: download function to be reusable (#740) 2024-01-18 15:24:36 +11:00
0d15b80c2d fix: simplify code 2024-01-18 04:23:22 +00:00
4e9cce0df0 chore: improve request template (#833)
Ref #622 
Consolidated the template(removed redundant fields), added appropriate
validation.
2024-01-18 12:13:20 +11:00
6f726565e8 Update README.md
We are nominated for a Product Hunt Gold Kitty 😺 and appreciate any support: https://documen.so/kitty
2024-01-17 14:36:28 +01:00
3b82ba57f3 chore: implemented feedback plus some restructuring 2024-01-17 12:44:25 +02:00
9ff44f10a6 chore: add incident blog post 2024-01-17 21:41:00 +11:00
16d97783f2 feat: improve the UX for password protected documents (#780) 2024-01-17 19:32:42 +11:00
91dd10ec9b fix: add symmetric encryption to document passwords 2024-01-17 17:28:28 +11:00
a94b829ee0 fix: tidy code 2024-01-17 17:17:08 +11:00
1bc885478d fix: display the number of documents in mobile view (#837)
This PR fixes #782.
It now displays the document count on mobile view.
2024-01-17 11:10:28 +11:00
b4b146ee49 Merge branch 'main' into Gautam-Hegde/issue#622 2024-01-16 23:27:34 +05:30
4aefb80989 feat: restrict app access for unverified users 2024-01-16 14:25:05 +02:00
560352492d fix: keyboard shortcut ctrl+k fixed (#830) 2024-01-16 13:07:42 +11:00
67aebaac1a Update improvement.yml code quality 2024-01-16 01:14:48 +05:30
a593e045b5 Update improvement.yml 2024-01-16 00:08:04 +05:30
84b0c2756b fix: fixed the deleting signature block issue on touchscreens (#809)
Fixed the deleting signature block issue on touchscreens, for some
reason the `onClick` event isn't working on the touchscreens that's why
I've added `onTouchEnd` event to delete the signature block when the
user clicks on it.
2024-01-15 19:33:40 +11:00
58b3a127ea chore: fix color for light mode icon (#806) 2024-01-15 10:48:55 +11:00
7e71e06e04 fix: keyboard shortcut ctrl+k default behaviour fixed 2024-01-13 14:19:37 +05:30
68953d1253 feat add documentPassword to documenet meta and improve the ux
Signed-off-by: harkiratsm <multaniharry714@gmail.com>
2024-01-12 20:54:59 +05:30
1a73f3e007 chore: feedback and phrasing 2024-01-11 14:27:44 +01:00
d73ef57794 Merge branch 'main' into fix/bug-798-signatures-block 2024-01-11 16:50:43 +08:00
ea0120abc8 chore: typo 2024-01-10 16:51:42 +01:00
b501ffdee9 chore: images 2024-01-10 16:37:53 +01:00
31050d6b7b chore: spelling 2024-01-10 16:14:28 +01:00
ed1998278a feat: draft github blogpost 2024-01-10 16:14:02 +01:00
eeb6a072aa Merge branch 'main' into harkirat/Protect 2024-01-10 10:45:19 +05:30
b09071ebc7 feat: jump to next field (#805)
When the fields are not filled, the button will say "Next field". Clicking on the button takes you to
the unfilled field.
2024-01-10 15:27:18 +11:00
66bb56047a chore: update roadmap links 2024-01-09 14:32:49 +01:00
f9d26e6b3f fix: stepsRemaining value of the early adopters plan's input section (#803) 2024-01-08 19:09:34 +11:00
3054d84ba7 chore: implemented feedback 2024-01-08 09:58:34 +02:00
a71078cbd5 fix: fixed the deleting signature block issue on touchscreens 2024-01-08 13:17:30 +08:00
4fd6a0d5b6 chore: update onOpenChange 2024-01-05 13:06:16 +02:00
fface15a22 feat: jump to next field 2024-01-05 12:56:07 +02:00
6be119ac95 fix: improve document meta logic 2024-01-03 20:10:50 +11:00
b8a45dd5e3 chore: fix package vulnerabilities (#802)
**Description:**

Fixes Dependabot Vulnerabilities listed here,
https://github.com/documenso/documenso/security/dependabot
2024-01-03 13:31:38 +05:30
5660b99df7 chore: fix package vulnerabilities
Signed-off-by: Adithya Krishna <adi@documenso.com>
2024-01-03 13:23:13 +05:30
8c5216cd44 feat: updated one-click deploys (#770)
**Description:**

- Added `railway.toml` to deploy from `/docker/Dockerfile`
- Added Koyeb as a deploy option
2024-01-03 13:13:48 +05:30
e646c4cf08 Merge branch 'main' into feat/1click-deploys 2024-01-03 12:49:59 +05:30
d8cbe1d5ba Merge branch 'main' into harkirat/Protect 2024-01-03 11:34:42 +05:30
5d56b152d6 fix: fixed padding in footer (#794)
fixes: #793
2024-01-03 13:29:13 +11:00
5c16b10dc2 fix: update footer to be responsive 2024-01-03 13:16:27 +11:00
9bcd6e39e7 docs: change url for cloning (#784) 2024-01-03 12:59:33 +11:00
2202fa3d04 chore: update the stale to prevent automatic closure of issues (#799)
Issues that have an open pull request and are currently in the review
period have been closed due to inactivity before.
2024-01-03 12:55:27 +11:00
c1a6a327af chore: update stale workflows 2024-01-03 12:54:32 +11:00
837c17f1f3 chore: hide empty accordion for documents without date field (#800) 2024-01-03 12:44:57 +11:00
d731532fbf chore: hide empty accordion for documents without date field 2024-01-02 04:58:35 +00:00
6a26ab4b2b fix: toast import errors 2024-01-02 04:52:15 +00:00
b76d2cea3b fix: changes from code review 2024-01-02 04:38:35 +00:00
d02f6774b2 chore: update the stale to prevent automatic closure of issues 2024-01-01 17:41:29 +00:00
a1215df91a refactor: extract api implementation to package
Extracts the API implementation to a package so we can
potentially reuse it across different applications in the
event that we move off using a Next.js API route.

Additionally tidies up the tokens page and form to be more simplified.
2023-12-31 13:58:15 +11:00
77facba8b4 docs(url): change URL for cloning 2023-12-30 18:27:24 -05:00
53c570151f fix lint, description of dialog
Signed-off-by: harkiratsm <multaniharry714@gmail.com>
2023-12-29 22:11:44 +05:30
e900706ab0 Merge branch 'documenso:main' into docs/change-url-for-cloning 2023-12-29 08:50:49 -05:00
bed788f78f docs(url): change URL for cloning 2023-12-29 08:48:26 -05:00
72a7dc6c05 fix the console error
Signed-off-by: harkiratsm <multaniharry714@gmail.com>
2023-12-29 17:26:33 +05:30
341481d6db fix: trimmed long file names for better UX (#760)
Fixes #755 

### Notes for Reviewers
- The max length of the title is set to be `16`
- If the length of the title is <16 it returns the original one.
- Or else the title will be the first 8 characters (start) and last 8
characters (end)
- The truncated file name will look like `start...end`

### Screenshot for reference


![image](https://github.com/documenso/documenso/assets/88539464/565e4868-7bb1-4b46-9cb0-886d542b8a01)

---------

Co-authored-by: Catalin Pit <25515812+catalinpit@users.noreply.github.com>
2023-12-29 12:18:19 +02:00
8f5634268d feat: add templates to command menu (#786) 2023-12-29 15:16:26 +11:00
5d6f69dc19 fixed padding issue in footer 2023-12-28 23:30:20 +05:30
5307fa6453 fixed padding issue in footer 2023-12-28 23:29:44 +05:30
0bb86963a9 rolled back to original file 2023-12-28 23:27:45 +05:30
fb0d9b8ef9 fixed padding in footer 2023-12-28 23:14:46 +05:30
918c6f19f2 fix: fixed the title box overlapping issue (#785)
The issue is fixed. Now the box is no more overlapping

<img width="305" alt="Screenshot 2023-12-26 at 10 20 32 AM"
src="https://github.com/documenso/documenso/assets/77022877/bd17ed92-7bb0-4f3a-b0f6-173e5f6b5029">
2023-12-28 11:36:46 +02:00
3f89f8725b fix: resolve conflicting z-index values (#788)
## Description

Currently there are various z-index values that are causing:
- Toasts to be placed behind dialog blur background
- Menu being cropped off by header

## Changes Made

- Revert `z-[1000]` back to `z-50` for the header (not exactly sure why
it was bumped)
- Refactor z-indexes over 9000 to start from 1000
- Ensure z-index of toast is higher than dialog
2023-12-28 20:08:19 +11:00
c4800f74b9 feat: update disabled dropzone text (#787)
Update the dropzone so it will display the relevant disabled text based
on the reason it is disabled.
2023-12-28 20:07:29 +11:00
d8eff192fe fix: update date format and add missing default 2023-12-27 14:05:50 +11:00
eb84d7ff3c fix: remove invalid migration 2023-12-27 14:05:49 +11:00
32633f96d2 feat: dateformat and timezone customization (#506) 2023-12-27 14:05:49 +11:00
27b7e29be7 feat: added undo button while drawing signature (#480) 2023-12-27 14:05:49 +11:00
de4a0b2560 chore: update lint-staged config 2023-12-27 14:05:49 +11:00
5a11de1db9 feat: disable upload document animation for unverified users (#749) 2023-12-27 13:54:46 +11:00
f7cf33c61b fix: Layout issue in the singleplayer mode (#759)
Fixes #744
2023-12-26 14:08:05 +11:00
8f4fea2f14 chore: user metrics naming, adopters description (#769)
Rename Metrics
2023-12-26 13:25:45 +11:00
5a32b5cafd fix: added constants for theme variables (#777)
fixes: #776
2023-12-26 10:49:27 +11:00
8d1b960aa8 feat: add templates to command menu 2023-12-25 23:16:56 +00:00
2b25806c33 fix(url): change URL for cloning 2023-12-23 23:26:53 -05:00
6d58e60a65 fix(url): change URL for cloning 2023-12-23 23:18:32 -05:00
2ae9e29903 feat: improve the ux for password protected documents
Signed-off-by: harkiratsm <multaniharry714@gmail.com>
2023-12-22 17:24:05 +05:30
dd56836121 chore: update url 2023-12-22 11:44:22 +05:30
e9312ada51 feat: show document title for delete dialog - [DOC-387] (#772) 2023-12-22 15:09:03 +11:00
1c52c7ebcd chore: update copy 2023-12-22 03:43:12 +00:00
495cd35f7c refactor: forms (#697)
Updates our older forms to use the appropriate components bringing them in-line with the rest of our codebase.
2023-12-22 14:36:00 +11:00
JA
5a5d00fb2e fix(webapp): reset delete document dialog (#762)
This PR makes a small but useful tweak to the `DeleteDocumentDialog`.
Now, the input field gets cleared whenever the dialog is opened. Here’s
what’s changed:

1. **Clear Field After Deleting**: After you delete something and open
the dialog again, it won’t show the old, deleted text anymore. It’s
clean and ready for the next delete.

2. **Type Again to Confirm**: If you type something but close the dialog
without deleting, you’ll have to type it again next time. This way, it
makes sure the user really mean to delete something and didn't do it by
mistake.

Demo Link:
See the old vs. new in action here:
https://www.loom.com/share/80eca0d3b1994f7cbcab6f222db2dbfe?sid=ebc6135c-345e-4640-b395-daff190a96e7

It’s a small change, but it makes the delete process safer and smoother.
2023-12-22 14:14:33 +11:00
1aa0fc3101 fix: remove loadingText prop 2023-12-22 01:46:41 +00:00
d283cc2d26 chore: implemented feedback 2023-12-21 16:02:02 +02:00
48cdf43dcb feat: templates (#537)
Adds the basically ability to create and use templates for repetitive document types
2023-12-21 22:05:09 +11:00
1d9593dd0f fix: hotkeys was overlapping with the browser hotkeys (#774)
Issue - The `Ctrl+K` hotkey in our application is conflicting with the
browser's default search hotkey, leading to unintended browser actions.

https://github.com/documenso/documenso/assets/71957674/180b6028-58f7-4cf8-841c-1e13c9d4d355
2023-12-21 21:40:07 +11:00
9ad94f9862 fix: updates from review 2023-12-21 21:37:33 +11:00
972c20f906 chore: tidy migrations 2023-12-21 21:20:37 +11:00
519c645d06 fix: hotkeys was overlapping with the browser hotkeys
Signed-off-by: harkiratsm <multaniharry714@gmail.com>
2023-12-21 15:36:24 +05:30
7babd82470 fix: updates from review 2023-12-21 20:42:45 +11:00
6a56905fea chore: merged main 2023-12-21 10:14:07 +02:00
298396c86c fix: awaiting in promise.all array 2023-12-21 17:36:35 +11:00
268a5c6508 fix: swap server-actions for trpc mutations 2023-12-21 17:01:12 +11:00
c40c9b20ec Merge branch 'main' into feat/document-templates 2023-12-21 14:25:22 +11:00
a22ada5f41 chore: add delete cascade 2023-12-20 14:44:43 +02:00
fb46b09e4f chore: small changes 2023-12-20 12:47:46 +02:00
84a0c39810 chore: made requested changes
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-20 10:36:06 +05:30
1af909835d chore: updated title to double quotes
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-19 22:25:23 +05:30
01caa949d9 feat: show document title for delete dialog
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-19 22:20:50 +05:30
17486b961d chore: refactor delete dialog 2023-12-19 15:51:43 +02:00
775a1b774d chore: fix vulnerability with sharp
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-19 17:16:26 +05:30
c949c4701b chore: udpated railway template link
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-19 17:16:26 +05:30
eda635e2db feat: added custom railway config
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-19 17:16:25 +05:30
2056de2e16 feat: added koyeb as a deploy option
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-19 17:16:25 +05:30
da03fc1fd0 chore: finishing touches 2023-12-18 12:24:42 +02:00
075fdd1f88 fix: lint errors 2023-12-16 15:09:02 +11:00
006a559026 Merge branch 'main' into refactor-forms 2023-12-16 13:26:33 +11:00
ff64671e49 fix: stacking issue with notification/toast and header (#764)
Fixes: #763
2023-12-16 12:40:25 +11:00
089ba1c30e Merge branch 'main' into fix/css-stacking-notification 2023-12-16 00:35:38 +05:30
cbcd893cfd fixed z-index 2023-12-16 00:30:52 +05:30
83dfe92d7a refactor: used constant for steps instead of strings (#751)
fixes #750
2023-12-15 15:07:45 +02:00
e43e8f8c4a feat: environment variable to toggle signups (#747)
closes #732
2023-12-15 23:09:01 +11:00
82da337a56 fix: remove templateToken 2023-12-15 22:07:27 +11:00
6e10947d00 Merge branch 'main' into feat/732-toggle-signup-form 2023-12-15 21:05:21 +11:00
682cb37786 fix: update auth-options 2023-12-15 20:41:54 +11:00
5809480f02 chore: fix workflows and update package.json file (#758) 2023-12-15 16:55:48 +11:00
19736ce60b chore: implemented feedback 2023-12-14 11:05:39 +02:00
1eeb5fb103 fix: tidy code and base on main 2023-12-14 15:28:27 +11:00
88534fa1c6 feat: add multi subscription support (#734)
## Description

Previously we assumed that there can only be 1 subscription per user.
However, that will soon no longer the case with the introduction of the
Teams subscription.

This PR will apply the required migrations to support multiple
subscriptions.

## Changes Made

- Updated the Prisma schema to allow for multiple `Subscriptions` per
`User`
- Added a Stripe `customerId` field to the `User` model
- Updated relevant billing sections to support multiple subscriptions

## Testing Performed

- Tested running the Prisma migration on a demo database created on the
main branch

Will require a lot of additional testing.

## Checklist

- [ ] I have tested these changes locally and they work as expected.
- [ ] I have added/updated tests that prove the effectiveness of these
changes.
- [X] I have followed the project's coding style guidelines.

## Additional Notes

Added the following custom SQL statement to the migration:

> DELETE FROM "Subscription" WHERE "planId" IS NULL OR "priceId" IS
NULL;

Prior to deployment this will require changes to Stripe products:
- Adding `type` meta attribute

---------

Co-authored-by: Lucas Smith <me@lucasjamessmith.me>
2023-12-14 15:22:54 +11:00
31a9127c9e feat: templates 2023-12-14 12:24:56 +11:00
6d34ebd91b fix: no longer available client component 2023-12-13 22:49:58 +11:00
f2d4c0721d chore: removed packageManager as we have engines
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-11 23:38:07 +05:30
f9139a54a5 chore: prevent frequent commenting for semantic pr titles
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-11 23:37:28 +05:30
2d931b2c9b chore: fix caching issue in workflows
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-11 23:36:54 +05:30
e79d385534 Merge branch 'main' into feat/public-api 2023-12-11 14:44:29 +02:00
8ecd8a7d10 chore: implemented feedback + a small refactoring 2023-12-11 14:33:30 +02:00
5c1d30bfbb chore: remove console log 2023-12-10 09:23:31 +05:30
95041fa2e4 fix: build error 2023-12-09 12:05:36 +05:30
49736d2587 Merge branch 'documenso:main' into feat/732-toggle-signup-form 2023-12-09 11:55:55 +05:30
ee5ce78c82 chore: remove unused code 2023-12-09 11:48:46 +05:30
3b3987dcf8 chore: add env to env.example 2023-12-09 11:43:30 +05:30
78a1ee2af0 feat: disable oauth signup when DISABLE_SIGNUP is true 2023-12-09 11:35:45 +05:30
dbdef79263 chore: remove old env variable from docker compose 2023-12-09 10:38:48 +05:30
323380d757 feat: env variable to disable signing up 2023-12-09 10:37:16 +05:30
e4b7747f66 chore: run eslint fix on lint staged (#743) 2023-12-09 12:37:13 +11:00
0697e7f817 Merge branch 'main' into eslint-lint-staged 2023-12-09 11:41:20 +11:00
e1d3874e79 fix: do not lint js files 2023-12-09 11:40:23 +11:00
497d9140d2 chore: add lint-staged task for dependency changes (#548) 2023-12-09 11:31:01 +11:00
7d22957404 chore: add eslint fix command 2023-12-08 21:27:38 +05:30
66c0db91da chore: cleanup and feedback implementation 2023-12-08 13:28:34 +00:00
38e5b1d3ce chore: use minio as s3 storage for document during development (#588) 2023-12-08 21:08:30 +11:00
54401b94ae chore: split api contract
moved the schemas from the api contract to a separate file
2023-12-08 09:58:23 +00:00
09dcc2cac0 chore: update github actions 2023-12-08 20:44:28 +11:00
d8d36ae8e2 fix: sticky header z-positioning 2023-12-08 20:41:52 +11:00
dfec8df31e fix: ensure command menu results are distinct 2023-12-08 20:41:52 +11:00
bc38009392 Merge branch 'main' into refactor-forms 2023-12-08 16:31:13 +11:00
5e9bc56329 feat: github repo management improvement (#728) 2023-12-08 15:47:55 +11:00
48f6765e76 chore: add yml to lint-staged 2023-12-08 13:01:59 +11:00
7feba02e08 chore: update ci and formatting 2023-12-08 13:01:36 +11:00
b9282f11b0 Merge branch 'main' into refactor/download-function 2023-12-08 11:26:02 +11:00
4e799e68ef chore: update ci 2023-12-08 09:44:36 +11:00
1831084970 chore: update ci 2023-12-08 09:29:47 +11:00
38ad3a1922 refactor: download function to be reusable 2023-12-07 14:52:12 +00:00
935601ad16 fix(ee): add handling for incomplete expired checkouts 2023-12-07 18:46:57 +11:00
7b4e38a032 feat: enhance posthog event tracking (#686) 2023-12-07 18:08:14 +11:00
2c5d547cdf fix: add missing import 2023-12-07 18:00:54 +11:00
c313da5028 fix: update seal event 2023-12-07 16:29:20 +11:00
5b98bac53b Merge branch 'main' into feat/enhance-posthog-tracking 2023-12-07 16:28:15 +11:00
d7e44fc068 fix(webapp): use checkout for expired plans (#738)
Currently customers with inactive/expired plans will be shown the
BillingPlans component but upon hitting the subscribe button they will
be redirected to their portal where they are unable to complete a
checkout.

To resolve this we check for expiration of their subscription and use a
normal stripe checkout instead.
2023-12-07 16:19:03 +11:00
e03db5c6b3 feat: handle download file error with toast (#655) 2023-12-07 16:18:30 +11:00
d58433c8a0 fix: destructure toast 2023-12-07 15:50:34 +11:00
419f27536b Merge branch 'main' into feat/download-toast 2023-12-07 15:46:43 +11:00
9a7e5d333d fix: don't expand documentData 2023-12-07 15:45:44 +11:00
39b97a97fe Merge branch 'main' into fix/billing-page 2023-12-07 15:37:32 +11:00
328b2e7604 feat: add stepper component (#718)
feat: add stepper component
2023-12-07 15:36:27 +11:00
43b1a89c76 Merge branch 'main' into main 2023-12-07 15:20:29 +11:00
cd6184406d chore: add e2e test for stepper 2023-12-07 15:08:16 +11:00
1a34f9fa7a fix: import updates and api route body sizes 2023-12-07 15:08:00 +11:00
3ff7b188d7 fix(ui): tidy stepper code 2023-12-07 15:06:49 +11:00
684e5272d2 fix(webapp): use checkout for expired plans 2023-12-07 00:52:36 +00:00
11ae6d3c16 chore: small changes 2023-12-06 16:53:34 +00:00
6c5526dd49 chore: update routes
trying to add the route for creating documents
2023-12-06 15:27:30 +00:00
936e75fd30 chore: merged main 2023-12-06 13:18:59 +00:00
b39a42ecd2 feat(marketing): add careers page (#733) 2023-12-06 18:59:02 +11:00
e81183f324 Merge branch 'main' into main 2023-12-06 14:13:34 +11:00
bfc630aa6a feat: add document search to the command menu (#713) 2023-12-06 12:48:05 +11:00
2068d980ff feat: allow for the deletion of any document (#711)
Allow for the deletion of any document with notifications of document cancellation for pending documents.
2023-12-06 11:11:51 +11:00
0baa2696b4 fix: removed unused code 2023-12-05 10:13:24 +00:00
741201822a fix: use useSession instead of prop drilling 2023-12-05 10:12:28 +00:00
520522bef7 chore: removed repo condition for codeql
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-05 12:05:47 +05:30
8ab1b0cf6b fix: add workspace settings for eol and tabs (#725) 2023-12-05 14:00:48 +11:00
bfedabdc10 fix: increase e2e test timeout (#682) 2023-12-05 13:54:41 +11:00
52e696c90e chore: update pr labeler workflow
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 18:12:43 +05:30
02d91d9cd4 chore: updated workflows
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 18:04:05 +05:30
ac529a89fc feat: check assignee and pr review reminder
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 18:00:28 +05:30
f181099e74 chore: updated workflow permissions and run conditions
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 16:20:02 +05:30
02e96bbd0a feat: added pr count workflow
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 16:08:04 +05:30
36e48e67ee chore: updated issue count workflow
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 16:07:51 +05:30
d8588b780a feat: added issue count workflow
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 15:36:38 +05:30
ef84f5ba98 chore: added EOLs
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 12:28:05 +05:30
68120794f8 feat: added stale workflow
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 00:29:30 +05:30
88dc797423 chore: update semantic pr workflow
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 00:29:15 +05:30
a43be0432b feat: add triage issue workflow
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 00:28:27 +05:30
0f11cc0b4b feat: add first interaction workflow
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 00:27:49 +05:30
f310139a13 feat: add pr labeler workflow
Signed-off-by: Adithya Krishna <adi@documenso.com>
2023-12-04 00:27:17 +05:30
859b789018 feat: isCompleting 2023-12-03 12:50:56 -05:00
340c929806 refactor: edit doc 2023-12-03 11:36:18 -05:00
43b1a14415 chore: let code breath 2023-12-03 11:21:51 -05:00
40a4ec4436 refactor: useContext & remove enum 2023-12-03 01:15:59 -05:00
eccf63dcfd chore: refactor 2023-12-02 23:56:07 -05:00
a98b429052 feat: stepper refactor example 2023-12-02 22:42:59 -05:00
c46a69f865 feat: stepper component 2023-12-02 22:30:10 -05:00
369d08ae6e feat: refactor signin page 2023-12-02 17:54:55 +05:30
a906833657 feat: use password input component 2023-12-02 17:54:19 +05:30
4733f1e84b refactor: password input component 2023-12-02 17:46:16 +05:30
ab0d38eaf4 Merge branch 'main' into refactor-forms 2023-12-02 17:24:06 +05:30
b903de983b chore: v1.2.3 2023-12-02 14:56:00 +11:00
6b519a67c2 fix: add guard 2023-12-02 14:55:26 +11:00
39d18e93c5 chore: v1.2.2 2023-12-02 13:34:36 +11:00
7dac5072f7 fix: revert react-email tailwind canary 2023-12-02 13:34:03 +11:00
fbfaca190b chore: release 1.2.1 2023-12-02 12:43:55 +11:00
486b1cbf62 fix: incorrect promise.all usages 2023-12-02 12:43:43 +11:00
16fb90f4d2 chore: v1.2.0 2023-12-02 11:57:50 +11:00
53cb38a394 fix: pricing page deopted into csr 2023-12-02 11:14:46 +11:00
073a050587 fix: signature field race conditions 2023-12-02 11:09:42 +11:00
39c01f4e8d fix: remove server actions (#684) 2023-12-02 09:38:24 +11:00
335684d0b7 fix: edit document sizing (#706) 2023-12-01 23:09:24 +11:00
792158c2cb feat: add two factor auth (#643)
Add two factor authentication for users who wish to enhance the security of their accounts.
2023-12-01 20:06:32 +11:00
83153cee32 Merge pull request #698 from cuttingedge1109/patch-1
fix: Fix typo in web build command in doc
2023-12-01 15:06:36 +11:00
2d2bdc536e fix: add a script for db seed with env (#700) 2023-12-01 12:12:15 +11:00
c16c36a1fc fix: add a script for db seed with env 2023-11-30 18:38:54 +01:00
6be4b7ae90 feat: add authorization for api calls 2023-11-30 14:39:31 +02:00
6bbeaa084c refactor: forms 2023-11-30 15:55:29 +05:30
231a307b89 feat: add loading text prop 2023-11-30 15:20:06 +05:30
1d79ebbda3 fix: body exeeded undefined limit (#679)
* fixed bodySizeLimit

* fix: update marketing config

---------

Co-authored-by: Lucas Smith <me@lucasjamessmith.me>
2023-11-30 09:46:33 +02:00
252dd0008c feat: add link to homepage on the complete sign page for logged in users (#691)
* feat: add link to homepage on the complete sign page for logged in users

* feat: added ChevronLeft icon to the link

* feat: remove icon from the link
2023-11-30 09:42:15 +02:00
35d0fed8b3 fix: Fix typo in web build command in doc 2023-11-29 20:06:25 +01:00
0b2dce2238 fix: type 2023-11-29 22:37:33 +05:30
1e29dfd823 refactor: reset password form 2023-11-29 22:33:04 +05:30
dc56c2abf2 refactor: password form 2023-11-29 22:32:42 +05:30
62809e9506 refactor: signin page 2023-11-29 22:31:42 +05:30
318dfcafc3 refactor: signup page 2023-11-29 22:31:24 +05:30
4ff8592e8f feat: add password input component 2023-11-29 22:11:55 +05:30
76800674ee feat: improve messaging 2023-11-29 14:57:27 +02:00
d43d40fd6b feat: improvements to the newly created token message 2023-11-29 14:43:26 +02:00
dad56b4929 fix: minor in file extension (#694) 2023-11-29 09:11:29 +11:00
7e4c44e820 perf(web, lib): do not await inside promise statements (#692) 2023-11-29 09:10:15 +11:00
e1732de81d feat: show newly created token 2023-11-28 15:49:46 +02:00
6a5fc7a5fb feat: confirm to delete dialog 2023-11-28 12:37:01 +02:00
adc97802ea feat: add/update title of the document (#663) 2023-11-28 14:56:50 +11:00
13997d3dca feat: add delete and copy token on token page 2023-11-27 16:29:24 +02:00
2deaad5c34 feat: token page 2023-11-27 12:50:21 +02:00
0e40658201 feat: track when the signing of a document has completed 2023-11-26 19:33:45 +00:00
d347359d2f chore: changes from code review 2023-11-25 22:09:52 +00:00
fdf5b3908d feat: add more posthog analytics to the application 2023-11-24 23:50:51 +00:00
fbee6eedc1 feat: api token functions 2023-11-24 16:13:09 +02:00
8048c29480 fix: override @react-email/tailwind to avoid perf regression 2023-11-24 23:57:34 +11:00
80fe7ccdf5 feat: api token page in the settings 2023-11-24 13:59:33 +02:00
84b958d5b7 fix: universal upload hitting cache 2023-11-24 20:06:47 +11:00
d8688692f7 fix: move singleplayer create to trpc 2023-11-24 16:58:18 +11:00
8230349114 fix: unable to load font for signing 2023-11-24 16:17:54 +11:00
2ccede72ea chore: update the contract to add deleteDocument route 2023-11-23 15:23:47 +02:00
309b56168a feat: create the model for the api token 2023-11-23 15:21:13 +02:00
5c8a77ee8f chore: merged main 2023-11-23 12:05:28 +02:00
b3008fb272 feat: add route for retrieving a single document by id 2023-11-23 10:02:22 +02:00
c054fc78a4 fix: resolve issues with emailVerified jwt property 2023-11-23 15:11:37 +11:00
5de0c464f0 fix: hydration errors for modifier key 2023-11-23 13:57:08 +11:00
6d6c93539f feat: update contract 2023-11-22 15:51:04 +02:00
4a6b3edc05 feat: get documents api route with pagination 2023-11-22 15:44:49 +02:00
24d9906557 feat: public api start 2023-11-22 15:03:15 +02:00
9444e0cc67 fix: docker build requires smtp host (#672)
set a default for smtp host and add an action
for testing docker builds on each pull request
2023-11-22 16:26:39 +11:00
be0fe079a3 fix: add healthcheck endpoint (#671) 2023-11-22 15:46:21 +11:00
fbbc3b89c3 feat: email verification for registration (#599) 2023-11-21 15:44:04 +11:00
6c73453542 #666 feat: disabled resend button for recipients (#667) 2023-11-20 21:53:57 +11:00
17eeaa2d25 fix: improve the validation message for documenso app (#640)
* fix: improve the validation message

* fix: improve the validation message

---------

Co-authored-by: Catalin Pit <catalinpit@gmail.com>
2023-11-20 12:23:27 +02:00
a8d49bb8b8 chore: added Documenso video walkthrough (#665) 2023-11-20 19:01:34 +11:00
e077c36fe4 fix: added the zod validation msg in the single player mode (#646) 2023-11-17 14:28:42 +02:00
7ce4cf8381 feat: add dark mode toggle (#529) 2023-11-17 17:01:39 +11:00
cebdf5fd8e chore: custom command menu shortcut text for macOS (#657) 2023-11-17 16:47:19 +11:00
8adc44802f feat: copy signing link from avatar stack (#658) 2023-11-17 16:12:47 +11:00
06714a2aeb chore: append _signed to files when downloading (#656) 2023-11-17 12:02:22 +11:00
1c9cec1e93 fix: remove plausible provider 2023-11-17 10:55:09 +11:00
b4f1a5abce feat: handle download file error with toast 2023-11-16 07:11:23 +00:00
e838a07bf9 chore: remove share button from top level, texts (#653) 2023-11-16 16:43:50 +11:00
8722e4de74 chore: marketing site updates (#654)
Change "Open" links to "Open Startup" to reduce confusion about how to open the web app.

Additionally add the OSS Friends link to the footer since it was dropped during some changes.
2023-11-16 13:39:22 +11:00
f7d8ebb9de feat: enable resend email menu (#496) 2023-11-16 13:08:31 +11:00
67f3b2de45 fix: fetch the correct number of open issues using the github search api (#495) 2023-11-15 21:56:09 +11:00
0da080aa41 fix: hovering on tabslist items at dashboard (#645) 2023-11-15 18:18:11 +11:00
fe25239a4e feat: cache getServerComponentSession calls (#644) 2023-11-15 17:42:27 +11:00
5ea4a16e36 fix: safari pdf overflow issue fixed (#466) 2023-11-15 17:35:57 +11:00
5002a475d1 feat: limit document upload size (#347) 2023-11-15 13:13:31 +11:00
ca9c0d7bf0 chore: add some eslint rules (#344) 2023-11-15 13:10:17 +11:00
3f0341c7d4 feat: add dialog to confirm signing (#342) 2023-11-14 19:01:00 +11:00
c3fe98b05f fix: update docker compose entrypoint (#650) 2023-11-14 13:11:57 +11:00
608a4eaaa6 feat: refactor og image generation (#639) 2023-11-14 13:08:14 +11:00
d6ae0b44e6 feat: use nextjs.js standalone output for improvised docker image (#338) 2023-11-12 13:15:42 +11:00
aec0d2ae97 fix: show initial data preview for duplication (#642) 2023-11-09 15:46:58 +11:00
86160136aa chore: improve command bar (#641) 2023-11-09 14:38:26 +11:00
3490e2a3a8 feat: add command menu and keyboard shortcuts (#337) 2023-11-09 13:33:56 +11:00
574539d6dd feat: duplicate document (#633) 2023-11-08 20:27:33 +11:00
f5cba75355 chore: remove product hunt launch from readme (#634)
chore: remove product hunt launch from readme
2023-11-08 12:23:35 +11:00
2a4ada8294 fix: restore logo 2023-11-08 12:22:48 +11:00
7b8fc65836 chore: remove product hunt launch from readme 2023-11-08 12:21:02 +11:00
623257ff13 feat: the big merge
landing our massive rewrite onto main so we can be normal again
2023-11-08 12:19:28 +11:00
6646533965 Single Player Mode on Product Hunt
🚨 We are live on Product Hunt with Single Player Mode and the new free tier: [https://www.producthunt.com/products/documenso](https://www.producthunt.com/posts/documenso-singleplayer-mode)
2023-11-08 11:57:45 +11:00
d1fc7ea217 chore: update ci 2023-11-06 15:10:46 +11:00
b0e3abffd6 chore: restore dangling changes from rebase 2023-11-06 14:47:46 +11:00
ee3614f10e fix: typo in README.md (#630) 2023-11-06 13:02:21 +11:00
2e9180acf5 chore: include total and new user charts 2023-11-06 13:02:21 +11:00
d27880b56b fix: add white background for og images 2023-11-06 13:02:21 +11:00
2af100ef6d fix: add white background for og images 2023-11-06 13:02:21 +11:00
9edf88692c feat: show monthly new users 2023-11-06 13:02:21 +11:00
f9a0ec99dc fix: correctly sign SPM documents (#627)
- Sign and email correct SPM document
- Optimise signing SPM documents
2023-11-06 13:02:21 +11:00
3ebb30090c fix: dont use custom documentData for single player mode 2023-11-06 13:02:21 +11:00
4af3d05a24 fix: updates from error logs 2023-11-06 13:02:21 +11:00
803ab7a7da fix: hiding of action buttons (#460)
* chore: fix hiding of action buttons
2023-11-06 13:02:21 +11:00
2065a0debc feat: add completed at timestamp 2023-11-06 13:02:21 +11:00
f841683d82 fix: small typo error (#584) 2023-11-06 13:02:21 +11:00
8ae860432d fix: days filter working (#623) 2023-11-06 13:02:21 +11:00
ba7d92d255 chore: update bug report template (#580) 2023-11-06 13:02:21 +11:00
31eece8926 Update README.md 2023-11-06 13:02:21 +11:00
746c97b64f fix: added the share btn in the UI and prewarm fetch (#615) 2023-11-06 13:02:20 +11:00
d6e3b2b5dc fix: seal document for single player mode (#617) 2023-11-06 13:02:20 +11:00
223a5cc9d0 feat: improving incorrect default signature behaviour #594 (#600) 2023-11-06 13:02:20 +11:00
c2b078335e fix: improve the early adopters plan input section (#609) 2023-11-06 13:02:20 +11:00
bbb7c6e0c7 docs: re-add launch week 5 blogpost (#614) 2023-11-06 13:02:20 +11:00
1e5adb59cd fix: typos and grammatical errors in readme (#616) 2023-11-06 13:02:20 +11:00
02cbf3dfa0 chore:  Improved the issue templates with issue forms (supported viayml ) (#612)
GitHub supports the issue forms [1].
[1] https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#creating-issue-forms

This feature allows users to create issues using a structured and visually appealing form. This functionality is facilitated through a  file for the issue template.

Added the issue template for bug report, feature request, and improvement by adding respective  file. Also, removed previous  file which is no longer needed
2023-11-06 13:02:20 +11:00
d177dd7c56 fix: page-not-found at share page for document signed in single-player-mode #605 (#606) 2023-11-06 13:02:20 +11:00
7fd5f8da67 fix: invalid url with cloudfront 2023-11-06 13:02:20 +11:00
df4cda8a1b feat: support cloudfront presign 2023-11-06 13:02:20 +11:00
5de5d8b0fb feat: add database indexes 2023-11-06 13:02:20 +11:00
a65db4f668 chore: remove malfunction mania and feat/refresh from readme 2023-11-06 13:02:20 +11:00
ec1f61faa0 feat: add user schema timestamps 2023-11-06 13:02:20 +11:00
9b5af329a8 fix(web): fix typo + refactor empty state messages (#583)
* fix(web): fix typo + refactor empty state messages

* fix(web): refactor default empty-state message
2023-11-06 13:02:20 +11:00
b9daf6219c feat: update the README for the self-hosting users
Signed-off-by: Olivier Lambert <olivier.lambert@vates.fr>
2023-11-06 13:02:20 +11:00
4aa43bcfa2 fix: add back slack support 2023-11-06 13:02:20 +11:00
c95171bbc9 chore: updated slack to discord links
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-11-06 13:02:20 +11:00
7fa61c6bb6 chore: upgrade to next 14.0.0 2023-11-06 13:02:20 +11:00
4f99b58795 fix: missing content updates 2023-11-06 13:02:20 +11:00
67fcb154f5 fix: change sign in links 2023-11-06 13:02:20 +11:00
9e5bfa543e fix: update early adopter error log 2023-11-06 13:02:20 +11:00
165432c37c fix: update stripe metadata for early adopters 2023-11-06 13:02:20 +11:00
fcd2024132 fix: update limits handler 2023-11-06 13:02:20 +11:00
9d9b1a6681 fix: attach document to completed email 2023-11-06 13:02:20 +11:00
b0bf69450a fix: limit recipients 2023-11-06 13:02:20 +11:00
717ca8cdb2 fix: improve claim plan flow 2023-11-06 13:02:20 +11:00
a975509923 fix: return response for failed invoices 2023-11-06 13:02:20 +11:00
f68b65fe5f fix: update customer handling for checkouts 2023-11-06 13:02:20 +11:00
687ce66e41 fix: update singleplayer add signature to card 2023-11-06 13:02:20 +11:00
1d604fff2c fix: limits no longer cache during session changes 2023-11-06 13:02:20 +11:00
2f2079e020 fix: optimise pdf viewer rerendering 2023-11-06 13:02:20 +11:00
457e73342b fix: unbreak pdf viewer 2023-11-06 13:02:20 +11:00
284a2870c2 fix: move getFile to client side 2023-11-06 13:02:20 +11:00
e8f08f4083 fix: update webhook handler 2023-11-06 13:02:20 +11:00
603cc1cb0d fix: update webhook handler 2023-11-06 13:02:20 +11:00
c162cb3b2c chore: update zod to 3.22.4 (#563)
* chore: updated zod 

Signed-off-by: Adithya Krishna <aadithya794@gmail.com>

---------

Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-11-06 13:02:20 +11:00
6de14ab0ac fix: UI fixes and improvements (#559)
* chore: add cursor pointer

* fix: tooltip color

* chore: add tooltip

* fix: admin pages in mobile
2023-11-06 13:02:20 +11:00
dec587e39e chore: add prisma studio command (#576)
Co-authored-by: pit <pit@pits-MacBook-Pro.local>
2023-11-06 13:02:20 +11:00
89102bd221 fix: add mode to checkout session 2023-11-06 13:02:20 +11:00
b7950cf042 fix(bug): name field can be updated with spaces #555 (#558) 2023-11-06 13:02:19 +11:00
19f1ddb8fe fix: downgrade react-pdf 2023-11-06 13:02:19 +11:00
2ac0d79051 fix: support multi env 2023-11-06 13:02:19 +11:00
5445b85aae fix: invalid url on main page in self host 2023-11-06 13:02:19 +11:00
04fc9eb187 chore: upgrade to latest next.js version (#553)
* chore: upgrade next.js
* fix: canvas not found error
* chore: upgrade package for marketing
* feat: add isServer conditional
* fix: inverse isServer condition
* fix: normalize packages
* fix: upgrade ee package
* fix: depdency nightmares
* fix: failing seed script
2023-11-06 13:02:19 +11:00
f1732fab29 fix: truncate long file name in admin dashboard (#572)
Co-authored-by: pit <pit@192-168-0-136.rdsnet.ro>
2023-11-06 13:02:19 +11:00
5bc18d4c73 fix: email requesting signature shows "completed document" in preview… (#514) 2023-11-06 13:02:19 +11:00
56914bf604 fix: support mailto link fix (#571) 2023-11-06 13:02:19 +11:00
3d44821bff fix: build errors 2023-11-06 13:02:19 +11:00
05fd01c72d fix: exports on next page 2023-11-06 13:02:19 +11:00
c343e8a221 feat: plan limits 2023-11-06 13:02:19 +11:00
f75f191a9a fix: add redirects for v0.9 requests 2023-11-06 13:02:19 +11:00
1d291e8e03 feat: add safari clipboard copy support (#486) 2023-11-06 13:02:19 +11:00
cff547d0d8 fix: user avatar on admin documents table (#570)
Co-authored-by: pit <pit@pits-MacBook-Pro.local>
2023-11-06 13:02:19 +11:00
4b2fec305f fix: fix for Accepting signatures or text fields with white space only #551 (#557) 2023-11-06 13:02:19 +11:00
352e4f81fd fix: enable dragging fields (#565) 2023-11-06 13:02:19 +11:00
5f15721535 fix: filter out inactive products 2023-11-06 13:02:19 +11:00
95a60331f8 fix: named exports 2023-11-06 13:02:19 +11:00
17b43caa5c fix: create custom pricing table 2023-11-06 13:02:19 +11:00
6d7fc32075 fix: stripe customer fetch logic 2023-11-06 13:02:19 +11:00
81eea4213c fix: merge issues 2023-11-06 13:02:19 +11:00
f45cd81b5f feat: wip 2023-11-06 13:02:19 +11:00
2856cd9c15 feat: add free tier Stripe subscription 2023-11-06 13:02:19 +11:00
5a79535080 fix: style updates 2023-11-06 13:02:19 +11:00
pit
9fa7505061 chore: revert back env file name 2023-11-06 13:02:19 +11:00
pit
39c2bf77c2 chore: implement feedback 2023-11-06 13:02:19 +11:00
pit
9932d805b7 chore: implement feedback 2023-11-06 13:02:19 +11:00
pit
afd7dcd992 chore: remove this branch 2023-11-06 13:02:19 +11:00
pit
c7f69bafd0 chore: update e2e tests 2023-11-06 13:02:19 +11:00
pit
dc1b8c3cb8 chore: update import 2023-11-06 13:02:19 +11:00
pit
af73aee113 chore: changes 2023-11-06 13:02:19 +11:00
pit
9151055936 chore: add schema location 2023-11-06 13:02:19 +11:00
pit
ca51a926fb chore: change from npm to npx 2023-11-06 13:02:19 +11:00
pit
1bb47f98a1 chore: install prisma before prisma client 2023-11-06 13:02:19 +11:00
pit
c00f06a0c5 chore: add remote caching 2023-11-06 13:02:19 +11:00
pit
3cbd4a2680 chore: use env vars for tests 2023-11-06 13:02:19 +11:00
pit
c30695f2b8 ci: trigger ci 2023-11-06 13:02:19 +11:00
pit
434c4a6957 ci: trigger ci 2023-11-06 13:02:19 +11:00
pit
7942057c50 chore: add env step in gh action 2023-11-06 13:02:19 +11:00
pit
9afe8731b1 chore: added delete function 2023-11-06 13:02:19 +11:00
pit
7d21f607df chore: removed lint step 2023-11-06 13:02:19 +11:00
pit
00546c1290 feat: add playwright 2023-11-06 13:02:19 +11:00
702df60076 fix: add cascade delete for share links 2023-11-06 13:02:19 +11:00
38960c459b feat: add document share button to marketing (#422) 2023-11-06 13:02:19 +11:00
6d0e8f6dd8 feat: single-player-mode-polish (#435) 2023-11-06 13:02:19 +11:00
ec11686709 fix: background color of signature page (#487) 2023-11-06 13:02:19 +11:00
2340528d2e fix: bypass signature fix (#536) (#547) 2023-11-06 13:02:19 +11:00
e8c1e70714 fix : add gittpod configuration 2023-11-06 13:02:19 +11:00
3778fc8d00 fix: Add gitpod configuration 2023-11-06 13:02:19 +11:00
2faca32427 fix: add gitpod configuration 2023-11-06 13:02:19 +11:00
51f8554ce8 fix: Add gitpod configuration 2023-11-06 13:02:19 +11:00
4c8a62a8ab fix: quick tweaks 2023-11-06 13:02:19 +11:00
pit
f621e60c16 chore: implemented feedback 2023-11-06 13:02:19 +11:00
pit
4ed467693f chore: implemented feedback 2023-11-06 13:02:19 +11:00
pit
0e77faee3f chore: polished code 2023-11-06 13:02:18 +11:00
pit
c78632870e chore: implemented feedback 2023-11-06 13:02:18 +11:00
pit
35087f551c chore: implement pr feedback 2023-11-06 13:02:18 +11:00
pit
f569361e57 chore: feedback fix 2023-11-06 13:02:18 +11:00
pit
d2263a6d72 chore: fix eslint issues 2023-11-06 13:02:18 +11:00
c9a71beb81 feat: delete draft document (#491) 2023-11-06 13:02:18 +11:00
0d6efba3cf chore: disable dependabot for now 2023-11-06 13:02:18 +11:00
9d9faffc2f fix: mismatch the version of dotenv-cli 2023-11-06 13:02:18 +11:00
f9a3a53c5b fix: frequency focus ring (#533) 2023-11-06 13:02:18 +11:00
fc876a41d9 fix: update script, docs and devcontainer 2023-11-06 13:02:18 +11:00
6fd72321b3 fix(script): minor change on scipt 2023-11-06 13:02:18 +11:00
1b7c887101 fix(script): added script envprisma in root package.json
dotenv loads all environment variable before running prisma:migrate-dev script
2023-11-06 13:02:18 +11:00
2e90eee4c2 style(ui/ux): added margin to dialogprimitive.content & dialogprimitive.close (m-4) 2023-11-06 13:02:18 +11:00
bdf31625a2 fix: non responsiveness of Add your sign modal 2023-11-06 13:02:18 +11:00
e556db0386 docs: add render one click deploy for refresh 2023-11-06 13:02:18 +11:00
7a8f5b8422 fix: sign up with existing account email bug (#517)
* fix: sign up with existing account email bug
2023-11-06 13:02:18 +11:00
fa06038950 fix: add defaultValue to SignaturePad to persist signatures (#522)
* fix: add defaultValue to SignaturePad to persist signatures
2023-11-06 13:02:18 +11:00
66eda3321d changed text of stepper (#513) 2023-11-06 13:02:18 +11:00
6ec04c5df3 chore: typos
typos
2023-11-06 13:01:46 +11:00
e0662ce024 chore: add code of conduct (#521)
Update contributing guidelines
2023-11-06 13:01:46 +11:00
78d2401d44 feat: require old password for password reset (#488)
* feat: require old password for password reset
2023-11-06 13:01:46 +11:00
02bb7e4d68 fix: update icons (#468)
* fix: update icons
2023-11-06 13:01:46 +11:00
8fba1c43d3 chore: add new team members 2023-11-06 13:01:46 +11:00
911cdcf170 fix: Error in Pricing Page Validation for Signup Now Modal (#497)
* fix: signup modal validation on close
* fix: restore auto focus input
2023-11-06 13:01:46 +11:00
07fb6fa0e1 fix: signature text overflow truncated for longer signature texts (#489) 2023-11-06 13:01:46 +11:00
1d97c0898f chore: and now his watch has ended 2023-11-06 13:01:46 +11:00
4132e45a9b fix: remove unused imports 2023-11-06 13:01:46 +11:00
b190802f65 capitalise 2023-11-06 13:01:46 +11:00
830f10ac6f text changes on isSubmitting 2023-11-06 13:01:46 +11:00
82f13e0ac3 fix: typo in script
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-11-06 13:01:46 +11:00
efa0505276 Update README.md 2023-11-06 13:01:46 +11:00
27287cd1d5 fix: sharp corners of signing card 2023-11-06 13:01:46 +11:00
a5e087f209 fix: dogfood resend transport 2023-11-06 13:01:46 +11:00
85924f49f7 chore: sync 2023-11-06 13:01:46 +11:00
6d8c29c5c1 fix: update compose scripts 2023-11-06 13:01:46 +11:00
051c96c92b fix: further readme updates 2023-11-06 13:01:46 +11:00
0aaf65266e docs: clearer readme? maybe? 2023-11-06 13:01:46 +11:00
5bb2f183c1 chore: added classname and changed typo 2023-11-06 13:01:46 +11:00
8c8bcb694a chore: add empty message 2023-11-06 13:01:46 +11:00
2e12893e0c fix: add missing URL to email template 2023-11-06 13:01:46 +11:00
8fb5fdc058 feat: add email forgot password action
Updated email template imports
2023-11-06 13:01:46 +11:00
0c607e6b39 feat: update email templates
Add SPM email attachment
2023-11-06 13:01:46 +11:00
a622fd402f fix: add hack for root zod validation with hook form 2023-11-06 13:01:46 +11:00
a219588287 chore: sync next 2023-11-06 13:01:46 +11:00
5cba913c55 fix: resolve issues with signing document stickiness 2023-11-06 13:01:46 +11:00
adf1359527 fix: disable cancel button when there is no window history 2023-11-06 13:01:46 +11:00
187485678a feat: add resend mail transport 2023-11-06 13:01:45 +11:00
48f4289c09 fix: resolve document title inconsistency (#452) 2023-11-06 13:01:45 +11:00
e09c076241 fix: do not overwrite new names or emails for signers 2023-11-06 13:01:45 +11:00
7ec8ce2a56 feat: add posthog reverse proxy (#449) 2023-11-06 13:01:45 +11:00
cca1bb4639 chore: greetings 2023-11-06 13:01:45 +11:00
5e00df1fba chore: add missing migrations 2023-11-06 13:01:45 +11:00
e14f96485c fix: update for code review 2023-11-06 13:01:45 +11:00
c107608aeb chore: remove undefined check 2023-11-06 13:01:45 +11:00
704306fd21 chore: styling updates 2023-11-06 13:01:45 +11:00
a164fd1256 fix: lint errors 2023-11-06 13:01:45 +11:00
ef0ad8761c fix: faster tooltips 2023-11-06 13:01:45 +11:00
d4c23455d8 fix: share og updates 2023-11-06 13:01:45 +11:00
eeb0d7b60c fix: twitter images 2023-11-06 13:01:45 +11:00
c0edac317e fix: better share links 2023-11-06 13:01:45 +11:00
5fa7f447cd chore: sync shop article and add missing and updated assets 2023-11-06 13:01:45 +11:00
c035e9ce0b chore: update mania shirt res 2023-11-06 13:01:45 +11:00
e982c85e9a feat: shop Article 2023-11-06 13:01:45 +11:00
d79981b4b2 chore: typos 2023-11-06 13:01:45 +11:00
1b57b6027b chore: fix lightmode logo 2023-11-06 13:01:45 +11:00
75de3f26b9 Update README.md with M̸͍͚̽͒A̴̯͊͌L̴͖͖͘F̵̗̻́̅U̶̲̅͠N̸͙̰̓C̵̙̮̾T̸̜̙͌Í̷͎̯Ö̵̘̜́N̴̳͊̈ͅ ̶͔́M̸̡͐̾A̵̞̚N̴̤̏́Ǐ̸̩͂Ă̸͓͝ 2023-11-06 13:01:45 +11:00
6a5c5f7dd8 fix: redirectless authentication 2023-11-06 13:01:45 +11:00
c911253be0 chore: quieten dependabot 2023-11-06 13:01:45 +11:00
f1898b24fc fix: update share preview 2023-11-06 13:01:45 +11:00
fcf586f24d fix: styling updates 2023-11-06 13:01:45 +11:00
34ce0d084e chore: refactor function 2023-11-06 13:01:45 +11:00
127dc42dc5 feat: add dropdown to tweet or copy signing link 2023-11-06 13:01:45 +11:00
016ae6ec6f chore: fix typo 2023-11-06 13:01:45 +11:00
ac3b4080c0 chore: typo 2023-11-06 13:01:45 +11:00
df9c603a37 chore: alt text 2023-11-06 13:01:45 +11:00
9c8eb5e13b chore: update date 2023-11-06 13:01:45 +11:00
da64c9af0d chore: remove unused image 2023-11-06 13:01:45 +11:00
990a7da940 chore: typo 2023-11-06 13:01:45 +11:00
dc5cc74db9 fix: text 2023-11-06 13:01:45 +11:00
8bb90494d8 chore: staging 2023-11-06 13:01:45 +11:00
adc0c31462 chore: update malfunction mania image 2023-11-06 13:01:45 +11:00
7385abae25 chore: grammerly, finetuned bounties 2023-11-06 13:01:45 +11:00
6c4fc6b2b4 Fix typo 2023-11-06 13:01:45 +11:00
0c16e0339f Fix typo 2023-11-06 13:01:45 +11:00
779289ccd8 Fix punctuation for consistency 2023-11-06 13:01:45 +11:00
bac7cf464a Add keywords
added keywords in description for SEO optimizations
2023-11-06 13:01:45 +11:00
e77fd92d13 Fix typo
Fix typo and minor edits for consistency
2023-11-06 13:01:45 +11:00
97f995b00a feat: malfunction mania, first draft 2023-11-06 13:01:44 +11:00
5904f6c5a8 chore: sign document 2023-11-06 13:01:44 +11:00
9164d301fd fix: dark mode for generic mdx content 2023-11-06 13:01:44 +11:00
f0f67be624 fix: remove usage of buffer 2023-11-06 13:01:44 +11:00
1536634fc6 fix: assorted updates 2023-11-06 13:01:44 +11:00
0e486c7b58 fix: feature flag client endpoint 2023-11-06 13:01:44 +11:00
0f6298cc8b chore: update env.example 2023-11-06 13:01:44 +11:00
b26bba8329 chore: remove console.log 2023-11-06 13:01:44 +11:00
350c02ae98 fix: single player dark mode and animation updates 2023-11-06 13:01:44 +11:00
80c9ab5d8c fix: improve dark mode background patterns 2023-11-06 13:01:44 +11:00
965b5c0afd fix: cors for feature flags 2023-11-06 13:01:44 +11:00
341c0df231 fix: firefox signing fields 2023-11-06 13:01:44 +11:00
0ff044978f feat: update success page text 2023-11-06 13:01:44 +11:00
d20ad4217c feat: add uninserted field validation 2023-11-06 13:01:44 +11:00
ebebceea1f feat: add uninserted field validation 2023-11-06 13:01:44 +11:00
a9a719cd37 feat: utilise transport layer 2023-11-06 13:01:44 +11:00
db1d6478a1 fix: timeout issues 2023-11-06 13:01:44 +11:00
34232c79e5 feat: add single player mode 2023-11-06 13:01:43 +11:00
cdae3a9a45 fix: company name 2023-11-06 13:01:15 +11:00
60ae674984 feat: darker dark theme 2023-11-06 13:01:15 +11:00
986bab2ba4 fix: normalize recipients 2023-11-06 13:01:15 +11:00
ded4f03e05 fix: cancel button handler 2023-11-06 13:01:15 +11:00
4306fbc0f3 fix: remove unused import 2023-11-06 13:01:15 +11:00
8fc53d5dac fix: remove unused import 2023-11-06 13:01:15 +11:00
e97de71811 fix: use named export 2023-11-06 13:01:15 +11:00
8c23bea985 fix: tidy messaging 2023-11-06 13:01:15 +11:00
a92624b255 fix: use ts-pattern 2023-11-06 13:01:15 +11:00
8b5d0f445e chore: fix eslint errors 2023-11-06 13:01:15 +11:00
f09638a4de chore: remove code from different branch 2023-11-06 13:01:15 +11:00
e5871da7b5 chore: fix eslint errors 2023-11-06 13:01:15 +11:00
73a9213088 chore: correct types on component 2023-11-06 13:01:15 +11:00
4879d2360b feat: add empty state for different status 2023-11-06 13:01:15 +11:00
5aff50b13b feat: add initial empty state for no results 2023-11-06 13:01:15 +11:00
b747334383 feat: redirect signed document to completed page 2023-11-06 13:01:15 +11:00
abfa0812f0 fix: minor updates 2023-11-06 13:01:15 +11:00
4072e2a200 fix: update styling 2023-11-06 13:01:15 +11:00
4ec2bd7536 chore: updated wording
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-11-06 13:01:15 +11:00
5dad463877 feat: added 404 page for web app
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-11-06 13:01:15 +11:00
fe4b3e0450 chore: updated 404 page for marketing app
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-11-06 13:01:15 +11:00
401311acd9 feat: added 404 page for marketing app
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-11-06 13:01:15 +11:00
7823100272 fix: reverse meta relation and tidy code 2023-11-06 13:01:15 +11:00
826a901c10 fix: document meta relation with document 2023-11-06 13:01:15 +11:00
164aa1cc03 fix: avoid creating document meta with empty strings 2023-11-06 13:01:15 +11:00
22f9400932 fix: persist newline in emails 2023-11-06 13:01:15 +11:00
345343f4b5 feat: replace template variables with values
Co-authored-by: Mythie <me@lucasjamessmith.me>
2023-11-06 13:01:15 +11:00
da16f1ee07 feat: send custom email message 2023-11-06 13:01:15 +11:00
a3baf2ed8b feat: persist document metadata in database for a specific user 2023-11-06 13:01:15 +11:00
9521d1df4c feat: send custom email subjects 2023-11-06 13:01:15 +11:00
1e294fc933 feat: add prisma schema for document meta 2023-11-06 13:01:15 +11:00
fd4602faf8 fix: fitler only unsigned documents 2023-11-06 13:01:15 +11:00
c947c7d761 chore: match file name and method name 2023-11-06 13:01:15 +11:00
c58006b2d9 feat: avoid sending pending email to document with 1 recipients 2023-11-06 13:01:15 +11:00
f18010e1e1 refactor: pass document id as arguments 2023-11-06 13:01:15 +11:00
94215fffbb feat: send email when all recipients have signed 2023-11-06 13:01:15 +11:00
b17e73003e feat: send email when recipient is done signing 2023-11-06 13:01:14 +11:00
49ce09f49b fix: support optimise imports 2023-11-06 13:01:14 +11:00
53db1a5d19 fix: resolve issues with open graph asset loading 2023-11-06 13:01:14 +11:00
15fd819132 fix: tidy code and update endpoints 2023-11-06 13:01:14 +11:00
8df5304b8e feat: update share page to match latest changes 2023-11-06 13:01:14 +11:00
794e575ae9 feat: move opengraph-image to next.js 13 implementation 2023-11-06 13:01:14 +11:00
57ff77b920 refactor: redirect using useRouter 2023-11-06 13:01:14 +11:00
c43843d226 chore: remove unused files 2023-11-06 13:01:14 +11:00
d0cedc489f fix: update og card 2023-11-06 13:01:14 +11:00
b12f5b62f1 feat: redirect share page to marketing page after 3 seconds 2023-11-06 13:01:14 +11:00
f2da49d0e8 feat: generate metatags for share page with og image 2023-11-06 13:01:14 +11:00
96264f67e4 feat: display signature text from params 2023-11-06 13:01:14 +11:00
ebcd7c78e4 feat: create sharing id for each recipient 2023-11-06 13:01:14 +11:00
1bce169228 feat: add initial og image for share link 2023-11-06 13:01:14 +11:00
023a91832a feat: add extra info for the early adopters 2023-11-06 13:01:14 +11:00
0a035f8b60 refactor: metrics into reusable component 2023-11-06 13:01:14 +11:00
7659c51980 feat: add early adopters graph 2023-11-06 13:01:14 +11:00
3377b55341 chore: rename community plan to early adopters 2023-11-06 13:01:14 +11:00
f938db25d0 chore: grammerly 2023-11-06 13:01:14 +11:00
db50dc71aa chore: links 2023-11-06 13:01:14 +11:00
b2ea5f0e47 fix: remove disallow property of _next from robots 2023-11-06 13:01:14 +11:00
32a21999ef feat: early adopter article 2023-11-06 13:01:14 +11:00
pit
0321f8505d chore: self-review 2023-11-06 13:01:14 +11:00
pit
90225574de chore: move fetching in data-table-users 2023-11-06 13:01:14 +11:00
pit
92b5111d7e chore: tidy up 2023-11-06 13:01:14 +11:00
pit
15a1c1da3f chore: remove generic data table 2023-11-06 13:01:14 +11:00
pit
d54710ca07 chore: add transition and check for empty users array 2023-11-06 13:01:14 +11:00
pit
9682f8ea36 feat: filter users by name or email 2023-11-06 13:01:14 +11:00
pit
02b6f6a7b7 feat: subscriptions and documents page 2023-11-06 13:01:14 +11:00
pit
214dd7a7c8 feat: manage documents admin ui 2023-11-06 13:01:14 +11:00
pit
ff58735153 feat: profile page done 2023-11-06 13:01:14 +11:00
pit
82c1ca13be feat: update user functionality 2023-11-06 13:01:13 +11:00
pit
eef720bf8c chore: improve the ui 2023-11-06 13:01:13 +11:00
pit
550b7e1655 feat: build individual user page 2023-11-06 13:01:13 +11:00
pit
32b41386e5 feat: admin ui for managing instance 2023-11-06 13:01:13 +11:00
1db0d2eae6 feat: added the icon for theme 2023-11-06 13:01:13 +11:00
7a1dd47537 feat: removed unecessary code to the file and made few UI changes 2023-11-06 13:01:13 +11:00
eec48e48ef feat: added a better theme change ability for user 2023-11-06 13:01:13 +11:00
1ec91f6c68 chore: add visibility toggle to reset password 2023-11-06 13:01:13 +11:00
fbb8e887a8 fix: update colors 2023-11-06 13:01:13 +11:00
6778d2a0da fix: update token validity check 2023-11-06 13:01:13 +11:00
0ec5976397 fix: update reset token query 2023-11-06 13:01:13 +11:00
8f03782fe3 fix: update email template 2023-11-06 13:01:13 +11:00
6e791b6e91 fix: add layout and minor updates 2023-11-06 13:01:13 +11:00
34c652ab54 feat: add invalid reset token page 2023-11-06 13:01:13 +11:00
dec7a9cb38 feat: better error handling and better toast messages 2023-11-06 13:01:13 +11:00
1e0cde850a feat: better error handling in forgotPassword trpc router 2023-11-06 13:01:13 +11:00
9b025f0c9f fix: width reducing with screen size 2023-11-06 13:01:13 +11:00
dabeead57f feat: send email to user on successful password reset 2023-11-06 13:01:13 +11:00
84bc6eb4f3 feat: add reset functionality 2023-11-06 13:01:13 +11:00
9ef50f356e feat: send forgot password email 2023-11-06 13:01:13 +11:00
38e8611159 chore: rename email templates export 2023-11-06 13:01:13 +11:00
8c12789c03 feat: add reset password email template 2023-11-06 13:01:13 +11:00
ca165c8141 feat: add forgot password template 2023-11-06 13:01:13 +11:00
729d0c93fe feat: create a password reset token 2023-11-06 13:01:13 +11:00
3544e44c31 chore: remove unused error toast 2023-11-06 13:01:13 +11:00
b3a312df98 feat: add reset password page 2023-11-06 13:01:13 +11:00
8ba9a761d4 feat: add forgot passoword page 2023-11-06 13:01:13 +11:00
c4282ded57 feat: add password reset token to schema 2023-11-06 13:01:13 +11:00
352720a6ae feat: add deploying documenso with vercel, supabase and resend 2023-11-06 13:01:13 +11:00
a948adfbb7 chore: update devcontainer 2023-11-06 13:01:13 +11:00
77833ba895 chore: update ci 2023-11-06 13:01:13 +11:00
f700016440 chore: tidy unused code 2023-11-06 13:01:13 +11:00
771042c9ce feat: add vercel build script 2023-11-06 13:01:13 +11:00
95a40400af feat: security headers 2023-11-06 13:01:13 +11:00
7d4bb09170 feat: use description of each blog post in og image (#380) 2023-11-06 13:01:13 +11:00
269f97fa6b fix: final reference to created column 2023-11-06 13:01:13 +11:00
666d682536 fix: remove further references to created column 2023-11-06 13:01:13 +11:00
2e5d5bb462 fix: remove references to created column 2023-11-06 13:01:13 +11:00
0835da45ef fix: implement feedback 2023-11-06 13:01:13 +11:00
5a99a0b5eb fix: update migration for timestamp columns 2023-11-06 13:01:13 +11:00
3afc35c40c feat: universal upload
Implementation of a universal upload allowing for multiple storage backends
starting with `database` and `s3`.

Allows clients to put and retrieve files from either client or server using
a blend of client and server actions.
2023-11-06 13:01:13 +11:00
72bec7bc34 feat: separate document data from document 2023-11-06 13:01:13 +11:00
0f38be4e41 chore: update readme to main version 2023-11-06 13:01:13 +11:00
706909107f chore: moved rewrite article from next repo 2023-11-06 13:01:13 +11:00
48ff16876b fix: add dashboard header border on scroll 2023-11-06 13:01:12 +11:00
a72248e871 refactor: organise recipient utils 2023-11-06 13:01:12 +11:00
48e58d4675 feat: add avatar email fallback 2023-11-06 13:01:12 +11:00
41d46c82d1 feat: update document table layout (#371)
* feat: update document table layout

- Removed dashboard page
- Removed redundant ID column
- Moved date to first column
- Added estimated locales for SSR dates
2023-11-06 13:01:12 +11:00
a849c6431f fix: data table links for recipients 2023-11-06 13:01:12 +11:00
399826a6f5 fix: add removed layout guard 2023-11-06 13:01:12 +11:00
632b3bd1f4 fix: update layout and wording 2023-11-06 13:01:12 +11:00
4f40ce6003 chore: implemented feedback 2023-11-06 13:01:12 +11:00
e752c0c60b chore: fix version in nextjs config 2023-11-06 13:01:12 +11:00
31ae6591dd chore: added app version 2023-11-06 13:01:12 +11:00
d8bbfae30d chore: changed the cards titles 2023-11-06 13:01:12 +11:00
f42f2b1aa0 chore: feedback improvements 2023-11-06 13:01:12 +11:00
a2635851cf chore: rename files 2023-11-06 13:01:12 +11:00
a94b80d07d chore: implemented feedback 2023-11-06 13:01:12 +11:00
766fc6410b feat: add the admin page 2023-11-06 13:01:12 +11:00
61df56c21e feat: creating the admin ui for metrics 2023-11-06 13:01:12 +11:00
fdb542765a chore: phrasing 2023-11-06 13:01:12 +11:00
dcde3317b8 Update apps/marketing/content/blog/building-documenso-pt1.mdx
Co-authored-by: Adithya Krishna  <aadithya794@gmail.com>
2023-11-06 13:01:12 +11:00
6be4a1d3e4 fix: update building documenso article description 2023-11-06 13:01:12 +11:00
9c26faba0d fix typo 2023-11-06 13:01:12 +11:00
1a48d194f7 refactor: replace whole implementation with a state 2023-11-06 13:01:12 +11:00
cb5df80a26 fix: hide popover when user selects a recipients 2023-11-06 13:01:12 +11:00
661dfe8368 fix: update devcontainer 2023-11-06 13:01:12 +11:00
90bacea7ed fix: update devcontainer 2023-11-06 13:01:12 +11:00
0f3db459cb feat: add devcontainer 2023-11-06 13:01:12 +11:00
9e4f1dfe1e feat: disable signing and editing for completed documents 2023-11-06 13:01:12 +11:00
d5753dfbb3 feat: update marketing mobile menu 2023-11-06 13:01:12 +11:00
a644e0134b fix: actually make timeouts clear 2023-11-06 13:01:12 +11:00
6ad10f6317 fix: tidy up code 2023-11-06 13:01:12 +11:00
05c7ac4c20 revert: fix: component style 2023-11-06 13:01:12 +11:00
0f9ce3b5c7 chore: add comments 2023-11-06 13:01:12 +11:00
45d6181042 fix: use toast 2023-11-06 13:01:12 +11:00
d3529374a6 fix: typo 2023-11-06 13:01:12 +11:00
a7fa9daada feat: add api error 2023-11-06 13:01:12 +11:00
4267456857 fix: component style 2023-11-06 13:01:12 +11:00
d7f4f2b8eb fix: value 2023-11-06 13:01:12 +11:00
07580b4640 fix: user name not updatable 2023-11-06 13:01:12 +11:00
c2fe7192fa chore: remove console.log 2023-11-06 13:01:12 +11:00
0961246834 feat: add missing email field to document sign page 2023-11-06 13:01:12 +11:00
383f8d6e3c chore: removed one more console.log 2023-11-06 13:01:12 +11:00
d1db20ff4a chore: removed console.logs and warn 2023-11-06 13:01:12 +11:00
4146d71f9d feat: store signature on signup 2023-11-06 13:01:12 +11:00
e05eaffb61 feat: store profile signature 2023-11-06 13:01:12 +11:00
6b250b88ec feat: add error message to signature pad 2023-11-06 13:01:12 +11:00
8a271ff8bc fix: fix eslint warnings 2023-11-06 13:01:12 +11:00
930a80ae18 chore: unused console logs 2023-11-06 13:01:12 +11:00
2aabe7ec60 feat: redirect to dashboard when document is sent 2023-11-06 13:01:12 +11:00
f64885d2c3 chore: removed console logs
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:12 +11:00
3546155aab fix: tidying broke generation 2023-11-06 13:01:12 +11:00
95886d67a6 fix: tidy code and expect jsx errors 2023-11-06 13:01:12 +11:00
8980274f7a fix: center align heading 2023-11-06 13:01:12 +11:00
64b399043c fix: use nextjs opengraph-image component 2023-11-06 13:01:12 +11:00
d536305c1c feat: add og image to blog posts 2023-11-06 13:01:12 +11:00
991411c9f5 feat: add blog og image 2023-11-06 13:01:11 +11:00
bc2da7834e fix: retain redirect to documents rather than dashboard 2023-11-06 13:01:11 +11:00
00143052fd fix: redirect root direcotory to dashboard 2023-11-06 13:01:11 +11:00
ef79eb3ca4 fix: redirect signin page to dashboard when logged in 2023-11-06 13:01:11 +11:00
63b21a8206 fix: minor updates 2023-11-06 13:01:11 +11:00
e243ba2564 fix: removed passHref and updated card
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
fd43ebb7c0 fix: reverted line change
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
a7e43c5d77 chore: made requested changes - v2
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
5ca4a7e117 chore: made requested changes
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
a23e3c6068 feat: updated rendeing of items using map
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
cf799e63ca chore: updated footer component
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
2b53f796bd chore: updated signing fields
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
ebdb6442c6 chore: updated dashboard page
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
c29d1463b0 chore: updated documents page
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
a8a6e40174 fix: update import for feature-flag helpers 2023-11-06 13:01:11 +11:00
81e612040a fix: extract feature-flag zod schema to separate file 2023-11-06 13:01:11 +11:00
7f5ef8690b fix: further stash conflicts 2023-11-06 13:01:11 +11:00
d7bd8fcd37 fix: add items from stash 2023-11-06 13:01:11 +11:00
c3f11afaf9 feat: make billing page functional 2023-11-06 13:01:11 +11:00
5cba252627 fix: minor tidying 2023-11-06 13:01:11 +11:00
cd1b4796fc feat: avoid updating password with existing password 2023-11-06 13:01:11 +11:00
9524875e98 feat: prevent a user from updating password with the same password 2023-11-06 13:01:11 +11:00
fba95a4402 feat: reset password from on submit 2023-11-06 13:01:11 +11:00
2ba7df4881 fix: update eslint rules 2023-11-06 13:01:11 +11:00
7811035384 feat: promise safety with eslint 2023-11-06 13:01:11 +11:00
98c980a5c4 fix: remove further unused code 2023-11-06 13:01:11 +11:00
7b2d3356f2 fix: remove unused code 2023-11-06 13:01:11 +11:00
dfe04018a0 feat: add data table actions 2023-11-06 13:01:11 +11:00
62c4a89521 feat: onepage inbox 2023-11-06 13:01:11 +11:00
a99efdc916 feat: add inbox 2023-11-06 13:01:11 +11:00
6959307f5e chore: change root package.json name 2023-11-06 13:01:11 +11:00
b512343bbb chore: removed eslint-plugin-import
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
5100a61ab7 fix: updated eslint config
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
e6790d3a19 feat: added eslint plugin dependencies
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
778ac63272 feat: added new eslint rules
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
e2fe7e900c fix: duplicate import
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
c098c58b2e fix: removed more unnecessary whitespace
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
9c763e864b fix: removed unnecessary whitespace
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
3ffee97e72 fix: style 2023-11-06 13:01:11 +11:00
2ab0cd1308 fix: overflow and scroll ux 2023-11-06 13:01:11 +11:00
989146f98e chore: reduce open page caching time to 1 hour 2023-11-06 13:01:11 +11:00
faa280c02b fix: make signing form card responsive 2023-11-06 13:01:11 +11:00
942d4bf905 fix: added eol to workflow file
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
84c6a40815 chore: updated workflow name
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
ce67f8cc11 feat: added pr title validator
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
44f59b07c5 feat: add autocomplete for password managers 2023-11-06 13:01:11 +11:00
b97a0380df feat: set min/max lengths for password 2023-11-06 13:01:11 +11:00
289e3776fd fix: dependency ordering 2023-11-06 13:01:11 +11:00
36b3b36ac8 feat: added sharp for image optimizations on nextjs
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
7a74f3c77e fix: authentication 2023-11-06 13:01:11 +11:00
d0def823c8 fix: update icon sizes
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:11 +11:00
c902fb8412 fix: updated padding and set patterns
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:10 +11:00
b733defcd9 feat: added show password feature
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:10 +11:00
0cc05052fa chore: optimized images to save ~8mb
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:10 +11:00
166271ac4b fix: add missing await on mail send 2023-11-06 13:01:10 +11:00
7cfc525ddf fix: nicer dark mode for stack avatars 2023-11-06 13:01:10 +11:00
3ea0ff6b81 chore: support direct urls for prisma 2023-11-06 13:01:10 +11:00
97c7bd9792 refactor: remove whitespace 2023-11-06 13:01:10 +11:00
215eaebc1a feat: update document flow
- Fixed z-index when dragging pre-existing fields
- Refactored document flow
- Added button spinner
- Added animation for document flow slider
- Updated drag and drop fields
- Updated document flow so it adjusts to the height of the PDF
- Updated claim plan dialog
2023-11-06 13:01:10 +11:00
039cd11c49 fix: use -p cli option for next dev 2023-11-06 13:01:10 +11:00
617c738e5b fix: dependabot workflow
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-11-06 13:01:10 +11:00
77ab168c03 feat: change document view upon completion 2023-11-06 13:01:10 +11:00
a0abf56833 refactor: extract common components into UI package 2023-11-06 13:01:10 +11:00
98862a6356 feat: robots.txt & sitemap.xml 2023-11-06 13:01:10 +11:00
077bb4ac3c chore: resolve build errors 2023-11-06 13:01:10 +11:00
399cf78508 fix: fixed build command in codeql workflow
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:10 +11:00
857a48b3d9 feat: update items 2023-11-06 13:01:10 +11:00
371f0947fb feat: update items
Refactored billing flag name

Refactored FeatureFlag type

Disabled session recording by default
2023-11-06 13:01:10 +11:00
aa2969fd50 feat: feature flags 2023-11-06 13:01:10 +11:00
64eefbd340 Add visual asset for blog post 2023-11-06 13:01:10 +11:00
769a374cf6 Create blog post 2023-11-06 13:01:10 +11:00
96ae622f95 fix: removed ts from codeql
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:10 +11:00
10330872e1 feat: add codeql-analysis
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:10 +11:00
3a77a50d56 chore: updated dependabot config
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:10 +11:00
122e1dffc3 chore: update readme file with radix-ui
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:10 +11:00
256f1c6c84 chore: update readme file
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:10 +11:00
56aea04b80 chore: enable job concurrency
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:10 +11:00
6e7deca0cb feat: add dependabot config
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:10 +11:00
7975eb7a8d feat: Added Engines to Enforce Node v18.0.0 and above
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-11-06 13:01:10 +11:00
105eeec5df chore: add shop to footer 2023-11-06 13:01:10 +11:00
efc2102b90 chore: remove double emtpy state add CTA 2023-11-06 13:01:10 +11:00
46bd501835 chore: status order to figma 2023-11-06 13:01:10 +11:00
759b864b14 remove dashboard and link bar 2023-11-06 13:01:10 +11:00
94b9b1060b fix: styling updates 2023-11-06 13:01:10 +11:00
6c06337f6e add PORT number back to package.json 2023-11-06 13:01:10 +11:00
0b5a550cd1 move menu links to map, add window-size hook 2023-11-06 13:01:10 +11:00
cd1af7b5d3 add reducedMotion check, center menu items 2023-11-06 13:01:10 +11:00
bc87986a3d extract hamburger to own file 2023-11-06 13:01:10 +11:00
a948441956 init mobileNavigation and added documenso symbol 2023-11-06 13:01:10 +11:00
1f75342b91 chore: ignore intellij editor settings and some of vscode 2023-11-06 13:01:10 +11:00
d36ca59b77 fix: commitlint 2023-11-06 13:01:10 +11:00
1f79ca0a70 feat: add commitlint 2023-11-06 13:01:09 +11:00
d4b130a731 ci: use built-in cache from setup-node action 2023-11-06 13:01:09 +11:00
77ad1d1b0b ci: remove --workspaces from the build script in ci workflow 2023-11-06 13:01:09 +11:00
ab4d70ced1 ci: setup build workflow 2023-11-06 13:01:09 +11:00
3632a5aef5 fix typo 2023-11-06 13:01:09 +11:00
8fa31c8f05 fix typo for consistency 2023-11-06 13:01:09 +11:00
7fda1d2010 feat: reduce chart radius to add padding 2023-11-06 13:01:09 +11:00
fac1d34d24 feat: change legend text color to black 2023-11-06 13:01:09 +11:00
c841c989aa feat: Add legend to pie chart 2023-11-06 13:01:09 +11:00
7a705e3b81 feat: document authoring 2023-11-06 13:01:09 +11:00
c6327c77ea chore: remove funding rounding 2023-11-06 13:01:08 +11:00
258477fd8d fix: link 2023-11-06 13:01:08 +11:00
baa7236864 fix: format heade 2023-11-06 13:01:08 +11:00
201b88544d chore: adding open to footer, naming 2023-11-06 13:01:08 +11:00
ee595056ac fix: open page link 2023-11-06 13:01:08 +11:00
331944f34a chore: update date 2023-11-06 13:01:08 +11:00
01c88065ee fix: used wrong lockfile version when resolving conflicts 2023-11-06 13:01:08 +11:00
784188ff51 refactor: future proofing the prettier/lint-staged for js/ts filetypes 2023-11-06 13:01:08 +11:00
58d765924f refactor: use lint-staged.config.cjs as configuration for lint-staged 2023-11-06 13:01:08 +11:00
9783e16656 add husky and lint-staged to ensure commits are formatted 2023-11-06 13:01:08 +11:00
e164fabb04 chore: review updates 2023-11-06 13:01:08 +11:00
2d9f996630 mention cals open startup article 2023-11-06 13:01:08 +11:00
7c0c082a40 feat: pre seed announce and link on /open page 2023-11-06 13:01:08 +11:00
57e9f88b93 chore: whitespace 2023-11-06 13:01:08 +11:00
64ffa37ea7 fix typo 2023-11-06 13:01:08 +11:00
1503536334 Optimize description 2023-11-06 13:01:08 +11:00
f3e8c62fad Edit content 2023-11-06 13:01:08 +11:00
f66934551e chore: add contributor license agreement 2023-11-06 13:01:08 +11:00
739599810e Edit blog post description 2023-11-06 13:01:08 +11:00
58e291bcf1 Update link to community (Discord) 2023-11-06 13:01:08 +11:00
7e2b351390 Add blog post: Switching to Discord 2023-11-06 13:01:08 +11:00
900a51ff06 Add profile picture: Flo 2023-11-06 13:01:08 +11:00
dcd275fa6b fix mailto 2023-11-06 13:01:08 +11:00
c5f35fb66d fix typo 2023-11-06 13:01:08 +11:00
89bf7b6651 edit announcing-documenso.mdx
- fix typo for consistency in tone and voice
- edit filename for SEO
2023-11-06 13:01:08 +11:00
51e55148c7 edit manifest.mdx
- fix typo in caption for consistency
- edit filename (URL) for SEO
2023-11-06 13:01:08 +11:00
4bfbe039e8 fix: ssr hydration error in piechart 2023-11-06 13:01:08 +11:00
769b51c531 chore: add total 2023-11-06 13:01:08 +11:00
07492100d2 chore: fix ts errors in metrics 2023-11-06 13:01:08 +11:00
3407952a5e chore: refactor github charts into a single component 2023-11-06 13:01:08 +11:00
d59045c419 chore: use correct names on tooltip 2023-11-06 13:01:08 +11:00
b3a52c4aec feat: add other charts 2023-11-06 13:01:08 +11:00
b3969f0614 chore: fix eslint error in data 2023-11-06 13:01:08 +11:00
0da6e93a6a chore: format date 2023-11-06 13:01:08 +11:00
fdd3d7c6fe chore: fetch stargazers data from stargazers api 2023-11-06 13:01:08 +11:00
a78ed42f6c feat: add github stars cummulative 2023-11-06 13:01:08 +11:00
63d4216fd1 chore: team updates, funding cummulative 2023-11-06 13:01:08 +11:00
d5e7f6f4df feat: add team members engagement to open page 2023-11-06 13:01:08 +11:00
145abc0e51 --amend 2023-11-06 13:01:08 +11:00
63f37732cd feat: add tooltip to cap table 2023-11-06 13:01:08 +11:00
27b42814d8 Add initial cap table 2023-11-06 13:01:08 +11:00
f882be4338 feat: open page 2023-11-06 13:01:08 +11:00
dc58f77c61 chore: upgrade deps and linting 2023-11-06 13:01:08 +11:00
0fca2e9f4e fix: improve typesafety 2023-11-06 13:01:08 +11:00
664357d166 chore: add oss friends page 2023-11-06 13:01:08 +11:00
a1cb595f25 fix: type errors 2023-11-06 13:01:08 +11:00
d986a3cf77 fix: styling updates 2023-11-06 13:01:08 +11:00
71e9f016b6 feat: update privacy content 2023-11-06 13:01:08 +11:00
96fc2fb850 feat: update blog styling 2023-11-06 13:01:08 +11:00
3f322d1d0c feat: update privacy content 2023-11-06 13:01:08 +11:00
79684c9970 feat: remove whitespace 2023-11-06 13:01:08 +11:00
fcf9720a1e feat: add generic content page 2023-11-06 13:01:08 +11:00
822624bc02 Update apps/marketing/content/blog/announcing-documenso.mdx
Co-authored-by: Joshua Sharp <joshuafsharp@gmail.com>
2023-11-06 13:01:08 +11:00
154ef26465 feat: add content layer
Add blog pages

Add privacy page
2023-11-06 13:01:08 +11:00
bc425abe35 refactor: read z-index values from an object 2023-11-06 13:01:08 +11:00
0de4fe5883 fix: update types from code review 2023-11-06 13:01:07 +11:00
a94f447e9e feat: update stack avatar with changes from code review 2023-11-06 13:01:07 +11:00
e1d57e6d29 feat: add recipients avatars on all tables 2023-11-06 13:01:07 +11:00
71c689eae8 chore: refactor stacked avatars into component 2023-11-06 13:01:07 +11:00
208e028226 feat: add tooltip on hover on stacked avatars 2023-11-06 13:01:07 +11:00
00a15124be feat: stack recipients avatars on dashboard 2023-11-06 13:01:07 +11:00
12d8cebd4c feat: use server-actions for authoring flow
This change actually makes the authoring flow work for
the most part by tying in emailing and more.

We have also done a number of quality of life updates to
simplify the codebase overall making it easier to continue
work on the refresh.
2023-11-06 13:01:07 +11:00
5e3752cdbf fix: add shadow to metric-card 2023-11-06 13:01:07 +11:00
ca0f4eefd2 feat: email templates
adds email templates using `react-email` which will be used for invites,
signing and document completion.

authored by @dephraiim
2023-11-06 13:01:07 +11:00
0b1c4fadc6 chore: use jsonprotocol 2023-11-06 13:01:07 +11:00
56b6bc68c4 linking card metrics to filtered /documents 2023-11-06 13:01:07 +11:00
3c73f030ac feat: persist fields and recipients for document editing 2023-11-06 13:01:07 +11:00
115cae8365 fix: styling and semantic updates 2023-11-06 13:01:07 +11:00
814a6174e3 improved loading state for /document/id 2023-11-06 13:01:07 +11:00
5442e82ae7 clean up console.log() used for testing 2023-11-06 13:01:07 +11:00
6253c42ca1 feat: google auth without schema change 2023-11-06 13:01:07 +11:00
3377e29c72 fix: dark mode on signup and signin pages 2023-11-06 13:01:07 +11:00
4ea316a077 fix: signature pad in dark mode 2023-11-06 13:01:07 +11:00
feefeea0c4 resolving eslint build errors 2023-11-06 13:01:07 +11:00
40115d33b4 adding dark mode to feat/refresh 2023-11-06 13:01:07 +11:00
cc182649c2 wip: create document workflow 2023-11-06 13:01:07 +11:00
159bcade7b wip: refresh design 2023-11-06 13:01:06 +11:00
76b2fb5edd docs: add docker compose instructions
Add docker section to Deployment section
2023-10-31 18:47:34 +11:00
7df83cc0ad Merge pull request #363 from mcnaveen/main
chore(docs): improve Docker instructions
2023-09-13 21:57:56 +10:00
f9d96c67d3 changes 2023-09-10 09:32:37 +05:30
beb9946f3b typo 2023-09-10 09:29:01 +05:30
822b018eb0 chore(docs): improve Docker instructions 2023-09-10 09:28:15 +05:30
d702710cb4 Merge pull request #325 from thara003/fix/typo-contributing.md
docs: fix typo in CONTRUBUTING.md
2023-08-30 11:19:21 +10:00
a9ed9c0316 docs: fix a typo in README.md 2023-08-30 00:27:44 +05:30
1ea231e9af docs: fix a typo in CONTRUBUTING.md 2023-08-29 19:56:39 +05:30
dfd28f4441 Merge pull request #322 from documenso/readme
feat: Add Repository Activity
2023-08-29 13:23:15 +10:00
fee107ff7a Add Repository Activity 2023-08-28 16:34:31 +02:00
19ea119009 Merge pull request #251 from documenso/docs/add-render-deploy
docs: add render one click deploy button
2023-08-24 10:49:03 +10:00
aea20019bd Merge pull request #253 from documenso/docs/add-gitpod-setup
docs: add gitpod setup
2023-08-22 10:20:24 +10:00
3177a07d25 chore: update readme 2023-08-21 17:00:14 +10:00
0a1603b147 Merge pull request #276 from yashug/fix-null-name-email
Fixes Showing ask null from SigningEmail Template
2023-08-21 12:56:07 +10:00
82ccdd5104 fix-null-name-email 2023-08-20 10:15:26 +05:30
2d5727cab2 chore: add issue and pr templates 2023-08-19 19:57:03 +10:00
8862edfd3e Merge pull request #269 from rishi-raj-jain/main
fix: [DOC-296] Add changesets for automatic release versioning
2023-08-18 18:35:19 +10:00
2c9644ce9c remove changelog-github 2023-08-18 11:32:48 +05:30
6b45e8ce3a update changeset config and contributing 2023-08-18 11:31:13 +05:30
a98eca3bf1 move to devDep 2023-08-18 11:18:27 +05:30
e1772da491 add publish & version 2023-08-18 11:17:08 +05:30
9f1e0257e7 install changeset 2023-08-18 11:06:49 +05:30
4f4725f166 Merge pull request #265 from documenso/fix/discord
fix: update link to community
2023-08-18 08:56:54 +10:00
eb7d89a0cd Update link to community 2023-08-17 17:46:32 +02:00
4a57f75228 update link to community 2023-08-17 17:45:39 +02:00
adf92bb53d Merge pull request #254 from nsylke/nsylke-patch-1
Correct readme logo url
2023-08-14 21:34:18 +10:00
adf3a11c5f Update README.md 2023-08-12 15:08:57 -05:00
652951ed7f Fix prisma studio opening twice 2023-08-11 20:48:42 +00:00
40db5baa17 Add gitpod button to readme 2023-08-11 20:44:09 +00:00
4cdfa2d1f0 Add gitpod config files 2023-08-11 20:38:41 +00:00
ba82b1fca8 chore: update dockerfile 2023-08-10 13:51:22 +10:00
6b3696d879 docs: add render deploy button to readme 2023-08-10 01:53:05 +00:00
ca1522a31e Merge branch 'main' into feat/add-render-deploy 2023-08-10 01:52:25 +00:00
201c0ac22a chore: update start command for render deployment 2023-08-10 01:34:42 +00:00
c573e15ac2 Add render.yaml 2023-08-10 00:52:43 +00:00
e5a80a701f Merge pull request #242 from documenso/docs/railway-one-click-deploy
docs: add railway one click deploy
2023-08-09 16:23:40 +10:00
f8aebbc484 Merge branch 'main' into docs/railway-one-click-deploy 2023-08-09 16:22:56 +10:00
4e60d4ac09 Merge pull request #247 from criadoperez/fix/criadoperez
Fixed typos
2023-08-04 12:36:49 +10:00
b5328eebde Corrected ts and tsx files 2023-08-04 02:14:04 +02:00
e87c57c97c Merge branch 'main' into docs/railway-one-click-deploy 2023-08-03 10:51:49 +10:00
cef5c8e33f Merge pull request #245 from documenso/fix-comunity-link
Update link to community (Discord)
2023-08-02 15:13:48 +02:00
b03dd1553f Update link to community (Discord) 2023-08-02 15:12:31 +02:00
f6d1b8c8a1 add hint that more deployment methods are coming 2023-08-01 14:12:33 +00:00
cb29ffef37 docs: add railway one click deploy 2023-08-01 13:47:50 +00:00
f7d0bb9823 Merge pull request #227 from documenso/docs-coventional-commits
docs: conventional commits
2023-07-31 13:00:55 +10:00
fc2809c4cf Merge branch 'main' into docs-coventional-commits 2023-07-28 11:42:48 +02:00
14536bda1e Merge pull request #234 from documenso/chore-manifest-filename
Rename manifest.md to MANIFEST.md
2023-07-21 14:35:39 +02:00
5fcd54ae09 Rename manifest.md to MANIFEST.md 2023-07-21 14:35:19 +02:00
35fecfffa9 Merge pull request #231 from documenso/chore/claim
chore: claim
2023-07-21 14:26:12 +02:00
da07bf135c chore: phrasing 2023-07-21 09:55:50 +02:00
1a06dd261c chore: claim 2023-07-21 09:47:05 +02:00
9c3fbbdb3a chore: dub slack slug 2023-07-19 07:54:03 +02:00
c20123ec75 merge main 2023-07-18 12:03:14 +02:00
4c25e85f01 doc: branchformat 2023-07-18 11:59:59 +02:00
ed3dbefbd7 Merge pull request #229 from fmerian/patch-1
fix: Update link to Slack in CONTRIBUTING.md
2023-07-15 12:19:04 +10:00
7d8f83750b Update link to Slack in CONTRIBUTING.md 2023-07-14 16:40:31 +02:00
fda3472e67 docs: conventional commits 2023-07-13 15:50:38 +02:00
2dd89b1bc1 Merge pull request #225 from documenso/feat/manifest
feat: added manifest
2023-07-13 12:08:02 +02:00
cc87eeb8e0 feat: added manifest 2023-07-13 11:10:21 +02:00
6c78332258 fix: await signing requests 2023-07-08 18:52:13 +10:00
5922725e1a Merge pull request #219 from PeerRich/patch-2
added new cal.com badge for booking link
2023-06-29 13:55:24 +02:00
36232c7817 added new cal.com badge for booking link 2023-06-28 19:53:39 +02:00
723339f812 fix: add smtp troubleshooting 2023-06-17 13:08:15 +10:00
f279b41b89 Merge pull request #172 from doug-andrade/logo
added dynamic coloring of logo mark
2023-06-17 11:56:36 +10:00
3d0836c39c Merge branch 'main' into logo 2023-06-17 11:55:54 +10:00
fcaa59699c Merge pull request #188 from Ashutosh-Bhadauriya/fix/selectbox-alignment
Fixed alignment of div containing selectboxes in mobile and tablet screens
2023-06-17 11:54:01 +10:00
5063b60a8a fix: further style updates 2023-06-17 11:53:04 +10:00
1322f7333f Merge branch 'main' into fix/selectbox-alignment 2023-06-17 11:48:11 +10:00
0278495896 Merge pull request #190 from dephraiim/fix-typo
Fix typo in contributing.md
2023-06-17 11:47:19 +10:00
ef34c4fe5d Merge pull request #179 from documenso/fix/improve-stripe-webhook-endpoint
fix: improve stripe webhook endpoint
2023-06-17 11:46:37 +10:00
6dad379943 Merge pull request #196 from documenso/feat/password-reset
feat: reset password
2023-06-17 11:45:38 +10:00
d3f82e1eb0 fix: code style updates and email wording changes 2023-06-17 11:44:34 +10:00
6838b953a8 Merge pull request #209 from documenso/fix/send-error-double-send
fix: don't double send error reponses when sending fails
2023-06-17 11:28:13 +10:00
fdd5a6114e Merge pull request #211 from danieltonel/doc-210-fix-docker-compose-name-attribute-error
Doc 210 fix docker compose name attribute error
2023-06-16 18:24:54 +10:00
b05ab9fbb4 set name using docker compose 2023-06-16 10:50:20 +03:00
e34be16d3d fix: Docker Compose 'name' attribute causing invalid file issue 2023-06-16 10:44:23 +03:00
9fd9bc2893 fix: reformat 2023-06-16 00:24:13 +10:00
3f14d8007a fix: don't double send error reponses when sending fails 2023-06-15 23:25:35 +10:00
e3bc41934c Fixes from code review 2023-06-09 03:55:30 +00:00
13a840ff78 Password validation with zod 2023-06-07 12:33:33 +00:00
fe6561f596 Set reset token expiry to 24 hours 2023-06-07 11:02:50 +00:00
9cfbb1dec9 Avoid leaking that a user has an account 2023-06-07 10:59:20 +00:00
9dd8c2842c Match emails with regex 2023-06-07 10:44:07 +00:00
54a965e2b4 Remove unused props from components 2023-06-07 10:37:47 +00:00
7cc1ae2de0 Refactor forgot password and reset component 2023-06-07 10:33:05 +00:00
f08836216e Remove unused input fields 2023-06-07 10:12:05 +00:00
7184c47ac4 Rename component interfaces 2023-06-07 10:10:56 +00:00
79bd410687 Remove tokens on successful password reset 2023-06-05 17:15:41 +00:00
3a0648c85d Expire token after 1 hour 2023-06-05 16:54:12 +00:00
2b9a2ff250 Avoid user from setting the same old password 2023-06-05 16:36:16 +00:00
4136811e32 Avoid consecutive password reset requests 2023-06-05 16:01:01 +00:00
e9cee23c15 Error handling for invalid users 2023-06-05 15:52:00 +00:00
5d2349086d Send email on password reset complete 2023-06-05 15:33:27 +00:00
c47e01b2b8 Display sucessful password reset request 2023-06-05 14:59:50 +00:00
7c30ee0c3e Redirect to /login on password reset 2023-06-05 14:47:10 +00:00
6e2b05f835 Change password in database to new reset password 2023-06-05 14:36:20 +00:00
8dc9c9d72d Add reset password page 2023-06-05 14:17:45 +00:00
66b529a841 feat: send reset password email 2023-06-05 13:44:47 +00:00
8293b50195 Create reset password token for user 2023-06-05 13:05:25 +00:00
002b22b1a8 Add forgot password page 2023-06-05 12:53:51 +00:00
447bf0cb76 Add password reset to prisma schema 2023-06-05 12:23:52 +00:00
37c4e68aac Fix typo in contributing.md 2023-06-02 20:01:10 +00:00
a07febef46 Fix: alignment of div containing selecboxes in mobile and tab screens 2023-06-02 15:06:26 +05:30
79c037216d Delete turbo-build.log 2023-06-01 22:13:45 -04:00
aa584c1495 Merge branch 'logo' of https://github.com/doug-andrade/documenso into logo 2023-06-01 22:09:39 -04:00
8b9738f6d5 fix: updated all logo component to set color 2023-06-01 22:05:15 -04:00
19e960f593 fix: improve stripe webhook endpoint
Improve the stripe webhook endpoint by checking for
subscriptions prior to performing an update to handle
cases where accounts have no created subscription.

This can happen in sitations such as when a checkout_session has been created but the payment fails.
2023-05-31 21:11:54 +10:00
37ded07a92 Merge branch 'main' into logo 2023-05-29 13:23:14 -04:00
df2294b43b dynamic coloring of logo mark 2023-05-29 13:17:40 -04:00
1220 changed files with 195709 additions and 29590 deletions

View File

@ -0,0 +1,38 @@
{
"name": "Documenso",
"image": "mcr.microsoft.com/devcontainers/base:bullseye",
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {
"version": "latest",
"enableNonRootDocker": "true",
"moby": "true"
},
"ghcr.io/devcontainers/features/node:1": {}
},
"onCreateCommand": "./.devcontainer/on-create.sh",
"forwardPorts": [
3000,
54320,
9000,
2500,
1100
],
"customizations": {
"vscode": {
"extensions": [
"aaron-bond.better-comments",
"bradlc.vscode-tailwindcss",
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"mikestead.dotenv",
"unifiedjs.vscode-mdx",
"GitHub.copilot-chat",
"GitHub.copilot-labs",
"GitHub.copilot",
"GitHub.vscode-pull-request-github",
"Prisma.prisma",
"VisualStudioExptTeam.vscodeintellicode"
]
}
}
}

13
.devcontainer/on-create.sh Executable file
View File

@ -0,0 +1,13 @@
#!/usr/bin/env bash
# Start the database and mailserver
docker compose -f ./docker/compose-without-app.yml up -d
# Install dependencies
npm install
# Copy the env file
cp .env.example .env
# Run the migrations
npm run prisma:migrate-dev

3
.devcontainer/post-start.sh Executable file
View File

@ -0,0 +1,3 @@
#!/usr/bin/env bash
npm run dev

View File

@ -1,19 +1,17 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
**/node_modules
**/.pnp
**.pnp.js
node_modules
.pnp
.pnp.js
# testing
**/coverage
coverage
# next.js
**/.next/
**/out/
# production
**/build
.next/
out/
build
# misc
.DS_Store
@ -23,16 +21,16 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# local env files
.env*.local
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# turbo
.turbo
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
.env
.env.example

9
.editorconfig Normal file
View File

@ -0,0 +1,9 @@
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 2

View File

@ -1,54 +1,96 @@
# Database
# Option 1: You can use the provided remote test database, courtesy of the documenso team: postgres://documenso_test_user:GnmLG14u12sd9zHsd4vVWwP40WneFJMo@dpg-cf2hljh4reb5o45oqpq0-a.oregon-postgres.render.com/documenso_test_e2i3
# Option 2: Set up a local Postgres SQL instance (RECOMMENDED)
# Option 3: Use the provided dx setup (RECOMMENDED)
# => postgres://documenso:password@127.0.0.1:54320/documenso
#
# ⚠ WARNING: The test database can be reset or taken offline at any point.
# ⚠ WARNING: Please be aware that nothing written to the test database is private.
DATABASE_URL=''
# [[AUTH]]
NEXTAUTH_URL="http://localhost:3000"
NEXTAUTH_SECRET="secret"
# URL
NEXT_PUBLIC_WEBAPP_URL='http://localhost:3000'
# [[CRYPTO]]
# Application Key for symmetric encryption and decryption
# REQUIRED: This should be a random string of at least 32 characters
NEXT_PRIVATE_ENCRYPTION_KEY="CAFEBABE"
# REQUIRED: This should be a random string of at least 32 characters
NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY="DEADBEEF"
# AUTH
# For more see here: https://next-auth.js.org
NEXTAUTH_SECRET='lorem ipsum sit dolor random string for encryption this could literally be anything'
NEXTAUTH_URL='http://localhost:3000'
# [[AUTH OPTIONAL]]
NEXT_PRIVATE_GOOGLE_CLIENT_ID=""
NEXT_PRIVATE_GOOGLE_CLIENT_SECRET=""
# SIGNING
CERT_FILE_PATH=
CERT_PASSPHRASE=
CERT_FILE_ENCODING=
# [[URLS]]
NEXT_PUBLIC_WEBAPP_URL="http://localhost:3000"
NEXT_PUBLIC_MARKETING_URL="http://localhost:3001"
# MAIL (NODEMAILER)
# SENDGRID
# Get a Sendgrid Api key here: https://signup.sendgrid.com
SENDGRID_API_KEY=''
# [[DATABASE]]
NEXT_PRIVATE_DATABASE_URL="postgres://documenso:password@127.0.0.1:54320/documenso"
# 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"
# SMTP
# Set SMTP credentials to use SMTP instead of the Sendgrid API.
# If you're using the dx setup you can use the following values:
#
# SMTP_MAIL_HOST='127.0.0.1'
# SMTP_MAIL_PORT='2500'
# SMTP_MAIL_USER='documenso'
# SMTP_MAIL_PASSWORD='documenso'
SMTP_MAIL_HOST=''
SMTP_MAIL_PORT=''
SMTP_MAIL_USER=''
SMTP_MAIL_PASSWORD=''
# [[E2E Tests]]
E2E_TEST_AUTHENTICATE_USERNAME="Test User"
E2E_TEST_AUTHENTICATE_USER_EMAIL="testuser@mail.com"
E2E_TEST_AUTHENTICATE_USER_PASSWORD="test_Password123"
# Sender for signing requests and completion mails.
MAIL_FROM='documenso@localhost.com'
# [[STORAGE]]
# OPTIONAL: Defines the storage transport to use. Available options: database (default) | s3
NEXT_PUBLIC_UPLOAD_TRANSPORT="database"
# OPTIONAL: Defines the endpoint to use for the S3 storage transport. Relevant when using third-party S3-compatible providers.
NEXT_PRIVATE_UPLOAD_ENDPOINT="http://127.0.0.1:9002"
# OPTIONAL: Defines the region to use for the S3 storage transport. Defaults to us-east-1.
NEXT_PRIVATE_UPLOAD_REGION="unknown"
# REQUIRED: Defines the bucket to use for the S3 storage transport.
NEXT_PRIVATE_UPLOAD_BUCKET="documenso"
# OPTIONAL: Defines the access key ID to use for the S3 storage transport.
NEXT_PRIVATE_UPLOAD_ACCESS_KEY_ID="documenso"
# OPTIONAL: Defines the secret access key to use for the S3 storage transport.
NEXT_PRIVATE_UPLOAD_SECRET_ACCESS_KEY="password"
# STRIPE
STRIPE_API_KEY=
STRIPE_WEBHOOK_SECRET=
# [[SMTP]]
# OPTIONAL: Defines the transport to use for sending emails. Available options: smtp-auth (default) | smtp-api | mailchannels
NEXT_PRIVATE_SMTP_TRANSPORT="smtp-auth"
# OPTIONAL: Defines the host to use for sending emails.
NEXT_PRIVATE_SMTP_HOST="127.0.0.1"
# OPTIONAL: Defines the port to use for sending emails.
NEXT_PRIVATE_SMTP_PORT=2500
# OPTIONAL: Defines the username to use with the SMTP server.
NEXT_PRIVATE_SMTP_USERNAME="documenso"
# OPTIONAL: Defines the password to use with the SMTP server.
NEXT_PRIVATE_SMTP_PASSWORD="password"
# OPTIONAL: Defines the API key user to use with the SMTP server.
NEXT_PRIVATE_SMTP_APIKEY_USER=
# OPTIONAL: Defines the API key to use with the SMTP server.
NEXT_PRIVATE_SMTP_APIKEY=
# OPTIONAL: Defines whether to force the use of TLS.
NEXT_PRIVATE_SMTP_SECURE=
# REQUIRED: Defines the sender name to use for the from address.
NEXT_PRIVATE_SMTP_FROM_NAME="No Reply @ Documenso"
# REQUIRED: Defines the email address to use as the from address.
NEXT_PRIVATE_SMTP_FROM_ADDRESS="noreply@documenso.com"
# OPTIONAL: The API key to use for Resend.com
NEXT_PRIVATE_RESEND_API_KEY=
# OPTIONAL: The API key to use for MailChannels.
NEXT_PRIVATE_MAILCHANNELS_API_KEY=
# OPTIONAL: The endpoint to use for the MailChannels API if using a proxy.
NEXT_PRIVATE_MAILCHANNELS_ENDPOINT=
# OPTIONAL: The domain to use for DKIM signing.
NEXT_PRIVATE_MAILCHANNELS_DKIM_DOMAIN=
# OPTIONAL: The selector to use for DKIM signing.
NEXT_PRIVATE_MAILCHANNELS_DKIM_SELECTOR=
# OPTIONAL: The private key to use for DKIM signing.
NEXT_PRIVATE_MAILCHANNELS_DKIM_PRIVATE_KEY=
# OPTIONAL: Displays the maximum document upload limit to the user in MBs
NEXT_PUBLIC_DOCUMENT_SIZE_UPLOAD_LIMIT=5
# [[STRIPE]]
NEXT_PRIVATE_STRIPE_API_KEY=
NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET=
NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_MONTHLY_PRICE_ID=
NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_YEARLY_PRICE_ID=
#FEATURE FLAGS
# Allow users to register via the /signup page. Otherwise they will be redirect to the home page.
NEXT_PUBLIC_ALLOW_SIGNUP=true
NEXT_PUBLIC_ALLOW_SUBSCRIPTIONS=false
# [[FEATURES]]
# OPTIONAL: Leave blank to disable PostHog and feature flags.
NEXT_PUBLIC_POSTHOG_KEY=""
# OPTIONAL: Leave blank to disable billing.
NEXT_PUBLIC_FEATURE_BILLING_ENABLED=
# OPTIONAL: Leave blank to allow users to signup through /signup page.
NEXT_PUBLIC_DISABLE_SIGNUP=
# This is only required for the marketing site
# [[REDIS]]
NEXT_PRIVATE_REDIS_URL=
NEXT_PRIVATE_REDIS_TOKEN=

8
.eslintignore Normal file
View File

@ -0,0 +1,8 @@
# Config files
*.config.js
*.config.cjs
# Statically hosted javascript files
apps/*/public/*.js
apps/*/public/*.cjs
scripts/

13
.eslintrc.cjs Normal file
View File

@ -0,0 +1,13 @@
/** @type {import('eslint').Linter.Config} */
module.exports = {
root: true,
extends: ['@documenso/eslint-config'],
rules: {
'@next/next/no-img-element': 'off',
},
settings: {
next: {
rootDir: ['apps/*/'],
},
},
};

47
.github/ISSUE_TEMPLATE/bug-report.yml vendored Normal file
View File

@ -0,0 +1,47 @@
name: 'Bug Report'
labels: ['bug']
description: Create a bug report to help us improve
body:
- type: markdown
attributes:
value: Thank you for reporting an issue.
Please fill in as much of the form below as you're able to.
- type: textarea
attributes:
label: Issue Description
description: Please provide a clear and concise description of the problem.
- type: textarea
attributes:
label: Steps to Reproduce
description: Please provide step-by-step instructions to reproduce the issue. Include code snippets, error messages, and any other relevant information.
- type: textarea
attributes:
label: Expected Behavior
description: Describe what you expected to happen.
- type: textarea
attributes:
label: Current Behavior
description: Describe what is currently happening.
- type: textarea
attributes:
label: Screenshots (optional)
description: If applicable, add screenshots to help explain the issue.
- type: input
attributes:
label: Operating System [e.g., Windows 10]
- type: input
attributes:
label: Browser [e.g., Chrome, Firefox]
- type: input
attributes:
label: Version [e.g., 2.0.1]
- type: checkboxes
attributes:
label: Please check the boxes that apply to this issue report.
options:
- label: I have searched the existing issues to make sure this is not a duplicate.
- label: I have provided steps to reproduce the issue.
- label: I have included relevant environment information.
- label: I have included any relevant screenshots.
- label: I understand that this is a voluntary contribution and that there is no guarantee of resolution.
- label: I want to work on creating a PR for this issue if approved

View File

@ -0,0 +1,36 @@
name: 'Feature Request'
description: Suggest a new idea or enhancement for this project
body:
- type: markdown
attributes:
value: Please provide a clear and concise title for your feature request
- type: textarea
attributes:
label: Feature Description
description: Describe the feature you are requesting in detail. Explain what problem it solves or what value it adds to the project.
- type: textarea
attributes:
label: Use Case
description: Provide a scenario or use case where this feature would be beneficial. Explain how users would interact with this feature and why it's important.
- type: textarea
attributes:
label: Proposed Solution
description: If you have an idea of how this feature could be implemented, describe it here. Include any technical details, UI/UX considerations, or design suggestions.
- type: textarea
attributes:
label: Alternatives (optional)
description: Are there any alternative ways to achieve the same goal? Describe other approaches that could be considered if this feature is not implemented.
- type: textarea
attributes:
label: Additional Context
description: Add any additional context or information that might be relevant to the feature request.
- type: checkboxes
attributes:
label: Please check the boxes that apply to this feature request.
options:
- label: I have searched the existing feature requests to make sure this is not a duplicate.
- label: I have provided a detailed description of the requested feature.
- label: I have explained the use case or scenario for this feature.
- label: I have included any relevant technical details or design suggestions.
- label: I understand that this is a suggestion and that there is no guarantee of implementation.
- label: I want to work on creating a PR for this issue if approved

39
.github/ISSUE_TEMPLATE/improvement.yml vendored Normal file
View File

@ -0,0 +1,39 @@
name: 'General Improvement Request'
description: 'Suggest a minor enhancement or improvement for this project'
title: '[Title for your improvement suggestion]'
body:
- type: textarea
attributes:
label: 'Describe the improvement you are suggesting in detail'
description: 'Explain why this improvement would be beneficial. Share any context, pain points, or reasons for suggesting this change.'
validations:
required: true
- type: textarea
id: description
attributes:
label: 'Additional Information & Alternatives (optional)'
description: 'Are there any additional context or information that might be relevant to the improvement suggestion.'
validations:
required: false
- type: dropdown
id: assignee
attributes:
label: 'Do you want to work on this improvement?'
multiple: false
options:
- 'No'
- 'Yes'
default: 0
validations:
required: true
- type: checkboxes
attributes:
label: 'Please check the boxes that apply to this improvement suggestion.'
options:
- label: 'I have searched the existing issues and improvement suggestions to avoid duplication.'
- label: 'I have provided a clear description of the improvement being suggested.'
- label: 'I have explained the rationale behind this improvement.'
- label: 'I have included any relevant technical details or design suggestions.'
- label: 'I understand that this is a suggestion and that there is no guarantee of implementation.'
validations:
required: true

View File

@ -0,0 +1,49 @@
---
name: Pull Request
about: Submit changes to the project for review and inclusion
---
## Description
<!--- Describe the changes introduced by this pull request. -->
<!--- Explain what problem it solves or what feature/fix it adds. -->
## Related Issue
<!--- If this pull request is related to a specific issue, reference it here using #issue_number. -->
<!--- For example, "Fixes #123" or "Addresses #456". -->
## Changes Made
<!--- Provide a summary of the changes made in this pull request. -->
<!--- Include any relevant technical details or architecture changes. -->
- Change 1
- Change 2
- ...
## Testing Performed
<!--- Describe the testing that you have performed to validate these changes. -->
<!--- Include information about test cases, testing environments, and results. -->
- Tested feature X in scenario Y.
- Ran unit tests for component Z.
- Tested on browsers A, B, and C.
- ...
## Checklist
<!--- Please check the boxes that apply to this pull request. -->
<!--- You can add or remove items as needed. -->
- [ ] I have tested these changes locally and they work as expected.
- [ ] I have added/updated tests that prove the effectiveness of these changes.
- [ ] I have updated the documentation to reflect these changes, if applicable.
- [ ] I have followed the project's coding style guidelines.
- [ ] I have addressed the code review feedback from the previous submission, if applicable.
## Additional Notes
<!--- Provide any additional context or notes for the reviewers. -->
<!--- This might include details about design decisions, potential concerns, or anything else relevant. -->

View File

@ -0,0 +1,40 @@
---
name: Test Addition
about: Submit a new test, either unit or end-to-end (E2E), for review and inclusion
---
## Description
<!--- Provide a clear and concise description of the new test you are adding. -->
<!--- Explain the purpose of the test and what it aims to validate. -->
## Related Issue
<!--- If this test addition is related to a specific issue, reference it here using #issue_number. -->
<!--- For example, "Fixes #123" or "Addresses #456". -->
## Test Details
<!--- Describe the details of the test you're adding. -->
<!--- Include information about inputs, expected outputs, and any specific scenarios. -->
- Test Name: Name of the test
- Type: [Unit / E2E]
- Description: Brief description of what the test checks
- Inputs: What inputs the test uses (if applicable)
- Expected Output: What output or behavior the test expects
## Checklist
<!--- Please check the boxes that apply to this pull request. -->
<!--- You can add or remove items as needed. -->
- [ ] I have written the new test and ensured it works as intended.
- [ ] I have added necessary documentation to explain the purpose of the test.
- [ ] I have followed the project's testing guidelines and coding style.
- [ ] I have addressed any review feedback from previous submissions, if applicable.
## Additional Notes
<!--- Provide any additional context or notes for the reviewers. -->
<!--- This might include explanations about the testing approach or any potential concerns. -->

32
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,32 @@
version: 2
updates:
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'weekly'
target-branch: 'main'
labels:
- 'ci dependencies'
- 'ci'
open-pull-requests-limit: 0
- package-ecosystem: 'npm'
directory: '/apps/marketing'
schedule:
interval: 'weekly'
target-branch: 'main'
labels:
- 'npm dependencies'
- 'frontend'
open-pull-requests-limit: 0
- package-ecosystem: 'npm'
directory: '/apps/web'
schedule:
interval: 'weekly'
target-branch: 'main'
labels:
- 'npm dependencies'
- 'frontend'
open-pull-requests-limit: 0

21
.github/labeler.yml vendored Normal file
View File

@ -0,0 +1,21 @@
'apps: marketing':
- apps/marketing/**
'apps: web':
- apps/web/**
'version bump 👀':
- '**/package.json'
- '**/package-lock.json'
'🚨 migrations 🚨':
- packages/prisma/migrations/**/migration.sql
'🚨 e2e changes 🚨':
- packages/app-tests/e2e/**
'🚨 .env changes 🚨':
- .env.example
'pkg: ee changes':
- packages/ee/**

51
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,51 @@
name: 'Continuous Integration'
on:
push:
branches: ['main']
pull_request:
branches: ['main']
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env:
HUSKY: 0
jobs:
build_app:
name: Build App
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Install dependencies
run: npm ci
- name: Copy env
run: cp .env.example .env
- name: Build
run: npm run build
build_docker:
name: Build Docker Image
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Build Docker Image
run: ./docker/build.sh

48
.github/workflows/codeql-analysis.yml vendored Normal file
View File

@ -0,0 +1,48 @@
name: 'CodeQL'
on:
workflow_dispatch:
push:
branches: ['main']
pull_request:
branches: ['main']
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: true
matrix:
language: ['javascript']
steps:
- name: Checkout repository
uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Install Dependencies
run: npm ci
- name: Copy env
run: cp .env.example .env
- name: Build Documenso
run: npm run build
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2

24
.github/workflows/deploy.yml vendored Normal file
View File

@ -0,0 +1,24 @@
name: Deploy to Production
on:
push:
tags:
- '*'
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: main
fetch-depth: 0
token: ${{ secrets.GH_TOKEN }}
- name: Push to release branch
run: |
git checkout release || git checkout -b release
git merge --ff-only main
git push origin release

50
.github/workflows/e2e-tests.yml vendored Normal file
View File

@ -0,0 +1,50 @@
name: Playwright Tests
on:
push:
branches: ['main']
pull_request:
branches: ['main']
jobs:
e2e_tests:
name: "E2E Tests"
timeout-minutes: 60
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18
cache: npm
- name: Install dependencies
run: npm ci
- name: Copy env
run: cp .env.example .env
- name: Start Services
run: npm run dx:up
- name: Install Playwright Browsers
run: npx playwright install --with-deps
- name: Generate Prisma Client
run: npm run prisma:generate -w @documenso/prisma
- name: Create the database
run: npm run prisma:migrate-dev
- name: Seed the database
run: npm run prisma:seed
- name: Run Playwright tests
run: npm run ci
- uses: actions/upload-artifact@v3
if: always()
with:
name: test-results
path: "packages/app-tests/**/test-results/*"
retention-days: 30
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}

29
.github/workflows/first-interaction.yml vendored Normal file
View File

@ -0,0 +1,29 @@
name: 'Welcome New Contributors'
on:
pull_request:
types: ['opened']
issues:
types: ['opened']
permissions:
pull-requests: write
issues: write
jobs:
welcome-message:
name: Welcome Contributors
if: github.event.action == 'opened'
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/first-interaction@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
pr-message: |
Thank you for creating your first Pull Request and for being a part of the open signing revolution! 💚🚀
<br /> Feel free to hop into our community in [Discord](https://documen.so/discord)
issue-message: |
Thank you for opening your first issue and for being a part of the open signing revolution!
<br /> One of our team members will review it and get back to you as soon as it possible 💚
<br /> Meanwhile, please feel free to hop into our community in [Discord](https://documen.so/discord)

View File

@ -0,0 +1,63 @@
name: 'Issue Assignee Check'
on:
issues:
types: ['assigned']
permissions:
issues: write
jobs:
countIssues:
if: ${{ github.event.issue.assignee }} && github.event.action == 'assigned' && github.event.sender.type == 'User'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: npm
- name: Install Octokit
run: npm install @octokit/rest@18
- name: Check Assigned User's Issue Count
id: parse-comment
uses: actions/github-script@v5
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const { Octokit } = require("@octokit/rest");
const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });
const username = context.payload.issue.assignee.login;
console.log(`Username Extracted: ${username}`);
const { data: issues } = await octokit.issues.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
assignee: username,
state: 'open'
});
const issueCount = issues.length;
console.log(`Issue Count For ${username}: ${issueCount}`);
if (issueCount > 3) {
let issueCountMessage = `### 🚨 Documenso Police 🚨`;
issueCountMessage += `\n@${username} has ${issueCount} open issues assigned already. Consider whether this issue should be assigned to them or left open for another contributor.`;
await octokit.request('POST /repos/{owner}/{repo}/issues/{issue_number}/comments', {
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: issueCountMessage,
headers: {
'Authorization': `token ${{ secrets.GITHUB_TOKEN }}`,
}
});
}

21
.github/workflows/issue-opened.yml vendored Normal file
View File

@ -0,0 +1,21 @@
name: 'Label Issues'
on:
issues:
types: ['opened', 'reopened']
jobs:
label_issues:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- uses: actions/github-script@v6
with:
script: |
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ["needs triage"]
})

20
.github/workflows/pr-labeler.yml vendored Normal file
View File

@ -0,0 +1,20 @@
name: 'PR Labeler'
on:
- pull_request_target
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
labeler:
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v4
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
sync-labels: ''

View File

@ -0,0 +1,64 @@
name: 'PR Review Reminder'
on:
pull_request:
types: ['opened', 'reopened', 'ready_for_review', 'review_requested']
permissions:
pull-requests: write
jobs:
checkPRs:
if: ${{ github.event.pull_request.user.login }} && github.event.action == ('opened' || 'reopened' || 'ready_for_review' || 'review_requested')
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 2
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
cache: npm
- name: Install Octokit
run: npm install @octokit/rest@18
- name: Check user's PRs awaiting review
id: parse-prs
uses: actions/github-script@v5
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const { Octokit } = require("@octokit/rest");
const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });
const username = context.payload.pull_request.user.login;
console.log(`Username Extracted: ${username}`);
const { data: pullRequests } = await octokit.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
sort: 'created',
direction: 'asc',
});
const userPullRequests = pullRequests.filter(pr => pr.user.login === username && (pr.state === 'open' || pr.state === 'ready_for_review'));
const prCount = userPullRequests.length;
console.log(`PR Count for ${username}: ${prCount}`);
if (prCount > 3) {
let prReminderMessage = `🚨 @${username} has ${prCount} pull requests awaiting review. Please consider reviewing them when possible. 🚨`;
await octokit.request('POST /repos/{owner}/{repo}/issues/{issue_number}/comments', {
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.pull_request.number,
body: prReminderMessage,
headers: {
'Authorization': `token ${{ secrets.GITHUB_TOKEN }}`,
}
});
}

View File

@ -0,0 +1,62 @@
name: 'Validate PR Name'
on:
pull_request_target:
types:
- opened
- reopened
- edited
- synchronize
permissions:
pull-requests: write
jobs:
validate-pr:
name: Validate PR title
runs-on: ubuntu-latest
steps:
- name: Check PR creator's previous activity
id: check_activity
run: |
CREATOR=$(curl -s "https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}" | jq -r '.user.login')
ACTIVITY=$(curl -s "https://api.github.com/search/commits?q=author:${CREATOR}+repo:${{ github.repository }}" | jq -r '.total_count')
if [ "$ACTIVITY" -eq 0 ]; then
echo "::set-output name=is_new::true"
else
echo "::set-output name=is_new::false"
fi
- name: Count PRs created by user
id: count_prs
run: |
CREATOR=$(curl -s "https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}" | jq -r '.user.login')
PR_COUNT=$(curl -s "https://api.github.com/search/issues?q=type:pr+is:open+author:${CREATOR}+repo:${{ github.repository }}" | jq -r '.total_count')
echo "::set-output name=pr_count::$PR_COUNT"
- uses: amannn/action-semantic-pull-request@v5
id: lint_pr_title
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: marocchino/sticky-pull-request-comment@v2
if: always() && (steps.lint_pr_title.outputs.error_message != null)
with:
header: pr-title-lint-error
message: |
Hey There! and thank you for opening this pull request! 📝👋🏼
We require pull request titles to follow the [Conventional Commits Spec](https://www.conventionalcommits.org/en/v1.0.0/) and it looks like your proposed title needs to be adjusted.
Details:
```
${{ steps.lint_pr_title.outputs.error_message }}
```
- if: ${{ steps.lint_pr_title.outputs.error_message == null && steps.check_activity.outputs.is_new == 'false' && steps.count_prs.outputs.pr_count < 2}}
uses: marocchino/sticky-pull-request-comment@v2
with:
header: pr-title-lint-error
message: |
Thank you for following the naming conventions for pull request titles! 💚🚀

24
.github/workflows/stale.yml vendored Normal file
View File

@ -0,0 +1,24 @@
name: 'Mark Stale Issues and PRs'
on:
schedule:
- cron: '0 */8 * * *'
jobs:
stale:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v4
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
days-before-pr-stale: 90
days-before-issue-stale: 90
days-before-issue-close: 180
stale-pr-message: 'This PR has not seen activitiy for a while. It will be closed in 30 days unless further activity is detected.'
close-pr-message: 'This PR has been closed because of inactivity.'
exempt-pr-labels: 'WIP,on-hold,needs review'
exempt-issue-labels: 'WIP,on-hold,needs review,roadmap,assigned,needs triage'

43
.gitignore vendored
View File

@ -1,19 +1,17 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
node_modules
.pnp
.pnp.js
# testing
/coverage
coverage
# next.js
/.next/
/out/
# production
/build
.next/
out/
build
# misc
.DS_Store
@ -23,19 +21,30 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# local env files
.env*.local
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# turbo
.turbo
.turbo-cookie
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
.env
.env.example
# contentlayer
.contentlayer
# turborepo
.turbo
# intellij
.idea
# vscode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

55
.gitpod.yml Normal file
View File

@ -0,0 +1,55 @@
tasks:
- init: |
npm i &&
npm run dx:up &&
cp .env.example .env &&
set -a; source .env &&
export NEXTAUTH_URL="$(gp url 3000)" &&
export NEXT_PUBLIC_WEBAPP_URL="$(gp url 3000)" &&
export NEXT_PUBLIC_MARKETING_URL="$(gp url 3001)"
command: npm run d
ports:
- port: 3000
visibility: public
onOpen: open-preview
- port: 3001
visibility: public
onOpen: open-preview
- port: 9000
visibility: public
onOpen: ignore
- port: 1100
visibility: private
onOpen: ignore
- port: 2500
visibility: private
onOpen: ignore
- port: 54320
visibility: private
onOpen: ignore
github:
prebuilds:
master: true
pullRequests: true
pullRequestsFromForks: true
addCheck: true
addComment: true
addBadge: true
vscode:
extensions:
- aaron-bond.better-comments
- bradlc.vscode-tailwindcss
- dbaeumer.vscode-eslint
- esbenp.prettier-vscode
- mikestead.dotenv
- unifiedjs.vscode-mdx
- GitHub.copilot-chat
- GitHub.copilot-labs
- GitHub.copilot
- GitHub.vscode-pull-request-github
- Prisma.prisma
- VisualStudioExptTeam.vscodeintellicode

4
.husky/commit-msg Executable file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
npm run commitlint -- $1

16
.husky/pre-commit Executable file
View File

@ -0,0 +1,16 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
SCRIPT_DIR="$(readlink -f "$(dirname "$0")")"
MONOREPO_ROOT="$(readlink -f "$SCRIPT_DIR/../")"
echo "Copying pdf.js"
npm run copy:pdfjs --workspace apps/**
echo "Copying .well-known/ contents"
node "$MONOREPO_ROOT/scripts/copy-wellknown.cjs"
git add "$MONOREPO_ROOT/apps/web/public/"
git add "$MONOREPO_ROOT/apps/marketing/public/"
npx lint-staged

1
.npmrc Normal file
View File

@ -0,0 +1 @@
auto-install-peers = true

16
.prettierignore Normal file
View File

@ -0,0 +1,16 @@
node_modules
.next
public
**/**/node_modules
**/**/.next
**/**/public
*.lock
*.log
*.test.ts
.gitignore
.npmignore
.prettierignore
.DS_Store
.eslintignore

32
.vscode/settings.json vendored
View File

@ -1,25 +1,13 @@
{
"files.autoSave": "afterDelay",
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.formatOnType": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[html]": {
"editor.defaultFormatter": "vscode.html-language-features"
},
"[prisma]": {
"editor.defaultFormatter": "Prisma.prisma"
},
"editor.codeActionsOnSave": {
"source.removeUnusedImports": false
},
"typescript.tsdk": "node_modules/typescript/lib",
"spellright.language": [
"de"
],
"spellright.documentTypes": [
"markdown",
"latex",
"plaintext"
]
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"eslint.validate": ["typescript", "typescriptreact", "javascript", "javascriptreact"],
"javascript.preferences.importModuleSpecifier": "non-relative",
"javascript.preferences.useAliasesForRenames": false,
"typescript.enablePromptUseWorkspaceTsdk": true,
"files.eol": "\n",
"editor.tabSize": 2,
"editor.insertSpaces": true
}

7
.well-known/security.txt Normal file
View File

@ -0,0 +1,7 @@
# General Issues
Contact: https://github.com/documenso/documenso/issues/new?assignees=&labels=bug&projects=&template=bug-report.yml
# Report critical issues privately to let us take appropriate action before publishing.
Contact: mailto:security@documenso.com
Preferred-Languages: en
Canonical: https://documenso.com/.well-known/security.txt

45
CLA.md Normal file
View File

@ -0,0 +1,45 @@
# 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.

126
CODE_OF_CONDUCT.md Normal file
View File

@ -0,0 +1,126 @@
# 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].

View File

@ -5,22 +5,39 @@ If you plan to contribute to Documenso, please take a moment to feel awesome ✨
## 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 and issue from [here](https://github.com/documenso/documenso/issues) or create a new one
- Consider the results from the discussion in the issue
- 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.
## 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 <code>main</code>. All pull request should be made against this branch. If you need help getting started, [join us on Slack](https://join.slack.com/t/documenso/shared_invite/zt-1qwxxsvli-nDyojjt~wakhgBGl9JRl2w).
The development branch is <code>main</code>. 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 somthing readable):
- Create a new branch (include the issue id and something readable):
```sh
git checkout -b doc-999-my-feature-or-fix
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.
@ -28,7 +45,7 @@ The development branch is <code>main</code>. All pull request should be made aga
## Building
> **Note**
> Please be sure that you can make a full production build before pushing code or creating PRs.
> Please ensure you can make a full production build before pushing code or creating PRs.
You can build the project with:

6
MANIFEST.md Normal file
View File

@ -0,0 +1,6 @@
# 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.

353
README.md
View File

@ -1,207 +1,312 @@
<p align="center" style="margin-top: 120px">
<a href="https://github.com/documenso/documenso.com">
<img width="250px" src="https://github.com/documenso/documenso/assets/1309312/cd7823ec-4baa-40b9-be78-4acb3b1c73cb" alt="Documenso Logo">
</a>
> 🚨 It is Launch Week #2 - Day 1: We launches teams 🎉 https://documen.so/day1
<h3 align="center">Open Source Signing Infrastructure</h3>
<img src="https://github.com/documenso/documenso/assets/13398220/a643571f-0239-46a6-a73e-6bef38d1228b" alt="Documenso Logo">
<p align="center" style="margin-top: 20px">
<p align="center">
The DocuSign Open Source Alternative.
<br />
The Open Source DocuSign Alternative.
<br>
<a href="https://documenso.com"><strong>Learn more »</strong></a>
<br />
<br />
<a href="https://documen.so/slack">Slack</a>
<a href="https://documen.so/discord">Discord</a>
·
<a href="https://documenso.com">Website</a>
·
<a href="https://github.com/documenso/documenso/issues">Issues</a>
·
<a href="https://github.com/documenso/documenso/milestones">Roadmap</a>
<a href="https://documen.so/live">Upcoming Releases</a>
·
<a href="https://documen.so/roadmap">Roadmap</a>
</p>
</p>
<p align="center">
<a href="https://documen.so/slack"><img src="https://img.shields.io/badge/Slack-documenso.slack.com-%234A154B" alt="Join Documenso on Slack"></a>
<a href="https://documen.so/discord"><img src="https://img.shields.io/badge/Discord-documen.so/discord-%235865F2" alt="Join Documenso on Discord"></a>
<a href="https://github.com/documenso/documenso/stargazers"><img src="https://img.shields.io/github/stars/documenso/documenso" alt="Github Stars"></a>
<a href="https://github.com/documenso/documenso/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-AGPLv3-purple" alt="License"></a>
<a href="https://github.com/documenso/documenso/pulse"><img src="https://img.shields.io/github/commit-activity/m/documenso/documenso" alt="Commits-per-month"></a>
<a href="https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/documenso/documenso">
<img alt="open in devcontainer" src="https://img.shields.io/static/v1?label=Dev%20Containers&message=Enabled&color=blue&logo=visualstudiocode" />
</a>
<a href="code_of_conduct.md"><img src="https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg" alt="Contributor Covenant"></a>
</p>
# Documenso 0.9 - Developer Preview
<div>
<img style="display: block; height: 120px; width: 24%"
src="https://user-images.githubusercontent.com/1309312/224570645-167128ee-3e39-4578-85d2-5394d9a0379c.png">
src="https://github.com/documenso/documenso/assets/1309312/67e08c98-c153-4115-aa2d-77979bb12c94)">
<img style="display: block; height: 120px; width: 24%"
src="https://user-images.githubusercontent.com/1309312/224570651-0afd12f8-cfe3-49d1-805e-e495af963d91.png">
src="https://github.com/documenso/documenso/assets/1309312/040cfbae-3438-4ca3-87f2-ce52c793dcaf">
<img style="display: block; height: 120px; width: 24%"
src="https://user-images.githubusercontent.com/1309312/224570655-328d2279-058d-4a3e-b5c3-5cbd8a1f4e05.png">
src="https://github.com/documenso/documenso/assets/1309312/72d445be-41e5-4936-bdba-87ef8e70fa09">
<img style="display: block; height: 120px; width: 24%"
src="https://user-images.githubusercontent.com/1309312/224571617-1f3c2811-c1ac-4d7d-b9b0-4ab183731405.png">
src="https://github.com/documenso/documenso/assets/1309312/d7b86c0f-a755-4476-a022-a608db2c4633">
<img style="display: block; height: 120px; width: 24%"
src="https://user-images.githubusercontent.com/1309312/224570322-b2c76ea8-7482-4043-ad97-f1221220c591.png">
<img style="display: block; height: 120px; width: 24%"
src="https://user-images.githubusercontent.com/1309312/224570325-a8055f24-9826-4a23-b116-4fbb0577581a.png">
<img style="display: block; height: 120px; width: 24%"
src="https://user-images.githubusercontent.com/1309312/224570318-f724bbd9-c394-4bdc-bace-2d78af92de44.png">
<img style="display: block; height: 120px; width: 24%"
src="https://user-images.githubusercontent.com/1309312/224571539-f019b860-f613-4b20-86e8-4437c5784265.png">
src=https://github.com/documenso/documenso/assets/1309312/c0f55116-ab82-433f-a266-f3fc8571d69f">
</div>
> **Note**
> This project is currently under community review and will publish it's first production release soon™.
## About this project
Signing documents digitally is fast, easy and should be 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.
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
<p align="center">
<a href="https://www.producthunt.com/posts/documenso?utm_source=badge-top-post-badge&utm_medium=badge&utm_souce=badge-documenso" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/top-post-badge.svg?post_id=395047&theme=light&period=daily" alt="Documenso - The&#0032;open&#0032;source&#0032;DocuSign&#0032;alternative | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
<a href="https://www.producthunt.com/posts/documenso?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-documenso" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=395047&theme=light" alt="Documenso - The&#0032;Open&#0032;Source&#0032;DocuSign&#0032;Alternative&#0046; | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
</p>
## Community and Next Steps 🎯
The current project goal is to <b>[release a production ready version](https://github.com/documenso/documenso/milestone/1)</b> for self-hosting as soon as possible. If you want to help making that happen you can:
We're currently working on a redesign of the application, including a revamp of the codebase, so Documenso can be more intuitive to use and robust to develop upon.
- Check out the first source code release in this repository and test it
- Tell us what you think in the current [Discussions](https://github.com/documenso/documenso/discussions)
- Join the [Slack Channel](https://documen.so/slack) 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
- 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).
- To contribute, please see our [contribution guide](https://github.com/documenso/documenso/blob/main/CONTRIBUTING.md).
# Tech
## Contact us
Documenso is built using awesome open source tech including:
Contact us if you are interested in our Enterprise plan for large organizations that need extra flexibility and control.
- [Typescript](https://www.typescriptlang.org/)
- [Javascript (when necessary)](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
- [NextJS (JS Fullstack Framework)](https://nextjs.org/)
- [Postgres SQL (Database)](https://www.postgresql.org/)
- [Prisma (ORM - Object-relational mapping)](https://www.prisma.io/)
- [Tailwind CSS (Styling)](https://tailwindcss.com/)
- [Node SignPDF (Digital Signature)](https://github.com/vbuch/node-signpdf)
- [React-PDF for viewing PDFs](https://github.com/wojtekmaj/react-pdf)
- [PDF-Lib for PDF manipulation](https://github.com/Hopding/pdf-lib)
- Check out `/package.json` and `/apps/web/package.json` for more
- Support for [opensignpdf (requires Java on server)](https://github.com/open-pdf-sign) is currently planned.
<a href="https://cal.com/timurercan/enterprise-customers?utm_source=banner&utm_campaign=oss"><img alt="Book us with Cal.com" src="https://cal.com/book-with-cal-dark.svg" /></a>
# Getting Started
## Tech Stack
## Requirements
- [Typescript](https://www.typescriptlang.org/) - Language
- [Next.js](https://nextjs.org/) - Framework
- [Prisma](https://www.prisma.io/) - ORM
- [Tailwind](https://tailwindcss.com/) - CSS
- [shadcn/ui](https://ui.shadcn.com/) - Component Library
- [NextAuth.js](https://next-auth.js.org/) - Authentication
- [react-email](https://react.email/) - Email Templates
- [tRPC](https://trpc.io/) - API
- [Node SignPDF](https://github.com/vbuch/node-signpdf) - Digital Signature
- [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
- [Vercel](https://vercel.com) - Hosting
To run Documenso locally you need
<!-- - Support for [opensignpdf (requires Java on server)](https://github.com/open-pdf-sign) is currently planned. -->
- [Node.js (Version: >=18.x)](https://nodejs.org/en/download/)
- Node Package Manager NPM - included in Node.js
- [PostgreSQL (local or remote)](https://www.postgresql.org/download/)
## Local Development
## Developer Quickstart
### Requirements
To run Documenso locally, you will need
- Node.js
- Postgres SQL Database
- Docker (optional)
### Developer Quickstart
> **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.
Want to get up and running quickly? Follow these steps:
- [Clone the repository](https://help.github.com/articles/cloning-a-repository/) it to your local device.
1. [Fork this repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks) to your GitHub account.
After forking the repository, clone it to your local device by using the following command:
```sh
git clone https://github.com/documenso/documenso
git clone https://github.com/<your-username>/documenso
```
- Set up your `.env` file using the recommendations in the `.env.example` file.
- Run `npm run dx` in the root directory
- This will spin up a postgres database and inbucket mail server in docker containers.
- Run `npm run dev` in the root directory
- Want it even faster? Just use
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.
3. Run `npm run dx` in the root directory
- This will spin up a postgres database and inbucket mailserver in a docker container.
4. Run `npm run dev` in the root directory
5. Want it even faster? Just use
```sh
npm run d
```
That's it! You should now be able to access the app at http://localhost:3000
#### Access Points for Your Application
Incoming mail will be available at http://localhost:9000
1. **App** - http://localhost:3000
2. **Incoming Mail Access** - http://localhost:9000
3. **Database Connection Details**
Your database will also be available on port `54320`. You can connect to it using your favorite database client.
- **Port**: 54320
- **Connection**: Use your favorite database client to connect using the provided port.
4. **S3 Storage Dashboard** - http://localhost:9001
## Developer Setup
Follow these steps to setup documenso on you local machine:
### Manual Setup
Follow these steps to setup Documenso on your local machine:
1. [Fork this repository](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/about-forks) to your GitHub account.
After forking the repository, clone it to your local device by using the following command:
- [Clone the repository](https://help.github.com/articles/cloning-a-repository/) it to your local device.
```sh
git clone https://github.com/documenso/documenso
git clone https://github.com/<your-username>/documenso
```
- Run <code>npm i</code> in root directory
- Rename <code>.env.example</code> to <code>.env</code>
- Set DATABASE_URL value in .env file
- You can use the provided test database url (may be wiped at any point)
- Or setup a local postgres sql instance (recommended)
- Create the database scheme by running <code>db-migrate:dev</code>
- Setup your mail provider
- Set <code>SENDGRID_API_KEY</code> value in .env file
- You need a SendGrid account, which you can create [here](https://signup.sendgrid.com/).
- Documenso uses [Nodemailer](https://nodemailer.com/about/) so you can easily use your own SMTP server by setting the <code>SMTP\_\* variables</code> in your .env
- Run <code>npm run dev</code> root directory to start
- Register a new user at http://localhost:3000/signup
2. Run `npm i` in the root directory
3. Create your `.env` from the `.env.example`. You can use `cp .env.example .env` to get started with our handpicked defaults.
4. Set the following environment variables:
- NEXTAUTH_URL
- NEXTAUTH_SECRET
- NEXT_PUBLIC_WEBAPP_URL
- NEXT_PUBLIC_MARKETING_URL
- NEXT_PRIVATE_DATABASE_URL
- NEXT_PRIVATE_DIRECT_DATABASE_URL
- NEXT_PRIVATE_SMTP_FROM_NAME
- NEXT_PRIVATE_SMTP_FROM_ADDRESS
5. Create the database schema by running `npm run prisma:migrate-dev`
6. Run `npm run dev` in the root directory to start
7. Register a new user at http://localhost:3000/signup
---
- Optional: Seed the database using <code>npm run db-seed</code> to create a test user and document
- Optional: Upload and sign <code>apps/web/resources/example.pdf</code> manually to test your setup
- Optional: Seed the database using `npm run prisma:seed -w @documenso/prisma` to create a test user and document.
- Optional: Create your own signing certificate.
- To generate your own using these steps and a Linux Terminal or Windows Subsystem for Linux (WSL), see **[Create your own signing certificate](./SIGNING.md)**.
- Optional: Create your own signing certificate
- A demo certificate is provided in `/app/web/resources/certificate.p12`
- To generate your own using these steps and a Linux Terminal or Windows Subsystem for Linux (WSL) see **[Create your own signing certificate](#creating-your-own-signing-certificate)**.
### Run in Gitpod
## Updating
- Click below to launch a ready-to-use Gitpod workspace in your browser.
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](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
If you're a visual learner and prefer to watch a video walkthrough of setting up Documenso locally, check out this video:
[![Watch the video](https://img.youtube.com/vi/Y0ppIQrEnZs/hqdefault.jpg)](https://youtu.be/Y0ppIQrEnZs)
## Docker
🚧 Docker containers and images are current in progress. We are actively working on bringing a simple Docker build and publish pipeline for Documenso.
## Self Hosting
We support a variety of deployment methods, and are actively working on adding more. Stay tuned for updates!
> Please note that the below deployment methods are for v0.9, we will update these to v1.0 once it has been released.
### Fetch, configure, and build
First, clone the code from Github:
- If you pull the newest version from main, using <code>git pull</code>, it may be necessary to regenerate your database client
- You can do this by running the generate command in `/packages/prisma`:
```sh
npx prisma generate
```
- This is not necessary on first clone.
git clone https://github.com/documenso/documenso.git
```
# Creating your own signing certificate
Then, inside the `documenso` folder, copy the example env file:
For the digital signature of your documents you need a signing certificate in .p12 format (public and private key). You can buy one (not recommended for dev) or use the steps to create a self-signed one:
```
cp .env.example .env
```
1. Generate a private key using the OpenSSL command. You can run the following command to generate a 2048-bit RSA key:\
<code>openssl genrsa -out private.key 2048</code>
The following environment variables must be set:
2. Generate a self-signed certificate using the private key. You can run the following command to generate a self-signed certificate:\
<code>openssl req -new -x509 -key private.key -out certificate.crt -days 365</code> \
This will prompt you to enter some information, such as the Common Name (CN) for the certificate. Make sure you enter the correct information. The -days parameter sets the number of days for which the certificate is valid.
3. Combine the private key and the self-signed certificate to create the p12 certificate. You can run the following command to do this: \
<code>openssl pkcs12 -export -out certificate.p12 -inkey private.key -in certificate.crt</code>
4. You will be prompted to enter a password for the p12 file. Choose a strong password and remember it, as you will need it to use the certificate (**can be empty for dev certificates**)
5. Place the certificate <code>/apps/web/resources/certificate.p12</code>
* `NEXTAUTH_URL`
* `NEXTAUTH_SECRET`
* `NEXT_PUBLIC_WEBAPP_URL`
* `NEXT_PUBLIC_MARKETING_URL`
* `NEXT_PRIVATE_DATABASE_URL`
* `NEXT_PRIVATE_DIRECT_DATABASE_URL`
* `NEXT_PRIVATE_SMTP_FROM_NAME`
* `NEXT_PRIVATE_SMTP_FROM_ADDRESS`
# Docker
> If you are using a reverse proxy in front of Documenso, don't forget to provide the public URL for both `NEXTAUTH_URL` and `NEXT_PUBLIC_WEBAPP_URL` variables!
> We are still working on the publishing of docker images, in the meantime you can follow the steps below to create a production ready docker image.
Now you can install the dependencies and build it:
Want to create a production ready docker image? Follow these steps:
```
npm i
npm run build:web
npm run prisma:migrate-deploy
```
- Run `./docker/build.sh` in the root directory.
- Publish the image to your docker registry of choice.
Finally, you can start it with:
# Deploying - Coming Soon™
```
npm run start
```
- Docker support
- One-Click-Deploy on Render.com Deploy
This will start the server on `localhost:3000`. For now, any reverse proxy can then do the frontend and SSL termination.
# Troubleshooting
> If you want to run with another port than 3000, you can start the application with `next -p <ANY PORT>` from the `apps/web` folder.
## Support IPv6
### Run as a service
In case you are deploying to a cluster that uses only IPv6. You can use a custom command to pass a parameter to the NextJS start command
You can use a systemd service file to run the app. Here is a simple example of the service running on port 3500 (using 3000 by default):
```bash
[Unit]
Description=documenso
After=network.target
[Service]
Environment=PATH=/path/to/your/node/binaries
Type=simple
User=www-data
WorkingDirectory=/var/www/documenso/apps/web
ExecStart=/usr/bin/next start -p 3500
TimeoutSec=15
Restart=always
[Install]
WantedBy=multi-user.target
```
### Railway
[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/bG6D4p)
### Render
[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/documenso/documenso)
### Koyeb
[![Deploy to Koyeb](https://www.koyeb.com/static/images/deploy/button.svg)](https://app.koyeb.com/deploy?type=git&repository=github.com/documenso/documenso&branch=main&name=documenso-app&builder=dockerfile&dockerfile=/docker/Dockerfile)
## Troubleshooting
### I'm not receiving any emails when using the developer quickstart.
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.
The Web UI can be found at http://localhost:9000, while the SMTP port will be on localhost:2500.
### Support IPv6
If you are deploying to a cluster that uses only IPv6, You can use a custom command to pass a parameter to the Next.js start command
For local docker run
@ -223,5 +328,25 @@ containers:
- start
- --
- -H
- "::"
- '::'
```
### I can't see environment variables in my package scripts.
Wrap your package script with the `with:env` script like such:
```
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
```
This will load environment variables from your `.env` and `.env.local` files.
## Repo Activity
![Repository Activity](https://repobeats.axiom.co/api/embed/622a2e9aa709696f7226304b5b7178a5741b3868.svg)

55
SIGNING.md Normal file
View File

@ -0,0 +1,55 @@
# Creating your own signing certificate
For the digital signature of your documents you need a signing certificate in .p12 format (public and private key). You can buy one (not recommended for dev) or use the steps to create a self-signed one:
1. Generate a private key using the OpenSSL command. You can run the following command to generate a 2048-bit RSA key:
`openssl genrsa -out private.key 2048`
2. Generate a self-signed certificate using the private key. You can run the following command to generate a self-signed certificate:
`openssl req -new -x509 -key private.key -out certificate.crt -days 365`
This will prompt you to enter some information, such as the Common Name (CN) for the certificate. Make sure you enter the correct information. The -days parameter sets the number of days for which the certificate is valid.
3. Combine the private key and the self-signed certificate to create the p12 certificate. You can run the following command to do this:
`openssl pkcs12 -export -out certificate.p12 -inkey private.key -in certificate.crt`
4. You will be prompted to enter a password for the p12 file. Choose a strong password and remember it, as you will need it to use the certificate (**can be empty for dev certificates**)
5. Place the certificate `/apps/web/resources/certificate.p12`
## Docker
> We are still working on the publishing of docker images, in the meantime you can follow the steps below to create a production ready docker image.
Want to create a production ready docker image? Follow these steps:
- cd into `docker` directory
- Make `build.sh` executable by running `chmod +x build.sh`
- Run `./build.sh` to start building the docker image.
- Publish the image to your docker registry of choice (or) If you prefer running the image from local, run the below command
```
docker run -d --restart=unless-stopped -p 3000:3000 -v documenso:/app/data --name documenso documenso:latest
```
Command Breakdown:
- `-d` - Let's you run the container in background
- `-p` - Passes down which ports to use. First half is the host port, Second half is the app port. You can change the first half anything you want and reverse proxy to that port.
- `-v` - Volume let's you persist the data
- `--name` - Name of the container
- `documenso:latest` - Image you have built
## Deployment
We support a variety of deployment methods, and are actively working on adding more. Stay tuned for updates!
## Railway
[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/DjrRRX)
## Render
[![Deploy to Render](https://render.com/images/deploy-to-render-button.svg)](https://render.com/deploy?repo=https://github.com/documenso/documenso)

1
apps/marketing/README.md Normal file
View File

@ -0,0 +1 @@
# @documenso/marketing

1
apps/marketing/ambient.d.ts vendored Normal file
View File

@ -0,0 +1 @@
declare module '@documenso/tailwind-config';

View File

@ -0,0 +1,51 @@
---
title: Announcing Documenso
description: Launching an open-source document signing tool because trusted-based products should be built on openness. The first release will be in 2023. Sign up at documenso.com to be on board.
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2022-12-29
tags:
- Announcement
---
<figure>
<MdxNextImage
src="/blog/blog-banner-announcing-documenso.webp"
width="1400"
height="884"
alt="Documenso announcement blog banner"
/>
<figcaption className="text-center">Documenso — The Open Source DocuSign Alternative.</figcaption>
</figure>
## TL; DR;
I'm launching an open source document signing tool because trust-based products should be built on openness. The first release will be in 2023. Sign up at <a href="https://documenso.com" target="_blank">documenso.com</a> and get on board.
## Lets build the worlds most trusted document-signing tool.
Today I'm excited to announce my new project Documenso. Documenso is an open source document signing tool you can host yourself and freely build upon because it's, you know, open source. Before I get more into the details of what and when will be launched I want to take a moment and talk about why.
## Digital signing is great
Signing Documents digitally has countless benefits: Less struggle with printing, less wasting paper, faster request delivery, easier changes, easier coordination of people far away, verifiable document integrity, and verifiable signer identity (this is a vast topic, will write more on soon), easier storage and search of signed documents, the list goes on. Digital Signatures take something very old and very trusted like personally signing documents into the digital space, adding the benefits listed above. It also introduces a new party to every signing transaction, the signing tool providers. What was peer to peer transaction before, now goes through an intermediary. While this isn't a problem in itself, it should make us think about how we want these providers of trust to work.
## How do we build trusted systems?
While doing research for Documenso I came upon a quote that expresses the current state of document signing pretty well:
> Document signing is NOT a technical problem. [Editors Note: Because it was solved technically a long time ago] Its a legal acceptance problem — and everyone KNOWS DocuSign and friends and understands how theyre admissible. Anything else would have to compete with that and people would be suspicious of it for a long time.
While this may sound like a hurdle at first, it immediately gave me a sense of validation for a more open approach to signing. People will and should be suspicious of their tools and demand a high bar when it comes to trust. And the way to earn this trust is by being open. Trusted tools should be the result of thoughtful discussion and reviews. They should be the result of the needs and will of its community. They should be transparent, adaptable, and empowering while using. Open Source embodies these values very well for software, which makes it a perfect fit for this space and creating a high-trust tool.
## Next Steps
So, what can you expect from here on out? I've started to build Documenso 0.1 which is scheduled to release in “early” 2023. If you're interested in helping make this happen, let me know via [hi@documenso.com](mailto:hi@documenso.com). Getting working code into the hands of the perspective Documenso community is currently the #1 goal. Other than that I'll be releasing several articles about document signing and what something like Documenso should look like, in my humble opinion. So stay tuned!
If you think Documenso is worthy of support, please share <a href="https://documenso.com" target="_blank">documenso.com</a> with anyone interested, and sign up to be among the first to try out version 0.1 as soon as it launches.
Cheers from Hamburg
Timur

View File

@ -0,0 +1,98 @@
---
title: 'Building Documenso — Part 1: Certificates'
description: In today's fast-paced world, productivity and efficiency are crucial for success, both in personal and professional endeavors. We all strive to make the most of our time and energy to achieve our goals effectively. However, it's not always easy to stay on track and maintain peak performance. In this blog post, we'll explore 10 valuable tips to help you boost productivity and efficiency in your daily life.
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2023-06-23
tags:
- Open Source
- Document Signature
- Certificates
- Signing
---
<figure>
<MdxNextImage
src="/blog/blog-banner-building-documenso.webp"
width="1200"
height="675"
alt="Building Documenso blog banner"
/>
<figcaption className="text-center">
What actually is a signature?
</figcaption>
</figure>
> Disclaimer: Im not a lawyer and this isnt legal advice. We plan to publish a much more specific framework on the topic of signature validity.
This is the first installment of the new Building Documenso series, where I describe the challenges and design choices that we make while building the worlds most open signing platform.
As you may have heard, we launched the community-reviewed <a href="https://github.com/documenso/documenso" target="_blank">version 0.9 of Documenso on GitHub</a> recently and its now available through the early adopters plan. One of the most fundamental choices we had to make on this first release, was the choice of certificate. While its interesting to know what we opted for, this shall also serve as a guide for everyone facing the same choice for self-hosting Documenso.
> Question: Why do I need a document signing certificate to self-host?
>
> Short Answer: Inserting the images of a signature into the document is only part of the signing process.
To have an actual digitally signed document you need a document signing certificate that is used to create the digital signature that is inserted into the document, alongside the visible one¹.
When hosting a signature service yourself, as we do, there are four main choices for handling the certificate: Not using a certificate, creating your own, buying a trusted certificate, and becoming and trusted service provider to issue your own trusted certificate.
## 1\. No Certificate
A lot of signing services actually dont employ actual digital signatures besides the inserted image. The only insert and image of the signatures into the document you sign. This can be done and is legally acceptable in many cases. This option isnt directly supported by Documenso without changing the code.
## 2\. Create your own
Since the cryptography behind certificates is freely available as open source you could generate your own using OpenSSL for example. Since its hardly more work than option 1 (using Documenso at least), this would be my minimum effort recommendation. Having a self-created (“self-signed”) certificate doesnt add much in terms of regulation but it guarantees the documents integrity, meaning no changes have been made after signing². What this doesnt give you, is the famous green checkmark in Adobe Acrobat. Why? Because you arent on the list of providers Adobe “trusts”.³
## 3\. Buy a “trusted” certificate.
There are Certificate Authorities (CAs) that can sell you a certificate⁴. The service they provide is, that they validate your name (personal certificates) or your organizations name (corporate certificate) before creating your certificate for you, just like you did in option 2. The difference is, that they are listed on the previously mentioned trust lists (e.g. Adobes) and thus the resulting signatures get a nice, green checkmark in Adobe Reader⁵
## 4\. Becoming a Trusted Certificate Authority (CA) yourself and create your own certificate
This option is an incredibly complex endeavour, requiring a lot of effort and skill. It can be done, as there are multiple CAs around the world. Is it worth the effort? That depends a lot on what youre trying to accomplish.
<center>.&nbsp;&nbsp;.&nbsp;&nbsp;.</center>
## What we did
Having briefly introduced the options, here is what we did: Since we aim to raise the bar on digital signature proliferation and trust, we opted to buy an “Advanced Personal Certificates for Companies/Organisations” from WiseKey. Thus, documents signed with Documensos hosted version look like this:
<figure>
<MdxNextImage
src="/blog/blog-fig-building-documenso.webp"
width="1262"
height="481"
alt="Figure 1"
/>
<figcaption className="text-center">The famous green checkmark: Signed by hosted Documenso</figcaption>
</figure>
There werent any deeper reasons we choose WiseKey, other than they offered what we needed and there wasnt any reason to look much further. While I didnt map the entire certificate market offering (yet), Im pretty sure something similar could be found elsewhere. While we opted for option 3, choosing option 2 might be perfectly reasonable considering your use case.⁶
> While this is our setup, for now, we have a bigger plan for this topic. While globally trusted SSL Certificates have been available for free, courtesy of Lets Encrypt, for a while now, there is no such thing as document signing. And there should be. Not having free and trusted infrastructure for signing is blocking a completely new generation of signing products from being created. This is why well start working on option 4 when the time is right.
Do you have questions or thoughts about this? As always, let me know in the comments, on <a href="http://twitter.com/eltimuro" target="_blank">twitter.com/eltimuro</a>
or directly: <a href="https://documen.so/timur" target="_blank">documen.so/timur</a>
Join the self-hoster community here: <a href="https://documen.so/discord" target="_blank">https://documen.so/discord</a>
Best from Hamburg
Timur
\[1\] There are different approaches to signing a document. For the sake of simplicity, here we talk about a document with X inserted signature images, that is afterward signed once the by signing service, i.e. Documenso. If each visual signature should have its own digital one (e.g. QES — eIDAS Level 3), the case is a bit more complex.
\[2\] Of course, the signing service provider technically can change and resign the document, especially in the case mentioned in \[1\]. This can be countered by requiring actual digital signatures from each signer, that are bound to their identity/ account. Creating a completely trustless system in the context however is extremely hard to do and not the most pressing business need for the industry at this point, in my opinion. Though, this would be nice.
\[3\] Adobe, like the EU, has a list of organizations they trust. The Adobe green checkmark is powered by the Adobe trust list, if you want to be trusted by EU standards here: <a href="https://ec.europa.eu/digital-building-blocks/DSS/webapp-demo/validation" target="_blank">https://ec.europa.eu/digital-building-blocks/DSS/webapp-demo/validation</a>, you need to be on the EU trust list. Getting on each list is possible, though the latter is much more work.
\[4\] Technically, they sign your certificate creation request (created by you), containing your info with their certificate (which is trusted), making your certificate trusted. This way, everything you sign with your certificate is seen as trusted. They created their certificate just like you, the difference is they are on the lists, mentioned in \[3\]
\[5\] Why does Adobe get to say, what is trusted? They simply happen to have the most used pdf viewer. And since everyone checks there, whom they consider trusted carries weight. If it should be like this, is a different matter.
\[6\] Self-Signed signatures, even purely visual signatures, are fully legally binding. Why you use changes mainly your confidence in the signature and the burden of proof. Also, some industries require a certain level of signatures e.g. retail loans (QES/ eIDAS Level 3 in the EU).

View File

@ -0,0 +1,87 @@
---
title: Commodifying Signing
description: We are creating signing as a public good and are commoditizing it to make it cheaper and better.
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2024-01-25
tags:
- Vision
- Mission
- Open Source
---
<figure>
<MdxNextImage
src="/blog/lighthouse.jpeg"
width="650"
height="650"
alt="A lighthouse on a tiny island."
/>
<figcaption className="text-center">
Lighthouses are often used as an example of a public good; As they benefit all maritime users, but no one can be excluded from using them as a navigational aid. Use by one person neither prevents access by other people, nor does it reduce availability to others.
</figcaption>
</figure>
# Commodifying Signing
> TLDR; We are creating signing as a public good and are commoditizing it to make it cheaper and better.
While we are in full-on building mode with Documenso, I think a lot about the big picture of what we are attempting to do. One phrase that keeps popping up is, "We are commodifying signing." Let's dig deeper into what that means.
Let's start with why we are doing this. Documenso's mission is to solve the domain of signing once and for all for everyone. In so many calls, I hear stories about how organizations build their own solution because the existing ones are too expensive or need to be more flexible. That means not hundreds but probably thousands of companies worldwide have done the same. This is simply wasting humanity's time. Since digital signing systems are understood well enough that seemingly "everyone" can build them, given enough pain, It's time to do it once correctly.
## Is signing already a commodity?
> In economics, a **commodity** is an economic good, usually a resource, that has explicitly full or substantial fungibility: that is, the market treats instances of the good as equivalent or nearly so with no regard to who produced them.
That sounds like the signing market today. There is no shortage of signing providers, and you can get similar signing services from many places. So why is this different from what we want, and why does this not satisfy the market?
- Signing is expensive and painful when you are locked into your vendor, and they charge by signing volume.
- Signing is also expensive and painful when you have to build it yourself since no vendor fits your requirements or you are not allowed to
To understand why, we need to look at the landscape as it is today:
- **Commodity**: Signing SaaS
- **Private Goods**: Signing Code Base, Regulatory Know-How
- **Public Goods**: Web Tech, Digital Signature Algorithms and Standards
What the current players have done is to commodify the listed public goods into commercial products:
> […]the action and process of transforming goods, services, ideas, nature, personal information, people, or animals into commodities.
> (Let's ignore the end of that list for now and what it says about humanity, yikes)
While this paradigm brought digital signing to many businesses worldwide, we aim for a different future. To solve signing once and for all, we need to achieve two core points:
- Making it cheaper so it's profitable for everyone to use
- Making it more accessible so everyone can use it (e.g. regulated industries) and flexible enough (extendable, open).
To achieve this, we must transform the landscape to look like this:
- **Commodities**: Enterprise Components, Support, Hosting, Self-Host Licenses
- **Public Goods**: (no longer private): OS (Open Source) Signing Code Base, OS Regulatory Know-How
- **Public Goods**: OS Web Tech, Digital Signature Algorithms and Standards
## Raising the Bar
Before creating a commodity, we are raising the bar of what the underlying public good is. Having an open source singing framework you can extend, self-host, and understand makes the resulting solution much more accessible and extendable for everyone. Now for the final feat of making signing cheaper:
As we have seen, signing has already been commodified. But since it was done by a closed source and, frankly, a very opaque industry, no downward price spiral has ensued. By building Documenso open source with an open culture, we can pierce the veil and trigger what the space has been missing for a long time: Commoditization. If you had to read that again, so did I:
> In business literature, **commoditization** is defined as the process by which goods that have economic value and are distinguishable in terms of attributes (uniqueness or brand) become simple commodities in the eyes of the market or consumers.
By only selling what creates value for the customer (hosting a highly available service, keeping it compliant, supporting with technical issues and challenges, preparing industry-specific components), we are commoditizing signing since everyone can do it now: The resources enabling it are public goods, aka. open source. A leveled playing field, as described above, is the perfect environment for a community-first, technology-first, and value-first company like Documenso to flourish.
## Changing the Game
In this new world, a company needing signing (literally every company) can decide if the ROI (Return on Investment) of building signing themselves is greater than simply paying for the value-added activities they will need anyway. Pricing our offering not on volume but fixed is a nice additional wedge into the market we intend to use here.
The market dynamic now changes to who can offer the greatest value added to the public goods, driving the price down as this can be done much more efficiently than locking customers into closed source SaaS. Documenso, being a lean company, which we intend to stay with for a long time, will help kickstart this effect. Open Source capital efficiency is real. Our planned enterprise components, hosting support, and partner ecosystem will all leverage this effect.
We will grow our community around the public good, the open-source repo, and create an ecosystem around the commodities built on top of it (components, hosting, compliance, support). We will solve signing once and for all, and the world will be better for it. Onwards.
As always, feel free to connect on [Twitter / X](https://twitter.com/eltimuro) (DM open) or [Discord](https://documen.so/discord) if you have any questions or comments.
Best from Hamburg\
Timur

View File

@ -0,0 +1,198 @@
---
title: 'Deploying Documenso with Vercel, Supabase and Resend'
description: This is the first part of the new Building Documenso series, where I describe the challenges and design choices that we make while building the worlds most open signing platform.
authorName: 'Ephraim Atta-Duncan'
authorImage: '/blog/blog-author-duncan.jpeg'
authorRole: 'Software Engineer Intern'
date: 2023-09-08
tags:
- Open Source
- Self Hosting
- Tutorial
---
In this article, we'll walk you through how to deploy and self-host Documenso using Vercel, Supabase, and Resend.
You'll learn:
- How to set up a Postgres database using Supabase,
- How to install SMTP with Resend,
- How to deploy your project with Vercel.
If you don't know what [Documenso](https://documenso.com/) is, it's an open-source alternative to DocuSign, with the mission to create an open signing infrastructure while embracing openness, cooperation, and transparency.
## Prerequisites
Before we start, make sure you have a [GitHub](https://github.com/signup) account. You also need [Node.js](https://nodejs.org/en) and [npm](https://www.npmjs.com/) installed on your local machine (note: you also have the option to host it on a cloud environment using Gitpod for example; that would be another post). If you need accounts on Vercel, Supabase, and Resend, create them by visiting the [Vercel](https://vercel.com/), [Supabase](https://supabase.com/), and [Resend](https://resend.com/) websites.
Checklist:
- [ ] Have a GitHub account
- [ ] Install Node.js
- [ ] Install npm
- [ ] Have a Vercel account
- [ ] Have a Supabase account
- [ ] Have a Resend account
## Step-by-Step guide to deploying Documenso with Vercel, Supabase, and Resend
To deploy Documenso, we'll take the following steps:
1. Fork the Documenso repository
2. Clone the forked repository and install dependencies
3. Create a new project on Supabase
4. Copy the Supabase Postgres database connection URL
5. Create a `.env` file
6. Run the migration on the Supabase Postgres Database
7. Get your SMTP Keys on Resend
8. Create a new project on Vercel
9. Add Environment Variables to your Vercel project
So, you're ready? Lets dive in!
### Step 1: Fork the Documenso repository
Start by creating a fork of Documenso on GitHub. You can do this by visiting the [Documenso repository](https://github.com/documenso/documenso) and clicking on the 'Fork' button. (Also, star the repo!)
![Documenso](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wkcujctpf86p56bju3mq.png)
Choose your GitHub profile as the owner and click on 'Create fork' to create a fork of the repo.
![Fork the Documenso repository on GitHub](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xf49r2byu9nnd1465niy.png)
### Step 2: Clone the forked repository and install dependencies
Clone the forked repository to your local machine in any directory of your choice. Open your terminal and enter the following commands:
```bash
# Clone the repo using Github CLI
gh repo clone [your_github_username]/documenso
# Clone the repo using Git
git clone <https://github.com/[your_github_username]/documenso.git>
```
You can now navigate into the directory and install the projects dependencies:
```bash
cd documenso
npm install
```
### Step 3: Create a new project on Supabase
Now, let's set up the database.
If you haven't already, create a new project on Supabase. This will automatically create a new Postgres database for you.
On your Supabase dashboard, click the '**New project**' button and choose your organization.
On the '**Create a new project**' page, set a database name of **documenso** and a secure password for your database. Choose a region closer to you, a pricing plan, and click on '**Create new project**' to create your project.
![Create a new project on Supabase](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w5lqz771iupjyi1ekfdz.png)
### Step 4: Copy the Supabase Postgres database connection URL
In your project, click the '**Settings**' icon at the bottom left.
Under the '**Project Settings**' section, click '**Database**' and scroll down to the '**Connection string**' section. Copy the '**URI**' and update it with the password you chose in the previous step.
![Copy the Supabase Postgres database connection URL](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y1ldu3qrg9moednbzjij.png)
### Step 5: Create a `.env` file
Create a `.env` file in the root of your project by copying the contents of the `.env.example` file.
Add the connection string you copied from your Supabase dashboard to the `DATABASE_URL` variable in the `.env` file.
The `.env` should look like this:
```bash
DATABASE_URL="postgres://postgres:[YOUR-PASSWORD]@db.[YOUR-PROJECT-REF].supabase.co:5432/postgres"
```
### Step 6: Run the migration on the Supabase Postgres Database
Run the migration on the Supabase Postgres Database using the following command:
```bash
npx prisma migrate deploy
```
### Step 7: Get your SMTP Keys on Resend
So, you've just cloned Documenso, installed dependencies on your local machine, and set your database using Supabase. Now, SMTP is missing. Emails won't go out! Let's fix it with Resend.
In the **[Resend](https://resend.com/)** dashboard, click 'Add API Key' to create a key for Resend SMTP.
![Create a key for Resend SMTP](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uh2rztgn09mlvecl34i5.png)
Next, add and verify your domain in the '**Domains**' section on the sidebar. This will allow you to send emails from any address associated with your domain.
![Verify your domain on Resend](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nxgie0esz530vq5a494o.png)
You can update your `.env` file with the following:
```jsx
SMTP_MAIL_HOST = 'smtp.resend.com';
SMTP_MAIL_PORT = '25';
SMTP_MAIL_USER = 'resend';
SMTP_MAIL_PASSWORD = 'YOUR_RESEND_API_KEY';
MAIL_FROM = 'noreply@[YOUR_DOMAIN]';
```
### Step 8: Create a new project on Vercel
You set the database with Supabase and are SMTP-ready with Resend. Almost there! The next step is to deploy the project — we'll use Vercel for that.
On your Vercel dashboard, create a new project using the forked project from your GitHub repositories. Select the project among the options and click '**Import**' to start running Documenso.
![Create a new project on Vercel](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gdy97tltpnu7vf4fc11f.png)
### Step 9: Add Environment Variables to your Vercel project
In the '**Configure Project**' page, adding the required Environmental Variables is essential to ensure the application deploys without any errors.
Specifically, for the `NEXT_PUBLIC_WEBAPP_URL` and `NEXTAUTH_URL` variables, you must add `.vercel.app` to your Project Name. This will form the deployment URL, which will be in the format: `https://[project_name].vercel.app`.
For example, in my case, the deployment URL is `https://documenso-supabase-web.vercel.app`.
![Add Environment Variables to your Vercel project](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aru33fk1i19h0valffow.png)
This is a sample `.env` to deploy. Copy and paste it to auto-populate the fields and click **Deploy.** Now, you only need to wait for your project to deploy. Youre going live — enjoy!
```bash
DATABASE_URL='postgresql://postgres:typeinastrongpassword@db.njuigobjlbteahssqbtw.supabase.co:5432/postgres'
NEXT_PUBLIC_WEBAPP_URL='https://documenso-supabase-web.vercel.app'
NEXTAUTH_SECRET='something gibrish to encrypt your jwt tokens'
NEXTAUTH_URL='https://documenso-supabase-web.vercel.app'
# Get a Sendgrid Api key here: <https://signup.sendgrid.com>
SENDGRID_API_KEY=''
# Set SMTP credentials to use SMTP instead of the Sendgrid API.
SMTP_MAIL_HOST='smtp.resend.com'
SMTP_MAIL_PORT='25'
SMTP_MAIL_USER='resend'
SMTP_MAIL_PASSWORD='YOUR_RESEND_API_KEY'
MAIL_FROM='noreply@[YOUR_DOMAIN]'
NEXT_PUBLIC_ALLOW_SIGNUP=true
```
## Wrapping up
![Deploying Documenso](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/secg29j9j40o4u2oa8o8.png)
Congratulations! 🎉 You've successfully deployed Documenso using Vercel, Supabase, and Resend. You're now ready to create and sign your own documents with your self-hosted Documenso!
In this step-by-step guide, you learned how to:
- set up a Postgres database using Supabase,
- install SMTP with Resend,
- deploy your project with Vercel.
Over to you! How was the tutorial? If you enjoyed it, [please do share](https://twitter.com/documenso/status/1700141802693480482)! And if you have any questions or comments, please reach out to me on [Twitter / X](https://twitter.com/EphraimDuncan_) (DM open) or [Discord](https://documen.so/discord).
We're building an open-source alternative to DocuSign and welcome every contribution. Head over to the GitHub repository and [leave us a Star](https://github.com/documenso/documenso)!

View File

@ -0,0 +1,49 @@
---
title: Open Sourcing Documenso's Design
description: It's day 1 of our first launch week. We are kicking it off by open sourcing Documenso's design system! Let's go..
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2023-09-25
tags:
- Design
- Open Source
- Community
---
<figure>
<MdxNextImage
src="/blog/designsystem.png"
width="1260"
height="630"
alt="Documenso's Design System"
/>
<figcaption className="text-center">
Documenso's Design System ✨
</figcaption>
</figure>
> TLDR; Our design system is OSS under MIT at [design.documenso.com](https://design.documenso.com)
Today, we are open sourcing our design system, lovingly crafted by [Thilo](https://twitter.com/thilokonzok). The system is public on Figma and will be available at [design.documenso.com](https://design.documenso.com) from here on out.
We are publishing it under the MIT License so everyone can share, remix, and use it as it helps them most.
We chose to start our first launch week with a design topic to emphasize the role design will play in Documenso's company and community culture. As it is historically difficult to bring together open-source software with great design, this is our first step towards encouraging a more design-driven COSS (Commercial Open Source) movement.
## Designers Welcome
We added a designer role in our Discord to create a space for designers to explore and discuss design-related topics of Documenso and signing in general. In the future, we want to foster more coding contributions and start a design culture around the product. As it is much more difficult to incorporate design contributions, we have yet to find a clear plan of what that will look like. I would like to see contributions around stuff we are NOT working on. Designs in that area can inspire and start discussions without the complexities of implementing them immediately — a free-thinking space around everything Documenso. Having a free mandate to design without restriction can create many exciting ideas. Some Ideas worth exploring:
## Areas for design contributions
- Explorations of exciting aspects of signing and document handling:
- What does signing look like when we no longer have skeuomorphic signatures?
- What is signing if we move beyond paper-inspired documents?
- What would the government process look like using Documenso?
- Solutions Concepts for features further down the roadmap, e.g., Widgets in websites
These are fascinating ideas for explorative design. They won't be built 1:1 but shape how we think about signing and where it can go, which is even more critical. If you are interested in product design, you are invited to join our [Discord](https://documen.so/discord) and discuss the future of signing design or the future of Documenso's design system. Also let me know what you think on [X (formerly Twitter)](https://x.com/eltimuro).
Best from Hamburg\
Timur

View File

@ -0,0 +1,67 @@
---
title: The Early Adopters Plan
description: Launch Week Day 4 and we are still early! Early enough for you to get a sweet deal for supporting Documenso's Mission. Join the movement and get a shiny early adopter account in the process.
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2023-09-28
tags:
- Paid Plan
- Metrics
- Open Startup
---
<figure>
<MdxNextImage
src="/blog/early.png"
width="1260"
height="630"
alt="XKCD: Bug"
/>
<figcaption className="text-center">
"Being early is, uh, good." -Unknown
</figcaption>
</figure>
> 🔔 UPDATE: We launched <a href="https://documen.so/day1" target="_blank">teams</a> and the early adopters plan will be replaced by the new teams pricing as soon as all availible early adopters seats are filled.
## Community-Driven Development
As we ramp up hiring and development speed for Documenso, I want to discuss how we plan to build its core version.
As we want to be a highly community-driven product, we want to capture the thoughts and ideas of said community in two ways:
1. Everything we plan (i.e. documen.so/roadmap) and build (i.e. documen.so/repo) is public and open to comments and suggestions from everyone by design. We plan to have discussions, streams, and articles showcasing what we're up to, encouraging feedback and iterations on our plans.
2. We're looking for 100 die-hard early adopters to get more deep hands-on feedback. If you want to be among the first to use and help shape Documenso, we have a special offer for you:
## The Early Adopter Plan
- All first 100 signups are entitled to the early adopter plan.
- The plan includes everything we build in the next 12 months and unlimited<sup>1</sup> signatures
- This plan is priced at $30/mo.
- No matter what we add, the price is guaranteed for life as a thank you for supporting Documenso's mission<sup>2</sup>. And we plan to add a lot.
- This also includes unlimited users<sup>3</sup> as part of the upcoming support for teams.
- If you already claimed an early adopter account in the past and canceled, we are happy to reactivate your account with the early adopter pricing. Reach out to support@documenso.com
## Being an Early Adopter
Being eligible for the early adopter plan has no formal requirements like giving feedback or being active in the community. In good faith, we assume you sign the Documenso Supporter Pledge to be part of this. And if you want to use the newest version quietly, that's fine, too. Everything the die-hard community brings up will be carefully considered and prioritized <sup>4</sup>. Also, there will obviously be limited edition merch available for the first 100.
Documenso currently runs the community reviewed 0.9.1 version. Getting from here to the globally loved and adopted signing tool we all deserve will take a lot of work, and we want you on board to help us create it. Join us in shaping the future of open signing and having fun doing it. [Malfunction Mania](https://documenso.com/blog/malfunction-mania) and releasing 1.0 will go a long way.
## Extending our open metrics
As part of our ongoing effort to be open and transparent in our doing, we are adding "Early Adopters" to our [/open page](https://documenso.com/open) page. After we exceed the early adopter slots, this metric will transition to "Customers". When no more early adopter seats can be claimed, the early adopter plan will transition to a standard paid plan. It will still be priced at $30/mo., but will no longer include upcoming features or unlimited seats.
If you have any questions or comments, please reach out on [Twitter / X](https://twitter.com/eltimuro) (DM open) or [Discord](https://documen.so/discord).
Best from Hamburg\
Timur
\
[1] Excluding signatures, we have to pay for i.e. third-party QES
[2] The Documenso Manifest
[3] Within reason. If you are unsure what that means, feel free to contact hi@documenso.com. But it should be fine if you don't plan to onboard a huge enterprise.
[4] We won't be able to build everything everyone asks for. But we firmly plan to listen and build in a way everyone's requirements are met as well as possible.

View File

@ -0,0 +1,28 @@
---
title: Jan 10th Email Provider Security Incident
description: On January 10th, 2022, we were notified by our email provider that they had experienced a security incident.
authorName: 'Lucas Smith'
authorImage: '/blog/blog-author-lucas.png'
authorRole: 'Co-Founder'
date: 2024-01-17
tags:
- Security
---
On January 10th, 2024 we were notified by our email provider that a security incident had occurred. This security incident which had started on January 7th led to a bad actor obtaining access to their database which contains ours and other customers data.
We understand that during this security incident the following has been accessed:
- Email addresses.
- Metadata on emails sent excluding the email body.
While the incident is unfortunate we are pleased with the remediation and the processes that our email provider has put in place to help avoid this kind of situation in the future. Since the incident, our provider has rectified the issue and has engaged a security company to conduct an exhaustive investigation and to help improve their security posture moving forward.
We remain steadfast in our commitment to our current email provider, and will not be taking any further action with relation to changing providers.
We are now working with our legal counsel to ensure that we provide the appropriate notice to all our customers in each jurisdiction. If you have any further questions on this incident please feel free to contact our support team at [support@documenso.com](mailto:support@documenso.com).
We appreciate your ongoing support in this matter.
You can read more on the incident on our providers blog post below:
[https://resend.com/blog/incident-report-for-january-10-2024](https://resend.com/blog/incident-report-for-january-10-2024)

View File

@ -0,0 +1,64 @@
---
title: Launch Week II - Day 1 - Teams
description: Teams for Documenso are here. And they come free for early adopters!
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2024-02-26
tags:
- Launch Week
- Teams
- Early Adopter Perks
---
<video
id="vid"
width="100%"
src="https://github.com/documenso/design/assets/1309312/12a85ec7-20bb-4813-9714-e4da42c9cfba"
autoPlay
loop
muted
></video>
> TLDR; Docucmenso now supports teams that share documents, templates and a team mail address. Early Adopter get UNLIMITED<sup>1</sup> Users.
## Kicking off Launch Week II - "Connected"
The day has come! Roughly 5 months after kicked off our first launch week with open sourcing our design and Malfunction Mania, Launch Week #2 is here 🎉 This Launch Week's theme is "connected", since this is all about connecting humans, machines and documents.
Working with documents and getting that signature is a team sport. This is why we are kicking it off today with a very long-awaited feature: Documenso now supports teams!
## Introducing Teams for Documenso
You can now create teams next to your personal account: Simply invite your colleagues, and you can include everyone you like in working with your documents. With teams, you can:
- Send unlimited signature requests with unlimited recipients
- Create, view, edit and sign documents owned by the team
- Define a dedicated team email, to receive signing requests into a team inbox for the owner to sign
- Manage team roles: Member (Create+Edit), Managers (+Manage Team Members), Owner (+Transfer Team +Delete Team + Sign Documents sent to team email)
## Pricing
Together with Teams, we are announcing the new teams pricing:
- $10 per seat per month
- 5 seats minimum
- You can add seats dynamically as needed
This pricing will take effect, as soon as the early adopter seats run out. Want to check out teams: [https://documen.so/teams](https://documen.so/teams).
## Early Adopter Perks
There is one more point on pricing I have been looking forward to for a long time:
All early adopter plans now include **UNLIMITED teams and users**<sup>1</sup> . We appreciate your support so far very much, and I'm happy to announce this first of more early adopter perks to come. We have roughly 48 early adopter plans left, so if you plan to onboard your team, now is a great time to [grab your early adopter seat.](https://documen.so/claim-early-adopters-plan)
We are eager to hear from all teams users how you like this addition and what we can add to make it even better. Connect with us on [Twitter / X](https://twitter.com/eltimuro) (DM open) or [Discord](https://documen.so/discord) if you have any questions or comments! We're always here, and we would love to hear from you :)
> 🚨 We need you help to help us to make this the biggest launch week yet: <a href="https://twitter.com/intent/tweet?text=It's @Documenso Launch Week Day 1! Teams just dropped. Check it out https://documen.so/day1 🚀"> Support us on Twitter </a> or anywhere to spread awareness for open signing! The best posts will receive merch codes 👀
Best from Hamburg\
Timur
\
[1] Within reason. If you are unsure what that means, feel free to contact hi@documenso.com and ask for clarification if it's more than 100.

View File

@ -0,0 +1,76 @@
---
title: Launch Week II - Day 2 - Templates
description: Templates help you prepare regular documents faster. And you can share them with your team!
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2024-02-27
tags:
- Launch Week
- Templates
---
<video
id="vid"
width="100%"
src="https://github.com/documenso/design/assets/1309312/c9504db1-26b7-4033-88ed-a95cabd02e92"
autoPlay
loop
muted
></video>
> TLDR; You can now reuse documents via templates. More field types coming soon as well.
## Introducing Templates
It's day 2 of Launch Week, everybody 🙌 After introducing [Teams](https://documenso.com/blog/launch-week-2-day-1) yesterday, today we are looking at making Documenso faster for daily use:
We are launching templates for Documenso! Templates are an easy way to reuse documents you send out often with just a few clicks. With templates, you can:
<figure>
<MdxNextImage
src="/blog/quickfill.png"
width="1260"
height="630"
alt="Template recipients quick fill view"
/>
<figcaption className="text-center">
Quickly fill out recipients, when creating from a template
</figcaption>
</figure>
- Save often-uploaded documents for reuse
- Pre-define fields, so you just have to send the document
- Quickly fill out recipients and roles for new documents
- Share templates with your team to make working together even easier
<figure>
<MdxNextImage
src="/blog/template.png"
width="1260"
height="630"
alt="Create from template view"
/>
<figcaption className="text-center">
POV: You are a diligent german and create custom receipts with Documenso.
</figcaption>
</figure>
## Pricing
Templates are **included in all Documenso Plans!** That includes our free tier: The limit of 5 documents per month still applies, but you are free to reach it with less friction using templates. Sharing templates with other users is only possible with the teams plan. If you want to share templates with people not in your team, we might have something coming up later this week 👀
## What's Next for Templates
We have a lot of great stuff coming up for templates as well:
- More Field Types are in the pipeline
- Sharing Templates Externally 👀
Check out templates [here](https://documen.so/templates) and let us know what you think and what we can improve. Which field types are you missing? Connect with us on [Twitter / X](https://twitter.com/eltimuro) (DM open) or [Discord](https://documen.so/discord) if you have any questions or comments! We're always here and would love to hear from you :)
> 🚨 We need you help to help us to make this the biggest launch week yet: <a href="https://twitter.com/intent/tweet?text=It's @Documenso Launch Week Day 2! They just launched templates, and I'm pumped 🎉🚀🚀🚀. Check it out https://documen.so/day2"> Support us on Twitter </a> or anywhere to spread awareness for open signing! The best posts will receive merch codes 👀
Best from Hamburg\
Timur

View File

@ -0,0 +1,115 @@
---
title: Moving from Linear to GitHub & LIVE Roadmap 2.0
description: We are leaving linear and are going all in on GitHub. Here is how we do it.
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2024-01-10
tags:
- GitHub
- Backlog
- Roadmap
---
# From Linear to GitHub
> TLDR; We are leaving Linear and are using only GitHub going forward. We no longer communicate feature timelines, only what we are working on and what's next.
If you follow us, you know we have been in full-on build mode. We are building, the community is building, it's great. Building is our daily business, so we think a lot about improving our approach to doing it.
Our most recent approach is to reduce the number of tools and platforms we use. Every tool we use
- Reduces the average time you spend on the tool
- Reduces your focus
- Increases mental load to keep all points of interest in mind
We thought about where we spend the most time, and hardly surprising: it's GitHub. Not only do we spend a lot of time there, but we also WANT to spend a lot of time there because:
- It's where the community contributes, and we are all about community
- It's where we show the world what we are working on
# The old structure
So far, we have been using Linear for our Backlog/ Task Management and synced issues we want to showcase or work on with the community via synclinear.com. Not only did we have our development issues there, but since
we have our own resident founding designer, we created a proper design backlog to structure our design workflows.
# The new structure
We moved everything to GitHub once we realized our focus was already there. This has a few key benefits:
- Reducing dilution of attention and time: You can hang out on GitHub without risk of missing much
- Putting different aspects of Documenso close to each other: Development, Design, Community
- Keep long-term, niche, and very abstract issues out of the main repo so we don't get desensitized by large issue numbers
To achieve this, we created a few GitHub repositories to host issues, with the main repository remaining the central point of interest, especially for the community.
## 1. Main Repository - Day to day Issues and the shorter-term roadmap (LIVE Roadmap 2.0)
> [github.com/documenso/documenso](https://github.com/documenso/documenso)
Apart from the source code of the Documenso app and website, the main repo houses issues raised by the community and issues where we invite the community to participate.
With the overhauling of our issue management, we are also updating our progress communication. While the software and product development process is highly complex,
we try to give as much insight into what we do as possible. To that end, we went through 3 phases, three being what we do now.
1. **One extensive roadmap**: Initially we had one roadmap and were (very) slowly checking off boxes there (via a "Roadmap" milestone). While this is easy, it's also pretty imprecise and not practical as the project grows
2. **Estimated releases per quarter**: To give better guidance, we tried communicating our goals for the quarter; a pretty big window we thought we could roughly "hit". While the idea of not being too detailed was good, it is tough to estimate when some significant things are done if you do a lot of minor/ other things in parallel,
like working with the community and tuning things you go. Hitting time targets is tricky because there may be better things to do than sticking to that time target. This is always much easier to grasp for the people closely involved. The fallacy is to assume the thing you plan for exists in a vacuum.
3. Since we do not want to limit ourselves in choosing the most effective course but still give some insight into what's going on and what's coming up, we updated the live roadmap [https://documen.so/live](https://documen.so/live). It now shows what we are currently working on and what we plan on doing next. We do not provide
a specific timeline anymore since we couldn't even if we wanted to. Of course, we set our short-term goals based on what's best for the community. We give updates on the issues being worked on as well as possible.
## 2. Public Backlog - The longer-term roadmap
> [github.com/documenso/backlog](https://github.com/documenso/backlog)
The public backlog houses everything we want to build eventually. We do not provide a specific timeline of when that might happen. If we decide against something, it will be removed from the public backlog, as we consider this our long-term vision for Documenso. If you are interested in something on the roadmap, comment on the issue or post on Discord. This helps us gauge interest in specific features.
**Issues in the public backlog are not** available to be worked on. For issues to work on, please check the main repository issues. The issues found here are scoped broader since they are not meant for immediate execution but rather give a sense of where Documenso is going and what we consider part of our domain.
## 3. Internal Backlog
> github.com/documenso/backlog-internal
<figure>
<MdxNextImage
src="/blog/gh1.png"
width="1260"
height="630"
alt="GitHub: Development Board"
/>
<figcaption className="text-center">
Our internal Kanban for development
</figcaption>
</figure>
This serves as the direct replacement for our Linear backlog. Here, we manage issues that are either too small or short-term for inclusion in the long-term roadmap, yet too specialized or fundamental to be integrated into the main repository. Our development Kanban board is implemented using a GitHub project.
## 4. Internal Design Backlog
> github.com/documenso/design-internal
<figure>
<MdxNextImage
src="/blog/gh2.png"
width="1260"
height="630"
alt="GitHub: Design Board"
/>
<figcaption className="text-center">
Our internal Kanban for design
</figcaption>
</figure>
This is the design equivalent of the internal backlog. The internal design backlog houses our design projects that include the exploration of new features, detailed UI designs, and improving the platform overall.
It's similar to the Kanban board for the development backlog.
## 5. Public Design Repository
> [github.com/documenso/backlog-design](https://github.com/documenso/design)
While the internal design backlog also existed in Linear, the public design repository is new. Since designing in the open is tricky, we opted to publish the detailed design artifacts with the corresponding feature instead.
We already have design.documenso.com housing our general design system. Here, we will publish the specifics of how we applied this to each feature. We will publish the first artifacts here soon, what may be in the cards can be found on the [LIVE Roadmap](https://documen.so/live).
Feel free to connect with us on [Twitter / X](https://twitter.com/eltimuro) (DM open) or [Discord](https://documen.so/discord) if you have any questions or comments! We're always here to help and would love to hear from you :)
Best from Hamburg\
Timur

View File

@ -0,0 +1,75 @@
---
title: The 🔴 LIVE Roadmap
description: It's the Launch Week Day finale, Day 5! We are going out with a bang and introducing the 🔴 LIVE roadmap, featuring our next Product Hunt Launch - Free Singleplayer Documenso - Sign without creating an account!
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2023-09-29
tags:
- Free Plan
- Launch
- Roadmap
---
<figure>
<MdxNextImage
src="/blog/roadmap.png"
width="1260"
height="630"
alt="XKCD: Bug"
/>
<figcaption className="text-center">
"Being early is, uh, good." -Unknown
</figcaption>
</figure>
> TLDR; We are launching a [🔴 LIVE roadmap](https://documen.so/launches), that gets updated regularly.\
> First upcoming launch: A free single signer experience.
## The Road Ahead
It's been quite a week, launching our [design system](https://documenso.com/blog/design-system), [kicking of a Malfunction Mania](https://documenso.com/blog/malfunction-mania), a [shiny new contributor perk](https://documenso.com/blog/shop) and our [early adopter deal](https://documenso.com/blog/early-adopters). After discussing Version 1.0 a lot, we want to close the week by looking ahead. As an open company, we want transparency about what we are working on and what to expect next. Especially for our Early Adopters, we want to paint a clear picture of what to expect in the near term.
Communicating software development progress and goals is historically tricky because of it's complex nature. Exact release dates are notoriously unreliable; if they are not, they force a particular style of development, forcing the team to make tradeoffs on scope and quality.
To give an appropriate insight into our work, we are launching our new [🔴 LIVE roadmap](https://documen.so/launches) today:
- A List of quarterly development and feature goals
- That gets updated regularly (bi-weekly)
- Has up-to-date insights from the team on where we stand
**While there are some great features planned, one stands out: Single Player Mode!**
## Announcing Documenso Singleplayer Mode
<a href="https://www.producthunt.com/products/documenso" target="_blank">
<figure>
<MdxNextImage
src="/blog/sp5.png"
width="1260"
height="630"
/>
<figcaption className="text-center font-bold">
🚨 We are going back to Product Hunt! Are you ready, player one?
</figcaption>
</figure>
</a>
Single Player Mode will be a free, loginless signing experience for single signers. If you hate creating an account to sign a single, once-in-a-while-document yourself as much as we do, we've got you. Our new free tier will accompany Singleplayer. While you don't HAVE to create an account to sign sth. quickly, you can. A free tier Documenso Account will give you the following:
- A place to store all your sent and received Documenso-signed documents
- Free forever
- Unlimited recipients
- 5 free signatures per month (for now, excluding third party types like QES)
- The use of templates, as soon as we [release](https://documen.so/launches) them
Singleplayer will launch in the first half of October, shortly after the release of 1.0, **[ON PRODUCT HUNT!](https://www.producthunt.com/products/documenso)** That's right, we are going back to Product Hunt to kick of this new phase of Documenso and you are invited to join us once again :)
**[Subscribe on PH](https://www.producthunt.com/products/documenso)** to be notified when we launch.
If you have any questions or comments, please reach out on [Twitter / X](https://twitter.com/eltimuro) (DM open) or [Discord](https://documen.so/discord).
Best from Hamburg\
Timur

View File

@ -0,0 +1,57 @@
---
title: Announcing Malfunction Mania
description: Launch Week Day 2 Y'all! We're getting ready to release Documenso 1.0! Join in on the fun of making sure the open-source alternative to DocuSign is on point. We're calling a 'MALFUNCTION MANIA.'
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2023-09-26
tags:
- Testing
- Rewrite
- Bounties
---
<figure>
<MdxNextImage
src="/blog/mm.png"
width="1260"
height="630"
alt="Malfunctioning Documenso Logo in broken colors"
/>
<figcaption className="text-center">
We're calling a MALFUNCTION MANIA! 🚨
</figcaption>
</figure>
> TLDR; Documenso 1.0 is in the [staging environment](https://documen.so/staging). Go check it out.
It's been a minute since Lucas proclaimed, ["We're doing a rewrite"](https://documenso.com/blog/why-were-doing-a-rewrite), and many of you have been asking when the new version will be available. I'm happy to say that the wait has come to an end. The work on Documenso 1.0 has reached a level we feel comfortable going into the next phase with. We had a lot of community feedback, contributions, and moral support to get us this far, which is why we're excited to announce the most extensive community project yet:
As Documenso 1.0 just hit the staging environment, we're calling a MALFUNCTION MANIA. An enormous, public testing phase, where we invite everyone to try out the new version, hunt down, report, and fix any malfunctions (aka bugs), and give feedback before release. Malfunction Mania will happen alongside our internal testing, and by combining the two, we want to ensure the best possible release we can have for Version 1.0. We know many of you have been eager to contribute; this is your chance (the first of many to come).
## As part of Malfunction Mania, we're offering special bug bounties
- We award $25 - $100 per report/ issue/ fix, depending on the severity and if the problem is already known
- Bounties will be awarded for fixing reported or other critical issues via accepted Pull Requests (PR)
- Just reporting issues in a reproducible way can also be awarded
- Smaller but notable contributions like minor issues and documentation will be awarded with exclusive merch as we see fit.
## What you can do
- Head over to the [staging environment](https://documen.so/staging), check out the new version and give it a spin;
- Check out the [source code](https://github.com/documenso/documenso) on GitHub and look it over;
- Spin up the new version locally and try it out.
## How to get the bounties
- Report bugs by creating an issue here: [documen.so/issues](https://documen.so/issues);
- Fix bugs by creating a Pull Request (PR);
- Look over and add missing documentation/ Quickstarts and other useful resources.
Best from Hamburg
Timur
We don't have a specific end date for Malfunction Mania. We plan to move the staging version into the production environment by the end of the month once we're happy with the results. Bug reports and fixes are, of course, always welcome going forward.
**[Follow Documenso on Twitter / X](https://documen.so/tw) and [join the Discord server](https://documen.so/discord) to get the latest about Malfunction Mania.**

View File

@ -0,0 +1,31 @@
---
title: The Documenso Manifest
description: 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.
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2023-07-13
tags:
- Manifesto
- Open Source
- Vision
---
<figure>
<MdxNextImage
src="/blog/blog-banner-manifest.jpeg"
width="1260"
height="630"
alt="The Documenso Manifest blog banner"
/>
<figcaption className="text-center">
Documenso — The Open Source DocuSign Alternative.
</figcaption>
</figure>
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.

View File

@ -0,0 +1,56 @@
---
title: Preview the next Documenso
description: We're redesigning Documenso by making it more elegant and appropriately playful. Here's a sneak peek.
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2023-08-21
tags:
- Design
- Preview
---
Since we launched [Documenso 0.9 on Product Hunt](https://producthunt.com/products/documenso#documenso) last May, the team's been hard at work behind the scenes to ramp up development and design to deliver an excellent next version.
Last week, Lucas shared the reasoning how [why we're doing a rewrite](https://documenso.com/blog/why-were-doing-a-rewrite).
Today, I'm pleased to share with you a preview of the next Documenso.
## Preview the next Documenso
We redesigned the whole signing flow to make it more appealing and more convenient.
We improved the overall look and feel by making it more elegant and appropriately playful. Focused on the task at hand, but explicitly enjoying doing it.
**We call it happy minimalism.**
We paid particular attention to the moment of signing, which should be celebrated.
The image below is the final bloom of the completion celebration we added:
<figure>
<MdxNextImage
src="/blog/blog-fig-preview-documenso.webp"
width="2000"
height="1268"
alt="Figure 1"
/>
<figcaption className="text-center">"You've signed a new document."</figcaption>
</figure>
## Kicking off a new phase of collaboration
This preview also is the kickoff for a new phase of how we collaborate with the community.
We recently [switched to Discord](https://documenso.com/blog/switching-from-slack-to-discord) to set up a more developer-friendly, community-driven environment, and we just released the [public roadmap](https://documen.so/launches).
As always, if you have any questions or feedback, please reach out. We love to hear from you.
Best from Hamburg,
Timur
Make sure to [star the GitHub repository](https://documen.so/github), [follow us on X](http://documen.so/twitter) and [join the Discord server](https://documen.so/discord) to keep up to date with all things Documenso.
We're building a beautiful, open-source alternative to DocuSign.

View File

@ -0,0 +1,38 @@
---
title: Announcing Pre-Seed and Open Metrics
description: We are excited to report the closing of our Pre-Seed round. You can find the juicy details on our new /open page. Yes, it was signed using Documenso.
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2023-08-17
tags:
- Funding
- Metrics
- Open Startup
---
Today I'm happy to announce that we closed a \$1.25M Pre-Seed round for Documenso, bringing our total funding to \$1.54M. The round actually closed last month, we just were sneaky about it.
## Two more for the road (to open signing)
We're ecstatic to welcome [OSS Capital](https://twitter.com/osscapital) and especially [Joseph Jacks](https://twitter.com/JosephJacks_) to the inner circle of the open signing revolution. We're also fortunate to be joined by Orrick's very own [John Harrison](https://www.linkedin.com/in/john-harrison-a1213b9/) and his legal experience. For those who are wondering, yes, the round was, of course, signed using Documenso.
## Open Source, Open Metrics
If you follow us, you know we're firmly committed to the open source values of openness and transparency. For us, this includes not only the code side of things but also the business. As we aim to build trust among our investors, customers, and partners, we want to be open about what's going on. We also want to allow everyone to learn from our data and choices, just as we did from so many other COSS (Commercial Open Source) startups. The term "Open Startup" isn't precisely defined (and probably will never be, just like startup). There is however a [great write-up](https://cal.com/blog/open-startup) about the basics by the founder of our favorite open source scheduling tool Cal.com.
The two main takeaways are:
- "Any Startup that shares its metrics as open as technically and operationally possible is an Open Startup."
- "Why should I care? Frankly speaking, Open Startups have a tough time screwing you over."
The more open the culture, the less shady stuff is going on. While this may sound trivial, the implications are profound. A new generation of organizations, operating more ethically and responsibly simply because everything is out in the open.
For us, there are two sides to being an Open Startup:
- The company side: Sharing Financial KPIs like growth, funding, team structure, salary, internal processes, and tools.
- The product side: Sharing insights and data like usage, reach, and GitHub activity.
Both sides aim to contribute to the global knowledge base of how startups work, specifically COSS startups. As we see more and more COSS, best practices and business insights should be broadly available to let the space mature. As we contribute code to the global community, we also contribute our business knowledge to help bring about even more COSS.
Starting today, we're releasing a lot of our data as part of the Open Startup movement. You can find the juicy details on our funding and more here: [documen.so/open](https://documen.so/open)

View File

@ -0,0 +1,64 @@
---
title: Merch Mania
description: Happy Launch Week Day 3. The limited edition "Malfunction Mania" shirt is here. Grab it, while you can.
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2023-09-27
tags:
- Merch
- Rewrite
- Bounties
---
<figure>
<MdxNextImage
src="/blog/mania-shirt.png"
width="1260"
height="630"
alt="Malfunctioning Mania Themed Documenso Shirt"
/>
<figcaption className="text-center">
The Limited Edition "Malfunction Mania" Shirt - Only during Malfunction Mania
</figcaption>
</figure>
> TLDR; We have a fancy limited edition shirt. Contribute to [Malfunction Mania](https://documenso.com/blog/malfunction-mania) to get one.
We kicked off [Malfunction Mania](https://documenso.com/blog/malfunction-mania) yesterday, and the first [issues](https://github.com/documenso/documenso/issues) are coming in. As mentioned, there will be dollar bounties, but we also wanted to celebrate entering the final stage of version 1.0 with something special. This is why we created this limited edition shirt. It will only be available during the runtime of Malfunction Mania. We have yet to set an exact end date, the next event in October, however, is looming, ready to end MM.
## Documenso Merch Shop
The shirt will be available in our [merch shop](https://documen.so/shop) via a unique discount code. While the shirt will be gone after Malfunction Mania, the shop is here to stay and provide a well-deserved reward for great community members and contributors. All items can be earned by contributing to Documenso.
<figure>
<MdxNextImage
src="/blog/shop.png"
width="1260"
height="630"
alt="Malfunctioning Mania Themed Documenso Shirt"
/>
<figcaption className="text-center">
Merch at Documenso is always given to those who deserve it.
</figcaption>
</figure>
## How earn the shirt
If you have been following us, you know we are not big on formalities but highly value rewarding merit. That being said, any worthwhile contribution has a chance to get one. To inspire, here are a few ideas on how to contribute to securing one:
- Report a bug with detailed reproduction details
- Fix a bug (you or somebody else reported)
- Analyze and describe a usability or user experience shortcoming
- Test the product in a systematic and least somewhat documented way
- Engage in discussion about the current version and its choices
- Raise awareness for Malfunction Mania and try out the [version currently in staging](https://documen.so/staging)
- Review the version with a video, stream, or screenshots and post about it
- Review existing or create missing documentation
Best from Hamburg
Timur
**[Follow Documenso on Twitter / X](https://documen.so/tw) and [join the Discord server](https://documen.so/discord) to get the latest updates about Malfunction Mania.**

View File

@ -0,0 +1,136 @@
---
title: Switching to Discord
description: The Documenso community is growing and we feel the need to have a more community and developer-friendly environment. We're switching to Discord.
authorName: 'Flo Merian'
authorImage: '/blog/blog-author-flo.jpeg'
authorRole: 'Go-to-market'
date: 2023-08-02
tags:
- Announcement
- Community
---
Were switching to Discord.
Documenso is an open-source DocuSign alternative, built with community and transparency in mind.
So, when we started working on the project, we quickly set up a Slack workspace to start engaging with community members.
As the community grows (reached 2K stars on GitHub and 100 community members on Slack), we felt the need to set up a more community-friendly environment.
The Documenso team is growing, too. [Lucas joined Timur](https://twitter.com/ElTimuro/status/1648608988391514112), then [Ephraim](https://twitter.com/documenso/status/1662418374243041280) and [David](https://github.com/dguyen) recently joined the journey. We want to stay in touch with the community as much as possible and avoid context-switching to focus on work, support, and fun.
Were an open-source project and focus on building a great developer experience. So, when we thought of a Slack replacement, community and developer-friendly, Discord was an obvious choice — not to mention that it would help us keep up with [OSS friends](https://documen.so/oss), too.
So, were switching all conversations, team and community-wide, to Discord.
In this post, we wont debate _why_ were switching — Slack vs. Discord is a long-lasting debate with pros and cons, and fans on both sides. There are great [stories](https://blog.meilisearch.com/from-slack-to-discord-our-migration/) and [threads](https://twitter.com/McPizza0/status/1655519558600470528) on the topic. We just dont want to write yet another story here.
Instead, well focus on _how_ we plan to make the switch.
## Who is this story for?
First, we wrote this post for the team so were ready for the switch. Then we post it online because we value transparency and thought it might help the community.
For community members, this story would help you understand how we plan to make the switch and give you the guidance to fully embrace the new experience.
For founders and makers who would like to switch too, in one way or another, this story would help you handle the transition with a detailed guide.
## Switching to Discord
Were switching to Discord, step by step. First, were moving team conversations, then were moving the community with a 15-day buffering.
The detailed plan goes like this:
- 2023-07-25 `t=0`: Timur starts setting up the Discord server and sends invites to the team.
- 2023-07-26 `t+1`: The team switches to Discord. The objective is to get used to the product and to customize it to feel at home and, when were ready to welcome the community, to make new members feel at home, too.
- 2023-08-02 `t+8`: We announce to the community the upcoming changes in the different channels — GitHub, Twitter, and Slack.
- **GitHub**
- Create new Pull Request
- Add story to the blog
- Update link to the community
```
https://documen.so/discord
```
- Start a new Discussion
```markdown
Happy Wednesday!
TL,DR: Were switching to Discord. [Join the fun!](https://documen.so/discord)
We want to build a beautiful, open-source DocuSign alternative. As we're growing (reached 2.3K Stars), we feel the need to have a more community- and developer-friendly environment to share ideas, support, and memes.
Make sure to join the server to keep up to date on all things Documenso.
Oh and, spoiler alert, there may be some swag there 👀
See you there!
Flo
```
- **Twitter**
- [Tweet the announcement](https://twitter.com/documenso/status/1686719482096766977)
- Pin Tweet
- Update link in bio
```
The Open Source DocuSign Alternative.
http://documen.so/github
http://documen.so/discord
http://documen.so/manifest
```
- **Slack**
- Post message in `#general`
```markdown
Happy Wednesday!
TL,DR: Were switching to Discord. [Join the fun!](https://documen.so/discord)
We want to build a beautiful, open-source DocuSign alternative. As we're growing (reached 2.3K Stars), we feel the need to have a more community- and developer-friendly environment to share ideas, support, and memes.
Make sure to [join the server](https://documen.so/discord) to keep up to date on all things Documenso.
Oh and, spoiler alert, there may be some swag there 👀
See you there!
Flo
```
- Pin post
- Set topic and description
```
We're switching to Discord. Join the fun: https://documen.so/discord
```
- Archive channels: `#code-review` `#how-to` `#meet-and-greet` `#random-memes` `#self-hosting` `#support`
- 2023-08-09 `t+15`: 7 days later, we send a reminder on Slack.
- **Slack**
- Schedule reminder in `#general`
```
Friendly reminder: we're switching to Discord and will soon disconnect this Slack workspace.
Join the fun! https://documen.so/discord
```
- 2023-08-16 `t+22`: 15 days later, were making the final edits to the Slack workspace.
- **Slack**
- [Edit posting permissions](https://app.slack.com/slackhelp/en-US/360004635551) in `#general`
- Disconnect Slack
## Final thoughts
- Were at the very, early stage on our journey to building a beautiful, open-source DocuSign alternative. We want to build a great developer experience with the open-source community and, switching to Discord, we want to set up the foundations of an open, safe place for community members to get in touch, brainstorm ideas, and have fun.
- It doesnt mean we wont ever switch back to Slack. The tools of today arent the ones of tomorrow. We dont delete the Slack workspace, we archive it, and keep the `documenso` handle. May it be just an _au revoir?_
- For now, were pushing forward and are eager to welcome you on Discord. Make sure to [join the server](https://documen.so/discord) in order to keep up to date on all things Documenso. See you there!

View File

@ -0,0 +1,68 @@
---
title: Why I started Documenso
description: I started Documenso because I wanted to build a modern tech company in a growing space with a mission bigger than money, I overpaid for a SSL cert 13 years ago, like encryption and want to help make the internet/ world more open.
authorName: 'Timur Ercan'
authorImage: '/blog/blog-author-timur.jpeg'
authorRole: 'Co-Founder'
date: 2024-02-06
tags:
- Founders
- Mission
- Open Source
---
<figure>
<MdxNextImage
src="/blog/burgers.jpeg"
width="650"
height="100"
alt="Burgers, drinks on a table between friends."
/>
<figcaption className="text-center">
Not the burger from the story. But it could be as well, the place is pretty generic.
</figcaption>
</figure>
> TLDR; I started Documenso because I wanted to build a modern tech company in a growing space with a mission bigger than money, I overpaid for a SSL cert 13 years ago, like encryption, and wanted to help make the world/ Internet more open.
It's hard to pinpoint when I decided to start Documenso. I first uttered the word "Documenso" while sitting in a restaurant with [Felix](https://twitter.com/flxmgdnz), eating a burger and discussing what's next in late 2022. Shortly after, I sat down with a can of caffeine and started building [Documenso 0.9](https://github.com/documenso/documenso/releases/tag/0.9-developer-preview). Starting Documenso is the most deliberate business decision I ever made. It was deliberate from the personal side and deliberate from the business side.
Looking at the personal side, I've had some time off and was actively looking for my next move. Looking back, I stumbled into my first company. Less so with the second one, but I joined my co-founders and did not develop the core concept myself. While coming up with Documenso, I was deliberately looking for a few things, based on my previous experiences:
- An entrepreneurial space that was a big enough opportunity
- A huge macro trend, lifting everything in it's space
- A mode of working that fits my flow (which, luckily for me, is pretty close to the modern startup/ tech scene)
- A more significant impact to be made than just earning lots of money (though there is nothing wrong with that)
Quick shoutout to everyone feeling even a pinch of imposter syndrome while calling themselves a founder. It was after ten years, slightly after starting Documenso, that I started doing it in my head without cringing. So cut yourself some slack. Considering how long I've been doing this, I would have earned the internal title sooner, and so do you. After grappling with my identity for a second, as is customary for founders, my decision to start this journey came quickly.
Aside from the personal dimension, I had a clear mindset of what I wanted. The criteria I describe below clicked into place one after another, in no particular order. Having experienced no market demand and a very gritty, grindy market, I was looking for something more fundamental. Something basic, infrastructure-like, with a huge demand. A growing market deeply rooted in the ever-increasing digitalization of the world.
And to be honest, I just always liked digital signature tools. It's a product that is easy enough to comprehend and build but complex and impactful enough to satisfy a hard need. It's a product you can build very product-driven since the market and domain are well understood. So when asked about what's next for me, I literally said, "Digital, um, let's say… signatures". As it turns out, my first gut feeling was spot on, but how spot on I only realized when I started researching the space. An open source document signing company happens to be the perfect intersection of all the criteria and personal preferences I described above; it's pretty amazing, actually:
- The global signing market is enormous and rapidly growing
- To put it bluntly, the signing space is vast and dominated by one outdated player. Outdated in terms of tech, pricing, and ecosystem
- The signing space is also ridiculously opaque for a space based on open web tech, open encryption tech, and open signing standards. Even by closed-source standards
- We are currently seeing a renaissance for commercial open source startups, combining venture founder financials with open source mechanics
- Rebuilding a fundamental infrastructure as open source with a meaningful scale has a profoundly transformative effect on any space
- Working in open source requires being open, cooperative, and inclusive. It also requires quite a bit of context jumping, "going with the flow," and empathy
- Apart from fixing the signing space, making Documenso successful would be another domino tile toward open source eating the world, which is great for everyone
Building a company is so complex it can't be planned out. Basing it on great fundamentals and the expected dynamics is the best founders can do, in my humble opinion. After these fundamental decisions, you are (almost) just along for the ride and need to focus on solving the "conventional" problems of starting a company the best you can. With digital signatures hitting so many points of my personal and professional checklist, this already was a great fit. What got me excited at first, though, apart from the perspective of drinking caffeine and coding, was this:
Roughly 13 years ago, I was launching my first product. We obviously wanted SSL encryption on the product site, so I had to buy an SSL certificate. ~$200ish, two years validity, from VeriSign, I think. Apart from it being ridiculously complicated to get, it bothered me that we had basically paid $200 for what is essentially a long number someone generated. SSL wasn't even that widespread back then because it was mainly considered important for e-commerce, no wonder considering it cost so much. "Why would I encrypt a blog?". Fast forward to today, and everyone can get a free SSL cert courtesy of [Let's Encrypt](https://letsencrypt.org/) and browsers are basically blocking unencrypted sites. Mostly, it is even built into hosting platforms, so you barely even notice as a developer.
I had forgotten all about that story until I realized this is where signing is today. A global need fulfilled only by a closed ecosystem, not really state-of-the-art companies, leading to, let's call it, steep prices. I had considered Let's Encrypt a pillar of the open internet for so long that I forgot that they weren't always there. One day, someone said, let's make the internet better. Signing is another domain that should have had an open ecosystem for a long time. Another parallel to that story is the fact that the cryptographic certificates you need for document signing are also stuck in the "pre-Let's Encrypt world." Free document signing certificates via "Let's Sign" are now another to-do on the [long-term roadmap](https://documen.so/roadmap) list for the open signing ecosystem. Effecting this change in any way is a huge driver for me.
Apart from my personal gripes with the corporate certificate industry, I have always found encryption fascinating. It's such a fundamental force in society when you think about it: Secure Communication, Secure Commerce, and even [internet native, open source money (Bitcoin)](https://github.com/bitcoin/bitcoin) were created using a bit of smart math. All these examples are expressions of very fundamental human behaviors that should be enabled and protected by open infrastructures.
I never told rthis to anyone before, but since starting Documenso, I realized that I underestimated the impact and importance of open source for quite some time. When I was in University, I distantly remember my mindset of "yeah, open source is nice, but the great, commercially successful products used in the real world are built by closed companies (aka Microsoft)" _shudder_ It was never really a conscious thought, but enough that I started learning MS Silverlight before plain Javascript. It was slowly, over time, that I realized that open web standards are superior to closed ones, and even later, I understood the same holds true for all software. Open source fixes something in the economy I find hard to articulate. I did my best in [Commodifying Signing](https://documenso.com/blog/commodifying-signing).
To wrap this up, Documenso happens to be the perfect storm of market opportunity, my interests, and my passions. Creating a company in which people want to work for the long term while tackling these issues is a critical side quest of Documenso. This is not only about building the next generation of signing tech; it's also about doing our part to normalize open, healthy, efficient working cultures and tackling relevant problems.
As always, feel free to connect on [Twitter / X](https://twitter.com/eltimuro) (DM open) or [Discord](https://documen.so/discord) if you have any questions, comments, thoughts or feelings.
\
Best from Hamburg\
Timur

View File

@ -0,0 +1,113 @@
---
title: Why we're doing a rewrite
description: As we move beyond MVP and onto creating the open signing infrastructure we all deserve we need to take a quick pit-stop.
authorName: 'Lucas Smith'
authorImage: '/blog/blog-author-lucas.png'
authorRole: 'Co-Founder'
date: 2023-08-05
tags:
- Community
- Development
---
<figure>
<MdxNextImage
src="/blog/blog-banner-rewrite.png"
width="1260"
height="630"
alt="Next generation documenso"
/>
<figcaption className="text-center">
The next generation of Documenso and signing infrastructure.
</figcaption>
</figure>
> TLDR; We're rewriting Documenso to move on from our MVP foundations and create an even better base for the project. This rewrite will provide us the opportunity to fix a few things within the project while enabling a faster development process moving forward.
# Introduction
At Documenso, we're building the next generation of signing infrastructure with a focus on making it inclusive and accessible for all. To do this we need to ensure that the software we write is also inclusive and accessible and for this reason weve decided to take a step back and perform a _quick_ rewrite.
Although we've achieved validated MVP status and gained paying customers, we're still quite far from our goal of creating a trusted, open signing experience. To move closer to that future, we need to step back and focus on the project's foundations to ensure we can solve all the items we set out to on our current homepage.
Fortunately, this wasn't a case of someone joining the team and proposing a rewrite due to a lack of understanding of the codebase and context surrounding it. Prior to joining Documenso as a co-founder, I had spent an extensive amount of time within the Documenso codebase and had a fairly intimate understanding of what was happening for the most part. This knowledge allowed me to make the fair and simultaneously hard call to take a quick pause so we can rebuild our current foundations to enable accessibility and a faster delivery time in the future.
# The Reasoning: TypeScript
Our primary reason for the rewrite is to better leverage the tools and technologies we've already chosen, namely TypeScript. While Documenso currently uses TypeScript, it's not fully taking advantage of its safety features, such as generics and type guards.
The codebase currently has several instances of `any` types, which is expected when working in an unknown domain where object models aren't fully understood before exploration and experimentation. These `any`s initially sped up development, but have since become a hindrance due to the lack of type information, combined with prop drilling. As a result, it's necessary to go through a lot of context to understand the root of any given issue.
The rewrite is using TypeScript to its full potential, ensuring that every interaction is strongly typed, both through general TypeScript tooling and the introduction of [Zod](https://github.com/colinhacks/zod), a validation library with excellent TypeScript support. With these choices, we can ensure that the codebase is robust to various inputs and states, as most issues will be caught during compile time and flagged within a developer's IDE.
# The Reasoning: Stronger API contracts
In line with our pattern of creating strongly typed contracts, we've decided to use [tRPC](https://github.com/trpc/trpc) for our internal API. This enables us to share types between our frontend and backend and establish a solid contract for interactions between the two. This is in contrast to the currently untyped API endpoints in Documenso, which are accessed using the `fetch` API that is itself untyped.
Using tRPC drastically reduces the chance of failures resulting from mundane things like argument or response shape changes during updates and upgrades. We made this decision easily because tRPC is a mature technology with no signs of losing momentum any time soon.
Additionally, many of our open-source friends have made the same choice for similar reasons.
# The Reasoning: Choosing exciting technologies
Although we already work with what I consider to be a fun stack that includes Next.js, Prisma, Tailwind, and more, it's no secret that contributors enjoy working with new technologies that benefit them in their own careers and projects.
To take advantage of this, we have decided to use Next.js 13 and React's new server component and actions architecture. Server components are currently popular among developers, with many loving and hating them at the same time.
I have personally worked with server components and actions since they were first released in October 2022 and have dealt with most of the hiccups and limitations along the way. Now, in July 2023, I believe they are in a much more stable place and are ready to be adopted, with their benefits being recognised by many.
By choosing to use server components and actions, we hope to encourage the community to participate more than they otherwise might. However, we are only choosing this because it has become more mature and stable. We will not choose things that are less likely to become the de-facto solution in the future, as we do not wish to inherit a pile of tech debt later on.
# The Reasoning: Allowing concurrent work
Another compelling reason for the rewrite was to effectively modularise code so we can work on features concurrently and without issue. This means extracting as much as possible out of components, API handlers and more and into a set of methods and functions that attempt to focus on just one thing.
In performing this work we should be able to easily make refactors and other changes to various parts of the code without stepping on each others feet, this also grants us the ability to upgrade or deprecate items as required by sticking to the contract of the previous method.
Additionally, this makes testing a much easier task as we can focus more on units of work rather than extensive end to end testing although we aim to have both, just not straight away.
# The Reasoning: Licensing of work
Another major reasoning for the rewrite is to ensure that all work performed on the project by both our internal team and external contributors is licensed in a way that benefits the project long-term. Prior to the rewrite contributors would create pull requests that would be merged in without any further process outside of the common code-review and testing cycles.
This was fine for the most part since we were simply working on the MVP but now as we move towards an infrastructure focus we intend on taking on enterprise clients who will have a need for a non-GPLv3 license since interpretations of it can be quite harmful to private hosting, to facilitate this we will require contributors to sign a contributor license agreement (CLA) prior to their changes being merged which will assign a perpetual license for us to use their code and relicense it as required such as for the use-case above.
While some might cringe at the idea of signing a CLA, we want to offer a compelling enterprise offering through means of dual-licensing. Great enterprise adoption is one of the cornerstones of our strategy and will be key to funding community and product development long-term.
_Do note that the above does not mean that we will ever go closed-source, its a point in our investor agreements that [https://github.com/documenso/documenso](https://github.com/documenso/documenso) will always remain available and open-source._
# Goals and Non-Goals
Rewriting an application is a monumental task that I have taken on and rejected many times in my career. As I get older, I become more hesitant to perform these rewrites because I understand that systems carry a lot of context and history. This makes them better suited for piecemeal refactoring instead, which avoids learning the lessons of the past all over again during the launch of the rewrite.
To ensure that we aren't just jumping off the deep end, I have set out a list of goals and non-goals to keep this rewrite lean and affordable.
### Goals
- Provide a clean design and interface for the newly rewritten application that creates a sense of trust and security at first glance.
- Create a stable foundation and architecture that will allow for growth into our future roadmap items (teams, automation, workflows, etc.).
- Create a robust system that requires minimal context through strong contracts and typing.
### Non-Goals
- Change the database schema (we don't want to make migration harder than it needs to be, thus all changes must be additive).
- Add too many features that weren't in the system prior to the rewrite.
- Remove any features that were in the older version of Documenso, such as free signatures (signatures that have no corresponding field).
# Rollout Plan
Thanks to the constraints listed above our rollout will hopefully be fairly painless, still to be safe we plan on doing the following.
1. In the current [testing environment](https://test.documenso.com), create and sign a number of documents leaving many in varying states of completion.
2. Deploy the rewrite to the testing environment and verify that all existing documents and information is retrievable and modifiable without any issue.
3. Create another set of documents using the new rewrite and verify that all interactions between authoring and signing work as expected.
4. Repeat this until we reach a general confidence level (expectation of two weeks).
Once weve reached the desired confidence level with our testing environment we will look to deploy the rewrite to the production environment ensuring that weve performed all the required backups in the event of a catastrophic failure.
# Want to help out?
Were currently working on the **[feat/refresh](https://github.com/documenso/documenso/tree/feat/refresh)** branch on GitHub, we aim to have a CLA available to sign in the coming days so we can start accepting external contributions asap. While were nearing the end-stage of the rewrite we will be throwing up a couple of bounties shortly for things like [Husky](https://github.com/typicode/husky) and [Changesets](https://github.com/changesets/changesets).
Keep an eye on our [GitHub issues](https://github.com/documenso/documenso/issues) to stay up to date!

View File

@ -0,0 +1,13 @@
---
title: Careers at Documenso
---
# Careers at Documenso
So you love Documenso and all the things that we do and now you want to work with us to unlock the future of open signing?
---
## Open Positions
Unfortunately we have no open positions available at the moment. Our team has grown and so we must grow with it, please check back from time to time as now is not forever and we may be hiring again in the future.

View File

@ -0,0 +1,42 @@
---
title: Design System
---
# We're building a beautiful, open-source alternative to DocuSign
> Read more about our design culture here:
>
> [https://documenso.com/blog/design-system](https://documenso.com/blog/design-system)
At Documenso, we aim to be a design-driven company.
We believe that design isn't just about how things look, but also how they work. We want to make sure that the product is easy to use and intuitive. We also want to ensure that the website, desktop and mobile apps are consistent and look and feel like they belong together.
To achieve this, we've created Documenso's design system containing tokens, primitives, and components, screens, and brand assets.
We're open-sourcing this design system so you can see how we build the product and think about design as a whole.
## Check out the design system
<iframe
src="https://documen.so/design-system-embed"
className="aspect-square w-full border-none"
frameBorder="0"
/>
## Remix and Share the community version on Figma
<a href="https://documen.so/design" target="_blank">
<figure>
<MdxNextImage
src="/blog/designsystem.png"
width="1260"
height="630"
alt="Documenso's Design System"
/>
<figcaption className="text-center">
Documenso's Design System ✨
</figcaption>
</figure>
</a>

View File

@ -0,0 +1,256 @@
---
title: Privacy Policy
---
# Privacy Policy
Effective date: 05/28/2023
### 1\. Introduction
Welcome to **Documenso Inc.**
Documenso Inc. (“us”, “we”, or “our”) operates [https://documenso.com](https://documenso.com) (hereinafter referred to as “ **Service**”).
Our Privacy Policy governs your visit to [https://documenso.com](https://documenso.com), and explains how we collect, safeguard and disclose information that results from your use of our Service.
We use your data to provide and improve Service. By using Service, you agree to the collection and use of information in accordance with this policy. Unless otherwise defined in this Privacy Policy, the terms used in this Privacy Policy have the same meanings as in our Terms and Conditions.
Our Terms and Conditions (“**Terms**”) govern all use of our Service and together with the Privacy Policy constitutes your agreement with us (“ **agreement**”).
### 2\. Definitions
**SERVICE** means the https://documenso.com website operated by Documenso Inc.
**PERSONAL DATA** means data about a living individual who can be identified from those data (or from those and other information either in our possession or likely to come into our possession).
**USAGE DATA** is data collected automatically either generated by the use of Service or from Service infrastructure itself (for example, the duration of a page visit).
**COOKIES** are small files stored on your device (computer or mobile device).
**DATA CONTROLLER** means a natural or legal person who (either alone or jointly or in common with other persons) determines the purposes for which and the manner in which any personal data are, or are to be, processed. For the purpose of this Privacy Policy, we are a Data Controller of your data.
**DATA PROCESSORS (OR SERVICE PROVIDERS)** means any natural or legal person who processes the data on behalf of the Data Controller. We may use the services of various Service Providers in order to process your data more effectively.
**DATA SUBJECT** is any living individual who is the subject of Personal Data.
**THE USER** is the individual using our Service. The User corresponds to the Data Subject, who is the subject of Personal Data.
### 3\. Information Collection and Use
We collect several different types of information for various purposes to provide and improve our Service to you.
### 4\. Types of Data Collected
**Personal Data**
While using our Service, we may ask you to provide us with certain personally identifiable information that can be used to contact or identify you (“**Personal Data**”). Personally identifiable information may include, but is not limited to:
1. Email address
2. First name and last name
3. Cookies and Usage Data
We may use your Personal Data to contact you with newsletters, marketing or promotional materials and other information that may be of interest to you. You may opt out of receiving any, or all, of these communications from us by following the unsubscribe link.
**Usage Data**
We may also collect information that your browser sends whenever you visit our Service or when you access Service by or through a mobile device (“**Usage Data**”).
This Usage Data may include information such as your computer's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that you visit, the time and date of your visit, the time spent on those pages, unique device identifiers and other diagnostic data.
When you access Service with a mobile device, this Usage Data may include information such as the type of mobile device you use, your mobile device unique ID, the IP address of your mobile device, your mobile operating system, the type of mobile Internet browser you use, unique device identifiers and other diagnostic data.
**Tracking Cookies Data**
We use cookies and similar tracking technologies to track the activity on our Service and we hold certain information.
Cookies are files with a small amount of data which may include an anonymous unique identifier. Cookies are sent to your browser from a website and stored on your device. Other tracking technologies are also used such as beacons, tags and scripts to collect and track information and to improve and analyze our Service.
You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Service.
Examples of Cookies we use:
1. **Session Cookies:** We use Session Cookies to operate our Service.
2. **Preference Cookies:** We use Preference Cookies to remember your preferences and various settings.
3. **Security Cookies:** We use Security Cookies for security purposes.
4. **Advertising Cookies:** Advertising Cookies are used to serve you with advertisements that may be relevant to you and your interests.
### 5\. Use of Data
Documenso Inc. uses the collected data for various purposes:
1. to provide and maintain our Service;
2. to notify you about changes to our Service;
3. to allow you to participate in interactive features of our Service when you choose to do so;
4. to provide customer support;
5. to gather analysis or valuable information so that we can improve our Service;
6. to monitor the usage of our Service;
7. to detect, prevent and address technical issues;
8. to fulfill any other purpose for which you provide it;
9. to carry out our obligations and enforce our rights arising from any contracts entered into between you and us, including for billing and collection;
10. to provide you with notices about your account and/or subscription, including expiration and renewal notices, email-instructions, etc.;
11. to provide you with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless you have opted not to receive such information;
12. in any other way we may describe when you provide the information;
13. for any other purpose with your consent.
### 6\. Retention of Data
We will retain your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.
We will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period, except when this data is used to strengthen the security or to improve the functionality of our Service, or we are legally obligated to retain this data for longer time periods.
### 7\. Transfer of Data
Your information, including Personal Data, may be transferred to and maintained on computers located outside of your state, province, country or other governmental jurisdiction where the data protection laws may differ from those of your jurisdiction.
If you are located outside United States and choose to provide information to us, please note that we transfer the data, including Personal Data, to United States and process it there.
Your consent to this Privacy Policy followed by your submission of such information represents your agreement to that transfer.
Documenso Inc. will take all the steps reasonably necessary to ensure that your data is treated securely and in accordance with this Privacy Policy and no transfer of your Personal Data will take place to an organisation or a country unless there are adequate controls in place including the security of your data and other personal information.
### 8\. Disclosure of Data
We may disclose personal information that we collect, or you provide:
1. **Disclosure for Law Enforcement.**
2. Under certain circumstances, we may be required to disclose your Personal Data if required to do so by law or in response to valid requests by public authorities.
3. **Business Transaction.**
4. If we or our subsidiaries are involved in a merger, acquisition or asset sale, your Personal Data may be transferred.
5. **Other cases. We may disclose your information also:**
1. to our subsidiaries and affiliates;
2. to contractors, service providers, and other third parties we use to support our business;
3. to fulfill the purpose for which you provide it;
### 9\. Security of Data
The security of your data is important to us but remember that no method of transmission over the Internet or method of electronic storage is 100% secure. While we strive to use commercially acceptable means to protect your Personal Data, we cannot guarantee its absolute security.
### 10\. Your Data Protection Rights Under General Data Protection Regulation (GDPR)
If you are a resident of the European Union (EU) and European Economic Area (EEA), you have certain data protection rights, covered by GDPR. See more at [https://eur-lex.europa.eu/eli/reg/2016/679/oj](https://eur-lex.europa.eu/eli/reg/2016/679/oj)
We aim to take reasonable steps to allow you to correct, amend, delete, or limit the use of your Personal Data.
If you wish to be informed what Personal Data we hold about you and if you want it to be removed from our systems, please email us at hi@documenso.com.
In certain circumstances, you have the following data protection rights:
1. the right to access, update or to delete the information we have on you;
2. the right of rectification. You have the right to have your information rectified if that information is inaccurate or incomplete;
3. the right to object. You have the right to object to our processing of your Personal Data;
4. the right of restriction. You have the right to request that we restrict the processing of your personal information;
5. the right to data portability. You have the right to be provided with a copy of your Personal Data in a structured, machine-readable and commonly used format;
6. the right to withdraw consent. You also have the right to withdraw your consent at any time where we rely on your consent to process your personal information;
Please note that we may ask you to verify your identity before responding to such requests. Please note, we may not able to provide Service without some necessary data.
You have the right to complain to a Data Protection Authority about our collection and use of your Personal Data. For more information, please contact your local data protection authority in the European Economic Area (EEA).
### 11\. Your Data Protection Rights under the California Privacy Protection Act (CalOPPA)
CalOPPA is the first state law in the nation to require commercial websites and online services to post a privacy policy. The laws reach stretches well beyond California to require a person or company in the United States (and conceivable the world) that operates websites collecting personally identifiable information from California consumers to post a conspicuous privacy policy on its website stating exactly the information being collected and those individuals with whom it is being shared, and to comply with this policy. See more at: [https://consumercal.org/about-cfc/cfc-education-foundation/california-online-privacy-protection-act-caloppa-3/](https://consumercal.org/about-cfc/cfc-education-foundation/california-online-privacy-protection-act-caloppa-3/)
According to CalOPPA we agree to the following:
1. users can visit our site anonymously;
2. our Privacy Policy link includes the word “Privacy”, and can easily be found on the page specified above on the home page of our website;
3. users will be notified of any privacy policy changes on our Privacy Policy Page;
4. users are able to change their personal information by emailing us at hi@documenso.com.
Our Policy on “Do Not Track” Signals:
We honor Do Not Track signals and do not track, plant cookies, or use advertising when a Do Not Track browser mechanism is in place. Do Not Track is a preference you can set in your web browser to inform websites that you do not want to be tracked.
You can enable or disable Do Not Track by visiting the Preferences or Settings page of your web browser.
### 12\. Your Data Protection Rights under the California Consumer Privacy Act (CCPA)
If you are a California resident, you are entitled to learn what data we collect about you, ask to delete your data and not to sell (share) it. To exercise your data protection rights, you can make certain requests and ask us:
1. **What personal information we have about you**. If you make this request, we will return to you:
1. The categories of personal information we have collected about you.
2. The categories of sources from which we collect your personal information.
3. The business or commercial purpose for collecting or selling your personal information.
4. The categories of third parties with whom we share personal information.
5. The specific pieces of personal information we have collected about you.
6. A list of categories of personal information that we have sold, along with the category of any other company we sold it to. If we have not sold your personal information, we will inform you of that fact.
7. A list of categories of personal information that we have disclosed for a business purpose, along with the category of any other company we shared it with.
Please note, you are entitled to ask us to provide you with this information up to two times in a rolling twelve-month period. When you make this request, the information provided may be limited to the personal information we collected about you in the previous 12 months.
2. **To delete your personal information**. If you make this request, we will delete the personal information we hold about you as of the date of your request from our records and direct any service providers to do the same. In some cases, deletion may be accomplished through de-identification of the information. If you choose to delete your personal information, you may not be able to use certain functions that require your personal information to operate.
3. **To stop selling your personal information**. We don't sell or rent your personal information to any third parties for any purpose. You are the only owner of your Personal Data and can request disclosure or deletion at any time.
Please note, if you ask us to delete or stop selling your data, it may impact your experience with us, and you may not be able to participate in certain programs or membership services which require the usage of your personal information to function. But in no circumstances, we will discriminate against you for exercising your rights.
To exercise your California data protection rights described above, please send your request(s) by one of the following means:
By email: hi@documenso.com
Your data protection rights, described above, are covered by the CCPA, short for the California Consumer Privacy Act. To find out more, visit the official [California Legislative Information website](https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=201720180AB375). The CCPA took effect on 01/01/2020.
### 13\. Service Providers
We may employ third party companies and individuals to facilitate our Service (“ **Service Providers**”), provide Service on our behalf, perform Service-related services or assist us in analysing how our Service is used.
These third parties have access to your Personal Data only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose.
### 14\. Analytics
We may use third-party Service Providers to monitor and analyze the use of our Service.
**Plausible Analytics**
Plausible Analytics is an analytics service provided by Conva Ventures Inc. You can find their Privacy Policy here: [https://plausible.io/privacy](https://plausible.io/privacy)
### 15\. CI/CD tools
We may use third-party Service Providers to automate the development process of our Service.
**GitHub**
GitHub is provided by GitHub, Inc.
GitHub is a development platform to host and review code, manage projects, and build software.
For more information on what data GitHub collects for what purpose and how the protection of the data is ensured, please visit GitHub Privacy Policy page: [https://help.github.com/en/articles/github-privacy-statement](https://help.github.com/en/articles/github-privacy-statement) .
### 16\. Payments
We may provide paid products and/or services within Service. In that case, we use third-party services for payment processing (e.g. payment processors).
We will not store or collect your payment card details. That information is provided directly to our third-party payment processors whose use of your personal information is governed by their Privacy Policy. These payment processors adhere to the standards set by PCI-DSS as managed by the PCI Security Standards Council, which is a joint effort of brands like Visa, Mastercard, American Express and Discover. PCI-DSS requirements help ensure the secure handling of payment information.
The payment processors we work with are:
**Stripe:**
Their Privacy Policy can be viewed at: [https://stripe.com/us/privacy](https://stripe.com/us/privacy)
### 17\. Links to Other Sites
Our Service may contain links to other sites that are not operated by us. If you click a third party link, you will be directed to that third party's site. We strongly advise you to review the Privacy Policy of every site you visit.
We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.
### 18\. Children's Privacy
Our Services are not intended for use by children under the age of 18 (“ **Child**” or “**Children**”).
We do not knowingly collect personally identifiable information from Children under 18. If you become aware that a Child has provided us with Personal Data, please contact us. If we become aware that we have collected Personal Data from Children without verification of parental consent, we take steps to remove that information from our servers.
### 19\. Changes to This Privacy Policy
We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page.
We will let you know via email and/or a prominent notice on our Service, prior to the change becoming effective and update “effective date” at the top of this Privacy Policy.
You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.
### 20\. Contact Us
If you have any questions about this Privacy Policy, please contact us:
By email: hi@documenso.com.

View File

@ -0,0 +1,33 @@
import { defineDocumentType, makeSource } from 'contentlayer/source-files';
export const BlogPost = defineDocumentType(() => ({
name: 'BlogPost',
filePathPattern: `blog/**/*.mdx`,
contentType: 'mdx',
fields: {
title: { type: 'string', required: true },
description: { type: 'string', required: true },
date: { type: 'date', required: true },
tags: { type: 'list', of: { type: 'string' }, required: false, default: [] },
authorName: { type: 'string', required: true },
authorImage: { type: 'string', required: false },
authorRole: { type: 'string', required: true },
},
computedFields: {
href: { type: 'string', resolve: (post) => `/${post._raw.flattenedPath}` },
},
}));
export const GenericPage = defineDocumentType(() => ({
name: 'GenericPage',
filePathPattern: '**/*.mdx',
contentType: 'mdx',
fields: {
title: { type: 'string', required: true },
},
computedFields: {
href: { type: 'string', resolve: (post) => `/${post._raw.flattenedPath}` },
},
}));
export default makeSource({ contentDirPath: 'content', documentTypes: [BlogPost, GenericPage] });

6
apps/marketing/next-env.d.ts vendored Normal file
View File

@ -0,0 +1,6 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
/// <reference types="next/navigation-types/compat/navigation" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View File

@ -0,0 +1,97 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const fs = require('fs');
const path = require('path');
const { withContentlayer } = require('next-contentlayer');
const ENV_FILES = ['.env', '.env.local', `.env.${process.env.NODE_ENV || 'development'}`];
ENV_FILES.forEach((file) => {
require('dotenv').config({
path: path.join(__dirname, `../../${file}`),
});
});
// !: This is a temp hack to get caveat working without placing it back in the public directory.
// !: By inlining this at build time we should be able to sign faster.
const FONT_CAVEAT_BYTES = fs.readFileSync(
path.join(__dirname, '../../packages/assets/fonts/caveat.ttf'),
);
/** @type {import('next').NextConfig} */
const config = {
experimental: {
outputFileTracingRoot: path.join(__dirname, '../../'),
serverActions: {
bodySizeLimit: '50mb',
},
},
reactStrictMode: true,
transpilePackages: [
'@documenso/assets',
'@documenso/lib',
'@documenso/tailwind-config',
'@documenso/trpc',
'@documenso/ui',
],
env: {
NEXT_PUBLIC_PROJECT: 'marketing',
FONT_CAVEAT_URI: `data:font/ttf;base64,${FONT_CAVEAT_BYTES.toString('base64')}`,
},
modularizeImports: {
'lucide-react': {
transform: 'lucide-react/dist/esm/icons/{{ kebabCase member }}',
},
},
webpack: (config, { isServer }) => {
// fixes: Module not found: Cant resolve ../build/Release/canvas.node
if (isServer) {
config.resolve.alias.canvas = false;
}
return config;
},
async headers() {
return [
{
source: '/:path*',
headers: [
{
key: 'x-dns-prefetch-control',
value: 'on',
},
{
key: 'strict-transport-security',
value: 'max-age=31536000; includeSubDomains; preload',
},
{
key: 'x-frame-options',
value: 'SAMEORIGIN',
},
{
key: 'x-content-type-options',
value: 'nosniff',
},
{
key: 'referrer-policy',
value: 'strict-origin-when-cross-origin',
},
{
key: 'permissions-policy',
value:
'accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()',
},
],
},
];
},
async rewrites() {
return [
{
source: '/ingest/:path*',
destination: 'https://eu.posthog.com/:path*',
},
];
},
};
module.exports = withContentlayer(config);

View File

@ -0,0 +1,56 @@
{
"name": "@documenso/marketing",
"version": "1.2.3",
"private": true,
"license": "AGPL-3.0",
"scripts": {
"dev": "next dev -p 3001",
"build": "next build",
"start": "next start -p 3001",
"lint": "next lint",
"lint:fix": "next lint --fix",
"clean": "rimraf .next && rimraf node_modules",
"copy:pdfjs": "node ../../scripts/copy-pdfjs.cjs"
},
"dependencies": {
"@documenso/assets": "*",
"@documenso/lib": "*",
"@documenso/tailwind-config": "*",
"@documenso/trpc": "*",
"@documenso/ui": "*",
"@hookform/resolvers": "^3.1.0",
"contentlayer": "^0.3.4",
"framer-motion": "^10.12.8",
"lucide-react": "^0.279.0",
"luxon": "^3.4.0",
"micro": "^10.0.1",
"next": "14.0.3",
"next-auth": "4.24.5",
"next-contentlayer": "^0.3.4",
"next-plausible": "^3.10.1",
"perfect-freehand": "^1.2.0",
"posthog-js": "^1.77.3",
"react": "18.2.0",
"react-confetti": "^6.1.0",
"react-dom": "18.2.0",
"react-hook-form": "^7.43.9",
"react-icons": "^4.11.0",
"recharts": "^2.7.2",
"sharp": "0.33.1",
"typescript": "5.2.2",
"zod": "^3.22.4"
},
"devDependencies": {
"@types/node": "20.1.0",
"@types/react": "18.2.18",
"@types/react-dom": "18.2.7"
},
"overrides": {
"next-auth": {
"next": "$next"
},
"next-contentlayer": {
"next": "$next"
}
}
}

View File

@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};

13
apps/marketing/process-env.d.ts vendored Normal file
View File

@ -0,0 +1,13 @@
declare namespace NodeJS {
export interface ProcessEnv {
NEXT_PUBLIC_WEBAPP_URL?: string;
NEXT_PUBLIC_MARKETING_URL?: string;
NEXT_PRIVATE_DATABASE_URL: string;
NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_MONTHLY_PRICE_ID: string;
NEXT_PRIVATE_STRIPE_API_KEY: string;
NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET: string;
}
}

View File

@ -0,0 +1,7 @@
# General Issues
Contact: https://github.com/documenso/documenso/issues/new?assignees=&labels=bug&projects=&template=bug-report.yml
# Report critical issues privately to let us take appropriate action before publishing.
Contact: mailto:security@documenso.com
Preferred-Languages: en
Canonical: https://documenso.com/.well-known/security.txt

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1007 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 862 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Some files were not shown because too many files have changed in this diff Show More