Compare commits

..

764 Commits

Author SHA1 Message Date
Adithya Krishna
86788f4248 feat: added password validation (#469)
This PR Fixes #464
2024-01-30 11:42:52 +11:00
hallidayo
76c203aae6 feat: dateformat and timezone customization (#506) 2023-12-27 10:50:40 +11:00
18feb06
bb5611ad40 feat: added undo button while drawing signature (#480) 2023-12-16 13:20:59 +11:00
Aditya Deshlahre
b152dbe25e chore: add lint-staged task for dependency changes (#548) 2023-12-09 11:30:15 +11:00
Lucas Smith
3db67c1212 chore: use minio as s3 storage for document during development (#588) 2023-12-08 20:49:08 +11:00
Lucas Smith
dc8224ee9f fix: update container name 2023-12-08 20:48:25 +11:00
Nafees Nazik
8d0e815b0f feat: add two factor auth (#643)
Add two factor authentication for users who wish to enhance the security of their accounts.
2023-12-01 11:22:16 +11:00
Catalin Pit
65cc26fd02 feat: email verification for registration (#599) 2023-11-21 15:42:29 +11:00
Adithya Krishna
9b9b8a85e7 feat: add dark mode toggle (#529) 2023-11-17 16:58:27 +11:00
Ephraim Atta-Duncan
852fc7ed7a chore: use database as default for example env 2023-11-16 07:59:28 +00:00
Nafees Nazik
51938293f1 feat: enable resend email menu (#496) 2023-11-16 13:05:45 +11:00
Ephraim Atta-Duncan
34527c1842 fix: fetch the correct number of open issues using the github search api (#495) 2023-11-15 18:16:43 +11:00
Nafees Nazik
e3b589516b feat: cache getServerComponentSession calls (#644) 2023-11-14 20:37:39 +11:00
SAHIL SIRAJALI KAZI
1dd3a398d8 fix: safari pdf overflow issue fixed (#466) 2023-11-14 20:24:33 +11:00
Nafees Nazik
587433fcd5 feat: limit document upload size (#347) 2023-11-14 20:07:55 +11:00
Nafees Nazik
c2d7954467 chore: add some eslint rules (#344) 2023-11-14 20:01:45 +11:00
Ephraim Atta-Duncan
1c3cdf3165 feat: add dialog to confirm signing (#342) 2023-11-14 16:56:43 +11:00
Nafees Nazik
d2a6cbd681 feat: use nextjs.js standalone output for improvised docker image (#338) 2023-11-10 17:41:49 +11:00
Nafees Nazik
dc3d85f1a2 feat: add command menu and keyboard shortcuts (#337) 2023-11-08 22:36:12 +11:00
sean-brydon
b4f4f4fc72 feat: duplicate document (#633) 2023-11-08 20:25:44 +11:00
Timur Ercan
24440c5cc4 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-06 10:20:35 +01:00
Thomas Kaul
c20397206a fix: typo in README.md (#630) 2023-11-06 12:18:24 +11:00
Mythie
d686dcfa90 chore: include total and new user charts 2023-11-06 11:57:38 +11:00
Mythie
dcee4eff58 fix: add white background for og images 2023-11-05 12:49:37 +11:00
Mythie
48d7afe9f4 fix: add white background for og images 2023-11-05 12:49:04 +11:00
Mythie
3009088b0e feat: show monthly new users 2023-11-05 12:48:05 +11:00
David Nguyen
db01b1afdd fix: correctly sign SPM documents (#627)
- Sign and email correct SPM document
- Optimise signing SPM documents
2023-11-04 14:39:33 +11:00
Mythie
53a323ccf8 fix: dont use custom documentData for single player mode 2023-11-04 13:27:09 +11:00
Mythie
76c8dfa907 fix: updates from error logs 2023-11-04 13:27:09 +11:00
Adithya Krishna
16af21ba25 fix: hiding of action buttons (#460)
* chore: fix hiding of action buttons
2023-11-03 16:39:43 +11:00
Mythie
57ad16cc10 feat: add completed at timestamp 2023-11-03 15:48:40 +11:00
Anik Dhabal Babu
edfc67c050 fix: small typo error (#584) 2023-11-03 12:58:09 +11:00
Abhinav
1f953457db fix: days filter working (#623) 2023-11-03 12:34:11 +11:00
David Nguyen
b5ec13eba1 chore: update bug report template (#580) 2023-11-03 11:45:15 +11:00
Timur Ercan
bf87800fbf Update README.md 2023-11-02 21:20:49 +01:00
Anupam
f078dd2f6c fix: added the share btn in the UI and prewarm fetch (#615) 2023-11-02 13:38:34 +11:00
Catalin Pit
1e4f1ad4ae fix: seal document for single player mode (#617) 2023-11-02 12:47:19 +11:00
18feb06
5bae42cf0f feat: improving incorrect default signature behaviour #594 (#600) 2023-11-01 19:39:21 +11:00
Anik Dhabal Babu
ee003e45b4 fix: improve the early adopters plan input section (#609) 2023-11-01 09:54:38 +11:00
Ephraim Atta-Duncan
2f718edf9b docs: re-add launch week 5 blogpost (#614) 2023-11-01 09:51:01 +11:00
vimode
09b956825f fix: typos and grammatical errors in readme (#616) 2023-11-01 09:50:35 +11:00
Sachin M Mane
b576d6cede 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-10-31 08:54:51 +02:00
18feb06
dbff10e3de fix: page-not-found at share page for document signed in single-player-mode #605 (#606) 2023-10-31 08:54:16 +02:00
Mythie
34e707b925 fix: invalid url with cloudfront 2023-10-31 12:50:47 +11:00
Mythie
dba4c31ce3 feat: support cloudfront presign 2023-10-31 12:19:16 +11:00
Mythie
9f5ee0d9ac feat: add database indexes 2023-10-30 16:58:51 +11:00
Mythie
64d6923e05 chore: remove malfunction mania and feat/refresh from readme 2023-10-30 16:53:14 +11:00
Mythie
3c6196f49c feat: add user schema timestamps 2023-10-28 20:57:26 +11:00
Shivam Bhatnagar
7ee9cb3f93 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-10-27 13:05:10 +03:00
Lucas Smith
f05cc2e652 Merge pull request #591 from olivierlambert/feat/refresh
feat: update the README for the self-hosting users
2023-10-27 15:59:22 +11:00
Lucas Smith
a047e230b9 Merge pull request #595 from adithyaakrishna/feat/slack2Discord
chore: updated slack to discord links
2023-10-27 15:58:24 +11:00
Lucas Smith
c98a860140 fix: add back slack support 2023-10-27 15:57:31 +11:00
Lucas Smith
f7a64eb97b Merge pull request #598 from documenso/chore/next-14
chore: upgrade to next 14.0.0
2023-10-27 15:52:56 +11:00
Mythie
dc5a1819f1 chore: upgrade to next 14.0.0 2023-10-27 15:14:04 +11:00
Adithya Krishna
b75e50065e chore: updated slack to discord links
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-10-26 11:37:10 +05:30
Mythie
ef8fcd4ea9 fix: missing content updates 2023-10-26 16:58:42 +11:00
Mythie
bf3747cd7b fix: change sign in links 2023-10-26 16:40:25 +11:00
Mythie
3ff8a99250 fix: update early adopter error log 2023-10-26 14:26:10 +11:00
Mythie
fb64496c7d fix: update stripe metadata for early adopters 2023-10-26 13:21:31 +11:00
Mythie
407fa0047c fix: update limits handler 2023-10-26 12:26:29 +11:00
Mythie
a2902ee7c0 fix: attach document to completed email 2023-10-25 22:34:51 +11:00
Mythie
7599b84833 fix: limit recipients 2023-10-25 22:31:31 +11:00
Mythie
769f543be1 fix: improve claim plan flow 2023-10-25 22:29:51 +11:00
Mythie
d6447ffa82 fix: return response for failed invoices 2023-10-25 13:29:00 +11:00
Mythie
f29ac73085 fix: update customer handling for checkouts 2023-10-25 13:13:57 +11:00
Olivier Lambert
cb61898764 feat: update the README for the self-hosting users
Signed-off-by: Olivier Lambert <olivier.lambert@vates.fr>
2023-10-23 15:44:28 +02:00
Ephraim Atta-Duncan
1d632200d7 chore: use minio as s3 storage for document during development 2023-10-23 00:55:40 +00:00
Mythie
fd8f6da2c6 fix: update singleplayer add signature to card 2023-10-22 12:40:09 +11:00
Mythie
0b50176178 fix: limits no longer cache during session changes 2023-10-22 11:18:00 +11:00
Mythie
c02640e104 fix: optimise pdf viewer rerendering 2023-10-21 13:08:29 +11:00
Mythie
091960f269 fix: unbreak pdf viewer 2023-10-20 20:14:10 +11:00
Mythie
594f3ec16a fix: move getFile to client side 2023-10-20 13:42:10 +11:00
Mythie
a89da06842 fix: update webhook handler 2023-10-20 12:14:39 +11:00
Mythie
db1d11309f fix: update webhook handler 2023-10-20 12:05:18 +11:00
Adithya Krishna
616cf1c287 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-10-19 21:24:05 +11:00
Udit Takkar
ba665edb1e fix: UI fixes and improvements (#559)
* chore: add cursor pointer

* fix: tooltip color

* chore: add tooltip

* fix: admin pages in mobile
2023-10-19 21:00:36 +11:00
Catalin Pit
1c34eddd10 chore: add prisma studio command (#576)
Co-authored-by: pit <pit@pits-MacBook-Pro.local>
2023-10-19 09:19:46 +03:00
Mythie
1fbf6ed4ba fix: add mode to checkout session 2023-10-19 12:27:01 +11:00
Aditya Deshlahre
1d6f7f9e37 fix(bug): name field can be updated with spaces #555 (#558) 2023-10-19 12:12:56 +11:00
Mythie
e3c3ec7825 fix: downgrade react-pdf 2023-10-18 23:51:16 +11:00
Lucas Smith
08d176c803 Merge pull request #575 from 18feb06/fix-error-invalid-url-on-main-page-on-self-host-#573
fix: error invalid url on main page on self host #573
2023-10-18 23:20:22 +11:00
Mythie
b952ed9035 fix: support multi env 2023-10-18 23:19:29 +11:00
Nafees Nazik
43062dda12 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-10-18 22:33:02 +11:00
18feb06
1b53ff9c2d Merge branch 'documenso:feat/refresh' into fix-error-invalid-url-on-main-page-on-self-host-#573 2023-10-18 16:30:57 +05:00
Tameem Asim
acd3e6d613 fix: invalid url on main page in self host 2023-10-18 16:28:57 +05:00
Catalin Pit
e33b02df56 fix: truncate long file name in admin dashboard (#572)
Co-authored-by: pit <pit@192-168-0-136.rdsnet.ro>
2023-10-18 08:58:35 +03:00
18feb06
2c6849ca76 fix: email requesting signature shows "completed document" in preview… (#514) 2023-10-18 15:32:39 +11:00
Abhinav-Developer-23
9434f9e2e4 fix: support mailto link fix (#571) 2023-10-17 17:27:02 +11:00
Lucas Smith
f6daef7333 Merge pull request #566 from documenso/feat/plan-limits
feat: plan limits
2023-10-17 14:30:18 +11:00
Mythie
c3df8d4c2a fix: add redirects for v0.9 requests 2023-10-17 13:50:54 +11:00
David Nguyen
4b09693862 feat: add safari clipboard copy support (#486) 2023-10-17 12:40:36 +11:00
Catalin Pit
8d2e50d1fe fix: user avatar on admin documents table (#570)
Co-authored-by: pit <pit@pits-MacBook-Pro.local>
2023-10-16 17:36:12 +03:00
Abhinav-Developer-23
bfc749f30b fix: fix for Accepting signatures or text fields with white space only #551 (#557) 2023-10-16 20:08:45 +11:00
Udit Takkar
e0d4255700 fix: enable dragging fields (#565) 2023-10-16 19:50:28 +11:00
Mythie
6ba4ff1c17 fix: build errors 2023-10-16 17:38:41 +11:00
Mythie
652af26754 fix: exports on next page 2023-10-15 20:32:36 +11:00
Mythie
093488a67c feat: plan limits 2023-10-15 20:26:32 +11:00
Mythie
0d026f3476 fix: filter out inactive products 2023-10-14 13:02:36 +11:00
Lucas Smith
3e89ec1afc Merge pull request #384 from documenso/feat/stripe-free-tier
feat: add Stripe free tier subscription
2023-10-14 12:22:31 +11:00
Lucas Smith
df0d18fc81 Merge pull request #502 from documenso/feat/add-e2e-testing-playwright
feat: add playwright
2023-10-14 12:21:18 +11:00
Catalin Pit
dd25c355ff Merge pull request #396 from documenso/feat/admin-ui-manage-instance 2023-10-13 18:18:24 +03:00
Timur Ercan
6f851833b2 Merge branch 'feat/refresh' into feat/admin-ui-manage-instance 2023-10-13 16:44:44 +02:00
Lucas Smith
442b089d7f fix: style updates 2023-10-14 00:20:11 +11:00
Lucas Smith
1c58b21383 Merge branch 'feat/refresh' into feat/add-e2e-testing-playwright 2023-10-14 00:13:41 +11:00
Lucas Smith
a6e13faf7b fix: quick tweaks 2023-10-13 13:08:39 +00:00
Mythie
ede9eb052d fix: named exports 2023-10-13 23:56:11 +11:00
Lucas Smith
fab006078c Merge pull request #554 from documenso/fix/cascade-delete-share-links
fix: add cascade delete for share links
2023-10-13 23:41:13 +11:00
Mythie
4d5275f915 fix: create custom pricing table 2023-10-13 23:33:40 +11:00
pit
901e83af58 chore: implemented feedback 2023-10-13 12:16:07 +03:00
pit
e1bee1591f chore: implemented feedback 2023-10-13 11:48:52 +03:00
David Nguyen
a354c23231 feat: add document share button to marketing (#422) 2023-10-13 14:14:13 +11:00
David Nguyen
f728dd13c5 fix: add cascade delete for share links 2023-10-13 12:45:39 +11:00
pit
7927b87259 chore: polished code 2023-10-12 17:07:54 +03:00
pit
55301a9d53 chore: revert back env file name 2023-10-12 12:49:39 +03:00
pit
c0dd57a4d2 chore: implement feedback 2023-10-12 12:19:23 +03:00
pit
cc80773402 chore: implement feedback 2023-10-12 11:44:16 +03:00
David Nguyen
c803d2c4ba feat: single-player-mode-polish (#435) 2023-10-12 18:10:52 +11:00
Udit Takkar
eb5f5f7a90 fix: background color of signature page (#487) 2023-10-12 14:08:26 +11:00
Abhinav-Developer-23
2ea5ff2c94 fix: bypass signature fix (#536) (#547) 2023-10-12 11:33:01 +11:00
pit
bc9a6fa50a chore: implemented feedback 2023-10-11 16:20:04 +03:00
pit
e02ab7d256 chore: implement pr feedback 2023-10-11 12:32:33 +03:00
Lucas Smith
01e6367b72 Merge branch 'feat/refresh' into feat/stripe-free-tier 2023-10-11 17:24:01 +11:00
Lucas Smith
565602f8e1 Merge pull request #530 from anikdhabal/issue#518
fix: Add gitpod configuration
2023-10-11 16:56:59 +11:00
pit
9e0d281883 chore: feedback fix 2023-10-10 16:52:58 +03:00
pit
67629dd735 chore: fix eslint issues 2023-10-10 13:57:07 +03:00
pit
2a89278c7b chore: merge feat/refresh 2023-10-10 13:53:22 +03:00
pit
8f4ba6eb8a chore: self-review 2023-10-10 13:50:50 +03:00
Catalin Pit
8dfcfb99e0 Merge branch 'feat/refresh' into feat/add-e2e-testing-playwright 2023-10-10 11:49:00 +03:00
pit
1299aa51ee chore: move fetching in data-table-users 2023-10-10 11:44:16 +03:00
Nafees Nazik
e0271cace3 feat: delete draft document (#491) 2023-10-10 13:55:58 +11:00
pit
a11440a7f3 chore: tidy up 2023-10-09 13:30:28 +03:00
Anik Dhabal Babu
cc8c4b8297 Merge branch 'feat/refresh' into issue#518 2023-10-09 15:21:33 +05:30
Mythie
a287aab4f4 chore: disable dependabot for now 2023-10-09 20:35:19 +11:00
pit
4c518df60d chore: remove generic data table 2023-10-09 12:02:55 +03:00
pit
d4ae733e9e chore: add transition and check for empty users array 2023-10-09 11:59:08 +03:00
Lucas Smith
b5ed703553 Merge pull request #545 from anikdhabal/fix_dotenv-cli
fix: mismatch the version of dotenv-cli
2023-10-09 19:49:07 +11:00
Anik Dhabal Babu
f49880125a fix: mismatch the version of dotenv-cli 2023-10-09 08:41:13 +00:00
Anik Dhabal Babu
8380c357d9 Merge branch 'feat/refresh' into issue#518 2023-10-09 10:03:58 +05:30
Anik Dhabal Babu
4e010c5624 fix : add gittpod configuration 2023-10-09 09:58:12 +05:30
hallidayo
f53cdbace9 fix: frequency focus ring (#533) 2023-10-09 12:04:01 +11:00
Lucas Smith
b4d04e2ce9 Merge pull request #516 from adityadeshlahre/feat/refresh
fix(script): [fix : DOC-36] Use dotenv for Prisma package scripts #523
2023-10-09 10:12:08 +11:00
Mythie
2470aeee1f fix: update script, docs and devcontainer 2023-10-08 21:51:15 +11:00
Lucas Smith
fd07b47325 Merge pull request #526 from mittalsam98/fix/507-signature-modal-center-align
fix: non responsiveness of Add your sign modal
2023-10-07 22:31:18 +11:00
Lucas Smith
9257a05831 Merge pull request #527 from documenso/docs/render-deploy
docs: add render one click deploy for refresh
2023-10-07 22:25:42 +11:00
Ephraim Atta-Duncan
1faa6f2944 Merge pull request #528 from documenso/chore/github-templates 2023-10-07 02:35:35 +00:00
Ephraim Atta-Duncan
5584bbe9ca Merge branch 'feat/refresh' into chore/github-templates 2023-10-07 02:07:54 +00:00
Anik Dhabal Babu
cc65537ea3 fix: Add gitpod configuration 2023-10-06 23:03:13 +05:30
pit
5f14f87406 feat: filter users by name or email 2023-10-06 15:48:05 +03:00
Anik Dhabal Babu
04a80b7c03 fix: add gitpod configuration 2023-10-06 11:06:34 +05:30
pit
2b44e54d99 feat: subscriptions and documents page 2023-10-05 18:35:12 +03:00
Anik Dhabal Babu
c71a89d1b7 fix: Add gitpod configuration 2023-10-05 12:21:34 +00:00
Aditya Deshlahre
e2abfd2312 Merge branch 'documenso:feat/refresh' into feat/refresh 2023-10-05 15:46:14 +05:30
Anjy Gupta
49d55227e8 fix: sign up with existing account email bug (#517)
* fix: sign up with existing account email bug
2023-10-05 20:59:43 +11:00
Aditya @ArchLinux
0dadec3b8d fix(script): minor change on scipt 2023-10-05 15:26:53 +05:30
Aditya Deshlahre
e2d8591d66 Merge branch 'documenso:feat/refresh' into feat/refresh 2023-10-05 15:19:42 +05:30
pit
aecc703317 chore: remove this branch 2023-10-05 12:11:17 +03:00
pit
2422c3e7be chore: update e2e tests 2023-10-05 11:56:32 +03:00
pit
4e1994a0c8 chore: update import 2023-10-05 11:46:45 +03:00
pit
a3dce67117 chore: changes 2023-10-05 11:38:51 +03:00
pit
64dcd451e9 chore: add schema location 2023-10-05 10:56:09 +03:00
pit
a85523ecfc chore: change from npm to npx 2023-10-05 10:53:19 +03:00
pit
85b32bb15b chore: install prisma before prisma client 2023-10-05 10:24:03 +03:00
pit
742ad86b10 chore: add remote caching 2023-10-05 10:13:43 +03:00
pit
39ff11a59d chore: use env vars for tests 2023-10-05 09:12:56 +03:00
pit
4f5976479a chore: merge feat/refresh 2023-10-05 08:47:03 +03:00
zahid47
eac7aa84b0 fix: add defaultValue to SignaturePad to persist signatures (#522)
* fix: add defaultValue to SignaturePad to persist signatures
2023-10-05 12:54:52 +11:00
hallidayo
bd941202c8 changed text of stepper (#513) 2023-10-05 11:25:09 +11:00
Ephraim Atta-Duncan
b854f0eedc chore: add pull request templates 2023-10-04 20:05:55 +00:00
Ephraim Atta-Duncan
1814bd4167 chore: add issue template 2023-10-04 20:04:10 +00:00
Ephraim Atta-Duncan
b6f9d70fec docs: add render one click deploy for refresh 2023-10-04 19:58:07 +00:00
Sachin
7c54913bf5 fix: non responsiveness of Add your sign modal 2023-10-05 00:09:30 +05:30
Timur Ercan
e8d5044ac5 chore: typos
typos
2023-10-04 19:12:30 +02:00
Aditya @ArchLinux
ddf097ede3 Merge branch 'adityadeshlahre/documenso' into feat/refresh 2023-10-04 20:05:33 +05:30
Aditya Deshlahre
1bad85e1d6 Merge branch 'documenso:feat/refresh' into feat/refresh 2023-10-04 20:04:48 +05:30
Aditya @ArchLinux
68458b50d2 fix(script): added script envprisma in root package.json
dotenv loads all environment variable before running prisma:migrate-dev script
2023-10-04 20:04:07 +05:30
David Nguyen
e00f28cf87 chore: add code of conduct (#521)
Update contributing guidelines
2023-10-04 18:38:59 +11:00
Aditya Deshlahre
4cc34ec50a Merge branch 'documenso:feat/refresh' into feat/refresh 2023-10-04 13:00:52 +05:30
Udit Takkar
693249916d feat: require old password for password reset (#488)
* feat: require old password for password reset
2023-10-04 15:23:57 +11:00
Anik Dhabal Babu
381a248543 fix: update icons (#468)
* fix: update icons
2023-10-04 13:27:36 +11:00
Aditya @ArchLinux
f637381198 style(ui/ux): added margin to dialogprimitive.content & dialogprimitive.close (m-4) 2023-10-04 01:39:16 +05:30
Timur Ercan
071335cc66 Merge pull request #504 from documenso/chore/team
chore: add new team members
2023-10-03 14:42:26 +02:00
Timur Ercan
4d4b011146 chore: add new team members 2023-10-03 14:04:29 +02:00
pit
d10713b477 ci: trigger ci 2023-10-03 10:21:48 +01:00
pit
2efaabd2c3 ci: trigger ci 2023-10-03 10:20:39 +01:00
pit
7bc1e9dcc8 chore: add env step in gh action 2023-10-03 10:19:54 +01:00
pit
8848df701c chore: added delete function 2023-10-03 10:09:40 +01:00
pit
2e800d0eed chore: removed lint step 2023-10-03 10:01:44 +01:00
pit
70ecc9a4a8 feat: add playwright 2023-10-03 09:53:47 +01:00
Harsh Acharya
97dfacd133 fix: Error in Pricing Page Validation for Signup Now Modal (#497)
* fix: signup modal validation on close
* fix: restore auto focus input
2023-10-03 18:26:33 +11:00
Arjun Bharti
87a5bab734 fix: signature text overflow truncated for longer signature texts (#489) 2023-10-03 16:58:11 +11:00
pit
b5fc6e1aaf feat: manage documents admin ui 2023-10-02 16:55:04 +01:00
pit
87f70fa290 feat: profile page done 2023-10-02 11:38:04 +01:00
Lucas Smith
fa61bb660e Merge pull request #438 from documenso/chore/team
chore: and now his watch has ended
2023-10-01 15:41:52 +11:00
Mythie
83dd079e03 fix: remove unused imports 2023-10-01 15:24:34 +11:00
Lucas Smith
f7933d8a4d Merge pull request #477 from Hallidayo/button-texts
feat: auth button loading texts
2023-10-01 13:42:19 +11:00
Ollie Halliday
4bd0cfd283 capitalise 2023-09-30 17:00:43 +01:00
Ollie Halliday
86f39f3824 text changes on isSubmitting 2023-09-30 16:50:52 +01:00
Ephraim Atta-Duncan
94216f5219 Merge pull request #474 from adithyaakrishna/fix/scripts 2023-09-29 21:56:13 +00:00
Adithya Krishna
a2e6187dae fix: typo in script
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-09-30 01:42:09 +05:30
pit
c2cda0f06e feat: update user functionality 2023-09-29 17:26:37 +01:00
pit
f1bc772985 chore: improve the ui 2023-09-29 17:12:02 +01:00
Lucas Smith
15e3926ce4 Merge pull request #463 from documenso/docs/minor-readme-updatess
docs: readme updates.
2023-09-30 00:48:38 +10:00
Lucas Smith
69738d7ed3 Merge branch 'feat/refresh' into docs/minor-readme-updatess 2023-09-30 00:48:30 +10:00
Mythie
649620c1c9 fix: update compose scripts 2023-09-30 00:47:50 +10:00
Mythie
99df006019 fix: further readme updates 2023-09-30 00:43:45 +10:00
Timur Ercan
be40e28f47 Update README.md 2023-09-29 14:42:26 +02:00
Lucas Smith
8899d82e1b Merge pull request #462 from adithyaakrishna/issue#461
fix: sharp corners of signing card
2023-09-29 18:12:00 +10:00
Mythie
0527641a4f fix: dogfood resend transport 2023-09-29 12:17:41 +10:00
Ephraim Atta-Duncan
54e32af1d4 docs: clearer readme? maybe? 2023-09-28 22:48:02 +00:00
Adithya Krishna
b1645ec09a fix: sharp corners of signing card 2023-09-29 02:01:04 +05:30
Timur Ercan
5b9ce55a6d Merge pull request #457 from documenso/feat-early-adopters
chore: sync
2023-09-28 21:29:09 +02:00
Timur Ercan
833584bd4f Merge branch 'feat/refresh' into feat-early-adopters 2023-09-28 21:28:41 +02:00
Timur Ercan
ca52a22bcd chore: sync 2023-09-28 14:59:41 +02:00
Lucas Smith
ba611b9adb Merge pull request #440 from PeterKwesiAnsah/chore/add-empty-recipientlist-message
chore: add empty message
2023-09-28 22:12:21 +10:00
Timur Ercan
e8643850a0 Merge pull request #397 from documenso/feat-early-adopters
feat: early adopters
2023-09-28 13:16:21 +02:00
Timur Ercan
bec7376fe8 Merge branch 'feat/refresh' into feat-early-adopters 2023-09-28 13:16:09 +02:00
Timur Ercan
7363bbc8f7 chore: sync next 2023-09-28 13:15:56 +02:00
Lucas Smith
d0f679e177 Merge pull request #430 from documenso/feat/update-email-templates
feat: update email templates
2023-09-28 20:58:22 +10:00
Lucas Smith
e9769904ab Merge pull request #453 from documenso/fix/443-validation-with-multiple-recipients
fix: add hack for root zod validation with hook form
2023-09-28 20:57:21 +10:00
Timur Ercan
a2746742a7 Merge remote-tracking branch 'origin/feat/refresh' into feat-early-adopters 2023-09-28 12:35:10 +02:00
Timur Ercan
459e3dc45b Merge pull request #400 from documenso/feat/open-early-adopters
feat: add early adopters graph
2023-09-28 12:17:03 +02:00
Timur Ercan
21fedab707 Merge branch 'feat/refresh' into feat/open-early-adopters 2023-09-28 12:16:27 +02:00
PeterKwesiAnsah
323f1974ab chore: added classname and changed typo 2023-09-28 11:13:02 +01:00
Lucas Smith
5bc9d625c2 Merge pull request #455 from documenso/fix/432-signee-doc-version-doesnt-have-sticky-signing-area
fix: resolve issues with signing document stickiness
2023-09-28 17:50:04 +10:00
Mythie
4885cf5154 fix: resolve issues with signing document stickiness 2023-09-28 17:42:01 +10:00
Lucas Smith
2f66eca925 Merge pull request #454 from documenso/fix/446-cancel-cta-does-nothing-when-a-signer-opens-the-document
fix: disable cancel button when there is no window history
2023-09-28 17:15:41 +10:00
Mythie
af042a62cd fix: disable cancel button when there is no window history 2023-09-28 15:45:22 +10:00
Mythie
2bfc2b0c1f fix: add hack for root zod validation with hook form 2023-09-28 15:32:03 +10:00
Lucas Smith
df8bdda718 Merge pull request #450 from documenso/feat/resend-transport
feat: add resend mail transport
2023-09-28 14:07:18 +10:00
David Nguyen
873f99ae86 fix: resolve document title inconsistency (#452) 2023-09-28 13:56:22 +10:00
Lucas Smith
17fe135027 Merge pull request #451 from documenso/fix/445-signer-name-not-persisting
fix: do not overwrite new names or emails for signers
2023-09-28 13:07:26 +10:00
David Nguyen
2eed0ae063 feat: add posthog reverse proxy (#449) 2023-09-28 12:56:53 +10:00
Mythie
f4ae0389d8 fix: do not overwrite new names or emails for signers 2023-09-28 12:35:21 +10:00
Mythie
9bdff9a61f feat: add resend mail transport 2023-09-28 12:27:04 +10:00
PeterKwesiAnsah
f003a2864e chore: add empty message 2023-09-27 13:08:59 +01:00
Timur Ercan
ab26af19b8 Merge branch 'feat/refresh' into chore/team 2023-09-27 13:09:26 +02:00
Timur Ercan
dc512600dc chore: and now his watch has ended 2023-09-27 13:08:19 +02:00
Timur Ercan
cdb71c3a62 chore: greetings 2023-09-27 12:30:11 +02:00
Timur Ercan
39d7b3ca58 Merge branch 'feat/refresh' of https://github.com/documenso/documenso into feat/refresh 2023-09-27 12:19:14 +02:00
Timur Ercan
748c3636d5 chore: sync shop article and add missing and updated assets 2023-09-27 12:15:44 +02:00
David Nguyen
6e2d1fb148 fix: add missing URL to email template 2023-09-27 17:44:29 +10:00
Mythie
7bd847c0d3 chore: add missing migrations 2023-09-27 16:53:48 +10:00
David Nguyen
81f9b2f776 Merge branch 'feat/refresh' into feat/update-email-templates 2023-09-27 15:50:54 +10:00
David Nguyen
334671ef85 feat: add email forgot password action
Updated email template imports
2023-09-27 15:34:16 +10:00
Lucas Smith
a20b1e2f6a Merge pull request #350 from documenso/feat/redirect-signed-document
feat: redirect signed document to completed page
2023-09-27 15:09:07 +10:00
Mythie
572f9d5ad6 chore: styling updates 2023-09-27 14:58:10 +10:00
Mythie
e49c102e8c fix: lint errors 2023-09-27 09:11:56 +10:00
Mythie
2348221b03 fix: faster tooltips 2023-09-27 09:09:53 +10:00
Mythie
a0c327cfcf fix: share og updates 2023-09-27 09:03:53 +10:00
Mythie
ddbeb9e3db fix: twitter images 2023-09-27 08:02:51 +10:00
Mythie
e8205c1390 fix: better share links 2023-09-27 07:52:24 +10:00
Timur Ercan
fbb53fc8c3 chore: update mania shirt res 2023-09-26 22:06:41 +02:00
Timur Ercan
d7fed5a5dc feat: shop Article 2023-09-26 21:49:04 +02:00
Timur Ercan
3285881586 chore: typos 2023-09-26 11:39:30 +02:00
Timur Ercan
3ff61607a2 Merge pull request #370 from documenso/feat/mania
feat: malfunction mania blog post
2023-09-26 11:24:24 +02:00
Timur Ercan
2a124b03e9 Merge branch 'feat/refresh' into feat/mania 2023-09-26 11:24:13 +02:00
Timur Ercan
e1aa23bc55 chore: fix typo 2023-09-26 11:23:39 +02:00
Timur Ercan
818c5c7ba4 chore: fix lightmode logo 2023-09-26 11:19:32 +02:00
Timur Ercan
668011d1c7 Update README.md with M̸͍͚̽͒A̴̯͊͌L̴͖͖͘F̵̗̻́̅U̶̲̅͠N̸͙̰̓C̵̙̮̾T̸̜̙͌Í̷͎̯Ö̵̘̜́N̴̳͊̈ͅ ̶͔́M̸̡͐̾A̵̞̚N̴̤̏́Ǐ̸̩͂Ă̸͓͝ 2023-09-26 11:12:59 +02:00
Timur Ercan
562fd043a9 chore: typo 2023-09-26 10:31:41 +02:00
Timur Ercan
b4781c011c chore: alt text 2023-09-26 10:27:19 +02:00
Timur Ercan
5c7d3d5503 chore: update date 2023-09-26 10:26:16 +02:00
Timur Ercan
0f2b6c0ebf chore: remove unused image 2023-09-26 10:23:28 +02:00
Timur Ercan
ab5bdfeae4 chore: typo 2023-09-26 10:18:56 +02:00
David Nguyen
e5fa2f4490 feat: update email templates
Add SPM email attachment
2023-09-26 17:48:26 +10:00
Mythie
2d2615447e fix: redirectless authentication 2023-09-26 16:17:01 +10:00
Mythie
46465acd73 chore: quieten dependabot 2023-09-26 16:11:06 +10:00
Lucas Smith
2dea9ec3e7 Merge pull request #423 from documenso/feat/copy-or-tweet
feat: add dropdown to tweet or copy signing link
2023-09-26 16:08:43 +10:00
Mythie
584d5bd8ea fix: update share preview 2023-09-26 15:58:43 +10:00
Mythie
e4b6d42672 fix: styling updates 2023-09-26 15:56:11 +10:00
Timur Ercan
109ad190cf fix: text 2023-09-25 19:13:03 +02:00
Ephraim Atta-Duncan
78498793fa chore: refactor function 2023-09-25 11:21:39 +00:00
Ephraim Atta-Duncan
b2e916378d feat: add dropdown to tweet or copy signing link 2023-09-25 11:15:31 +00:00
Timur Ercan
d950634aab Merge branch 'feat/refresh' into feat/open-early-adopters 2023-09-25 09:28:04 +02:00
Mythie
a52c19355a chore: sign document 2023-09-25 15:57:10 +10:00
Mythie
e67e96333b fix: dark mode for generic mdx content 2023-09-25 11:31:26 +10:00
Lucas Smith
7aa75b0c64 Merge pull request #403 from documenso/feat/single-player-mode
feat: single player mode
2023-09-25 11:25:58 +10:00
Mythie
9b1069f208 fix: remove usage of buffer 2023-09-25 11:24:55 +10:00
Mythie
abe20b8dcf fix: assorted updates 2023-09-25 11:17:59 +10:00
Mythie
58509c54a9 fix: feature flag client endpoint 2023-09-25 10:35:18 +10:00
Mythie
fd545cee0c chore: update env.example 2023-09-25 10:33:38 +10:00
Mythie
1f92bffe7d chore: remove console.log 2023-09-25 10:09:02 +10:00
Timur Ercan
5615627001 Merge pull request #419 from documenso/fix/incorporation
fix: company name
2023-09-24 21:53:10 +02:00
Timur Ercan
78c55875ef fix: company name 2023-09-24 21:52:09 +02:00
Mythie
a3674947b8 fix: single player dark mode and animation updates 2023-09-25 00:18:41 +10:00
Mythie
63cc57b035 fix: improve dark mode background patterns 2023-09-25 00:18:15 +10:00
Mythie
d4bc1eb0d1 fix: cors for feature flags 2023-09-25 00:16:01 +10:00
Mythie
c9f5496acb Merge remote-tracking branch 'origin/feat/refresh' into feat/single-player-mode 2023-09-24 22:18:01 +10:00
Mythie
99481b6144 feat: darker dark theme 2023-09-24 14:45:50 +10:00
Mythie
cee147bc9a fix: normalize recipients 2023-09-24 11:46:36 +10:00
Lucas Smith
3a825391b9 Merge pull request #399 from captain-Akshay/feat/handle_click
fix: cancel button handler
2023-09-23 22:19:57 +10:00
Lucas Smith
bb347e4614 Merge pull request #326 from documenso/feat/completed-share-link
feat: signing completed sharing link
2023-09-23 22:18:17 +10:00
Ephraim Atta-Duncan
d0fad4775a feat: add extra info for the early adopters 2023-09-23 12:02:37 +00:00
Lucas Smith
68d624ac78 Merge branch 'feat/refresh' into feat/completed-share-link 2023-09-23 21:07:31 +10:00
David Nguyen
8012d665ae fix: firefox signing fields 2023-09-23 13:25:39 +10:00
Timur Ercan
0732aa317d chore: rename community plan to early adopters 2023-09-22 18:54:25 +02:00
Timur Ercan
fde53e355f chore: staging 2023-09-22 18:44:34 +02:00
Timur Ercan
8e0a10298e Merge branch 'feat/refresh' into feat/mania 2023-09-22 18:33:16 +02:00
Ephraim Atta-Duncan
eef63c9adc refactor: metrics into reusable component 2023-09-22 14:08:25 +00:00
Lucas Smith
1e5ecd79c2 Merge pull request #354 from documenso/feat/table-empty-state
feat: add empty document state
2023-09-22 23:36:42 +10:00
Lucas Smith
58f10268e2 Merge pull request #359 from documenso/feat/send-email
feat: send email when recipient is done signing and every recipient is done signing
2023-09-22 23:29:35 +10:00
Lucas Smith
43ce76d928 fix: remove unused import 2023-09-22 23:29:14 +10:00
Ephraim Atta-Duncan
c3d52c68e7 feat: add early adopters graph 2023-09-22 13:27:10 +00:00
Lucas Smith
201ba65e1c fix: remove unused import 2023-09-22 23:23:55 +10:00
Lucas Smith
0d130b17c8 fix: minor updates 2023-09-22 23:22:48 +10:00
Lucas Smith
2c90f767fd Merge branch 'feat/refresh' into feat/send-email 2023-09-22 23:19:43 +10:00
Lucas Smith
946b2fe129 fix: use named export 2023-09-22 23:15:30 +10:00
Lucas Smith
2a2dbb65c6 Merge branch 'feat/refresh' into feat/table-empty-state 2023-09-22 23:13:51 +10:00
Lucas Smith
ef2300a600 Merge pull request #343 from adithyaakrishna/feat/404
feat: added custom `not-found` or 404 pages
2023-09-22 23:11:34 +10:00
Lucas Smith
eea99ac871 Merge pull request #391 from documenso/feat/custom-emails
feat: send custom emails
2023-09-22 22:53:09 +10:00
Mythie
f4c7799537 fix: reverse meta relation and tidy code 2023-09-22 12:42:06 +00:00
David Nguyen
764c6b88c5 feat: update success page text 2023-09-22 16:35:49 +10:00
David Nguyen
989d7a351f feat: add uninserted field validation 2023-09-22 16:25:09 +10:00
Lucas Smith
78325d9b39 Merge branch 'feat/refresh' into feat/404 2023-09-22 15:01:49 +10:00
captain-Akshay
679fb80f9a fix: cancel button handler 2023-09-22 10:31:42 +05:30
David Nguyen
dc49277bf9 feat: add uninserted field validation 2023-09-22 12:27:39 +10:00
pit
07bf780c3e feat: build individual user page 2023-09-21 15:10:20 +01:00
Timur Ercan
190ae18edc chore: grammerly 2023-09-21 15:09:20 +02:00
Timur Ercan
82ffbeeb21 chore: links 2023-09-21 15:01:02 +02:00
Timur Ercan
9affd7b7fa Merge branch 'feat/refresh' into feat-early-adopters 2023-09-21 14:54:45 +02:00
Timur Ercan
897ba629df feat: early adopter article 2023-09-21 14:53:48 +02:00
Lucas Smith
b3f26055d9 Merge pull request #395 from nsylke/nsylke-patch-10
fix: remove disallow property of _next from robots
2023-09-21 22:36:30 +10:00
pit
775de16d0a feat: admin ui for managing instance 2023-09-21 12:43:36 +01:00
Mythie
1b276a0469 fix: support optimise imports 2023-09-21 21:34:24 +10:00
Mythie
17fbf2673c Merge remote-tracking branch 'origin/feat/refresh' into feat/completed-share-link 2023-09-21 18:55:52 +10:00
Mythie
cdc50ec876 fix: resolve issues with open graph asset loading 2023-09-21 05:37:04 +00:00
nsylke
181af24b78 fix: remove disallow property of _next from robots 2023-09-20 20:46:23 -05:00
Mythie
4b13a42731 fix: tidy code and update endpoints 2023-09-21 00:51:02 +00:00
Ephraim Atta-Duncan
e330e90688 fix: document meta relation with document 2023-09-20 12:54:24 +00:00
Ephraim Atta-Duncan
f2d3c51651 fix: avoid creating document meta with empty strings 2023-09-20 12:38:39 +00:00
Ephraim Atta-Duncan
c9c111cdf2 fix: persist newline in emails 2023-09-20 12:19:52 +00:00
Lucas Smith
c247295131 Merge pull request #388 from captain-Akshay/feat/theme
feat: added a better theme change ability for user
2023-09-20 21:45:45 +10:00
Ephraim Atta-Duncan
d417255910 feat: replace template variables with values
Co-authored-by: Mythie <me@lucasjamessmith.me>
2023-09-20 11:17:26 +00:00
Ephraim Atta-Duncan
677a15327b feat: send custom email message 2023-09-20 09:59:42 +00:00
Ephraim Atta-Duncan
d5238939ad feat: persist document metadata in database for a specific user 2023-09-20 09:51:04 +00:00
Ephraim Atta-Duncan
6860726e83 feat: send custom email subjects 2023-09-20 09:06:28 +00:00
Ephraim Atta-Duncan
a55197fb2d feat: add prisma schema for document meta 2023-09-20 08:57:50 +00:00
David Nguyen
7eed5c7c96 feat: utilise transport layer 2023-09-20 15:55:25 +10:00
David Nguyen
1c629af651 fix: timeout issues 2023-09-20 15:33:01 +10:00
David Nguyen
4b8aa3298b feat: add single player mode 2023-09-20 13:48:30 +10:00
Lucas Smith
bcb163693a Merge branch 'feat/refresh' into feat/completed-share-link 2023-09-20 12:42:30 +10:00
Lucas Smith
e6e8de62c8 Merge pull request #306 from adithyaakrishna/feat/reveal-password
feat: added feature to show/hide password
2023-09-20 12:38:09 +10:00
Mythie
71c7a6ee8c chore: add visibility toggle to reset password 2023-09-20 02:32:06 +00:00
Mythie
ecc8e59c8c fix: update colors 2023-09-20 02:18:35 +00:00
Lucas Smith
d0f027c4ea Merge branch 'feat/refresh' into feat/reveal-password 2023-09-20 12:13:31 +10:00
Lucas Smith
2c667f785c Merge pull request #385 from documenso/feat/reset-password
feat: reset password
2023-09-20 12:12:57 +10:00
Lucas Smith
1adf7e183e Merge branch 'feat/refresh' into feat/reveal-password 2023-09-20 12:03:24 +10:00
captain-Akshay
7771d7acbe feat: added the icon for theme 2023-09-20 06:56:40 +05:30
Lucas Smith
58580c7fac Merge pull request #386 from documenso/blog/selfhosting-blog-post
feat: add deploying documenso with vercel, supabase and resend
2023-09-20 09:41:41 +10:00
captain-Akshay
4cd56fa98c feat: removed unecessary code to the file and made few UI changes 2023-09-19 19:45:21 +05:30
Lucas Smith
68020006b4 Merge branch 'feat/refresh' into feat/reset-password 2023-09-20 00:03:46 +10:00
Mythie
70cb65d266 fix: update token validity check 2023-09-19 13:59:19 +00:00
Mythie
cef8cad14c fix: update reset token query 2023-09-19 13:57:11 +00:00
Mythie
def8f45f8b fix: update email template 2023-09-19 13:49:01 +00:00
Mythie
ca325cc90b fix: add layout and minor updates 2023-09-19 13:34:54 +00:00
captain-Akshay
a1ce6f696a feat: added a better theme change ability for user 2023-09-19 13:38:37 +05:30
David Nguyen
4d485940ea fix: stripe customer fetch logic 2023-09-19 15:30:58 +10:00
David Nguyen
cbe118b74f fix: merge issues 2023-09-19 15:14:47 +10:00
David Nguyen
de9116e9b2 Merge branch 'feat/refresh' into feat/stripe-free-tier 2023-09-19 15:12:40 +10:00
Mythie
09c7f9dde8 chore: update devcontainer 2023-09-19 15:10:03 +10:00
Lucas Smith
0060b9da8c Merge branch 'feat/refresh' into feat/reset-password 2023-09-19 13:53:38 +10:00
Lucas Smith
bad88a2a83 Merge pull request #387 from nsylke/nsylke-patch-9
feat: security headers
2023-09-19 13:51:57 +10:00
Lucas Smith
96a79b8879 Merge branch 'feat/refresh' into nsylke-patch-9 2023-09-19 13:41:18 +10:00
Mythie
60ef9df721 chore: update ci 2023-09-19 13:34:38 +10:00
Lucas Smith
2d8ca8fea0 Merge pull request #374 from documenso/feat/vercel-build-script
feat: vercel build script
2023-09-19 13:11:49 +10:00
Mythie
b411db40da chore: tidy unused code 2023-09-19 02:40:58 +00:00
David Nguyen
1be0b9e01f feat: add vercel build script 2023-09-19 01:54:20 +00:00
nsylke
d41ca8e0e6 feat: security headers 2023-09-18 20:13:46 -05:00
Timur Ercan
eaa3e0a303 Merge branch 'feat/refresh' into feat/mania 2023-09-18 20:15:50 +02:00
Timur Ercan
a283c88d7f chore: update malfunction mania image 2023-09-18 20:11:27 +02:00
Ephraim Atta-Duncan
d4659eee07 feat: add deploying documenso with vercel, supabase and resend 2023-09-18 17:58:01 +00:00
Ephraim Atta-Duncan
b93e3c0b52 feat: add invalid reset token page 2023-09-18 15:13:19 +00:00
Ephraim Atta-Duncan
079963cde8 feat: better error handling and better toast messages 2023-09-18 15:09:41 +00:00
Ephraim Atta-Duncan
45f447c796 feat: better error handling in forgotPassword trpc router 2023-09-18 14:41:24 +00:00
Ephraim Atta-Duncan
2327b15e0d fix: width reducing with screen size 2023-09-18 14:39:42 +00:00
Ephraim Atta-Duncan
166cbc150f feat: send email to user on successful password reset 2023-09-18 14:31:04 +00:00
Ephraim Atta-Duncan
f561ef3cda feat: add reset functionality 2023-09-18 14:03:33 +00:00
David Nguyen
027a588604 feat: wip 2023-09-18 22:47:46 +10:00
David Nguyen
773566f193 feat: add free tier Stripe subscription 2023-09-18 22:33:07 +10:00
Ephraim Atta-Duncan
29bd4cb9c3 feat: send forgot password email 2023-09-18 12:14:55 +00:00
Ephraim Atta-Duncan
1237944b71 chore: rename email templates export 2023-09-18 11:51:43 +00:00
Ephraim Atta-Duncan
b331e3c780 feat: add reset password email template 2023-09-18 11:49:37 +00:00
Ephraim Atta-Duncan
7f641e3e73 feat: add forgot password template 2023-09-18 11:38:02 +00:00
Ephraim Atta-Duncan
b84f0548d2 feat: create a password reset token 2023-09-18 11:15:29 +00:00
Ephraim Atta-Duncan
0f92534f00 chore: remove unused error toast 2023-09-18 10:34:15 +00:00
Ephraim Atta-Duncan
7a489f241a feat: add reset password page 2023-09-18 10:31:33 +00:00
Ephraim Atta-Duncan
f88e529111 feat: add forgot passoword page 2023-09-18 10:18:33 +00:00
Ephraim Atta-Duncan
47d55a5eab feat: add password reset token to schema 2023-09-18 06:47:03 +00:00
Ephraim Atta-Duncan
9dcab76cd5 feat: use description of each blog post in og image (#380) 2023-09-18 11:37:17 +10:00
Ephraim Atta-Duncan
c2a9647c90 Merge branch 'feat/refresh' into feat/redirect-signed-document 2023-09-17 14:52:44 +00:00
Ephraim Atta-Duncan
02424596db fix: update for code review 2023-09-17 14:45:22 +00:00
Ephraim Atta-Duncan
776324c875 fix: fitler only unsigned documents 2023-09-17 14:38:39 +00:00
Ephraim Atta-Duncan
6f4c280583 chore: match file name and method name 2023-09-17 14:31:44 +00:00
Lucas Smith
dfebdfccda Merge pull request #357 from documenso/feat/universal-upload
feat: universal upload
2023-09-16 15:35:30 +10:00
Timur Ercan
5809109c05 chore: grammerly, finetuned bounties 2023-09-14 15:43:17 +02:00
Timur Ercan
a6400eb6c9 Merge branch 'feat/refresh' into feat/mania 2023-09-14 15:29:55 +02:00
flō
39958ed22c Fix typo 2023-09-14 14:57:11 +02:00
Lucas Smith
c3d9cac43f Merge pull request #373 from documenso/chore/readme
chore: update readme to main version
2023-09-14 20:35:21 +10:00
Lucas Smith
74355244a4 Merge pull request #372 from documenso/chore/blogposts
chore: moved rewrite article from next repo
2023-09-14 20:34:55 +10:00
flō
7c4ba1b1ea Fix typo 2023-09-14 11:38:42 +02:00
flō
f588897531 Fix punctuation for consistency 2023-09-14 11:33:11 +02:00
flō
5629e08f83 Add keywords
added keywords in description for SEO optimizations
2023-09-14 11:06:48 +02:00
flō
37394c054c Fix typo
Fix typo and minor edits for consistency
2023-09-14 11:04:10 +02:00
Mythie
8be52e2fa3 fix: final reference to created column 2023-09-14 14:50:17 +10:00
Mythie
0d702e9189 fix: remove further references to created column 2023-09-14 13:37:38 +10:00
Mythie
425db8fc1f fix: remove references to created column 2023-09-14 13:32:16 +10:00
Mythie
2356f58e7b fix: implement feedback 2023-09-14 13:21:03 +10:00
Mythie
6c12ed4afc fix: update migration for timestamp columns 2023-09-14 13:07:55 +10:00
Lucas Smith
d76ee7f33c Merge branch 'feat/refresh' into feat/universal-upload 2023-09-14 12:53:58 +10:00
Mythie
f8534b2c3d fix: add dashboard header border on scroll 2023-09-14 12:51:59 +10:00
Mythie
9014f01276 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-09-14 12:47:47 +10:00
Timur Ercan
71818c0f1f chore: update readme to main version 2023-09-13 14:57:22 +02:00
Timur Ercan
974dc74073 chore: moved rewrite article from next repo 2023-09-13 14:53:27 +02:00
Timur Ercan
b255eb21e5 Merge pull request #369 from documenso/fix/building-documenso-description
fix: update building documenso article description
2023-09-13 14:45:24 +02:00
Timur Ercan
9a58178ea5 Merge branch 'feat/refresh' into fix/building-documenso-description 2023-09-13 14:42:41 +02:00
Timur Ercan
3c36eedfba chore: phrasing 2023-09-13 14:42:27 +02:00
Timur Ercan
46dfaa70a3 Update apps/marketing/content/blog/building-documenso-pt1.mdx
Co-authored-by: Adithya Krishna  <aadithya794@gmail.com>
2023-09-13 14:39:01 +02:00
Lucas Smith
61da354a48 Merge pull request #361 from documenso/feat/admin-ui-metrics
feat: admin ui for metrics
2023-09-13 21:55:09 +10:00
Lucas Smith
fbb332fb35 Merge branch 'feat/refresh' into feat/admin-ui-metrics 2023-09-13 21:54:33 +10:00
Lucas Smith
7e1cce9155 Merge pull request #365 from documenso/feat/avatar-fallback
feat: add avatar email fallback
2023-09-13 21:51:42 +10:00
Lucas Smith
ed4cbe9fa6 Merge branch 'feat/refresh' into feat/universal-upload 2023-09-12 20:51:31 +10:00
Mythie
599e857a1e fix: add removed layout guard 2023-09-12 17:53:38 +10:00
Lucas Smith
581f08c59b fix: update layout and wording 2023-09-12 07:25:44 +00:00
David Nguyen
24a2e9e6d4 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-09-12 14:29:27 +10:00
David Nguyen
e8796a7d86 refactor: organise recipient utils 2023-09-12 12:33:04 +10:00
Mythie
db3f75c42f fix: data table links for recipients 2023-09-12 10:38:23 +10:00
Timur Ercan
b7c0df67b1 feat: malfunction mania, first draft 2023-09-11 18:20:17 +02:00
Timur Ercan
e8b5b3b24a fix: update building documenso article description 2023-09-11 15:22:09 +02:00
Catalin Pit
00574325b9 chore: implemented feedback 2023-09-11 13:43:17 +03:00
Catalin Pit
99706e0ed6 chore: fix version in nextjs config 2023-09-11 11:34:10 +03:00
Catalin Pit
326743d8a1 chore: added app version 2023-09-11 10:59:50 +03:00
David Nguyen
3f67b0f27e Merge pull request #292 from documenso/feat/blog-post-next
fix: typo in blog post
2023-09-11 17:09:31 +10:00
flō
24036b0f24 fix typo 2023-09-11 17:03:14 +10:00
David Nguyen
fbf32404a6 feat: add avatar email fallback 2023-09-11 16:58:41 +10:00
Lucas Smith
975d52a07e Merge pull request #362 from documenso/fix/hide-user-selection
fix: hide popover when user selects a recipient
2023-09-11 12:27:50 +10:00
Ephraim Atta-Duncan
f8a193c0f8 refactor: replace whole implementation with a state 2023-09-09 10:56:45 +00:00
Ephraim Atta-Duncan
9186cb4d7b fix: hide popover when user selects a recipients 2023-09-09 10:42:03 +00:00
Lucas Smith
898f5a629c Merge branch 'feat/refresh' into feat/admin-ui-metrics 2023-09-09 15:49:56 +10:00
Mythie
933076fa3f fix: update devcontainer 2023-09-09 15:49:40 +10:00
Lucas Smith
27edcebef6 Merge branch 'feat/refresh' into feat/admin-ui-metrics 2023-09-09 15:44:34 +10:00
Mythie
abc91f7eac fix: update devcontainer 2023-09-09 15:44:10 +10:00
Lucas Smith
5862af3034 Merge branch 'feat/refresh' into feat/admin-ui-metrics 2023-09-09 15:16:03 +10:00
Mythie
35acf05997 feat: add devcontainer 2023-09-09 04:38:37 +00:00
Lucas Smith
2bad1b9f55 fix: tidy messaging 2023-09-09 03:45:15 +00:00
Lucas Smith
73b0dc315e fix: use ts-pattern 2023-09-09 03:31:17 +00:00
Catalin Pit
5969f148c8 chore: changed the cards titles 2023-09-08 14:51:55 +03:00
Catalin Pit
660f5894a6 chore: feedback improvements 2023-09-08 12:56:44 +03:00
Catalin Pit
77058220a8 chore: rename files 2023-09-08 12:42:14 +03:00
Catalin Pit
6cdba45396 chore: implemented feedback 2023-09-08 12:39:13 +03:00
Catalin Pit
67571158e8 feat: add the admin page 2023-09-08 11:28:50 +03:00
Catalin Pit
171a5ba4ee feat: creating the admin ui for metrics 2023-09-08 09:16:31 +03:00
Ephraim Atta-Duncan
525ff21563 feat: avoid sending pending email to document with 1 recipients 2023-09-07 20:52:18 +00:00
Ephraim Atta-Duncan
863e53a2d5 refactor: pass document id as arguments 2023-09-07 20:38:18 +00:00
Ephraim Atta-Duncan
da2033692c feat: send email when all recipients have signed 2023-09-07 20:14:04 +00:00
Ephraim Atta-Duncan
dbbe17a0a8 feat: send email when recipient is done signing 2023-09-07 19:58:48 +00:00
Mythie
a2ef9468ae feat: separate document data from document 2023-09-07 19:27:21 +10:00
Ephraim Atta-Duncan
0c145fab0b chore: fix eslint errors 2023-09-06 12:01:30 +00:00
Ephraim Atta-Duncan
f6e49e3f21 chore: remove code from different branch 2023-09-06 12:00:23 +00:00
Ephraim Atta-Duncan
1f027d75d3 chore: fix eslint errors 2023-09-06 11:55:02 +00:00
Ephraim Atta-Duncan
1ba7767f8e chore: correct types on component 2023-09-06 11:52:15 +00:00
Ephraim Atta-Duncan
8220b2f086 feat: add empty state for different status 2023-09-06 11:47:58 +00:00
Ephraim Atta-Duncan
a74374e39f feat: add initial empty state for no results 2023-09-06 11:11:13 +00:00
Lucas Smith
ff957a2f82 Merge pull request #353 from documenso/feat/disable-sign
feat: disable signing and editing for completed documents
2023-09-06 20:53:23 +10:00
Ephraim Atta-Duncan
6640f0496a feat: disable signing and editing for completed documents 2023-09-06 10:40:45 +00:00
Ephraim Atta-Duncan
e47ab838c5 chore: remove undefined check 2023-09-06 07:37:03 +00:00
Ephraim Atta-Duncan
551918ab9b feat: redirect signed document to completed page 2023-09-05 13:53:18 +00:00
Ephraim Atta-Duncan
739f3763dd feat: update share page to match latest changes 2023-09-05 11:40:42 +00:00
Ephraim Atta-Duncan
0cdd980a4b feat: move opengraph-image to next.js 13 implementation 2023-09-05 11:37:21 +00:00
Ephraim Atta-Duncan
b43ddcbea2 refactor: redirect using useRouter 2023-09-05 09:29:47 +00:00
Ephraim Atta-Duncan
75feaefbf2 chore: remove unused files 2023-09-05 09:27:04 +00:00
Lucas Smith
de3ebe16ee Merge pull request #349 from documenso/feat/marketing-mobile-nav
feat: update marketing mobile nav
2023-09-05 18:20:53 +10:00
David Nguyen
84a2d3baf6 feat: update marketing mobile menu 2023-09-05 18:08:29 +10:00
Lucas Smith
74180defd1 Merge pull request #339 from G3root/feat-api-error
feat: add alert banner for errors in sigin page
2023-09-05 15:36:55 +10:00
Lucas Smith
aeeaaf0d8d Merge pull request #340 from G3root/fix-username-updateable
fix: user name not updatable
2023-09-05 15:33:19 +10:00
Lucas Smith
2b84293c4e Merge pull request #341 from documenso/feat/add-email-field
feat: add email field to document sign page
2023-09-05 13:25:29 +10:00
Lucas Smith
b38ef6c0a7 Merge pull request #346 from documenso/chore/remove-console-log-warn
chore: removed console logs and warn
2023-09-05 13:23:57 +10:00
Mythie
d524ea77ab fix: update styling 2023-09-05 13:15:45 +10:00
Mythie
17af4d25bd fix: actually make timeouts clear 2023-09-05 11:33:49 +10:00
Mythie
6e095921e6 fix: tidy up code 2023-09-05 11:29:23 +10:00
nafees nazik
150c42b246 fix: value 2023-09-04 22:24:42 +05:30
Catalin Pit
aecf2f32b9 chore: removed one more console.log 2023-09-04 16:41:28 +03:00
Catalin Pit
b23967d777 chore: removed console.logs and warn 2023-09-04 16:08:22 +03:00
Adithya Krishna
2524458b0c chore: updated wording
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-09-03 23:59:02 +05:30
Adithya Krishna
12c45fb882 feat: added 404 page for web app
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-09-03 23:53:07 +05:30
Adithya Krishna
118483b6cc chore: updated 404 page for marketing app
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-09-03 23:52:51 +05:30
Adithya Krishna
fd6350b397 feat: added 404 page for marketing app
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-09-03 23:30:48 +05:30
Ephraim Atta-Duncan
b3291c65bc chore: remove console.log 2023-09-02 22:20:57 +00:00
Ephraim Atta-Duncan
4b849e286c feat: add missing email field to document sign page 2023-09-02 22:08:19 +00:00
nafees nazik
7bcc26a987 fix: user name not updatable 2023-09-02 12:11:07 +05:30
nafees nazik
692722d32e revert: fix: component style 2023-09-02 11:55:44 +05:30
Nafees Nazik
e4f06d8e30 Merge branch 'feat/refresh' into feat-api-error 2023-09-02 11:53:18 +05:30
nafees nazik
c799380787 chore: add comments 2023-09-02 11:51:21 +05:30
nafees nazik
5540fcf0d2 fix: use toast 2023-09-02 11:46:12 +05:30
nafees nazik
d9da09c1e7 fix: typo 2023-09-01 16:25:49 +05:30
nafees nazik
fe90aa3b7b feat: add api error 2023-09-01 16:25:27 +05:30
nafees nazik
0c680e0111 fix: component style 2023-09-01 16:25:00 +05:30
Mythie
7bcf5fbd86 feat: store signature on signup 2023-09-01 19:46:44 +10:00
Mythie
7218b950fe feat: store profile signature 2023-09-01 18:43:53 +10:00
Mythie
8d4df7d3dd fix: update og card 2023-08-31 15:36:09 +10:00
Lucas Smith
f1f6e2e40a Merge branch 'feat/refresh' into feat/completed-share-link 2023-08-31 14:20:52 +10:00
Lucas Smith
901013fdc6 Merge pull request #313 from adithyaakrishna/feat/improve-readability
feat: improve readability and rendering of some components
2023-08-31 14:08:52 +10:00
Lucas Smith
5c9017f3cd Merge branch 'feat/refresh' into feat/improve-readability 2023-08-31 14:06:43 +10:00
Mythie
34e962cc48 fix: minor updates 2023-08-31 14:06:19 +10:00
Lucas Smith
bf9254597a Merge pull request #321 from PeterKwesiAnsah/feat/Add-error-message-to-signature-pad
feat: add error message to signature pad
2023-08-31 13:59:41 +10:00
Mythie
b5efa0d3ea fix: fix eslint warnings 2023-08-31 13:33:13 +10:00
Lucas Smith
a2bdb46076 Merge pull request #333 from documenso/fix/redirect-signin-to-dashboard
fix: redirect signin page to dashboard when logged in
2023-08-31 13:14:52 +10:00
Lucas Smith
ed150d9574 Merge branch 'feat/refresh' into fix/redirect-signin-to-dashboard 2023-08-31 13:14:07 +10:00
Mythie
e756a21fda fix: retain redirect to documents rather than dashboard 2023-08-31 13:12:50 +10:00
Lucas Smith
13084049da Merge pull request #334 from documenso/feat/redirect-on-send
feat: redirect to dashboard when document is sent
2023-08-31 13:09:55 +10:00
Lucas Smith
055e723777 Merge pull request #335 from adithyaakrishna/chore/remove-cl
chore: removed unnecessary `console.log`
2023-08-31 13:09:03 +10:00
Lucas Smith
419318c151 Merge pull request #329 from documenso/feat/blog-og-image
feat: add blog og image
2023-08-31 13:04:15 +10:00
Mythie
7722e63e1b fix: tidying broke generation 2023-08-31 12:08:53 +10:00
Adithya Krishna
40274021ba Merge branch 'feat/refresh' into feat/reveal-password 2023-08-30 20:34:32 +05:30
Adithya Krishna
8529ac3ffe Merge branch 'feat/refresh' into feat/improve-readability 2023-08-30 20:34:08 +05:30
Adithya Krishna
7ec8e762b0 chore: removed console logs
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-30 18:49:13 +05:30
Ephraim Atta-Duncan
2acada6dc7 chore: unused console logs 2023-08-30 13:09:37 +00:00
Ephraim Atta-Duncan
d4d76dce03 feat: redirect to dashboard when document is sent 2023-08-30 12:31:33 +00:00
Ephraim Atta-Duncan
3832ce2c80 fix: redirect root direcotory to dashboard 2023-08-30 11:32:55 +00:00
Ephraim Atta-Duncan
fd36e39a38 fix: redirect signin page to dashboard when logged in 2023-08-30 11:32:08 +00:00
Mythie
14fd0eb906 fix: tidy code and expect jsx errors 2023-08-30 18:41:37 +10:00
Lucas Smith
af6c62d0bf Merge branch 'feat/refresh' into feat/blog-og-image 2023-08-30 18:28:21 +10:00
Mythie
8d7d6a19e7 fix: update import for feature-flag helpers 2023-08-30 18:06:41 +10:00
Mythie
463dc48ea6 fix: extract feature-flag zod schema to separate file 2023-08-30 17:31:23 +10:00
Lucas Smith
d8f6a25059 Merge pull request #332 from documenso/feat/billing-page
feat: make billing page functional
2023-08-30 16:41:39 +10:00
Mythie
93962625ed fix: further stash conflicts 2023-08-30 16:39:35 +10:00
Mythie
249211bd4f fix: add items from stash 2023-08-30 16:36:22 +10:00
Mythie
bfe0d50661 feat: make billing page functional 2023-08-30 16:15:13 +10:00
Mythie
5d4a07bcc5 fix: center align heading 2023-08-30 15:41:29 +10:00
Mythie
d28bb5de99 fix: use nextjs opengraph-image component 2023-08-30 15:32:44 +10:00
Lucas Smith
83a83164d4 Merge pull request #330 from documenso/feat/profile-password-form
feat: avoid user from updating password with the same password
2023-08-30 14:32:21 +10:00
Mythie
d71e43c5d6 fix: minor tidying 2023-08-30 14:01:30 +10:00
Ephraim Atta-Duncan
ed6fa4dc2a feat: avoid updating password with existing password 2023-08-30 03:26:24 +00:00
Ephraim Atta-Duncan
4f3970c361 feat: prevent a user from updating password with the same password 2023-08-30 03:22:47 +00:00
Ephraim Atta-Duncan
40767430d9 feat: reset password from on submit 2023-08-30 03:09:40 +00:00
Ephraim Atta-Duncan
1edfe9548d feat: add og image to blog posts 2023-08-30 02:50:02 +00:00
Lucas Smith
fead48c2f0 Merge pull request #314 from adithyaakrishna/fix/whitespace
fix: removed unnecessary whitespace before className
2023-08-30 12:36:58 +10:00
Mythie
0abd3da7fd fix: update eslint rules 2023-08-30 12:35:43 +10:00
Ephraim Atta-Duncan
2f78922421 feat: add blog og image 2023-08-30 02:33:22 +00:00
Lucas Smith
3df0f61947 Merge branch 'feat/refresh' into fix/whitespace 2023-08-30 12:02:01 +10:00
Lucas Smith
8e42dcb7ee Merge pull request #323 from documenso/feat/promise-safety
feat: promise safety
2023-08-30 11:32:32 +10:00
Lucas Smith
1888ee97e6 Merge pull request #296 from documenso/feat/inbox
feat: add inbox
2023-08-30 10:27:32 +10:00
Lucas Smith
068aef665d Merge pull request #328 from nsylke/nsylke-patch-8
chore: change root package.json name
2023-08-30 10:10:42 +10:00
nsylke
2772fc1678 chore: change root package.json name 2023-08-29 16:19:56 -05:00
Ephraim Atta-Duncan
66dfdc5ad0 feat: redirect share page to marketing page after 3 seconds 2023-08-29 19:42:37 +00:00
Ephraim Atta-Duncan
b45978374b feat: generate metatags for share page with og image 2023-08-29 19:08:54 +00:00
Ephraim Atta-Duncan
81c3e701e2 feat: display signature text from params 2023-08-29 18:46:15 +00:00
Ephraim Atta-Duncan
874d919a6a feat: create sharing id for each recipient 2023-08-29 18:23:52 +00:00
Ephraim Atta-Duncan
e8559cecd5 feat: add initial og image for share link 2023-08-29 14:39:49 +00:00
Mythie
8c4120f0a2 fix: remove further unused code 2023-08-29 18:12:46 +10:00
Mythie
9f93af6134 fix: remove unused code 2023-08-29 17:26:19 +10:00
Adithya Krishna
3cbc722b94 Merge branch 'feat/refresh' into feat/reveal-password 2023-08-29 12:43:46 +05:30
Adithya Krishna
3440c47c3c Merge branch 'feat/refresh' into feat/improve-readability 2023-08-29 12:43:30 +05:30
Mythie
68a5a9da1e feat: add data table actions 2023-08-29 14:33:07 +10:00
Mythie
1f8d5e45e1 feat: onepage inbox 2023-08-29 14:33:05 +10:00
David Nguyen
8fd9730e2b feat: add inbox 2023-08-29 14:31:13 +10:00
Lucas Smith
04f6df6839 Merge pull request #304 from G3root/fix-overscroll
fix: tab overflow on smaller viewport and tab scroll ux
2023-08-29 13:26:26 +10:00
Mythie
ca40e983e3 feat: promise safety with eslint 2023-08-29 13:01:19 +10:00
PeterKwesiAnsah
9257454a96 feat: add error message to signature pad 2023-08-28 14:11:53 +01:00
Lucas Smith
ba054ae915 Merge pull request #319 from documenso/chore/reduce-refetch-time
chore: reduce open page caching time to 1 hour
2023-08-28 22:58:05 +10:00
Ephraim Atta-Duncan
1d1c6e5a55 chore: reduce open page caching time to 1 hour 2023-08-28 09:43:39 +00:00
Adithya Krishna
8844143ff5 chore: fixed conflicts
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 13:02:33 +05:30
Adithya Krishna
c161a8109b fix: removed passHref and updated card
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:58:30 +05:30
Adithya Krishna
e340c4ed6f fix: reverted line change
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:54:55 +05:30
Adithya Krishna
b5f96ee2fc chore: made requested changes - v2
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:53:51 +05:30
Adithya Krishna
3c1790ba83 chore: made requested changes
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:45:23 +05:30
Adithya Krishna
f41c78e8e3 feat: updated rendeing of items using map
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:45:23 +05:30
Adithya Krishna
b8b8b4dbad chore: updated footer component
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:45:22 +05:30
Adithya Krishna
d195dc1a46 chore: updated signing fields
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:45:22 +05:30
Adithya Krishna
3ac29d8da3 chore: updated dashboard page
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:45:22 +05:30
Adithya Krishna
2418612507 chore: updated documents page
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:45:22 +05:30
Adithya Krishna
e8336ae9b4 chore: removed eslint-plugin-import
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:34:29 +05:30
Adithya Krishna
aad52a3e2e fix: updated eslint config
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:34:29 +05:30
Adithya Krishna
829122c486 feat: added eslint plugin dependencies
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:34:29 +05:30
Adithya Krishna
090752c539 feat: added new eslint rules
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:34:29 +05:30
Adithya Krishna
fad6414995 fix: duplicate import
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:34:29 +05:30
Adithya Krishna
c817c67a1c fix: removed more unnecessary whitespace
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:34:29 +05:30
Adithya Krishna
c7001e62f3 fix: removed unnecessary whitespace
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-28 12:34:29 +05:30
Lucas Smith
bf71d2a14e Merge pull request #305 from G3root/responsive-signing-card
fix: make signing form card responsive
2023-08-28 13:07:46 +10:00
Lucas Smith
163911255e Merge pull request #308 from adithyaakrishna/feat/pr-validate
feat: pr title validator workflow
2023-08-28 12:21:36 +10:00
Lucas Smith
24e38a3bbc Merge pull request #309 from nsylke/nsylke-patch-7
feat: set min/max lengths and autocomplete for password
2023-08-28 12:21:08 +10:00
Lucas Smith
dfd714f16a Merge pull request #310 from adithyaakrishna/feat/add-sharp
feat: added sharp package for NextJS13 image optimizations
2023-08-28 12:19:33 +10:00
Mythie
722081f89e fix: dependency ordering 2023-08-28 12:14:15 +10:00
Lucas Smith
f0e1df22b8 Merge pull request #312 from G3root/fix-auth
fix: authentication allowing any password
2023-08-28 12:04:07 +10:00
nafees nazik
615cb263fb fix: authentication 2023-08-27 07:10:41 +05:30
nafees nazik
18faaf49d9 fix: style 2023-08-27 06:26:49 +05:30
Adithya Krishna
650b69ae56 feat: added sharp for image optimizations on nextjs
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-26 21:23:30 +05:30
Adithya Krishna
eb4be963e3 fix: added eol to workflow file
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-26 20:57:02 +05:30
Adithya Krishna
27c27743e3 chore: updated workflow name
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-26 20:57:02 +05:30
Adithya Krishna
92930a2f63 feat: added pr title validator
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-26 20:57:02 +05:30
nsylke
7ad3365b0e feat: add autocomplete for password managers 2023-08-26 10:22:44 -05:00
Adithya Krishna
7de7624477 fix: update icon sizes
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-26 20:52:07 +05:30
Adithya Krishna
7c6b5ac59d fix: updated padding and set patterns
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-26 20:43:54 +05:30
Adithya Krishna
9c45ce61b8 feat: added show password feature
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-26 20:43:54 +05:30
nsylke
f8bf4fea36 feat: set min/max lengths for password 2023-08-26 09:53:58 -05:00
Lucas Smith
10cd8144eb Merge pull request #307 from adithyaakrishna/feat/optimize-images
chore: optimize images
2023-08-26 20:06:48 +10:00
Adithya Krishna
66973a3745 chore: optimized images to save ~8mb
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-26 13:13:30 +05:30
nafees nazik
85677bb792 fix: make signing form card responsive 2023-08-26 08:47:19 +05:30
nafees nazik
7ae99d2038 fix: overflow and scroll ux 2023-08-26 07:22:51 +05:30
Mythie
70a5105783 fix: add missing await on mail send 2023-08-25 18:33:24 +10:00
Mythie
420372ac9e fix: nicer dark mode for stack avatars 2023-08-25 17:52:58 +10:00
Mythie
6b00282a87 chore: support direct urls for prisma 2023-08-25 17:52:24 +10:00
Lucas Smith
dae1001cbb Merge pull request #300 from documenso/feat/update-document-flow
feat: update document flow
2023-08-25 12:11:43 +10:00
David Nguyen
af81d99b2a refactor: remove whitespace 2023-08-25 11:43:41 +10:00
David Nguyen
2751adc463 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-08-25 11:43:41 +10:00
Lucas Smith
396ce9f3f3 Merge pull request #295 from nsylke/nsylke-patch-6
fix: use -p cli option for next dev
2023-08-25 11:29:44 +10:00
Lucas Smith
3f4f66d878 Merge pull request #298 from adithyaakrishna/fix/dependabot
fix: dependabot workflow
2023-08-25 11:28:12 +10:00
Adithya Krishna
d6751d7a26 fix: dependabot workflow
Signed-off-by: Adithya Krishna <aadithya794@gmail.com>
2023-08-24 05:37:17 +00:00
Mythie
0e32baff0b feat: change document view upon completion 2023-08-24 13:31:50 +10:00
nsylke
f76bf4c2c7 fix: use -p cli option for next dev 2023-08-23 17:56:12 -05:00
Lucas Smith
0d8532ab6d Merge pull request #293 from documenso/feat/refactor-shared-components
refactor: extract common components into UI package
2023-08-23 14:08:23 +10:00
Lucas Smith
490d3d51e1 Merge pull request #290 from nsylke/nsylke-patch-5
feat: create robots.txt and sitemap.xml
2023-08-23 13:56:46 +10:00
David Nguyen
2ab796910e refactor: extract common components into UI package 2023-08-23 11:22:13 +10:00
Mythie
07102588be chore: resolve build errors 2023-08-23 10:57:31 +10:00
Nicholas Sylke
04f9422f24 feat: robots.txt & sitemap.xml 2023-08-21 21:41:19 -05:00
Lucas Smith
05a7f5e178 Merge pull request #289 from adithyaakrishna/fix/codeql
fix: fixed build command in codeql workflow
2023-08-22 12:10:45 +10:00
Adithya Krishna
7bae814f96 fix: fixed build command in codeql workflow
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-22 07:26:26 +05:30
Lucas Smith
ea45e38fa0 Merge pull request #273 from documenso/feat/feature-flag
feat: feature flags
2023-08-22 10:13:51 +10:00
Lucas Smith
6d9a85112f Merge pull request #286 from documenso/feat/blog-post-next
feat: add blog post 'Preview the next Documenso'
2023-08-22 10:07:43 +10:00
Lucas Smith
346efd19db Merge pull request #284 from adithyaakrishna/feat/general-updates
feat: added codeql and dependabot workflows
2023-08-22 10:06:39 +10:00
Adithya Krishna
617143a47f fix: removed ts from codeql
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-21 22:42:45 +05:30
flō
66f067276e Add visual asset for blog post 2023-08-21 17:24:29 +02:00
flō
fc10d0449f Create blog post 2023-08-21 17:23:47 +02:00
Adithya Krishna
083f3e7108 feat: add codeql-analysis
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-21 19:08:47 +05:30
Adithya Krishna
af307a2a49 chore: updated dependabot config
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-21 19:03:53 +05:30
Adithya Krishna
b063758ee5 chore: update readme file with radix-ui
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-21 19:03:26 +05:30
Adithya Krishna
4964b252e3 chore: update readme file
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-21 18:56:48 +05:30
Adithya Krishna
e468f5bbc9 chore: enable job concurrency
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-21 18:55:53 +05:30
Adithya Krishna
c5b7b8a18a feat: add dependabot config
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-21 18:54:59 +05:30
Adithya Krishna
a8a1fbb829 feat: Added Engines to Enforce Node v18.0.0 and above
Signed-off-by: Adithya Krishna <adikrish@redhat.com>
2023-08-21 18:54:44 +05:30
Timur Ercan
3c2a4892e7 Merge pull request #283 from documenso/chore/shop
chore: add shop to footer
2023-08-21 14:18:18 +02:00
Timur Ercan
6d9e84d327 chore: add shop to footer 2023-08-21 14:16:19 +02:00
Timur Ercan
73b4e30c97 Merge pull request #257 from documenso/feat/onepage
Feat/onepage
2023-08-21 13:33:04 +02:00
Lucas Smith
bd01545a70 Merge pull request #271 from premiare/feat/mobileNavigation
feat: Mobile Navigation
2023-08-21 20:01:08 +10:00
Mythie
6d360e581d fix: styling updates 2023-08-21 19:56:18 +10:00
David Nguyen
ba95818da4 feat: update items 2023-08-21 12:17:56 +10:00
David Nguyen
d0720f4c70 feat: update items
Refactored billing flag name

Refactored FeatureFlag type

Disabled session recording by default
2023-08-21 12:17:56 +10:00
David Nguyen
f60cb22f11 feat: feature flags 2023-08-21 12:17:56 +10:00
Lucas Smith
e0cb4314fb Merge pull request #280 from nsylke/nsylke-patch-4
chore: ignore intellij editor settings and some of vscode
2023-08-19 10:53:11 +10:00
Nicholas Sylke
0571137a60 chore: ignore intellij editor settings and some of vscode 2023-08-18 18:41:06 -05:00
Timur Ercan
30aabf50eb Merge pull request #279 from documenso/feat/funding
chore: remove funding rounding
2023-08-18 17:50:51 +02:00
Timur Ercan
8441a5eb98 Merge branch 'feat/refresh' into feat/funding 2023-08-18 17:48:31 +02:00
Timur Ercan
259ab49bc1 chore: remove funding rounding 2023-08-18 17:47:36 +02:00
premiare
2f2d5dfc0b Merge branch 'feat/refresh' into feat/mobileNavigation 2023-08-18 19:57:26 +10:00
premiare
0f27f4261b add PORT number back to package.json 2023-08-18 19:37:07 +10:00
premiare
9b92cad2db move menu links to map, add window-size hook 2023-08-18 19:35:45 +10:00
premiare
ad1ff6159c add reducedMotion check, center menu items 2023-08-18 19:05:46 +10:00
Lucas Smith
f633b17f17 Merge pull request #270 from Ashutosh-Bhadauriya/feat/add-commitlint
feat: add commitlint
2023-08-18 18:38:31 +10:00
Ashutosh-Bhadauriya
8fa16001e6 fix: commitlint 2023-08-18 13:49:46 +05:30
Ashutosh-Bhadauriya
e111234460 feat: add commitlint 2023-08-18 13:26:01 +05:30
Lucas Smith
034072f50e Merge branch 'feat/refresh' into feat/onepage 2023-08-18 12:15:36 +10:00
Lucas Smith
a7664d79fd Merge pull request #260 from documenso/feat/document-authoring
feat: document authoring
2023-08-18 12:10:35 +10:00
Lucas Smith
8ed2393300 Merge branch 'feat/refresh' into feat/document-authoring 2023-08-18 12:07:50 +10:00
Lucas Smith
94cf150ffd Merge pull request #258 from nsylke/nsylke-patch-3
ci: create build workflow
2023-08-18 09:32:44 +10:00
Nicholas Sylke
c571a3d0d9 ci: use built-in cache from setup-node action 2023-08-17 18:17:27 -05:00
Lucas Smith
1c7431b859 Merge pull request #264 from documenso/fix/blog-post-pre-seed
Fix: typo in blog post `pre-seed`
2023-08-18 08:59:21 +10:00
Lucas Smith
2f7d6548ef Merge pull request #259 from documenso/feat/pie-chart-legend
feat: add legend to pie chart
2023-08-18 08:55:49 +10:00
flō
a16525be5e fix typo 2023-08-17 17:20:55 +02:00
flō
21e377d3ff fix typo for consistency 2023-08-17 16:46:42 +02:00
premiare
45d0d3f7e8 extract hamburger to own file 2023-08-18 00:18:25 +10:00
premiare
6e62eb8d81 init mobileNavigation and added documenso symbol 2023-08-18 00:12:13 +10:00
Timur Ercan
e098449af4 Merge pull request #262 from documenso/feat/funding
fix: link
2023-08-17 13:02:38 +02:00
Timur Ercan
47d0030cf0 fix: link 2023-08-17 13:02:21 +02:00
Ephraim Atta-Duncan
b564e5e72f feat: reduce chart radius to add padding 2023-08-17 10:57:36 +00:00
Timur Ercan
e46607c1cb Merge pull request #261 from documenso/feat/funding
Feat/funding
2023-08-17 12:56:04 +02:00
Timur Ercan
77c5db169a fix: format heade 2023-08-17 12:54:40 +02:00
Timur Ercan
0157bf9576 chore: adding open to footer, naming 2023-08-17 12:50:31 +02:00
Timur Ercan
454c2f45bd fix: open page link 2023-08-17 12:46:24 +02:00
Timur Ercan
badb897c06 chore: update date 2023-08-17 12:41:55 +02:00
Timur Ercan
9bb5768598 Merge branch 'feat/refresh' into feat/funding 2023-08-17 12:39:37 +02:00
Timur Ercan
951de8baf5 chore: review updates 2023-08-17 12:37:58 +02:00
Mythie
48ceb1e5c7 feat: document authoring 2023-08-17 19:56:18 +10:00
Ephraim Atta-Duncan
96e8962956 feat: change legend text color to black 2023-08-17 09:44:43 +00:00
Ephraim Atta-Duncan
f3259aedea feat: Add legend to pie chart 2023-08-17 08:24:37 +00:00
Lucas Smith
9fdc9dcbf7 Merge pull request #256 from nsylke/nsylke-patch-2
Add husky & lint staged
2023-08-17 11:07:18 +10:00
Nicholas Sylke
0a30403719 ci: remove --workspaces from the build script in ci workflow 2023-08-16 20:00:13 -05:00
Nicholas Sylke
0e1fcd86e6 ci: setup build workflow 2023-08-16 19:51:45 -05:00
Nicholas Sylke
8038f3ad00 fix: used wrong lockfile version when resolving conflicts 2023-08-16 13:00:50 -05:00
Timur Ercan
44369ee7f6 mention cals open startup article 2023-08-16 17:52:04 +02:00
Timur Ercan
7e46cb0d8e feat: pre seed announce and link on /open page 2023-08-16 17:42:27 +02:00
Nicholas Sylke
10e39246ce Merge branch 'feat/refresh' into nsylke-patch-2
# Conflicts:
#	package-lock.json
2023-08-16 07:34:40 -05:00
Timur Ercan
5e45767e44 Merge pull request #249 from documenso/feat/open-page
feat: add cap table to open page
2023-08-16 14:09:01 +02:00
Timur Ercan
61d7f7cbcd chore: whitespace 2023-08-16 14:08:21 +02:00
Timur Ercan
8f3c47d659 Merge branch 'feat/refresh' into feat/open-page 2023-08-16 14:05:18 +02:00
Timur Ercan
3b9c57fe5c chore: remove double emtpy state add CTA 2023-08-16 13:49:19 +02:00
Nicholas Sylke
6017d35cfd refactor: future proofing the prettier/lint-staged for js/ts filetypes 2023-08-16 06:27:45 -05:00
Timur Ercan
90e28cd3a4 chore: status order to figma 2023-08-16 09:29:16 +02:00
Timur Ercan
e743e56787 remove dashboard and link bar 2023-08-16 09:03:28 +02:00
Nicholas Sylke
ba25ea1370 refactor: use lint-staged.config.cjs as configuration for lint-staged 2023-08-15 16:02:58 -05:00
Ephraim Atta-Duncan
b7543298e1 fix: ssr hydration error in piechart 2023-08-15 18:02:10 +00:00
Timur Ercan
29b4cb7793 chore: add total 2023-08-15 14:00:05 +02:00
Ephraim Atta-Duncan
f7c3190346 chore: fix ts errors in metrics 2023-08-15 11:13:13 +00:00
Ephraim Atta-Duncan
5130dc5f31 chore: refactor github charts into a single component 2023-08-15 09:43:24 +00:00
Ephraim Atta-Duncan
d3cdd2c317 chore: use correct names on tooltip 2023-08-15 09:17:51 +00:00
Ephraim Atta-Duncan
96f7ca4e36 feat: add other charts 2023-08-15 08:45:24 +00:00
Ephraim Atta-Duncan
e2471a8eb4 chore: fix eslint error in data 2023-08-14 22:03:56 +00:00
Ephraim Atta-Duncan
5f33b1da1e chore: format date 2023-08-14 22:01:25 +00:00
Ephraim Atta-Duncan
bca048c026 chore: fetch stargazers data from stargazers api 2023-08-14 21:51:38 +00:00
Ephraim Atta-Duncan
f999ca48f6 feat: add github stars cummulative 2023-08-14 21:33:16 +00:00
Nicholas Sylke
f0c607d87a add husky and lint-staged to ensure commits are formatted 2023-08-14 16:14:53 -05:00
Timur Ercan
6f394138f5 chore: team updates, funding cummulative 2023-08-14 14:16:04 +02:00
Ephraim Atta-Duncan
b710693009 feat: add team members engagement to open page 2023-08-08 01:53:56 +00:00
Lucas Smith
fb4b96a838 Merge pull request #246 from fmerian/feat/refresh
Edit blog post
2023-08-07 11:24:36 +10:00
Ephraim Atta-Duncan
af2dae8822 --amend 2023-08-06 23:01:33 +00:00
Ephraim Atta-Duncan
e400dbe2ea feat: add tooltip to cap table 2023-08-06 22:59:09 +00:00
Ephraim Atta-Duncan
b718bdeb15 Add initial cap table 2023-08-06 22:46:20 +00:00
Mythie
9ca84f5ede chore: add contributor license agreement 2023-08-05 17:44:39 +10:00
flō
1a31cc321c fix typo 2023-08-04 08:25:51 +02:00
flō
2ec3cebcc9 Optimize description 2023-08-03 12:32:27 +02:00
flō
659af87592 Edit content 2023-08-03 11:40:00 +02:00
Lucas Smith
beb1a4c214 Merge pull request #243 from fmerian/feat/refresh
Add new blog post: Switching to Discord
2023-08-02 20:09:01 +10:00
flō
16a7030922 Edit blog post description 2023-08-02 11:27:07 +02:00
flō
c036858d45 Update link to community (Discord) 2023-08-02 11:16:04 +02:00
flō
84d295e324 Update link to community (Discord) 2023-08-02 11:15:08 +02:00
flō
90eb54f768 Add blog post: Switching to Discord 2023-08-02 11:11:29 +02:00
flō
547ed337a6 Add profile picture: Flo 2023-08-02 10:57:29 +02:00
Lucas Smith
3f5937717f Merge pull request #238 from fmerian/fix-blog
Update blog
2023-08-02 17:52:17 +10:00
flō
3cdfde5e0f fix mailto 2023-08-02 09:07:34 +02:00
Ephraim Atta-Duncan
6b1fcb8193 feat: open page 2023-08-01 17:43:11 +10:00
Mythie
9431e7f0ad chore: upgrade deps and linting 2023-08-01 17:34:17 +10:00
flō
817569a333 fix typo 2023-07-31 11:26:43 +02:00
flō
0bbaa64080 edit announcing-documenso.mdx
- fix typo for consistency in tone and voice
- edit filename for SEO
2023-07-31 10:39:05 +02:00
flō
c403812389 edit manifest.mdx
- fix typo in caption for consistency
- edit filename (URL) for SEO
2023-07-31 10:26:30 +02:00
Lucas Smith
25d7390b27 Merge pull request #207 from doug-andrade/v2-google-auth
feat: add google as auth provider  **no schema change**
2023-07-31 13:55:25 +10:00
Mythie
918018c7ca fix: improve typesafety 2023-07-31 13:53:55 +10:00
Mythie
58baf5ddf4 Merge branch 'feat/refresh' into v2-google-auth 2023-07-31 13:03:32 +10:00
Mythie
32dcd4aa0e chore: add oss friends page 2023-07-29 17:39:08 +10:00
Lucas Smith
cacfc2c535 Merge pull request #236 from documenso/feat/content-layer
feat: add content layer
2023-07-29 00:25:26 +10:00
Mythie
8115ea3bf2 fix: type errors 2023-07-28 20:16:06 +10:00
Mythie
c64ff8ec95 fix: styling updates 2023-07-28 20:14:04 +10:00
David Nguyen
38323b5ea5 feat: update privacy content 2023-07-28 16:31:10 +10:00
David Nguyen
34d10bd313 feat: update blog styling 2023-07-28 11:19:52 +10:00
David Nguyen
d743f8411a feat: update privacy content 2023-07-28 11:07:01 +10:00
David Nguyen
d8a6aa2686 feat: remove whitespace 2023-07-28 10:54:03 +10:00
David Nguyen
dfcfe1d8d2 feat: add generic content page 2023-07-28 09:58:47 +10:00
David Nguyen
6038c3cc78 Update apps/marketing/content/blog/announcing-documenso.mdx
Co-authored-by: Joshua Sharp <joshuafsharp@gmail.com>
2023-07-28 09:12:37 +10:00
David Nguyen
97efcf3d62 feat: add content layer
Add blog pages

Add privacy page
2023-07-27 18:29:22 +10:00
Lucas Smith
889ad1c49f Merge pull request #217 from documenso/feat/stacked-avatars
feat: stack avatars
2023-07-26 19:58:34 +10:00
Mythie
b3fa837967 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-07-26 18:52:53 +10:00
Ephraim Atta-Duncan
a5334ca6e6 refactor: read z-index values from an object 2023-07-05 20:47:12 +00:00
Ephraim Atta-Duncan
0ad0524157 Merge branch 'feat/refresh' into feat/stacked-avatars 2023-07-01 01:16:58 +00:00
Ephraim Atta-Duncan
b50f64d4ad fix: update types from code review 2023-06-30 23:49:34 +00:00
Ephraim Atta-Duncan
88d15376e3 feat: update stack avatar with changes from code review 2023-06-30 23:38:37 +00:00
Ephraim Atta-Duncan
aa884310eb feat: add recipients avatars on all tables 2023-06-25 15:14:48 +00:00
Ephraim Atta-Duncan
dbcf7771b9 chore: refactor stacked avatars into component 2023-06-25 14:23:18 +00:00
Mythie
60b150cc58 fix: add shadow to metric-card 2023-06-24 15:01:18 +10:00
Mythie
bd0db0f8fd feat: email templates
adds email templates using `react-email` which will be used for invites,
signing and document completion.

authored by @dephraiim
2023-06-24 14:59:08 +10:00
Ephraim Atta-Duncan
2e8e39c5a9 feat: add tooltip on hover on stacked avatars 2023-06-23 20:19:25 +00:00
Ephraim Atta-Duncan
f22baca569 feat: stack recipients avatars on dashboard 2023-06-23 12:20:49 +00:00
Mythie
d8a094a324 chore: use jsonprotocol 2023-06-23 18:06:02 +10:00
Lucas Smith
4b063b68ab Merge pull request #214 from doug-andrade/refresh/dashboard-filters
linking card metrics to filtered /documents
2023-06-22 08:09:16 +10:00
Doug Andrade
3c02331cb9 linking card metrics to filtered /documents 2023-06-21 17:57:02 -04:00
Mythie
eea09dcfac feat: persist fields and recipients for document editing 2023-06-21 23:49:23 +10:00
Mythie
3aea62e898 fix: styling and semantic updates 2023-06-21 23:48:22 +10:00
Lucas Smith
76674523c5 Merge pull request #208 from doug-andrade/refesh/document-loading
improved loading state for /document/id
2023-06-16 00:19:37 +10:00
Doug Andrade
e0e2f3e440 improved loading state for /document/id 2023-06-13 23:28:25 -04:00
Doug Andrade
d1bc948f3c clean up console.log() used for testing 2023-06-13 02:00:45 -04:00
Doug Andrade
2b84636993 feat: google auth without schema change 2023-06-13 01:53:12 -04:00
Lucas Smith
05238f096b feat: dark mode & theme switching
feat: dark mode & theme switching
2023-06-12 16:01:02 +10:00
Doug Andrade
dd83d4607c fix: dark mode on signup and signin pages 2023-06-11 12:26:47 -04:00
Doug Andrade
07d13c74f5 fix: signature pad in dark mode 2023-06-11 11:36:13 -04:00
Doug Andrade
64d1d6df37 resolving eslint build errors 2023-06-11 02:21:13 -04:00
Doug Andrade
877a579533 adding dark mode to feat/refresh 2023-06-11 01:50:19 -04:00
Mythie
b0e364acf4 wip: create document workflow 2023-06-10 22:33:12 +10:00
Mythie
803ebccee3 wip: refresh design 2023-06-09 18:22:21 +10:00
376 changed files with 6824 additions and 68774 deletions

View File

@@ -4,10 +4,8 @@ NEXTAUTH_SECRET="secret"
# [[CRYPTO]]
# Application Key for symmetric encryption and decryption
# REQUIRED: This should be a random string of at least 32 characters
NEXT_PRIVATE_ENCRYPTION_KEY=""
# REQUIRED: This should be a random string of at least 32 characters
NEXT_PRIVATE_ENCRYPTION_SECONDARY_KEY=""
# This should be a random string of at least 32 characters
NEXT_PRIVATE_ENCRYPTION_KEY="CAFEBABE"
# [[AUTH OPTIONAL]]
NEXT_PRIVATE_GOOGLE_CLIENT_ID=""
@@ -25,7 +23,7 @@ NEXT_PRIVATE_DIRECT_DATABASE_URL="postgres://documenso:password@127.0.0.1:54320/
# [[E2E Tests]]
E2E_TEST_AUTHENTICATE_USERNAME="Test User"
E2E_TEST_AUTHENTICATE_USER_EMAIL="testuser@mail.com"
E2E_TEST_AUTHENTICATE_USER_PASSWORD="test_password"
E2E_TEST_AUTHENTICATE_USER_PASSWORD="test_Password123"
# [[STORAGE]]
# OPTIONAL: Defines the storage transport to use. Available options: database (default) | s3
@@ -79,14 +77,16 @@ NEXT_PRIVATE_MAILCHANNELS_DKIM_PRIVATE_KEY=
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=
NEXT_PUBLIC_STRIPE_FREE_PLAN_ID=
# [[FEATURES]]
# OPTIONAL: Leave blank to disable PostHog and feature flags.
NEXT_PUBLIC_POSTHOG_KEY=""
# OPTIONAL: Defines the host to use for PostHog.
NEXT_PUBLIC_POSTHOG_HOST="https://eu.posthog.com"
# 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]]

View File

@@ -1,10 +1,11 @@
name: 'Bug Report'
labels: ['bug']
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.
value:
Thank you for reporting an issue.
Please fill in as much of the form below as you're able to.
- type: textarea
attributes:

View File

@@ -1,4 +1,4 @@
name: 'Feature Request'
name: "Feature Request"
description: Suggest a new idea or enhancement for this project
body:
- type: markdown
@@ -33,4 +33,3 @@ body:
- 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

View File

@@ -1,39 +1,35 @@
name: 'General Improvement Request'
description: 'Suggest a minor enhancement or improvement for this project'
title: '[Title for your improvement suggestion]'
name: "General Improvement"
description: Suggest a minor enhancement or improvement for this project
body:
- type: markdown
attributes:
value: Please provide a clear and concise title for your improvement suggestion
- 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
label: Improvement Description
description: Describe the improvement you are suggesting in detail. Explain what specific aspect of the project it addresses or enhances.
- 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
label: Rationale
description: Explain why this improvement would be beneficial. Share any context, pain points, or reasons for suggesting this change.
- type: textarea
attributes:
label: 'Do you want to work on this improvement?'
multiple: false
options:
- 'No'
- 'Yes'
default: 0
validations:
required: true
label: Proposed Solution
description: If you have a suggestion for how this improvement could be implemented, describe it here. Include any technical details, design suggestions, or other relevant information.
- type: textarea
attributes:
label: Alternatives (optional)
description: Are there any alternative approaches to achieve the same improvement? Describe other ways to address the issue or enhance the project.
- type: textarea
attributes:
label: Additional Context
description: Add any additional context or information that might be relevant to the improvement suggestion.
- type: checkboxes
attributes:
label: 'Please check the boxes that apply to this improvement suggestion.'
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
- 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.

View File

@@ -4,29 +4,29 @@ updates:
- package-ecosystem: 'github-actions'
directory: '/'
schedule:
interval: 'weekly'
target-branch: 'main'
interval: "weekly"
target-branch: "feat/refresh"
labels:
- 'ci dependencies'
- 'ci'
- "ci dependencies"
- "ci"
open-pull-requests-limit: 0
- package-ecosystem: 'npm'
directory: '/apps/marketing'
- package-ecosystem: "npm"
directory: "/apps/marketing"
schedule:
interval: 'weekly'
target-branch: 'main'
interval: "weekly"
target-branch: "feat/refresh"
labels:
- 'npm dependencies'
- 'frontend'
- "npm dependencies"
- "frontend"
open-pull-requests-limit: 0
- package-ecosystem: 'npm'
directory: '/apps/web'
- package-ecosystem: "npm"
directory: "/apps/web"
schedule:
interval: 'weekly'
target-branch: 'main'
interval: "weekly"
target-branch: "feat/refresh"
labels:
- 'npm dependencies'
- 'frontend'
- "npm dependencies"
- "frontend"
open-pull-requests-limit: 0

21
.github/labeler.yml vendored
View File

@@ -1,21 +0,0 @@
'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/**

View File

@@ -1,10 +1,10 @@
name: 'Continuous Integration'
name: "Continuous Integration"
on:
push:
branches: ['main']
branches: [ "feat/refresh" ]
pull_request:
branches: ['main']
branches: [ "feat/refresh" ]
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
@@ -14,17 +14,17 @@ env:
HUSKY: 0
jobs:
build_app:
name: Build App
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v3
with:
fetch-depth: 2
- name: Install Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v3
with:
node-version: 18
cache: npm
@@ -37,15 +37,3 @@ jobs:
- 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

View File

@@ -1,11 +1,11 @@
name: 'CodeQL'
name: "CodeQL"
on:
workflow_dispatch:
push:
branches: ['main']
branches: [ feat/refresh ]
pull_request:
branches: ['main']
branches: [ feat/refresh ]
jobs:
analyze:
@@ -19,13 +19,13 @@ jobs:
strategy:
fail-fast: true
matrix:
language: ['javascript']
language: [ 'javascript' ]
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v3
- uses: actions/setup-node@v4
- uses: actions/setup-node@v3
with:
node-version: 18
cache: npm

View File

@@ -1,24 +0,0 @@
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

View File

@@ -1,50 +1,51 @@
name: Playwright Tests
on:
push:
branches: ['main']
branches: [feat/refresh]
pull_request:
branches: ['main']
branches: [feat/refresh]
jobs:
e2e_tests:
name: "E2E Tests"
timeout-minutes: 60
runs-on: ubuntu-latest
services:
postgres:
image: postgres
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
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/*"
name: playwright-report
path: playwright-report/
retention-days: 30
env:
NEXT_PRIVATE_DATABASE_URL: postgresql://postgres:postgres@localhost:5432/documenso
NEXT_PRIVATE_DIRECT_DATABASE_URL: postgresql://postgres:postgres@localhost:5432/documenso
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ vars.TURBO_TEAM }}

View File

@@ -1,29 +0,0 @@
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

@@ -1,63 +0,0 @@
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 }}`,
}
});
}

View File

@@ -1,21 +0,0 @@
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"]
})

View File

@@ -1,20 +0,0 @@
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

@@ -1,64 +0,0 @@
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

@@ -1,4 +1,4 @@
name: 'Validate PR Name'
name: "Validate PR Name"
on:
pull_request_target:
@@ -9,54 +9,13 @@ on:
- synchronize
permissions:
pull-requests: write
pull-requests: read
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! 💚🚀

View File

@@ -1,24 +0,0 @@
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'

View File

@@ -1,13 +1,10 @@
{
"typescript.tsdk": "node_modules/typescript/lib",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
"source.fixAll.eslint": true
},
"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
"typescript.enablePromptUseWorkspaceTsdk": true
}

View File

@@ -37,7 +37,7 @@ The development branch is <code>main</code>. All pull requests should be made ag
- Create a new branch (include the issue id and something readable):
```sh
git checkout -b feat/doc-999-somefeature-that-rocks
git checkout -b doc-999-my-feature-or-fix
```
3. See the [Developer Setup](https://github.com/documenso/documenso/blob/main/README.md#developer-setup) for more setup details.

View File

@@ -1,6 +0,0 @@
# The Documenso Manifest
Signing documents is a fundamental building block of private, economic, and government interactions. Access to easy and secure signing to participate in society should therefore be a fundamental right for everyone. The technology to enable this should be accessible and widespread.
We know that open source is the key to solving this need once and for all to benefit all humankind. Using open source kickstarts innovation by putting the open sharing of ideas and solutions first. With Documenso, we will create an open and globally accessible signing platform to empower users, customers, and developers to fulfill their needs. Documenso is built by and for the global community, listening and implementing what is needed. Being transparent with the code and the processes that use it brings trust and security to the platform.
We build Documenso for longevity and scale by embracing the capital efficiency and inclusiveness of the Commercial Open Source (COSS) movement. We are building a global commodity for the world.

View File

@@ -1,4 +1,4 @@
>We are nominated for a Product Hunt Gold Kitty 😺✨ and appreciate any support: https://documen.so/kitty
🚨 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)
<img src="https://github.com/documenso/documenso/assets/13398220/a643571f-0239-46a6-a73e-6bef38d1228b" alt="Documenso Logo">
@@ -15,9 +15,9 @@
·
<a href="https://github.com/documenso/documenso/issues">Issues</a>
·
<a href="https://documen.so/live">Upcoming Releases</a>
<a href="https://github.com/documenso/documenso/milestones">Roadmap</a>
·
<a href="https://documen.so/roadmap">Roadmap</a>
<a href="https://documen.so/launches">Upcoming Launches</a>
</p>
</p>
@@ -117,12 +117,10 @@ To run Documenso locally, you will need
Want to get up and running quickly? Follow these steps:
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:
1. [Clone the repository](https://help.github.com/articles/cloning-a-repository/) it to your local device.
```sh
git clone https://github.com/<your-username>/documenso
git clone https://github.com/documenso/documenso
```
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.
@@ -156,12 +154,10 @@ npm run d
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:
1. [Clone the repository](https://help.github.com/articles/cloning-a-repository/) it to your local device.
```sh
git clone https://github.com/<your-username>/documenso
git clone https://github.com/documenso/documenso
```
2. Run `npm i` in the root directory
@@ -201,12 +197,6 @@ git clone https://github.com/<your-username>/documenso
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.
@@ -248,7 +238,7 @@ Now you can install the dependencies and build it:
```
npm i
npm run build:web
npm run:build:web
npm run prisma:migrate-deploy
```
@@ -286,16 +276,12 @@ WantedBy=multi-user.target
### Railway
[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/bG6D4p)
[![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)
### 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.

View File

@@ -1,84 +0,0 @@
---
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

@@ -1,28 +0,0 @@
---
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

@@ -1,115 +0,0 @@
---
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

@@ -7,8 +7,6 @@ authorRole: 'Co-Founder'
date: 2023-07-13
tags:
- Manifesto
- Open Source
- Vision
---
<figure>

View File

@@ -1,6 +1,6 @@
---
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.
description: We are exicited 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'
@@ -14,11 +14,9 @@ tags:
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:

View File

@@ -30,7 +30,7 @@ We kicked off [Malfunction Mania](https://documenso.com/blog/malfunction-mania)
## 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.
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 contrinuting to Documenso.
<figure>
<MdxNextImage

View File

@@ -24,9 +24,9 @@ Were an open-source project and focus on building a great developer experienc
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.
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.
Instead, well focus on *how* we plan to make the switch.
## Who is this story for?
@@ -47,13 +47,14 @@ The detailed plan goes like this:
- 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
@@ -72,7 +73,6 @@ The detailed plan goes like this:
```
- **Twitter**
- [Tweet the announcement](https://twitter.com/documenso/status/1686719482096766977)
- Pin Tweet
- Update link in bio
@@ -87,7 +87,6 @@ The detailed plan goes like this:
```
- **Slack**
- Post message in `#general`
```markdown
@@ -107,15 +106,15 @@ The detailed plan goes like this:
- 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`
```
@@ -132,5 +131,5 @@ The detailed plan goes like this:
## 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?_
- 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

@@ -1,13 +0,0 @@
---
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

@@ -1,5 +1,4 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const fs = require('fs');
const path = require('path');
const { withContentlayer } = require('next-contentlayer');
@@ -11,31 +10,15 @@ ENV_FILES.forEach((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',
},
serverActionsBodySizeLimit: '10mb',
},
reactStrictMode: true,
transpilePackages: [
'@documenso/assets',
'@documenso/lib',
'@documenso/tailwind-config',
'@documenso/trpc',
'@documenso/ui',
],
transpilePackages: ['@documenso/lib', '@documenso/prisma', '@documenso/trpc', '@documenso/ui'],
env: {
NEXT_PUBLIC_PROJECT: 'marketing',
FONT_CAVEAT_URI: `data:font/ttf;base64,${FONT_CAVEAT_BYTES.toString('base64')}`,
},
modularizeImports: {
'lucide-react': {

View File

@@ -1,6 +1,6 @@
{
"name": "@documenso/marketing",
"version": "1.2.3",
"version": "0.1.0",
"private": true,
"license": "AGPL-3.0",
"scripts": {
@@ -13,7 +13,6 @@
"copy:pdfjs": "node ../../scripts/copy-pdfjs.cjs"
},
"dependencies": {
"@documenso/assets": "*",
"@documenso/lib": "*",
"@documenso/tailwind-config": "*",
"@documenso/trpc": "*",
@@ -24,8 +23,8 @@
"lucide-react": "^0.279.0",
"luxon": "^3.4.0",
"micro": "^10.0.1",
"next": "14.0.3",
"next-auth": "4.24.5",
"next": "14.0.0",
"next-auth": "4.24.3",
"next-contentlayer": "^0.3.4",
"next-plausible": "^3.10.1",
"perfect-freehand": "^1.2.0",
@@ -36,7 +35,7 @@
"react-hook-form": "^7.43.9",
"react-icons": "^4.11.0",
"recharts": "^2.7.2",
"sharp": "0.33.1",
"sharp": "0.32.5",
"typescript": "5.2.2",
"zod": "^3.22.4"
},
@@ -44,13 +43,5 @@
"@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

@@ -6,6 +6,8 @@ declare namespace NodeJS {
NEXT_PRIVATE_DATABASE_URL: string;
NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_MONTHLY_PRICE_ID: string;
NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_YEARLY_PRICE_ID: string;
NEXT_PUBLIC_STRIPE_FREE_PLAN_ID?: string;
NEXT_PRIVATE_STRIPE_API_KEY: string;
NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET: string;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 331 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 629 B

After

Width:  |  Height:  |  Size: 629 B

View File

@@ -4,13 +4,13 @@ import { allBlogPosts } from 'contentlayer/generated';
export const runtime = 'edge';
export const contentType = 'image/png';
export const IMAGE_SIZE = {
export const size = {
width: 1200,
height: 630,
};
export const contentType = 'image/png';
type BlogPostOpenGraphImageProps = {
params: { post: string };
};
@@ -25,16 +25,16 @@ export default async function BlogPostOpenGraphImage({ params }: BlogPostOpenGra
// The long urls are needed for a compiler optimisation on the Next.js side, lifting this up
// to a constant will break og image generation.
const [interBold, interRegular, backgroundImage, logoImage] = await Promise.all([
fetch(new URL('@documenso/assets/fonts/inter-bold.ttf', import.meta.url)).then(async (res) =>
fetch(new URL('./../../../../assets/inter-bold.ttf', import.meta.url)).then(async (res) =>
res.arrayBuffer(),
),
fetch(new URL('@documenso/assets/fonts/inter-regular.ttf', import.meta.url)).then(async (res) =>
fetch(new URL('./../../../../assets/inter-regular.ttf', import.meta.url)).then(async (res) =>
res.arrayBuffer(),
),
fetch(new URL('@documenso/assets/images/background-blog-og.png', import.meta.url)).then(
fetch(new URL('./../../../../assets/background-blog-og.png', import.meta.url)).then(
async (res) => res.arrayBuffer(),
),
fetch(new URL('@documenso/assets/logo.png', import.meta.url)).then(async (res) =>
fetch(new URL('./../../../../../public/logo.png', import.meta.url)).then(async (res) =>
res.arrayBuffer(),
),
]);
@@ -56,7 +56,7 @@ export default async function BlogPostOpenGraphImage({ params }: BlogPostOpenGra
</div>
),
{
...IMAGE_SIZE,
...size,
fonts: [
{
name: 'Inter',

View File

@@ -29,7 +29,7 @@ export default function MarketingLayout({ children }: MarketingLayoutProps) {
return (
<div
className={cn('relative flex min-h-[100vh] max-w-[100vw] flex-col pt-20 md:pt-28', {
className={cn('relative max-w-[100vw] pt-20 md:pt-28', {
'overflow-y-auto overflow-x-hidden': pathname !== '/singleplayer',
})}
>
@@ -41,7 +41,7 @@ export default function MarketingLayout({ children }: MarketingLayoutProps) {
<Header className="mx-auto h-16 max-w-screen-xl px-4 md:h-20 lg:px-8" />
</div>
<div className="relative mx-auto max-w-screen-xl flex-1 px-4 lg:px-8">{children}</div>
<div className="relative mx-auto max-w-screen-xl px-4 lg:px-8">{children}</div>
<Footer className="bg-background border-muted mt-24 border-t" />
</div>

View File

@@ -47,14 +47,6 @@ export const TEAM_MEMBERS = [
engagement: 'Full-Time',
joinDate: 'October 9th, 2023',
},
{
name: 'Adithya Krishna',
role: 'Software Engineer - II',
salary: '-',
location: 'India',
engagement: 'Full-Time',
joinDate: 'December 1st, 2023',
},
];
export const FUNDING_RAISED = [

View File

@@ -3,7 +3,7 @@
import { DateTime } from 'luxon';
import { Bar, BarChart, ResponsiveContainer, Tooltip, XAxis, YAxis } from 'recharts';
import type { GetUserMonthlyGrowthResult } from '@documenso/lib/server-only/user/get-user-monthly-growth';
import { GetUserMonthlyGrowthResult } from '@documenso/lib/server-only/user/get-user-monthly-growth';
import { cn } from '@documenso/ui/lib/utils';
export type MonthlyNewUsersChartProps = {
@@ -22,7 +22,7 @@ export const MonthlyNewUsersChart = ({ className, data }: MonthlyNewUsersChartPr
return (
<div className={cn('flex flex-col', className)}>
<div className="flex items-center px-4">
<h3 className="text-lg font-semibold">New Users</h3>
<h3 className="text-lg font-semibold">Monthly New Users</h3>
</div>
<div className="border-border mt-2.5 flex flex-1 items-center justify-center rounded-2xl border p-6 pl-2 pt-12 shadow-sm hover:shadow">

View File

@@ -3,7 +3,7 @@
import { DateTime } from 'luxon';
import { Bar, BarChart, ResponsiveContainer, Tooltip, XAxis, YAxis } from 'recharts';
import type { GetUserMonthlyGrowthResult } from '@documenso/lib/server-only/user/get-user-monthly-growth';
import { GetUserMonthlyGrowthResult } from '@documenso/lib/server-only/user/get-user-monthly-growth';
import { cn } from '@documenso/ui/lib/utils';
export type MonthlyTotalUsersChartProps = {
@@ -22,7 +22,7 @@ export const MonthlyTotalUsersChart = ({ className, data }: MonthlyTotalUsersCha
return (
<div className={cn('flex flex-col', className)}>
<div className="flex items-center px-4">
<h3 className="text-lg font-semibold">Total Users</h3>
<h3 className="text-lg font-semibold">Monthly Total Users</h3>
</div>
<div className="border-border mt-2.5 flex flex-1 items-center justify-center rounded-2xl border p-6 pl-2 pt-12 shadow-sm hover:shadow">

View File

@@ -29,7 +29,10 @@ export function OpenPageTooltip() {
</svg>
</TooltipTrigger>
<TooltipContent>
<p>Active Subscriptions.</p>
<p>
August and earlier: Active subscribers. September and beyond: Numbers of active
subscriptions.
</p>
</TooltipContent>
</Tooltip>
</TooltipProvider>

View File

@@ -2,7 +2,7 @@ import Image from 'next/image';
import { z } from 'zod';
import backgroundPattern from '@documenso/assets/images/background-pattern.png';
import backgroundPattern from '~/assets/background-pattern.png';
import { OSSFriendsContainer } from './container';
import { TOSSFriendsSchema, ZOSSFriendsSchema } from './schema';

View File

@@ -1,5 +1,3 @@
'use client';
import Link from 'next/link';
import {

View File

@@ -10,21 +10,23 @@ import { base64 } from '@documenso/lib/universal/base64';
import { putFile } from '@documenso/lib/universal/upload/put-file';
import type { Field, Recipient } from '@documenso/prisma/client';
import { DocumentDataType, Prisma } from '@documenso/prisma/client';
import { trpc } from '@documenso/trpc/react';
import { Card, CardContent } from '@documenso/ui/primitives/card';
import { DocumentDropzone } from '@documenso/ui/primitives/document-dropzone';
import { AddFieldsFormPartial } from '@documenso/ui/primitives/document-flow/add-fields';
import type { TAddFieldsFormSchema } from '@documenso/ui/primitives/document-flow/add-fields.types';
import { AddSignatureFormPartial } from '@documenso/ui/primitives/document-flow/add-signature';
import type { TAddSignatureFormSchema } from '@documenso/ui/primitives/document-flow/add-signature.types';
import { DocumentFlowFormContainer } from '@documenso/ui/primitives/document-flow/document-flow-root';
import {
DocumentFlowFormContainer,
DocumentFlowFormContainerHeader,
} from '@documenso/ui/primitives/document-flow/document-flow-root';
import type { DocumentFlowStep } from '@documenso/ui/primitives/document-flow/types';
import { LazyPDFViewer } from '@documenso/ui/primitives/lazy-pdf-viewer';
import { Stepper } from '@documenso/ui/primitives/stepper';
import { useToast } from '@documenso/ui/primitives/use-toast';
const SinglePlayerModeSteps = ['fields', 'sign'] as const;
type SinglePlayerModeStep = (typeof SinglePlayerModeSteps)[number];
import { createSinglePlayerDocument } from '~/components/(marketing)/single-player-mode/create-single-player-document.action';
type SinglePlayerModeStep = 'fields' | 'sign';
// !: This entire file is a hack to get around failed prerendering of
// !: the Single Player Mode page. This regression was introduced during
@@ -40,9 +42,6 @@ export const SinglePlayerClient = () => {
const [step, setStep] = useState<SinglePlayerModeStep>('fields');
const [fields, setFields] = useState<Field[]>([]);
const { mutateAsync: createSinglePlayerDocument } =
trpc.singleplayer.createSinglePlayerDocument.useMutation();
const documentFlow: Record<SinglePlayerModeStep, DocumentFlowStep> = {
fields: {
title: 'Add document',
@@ -86,7 +85,6 @@ export const SinglePlayerClient = () => {
data.fields.map((field, i) => ({
id: i,
documentId: -1,
templateId: null,
recipientId: -1,
type: field.type,
page: field.pageNumber,
@@ -149,7 +147,6 @@ export const SinglePlayerClient = () => {
const placeholderRecipient: Recipient = {
id: -1,
documentId: -1,
templateId: null,
email: '',
name: '',
token: '',
@@ -227,35 +224,37 @@ export const SinglePlayerClient = () => {
</div>
<div className="col-span-12 lg:col-span-6 xl:col-span-5">
<DocumentFlowFormContainer
className="top-24 lg:h-[calc(100vh-7rem)]"
onSubmit={(e) => e.preventDefault()}
>
<Stepper
currentStep={currentDocumentFlow.stepIndex}
setCurrentStep={(step) => setStep(SinglePlayerModeSteps[step - 1])}
>
<DocumentFlowFormContainer className="top-24" onSubmit={(e) => e.preventDefault()}>
<DocumentFlowFormContainerHeader
title={currentDocumentFlow.title}
description={currentDocumentFlow.description}
/>
{/* Add fields to PDF page. */}
{step === 'fields' && (
<fieldset disabled={!uploadedFile} className="flex h-full flex-col">
<AddFieldsFormPartial
documentFlow={documentFlow.fields}
hideRecipients={true}
recipients={uploadedFile ? [placeholderRecipient] : []}
numberOfSteps={Object.keys(documentFlow).length}
fields={fields}
onSubmit={onFieldsSubmit}
/>
</fieldset>
)}
{/* Enter user details and signature. */}
{step === 'sign' && (
<AddSignatureFormPartial
documentFlow={documentFlow.sign}
numberOfSteps={Object.keys(documentFlow).length}
fields={fields}
onSubmit={onSignSubmit}
requireName={Boolean(fields.find((field) => field.type === 'NAME'))}
requireSignature={Boolean(fields.find((field) => field.type === 'SIGNATURE'))}
/>
</Stepper>
)}
</DocumentFlowFormContainer>
</div>
</div>

View File

@@ -7,10 +7,11 @@ import { useRouter } from 'next/navigation';
import { motion } from 'framer-motion';
import { ChevronLeft } from 'lucide-react';
import backgroundPattern from '@documenso/assets/images/background-pattern.png';
import { cn } from '@documenso/ui/lib/utils';
import { Button } from '@documenso/ui/primitives/button';
import backgroundPattern from '~/assets/background-pattern.png';
export default function NotFound() {
const router = useRouter();

View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Before

Width:  |  Height:  |  Size: 896 KiB

After

Width:  |  Height:  |  Size: 896 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 337 KiB

After

Width:  |  Height:  |  Size: 337 KiB

View File

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 251 KiB

After

Width:  |  Height:  |  Size: 251 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 394 KiB

After

Width:  |  Height:  |  Size: 394 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 23 KiB

View File

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 254 KiB

View File

Before

Width:  |  Height:  |  Size: 20 MiB

After

Width:  |  Height:  |  Size: 20 MiB

View File

@@ -0,0 +1,160 @@
'use client';
import React, { useEffect, useState } from 'react';
import { useSearchParams } from 'next/navigation';
import { zodResolver } from '@hookform/resolvers/zod';
import { Info } from 'lucide-react';
import { usePlausible } from 'next-plausible';
import { useForm } from 'react-hook-form';
import { z } from 'zod';
import { useAnalytics } from '@documenso/lib/client-only/hooks/use-analytics';
import { cn } from '@documenso/ui/lib/utils';
import { Button } from '@documenso/ui/primitives/button';
import {
Dialog,
DialogContent,
DialogDescription,
DialogHeader,
DialogTitle,
DialogTrigger,
} from '@documenso/ui/primitives/dialog';
import { Input } from '@documenso/ui/primitives/input';
import { Label } from '@documenso/ui/primitives/label';
import { useToast } from '@documenso/ui/primitives/use-toast';
import { claimPlan } from '~/api/claim-plan/fetcher';
import { FormErrorMessage } from '../form/form-error-message';
export const ZClaimPlanDialogFormSchema = z.object({
name: z.string().trim().min(3, { message: 'Please enter a valid name.' }),
email: z.string().email(),
});
export type TClaimPlanDialogFormSchema = z.infer<typeof ZClaimPlanDialogFormSchema>;
export type ClaimPlanDialogProps = {
className?: string;
planId: string;
children: React.ReactNode;
};
export const ClaimPlanDialog = ({ className, planId, children }: ClaimPlanDialogProps) => {
const params = useSearchParams();
const analytics = useAnalytics();
const event = usePlausible();
const { toast } = useToast();
const [open, setOpen] = useState(() => params?.get('cancelled') === 'true');
const {
register,
handleSubmit,
formState: { errors, isSubmitting },
reset,
} = useForm<TClaimPlanDialogFormSchema>({
defaultValues: {
name: params?.get('name') ?? '',
email: params?.get('email') ?? '',
},
resolver: zodResolver(ZClaimPlanDialogFormSchema),
});
const onFormSubmit = async ({ name, email }: TClaimPlanDialogFormSchema) => {
try {
const delay = new Promise<void>((resolve) => {
setTimeout(resolve, 1000);
});
const [redirectUrl] = await Promise.all([
claimPlan({ name, email, planId, signatureText: name, signatureDataUrl: null }),
delay,
]);
event('claim-plan-pricing');
analytics.capture('Marketing: Claim plan', { planId, email });
window.location.href = redirectUrl;
} catch (error) {
event('claim-plan-failed');
analytics.capture('Marketing: Claim plan failure', { planId, email });
toast({
title: 'Something went wrong',
description: error instanceof Error ? error.message : 'Please try again later.',
variant: 'destructive',
});
}
};
useEffect(() => {
if (!isSubmitting && !open) {
reset();
}
}, [open]);
return (
<Dialog open={open} onOpenChange={(value) => !isSubmitting && setOpen(value)}>
<DialogTrigger asChild>{children}</DialogTrigger>
<DialogContent>
<DialogHeader>
<DialogTitle>Claim your plan</DialogTitle>
<DialogDescription className="mt-4">
We're almost there! Please enter your email address and name to claim your plan.
</DialogDescription>
</DialogHeader>
<form onSubmit={handleSubmit(onFormSubmit)}>
<fieldset disabled={isSubmitting} className={cn('flex flex-col gap-y-4', className)}>
{params?.get('cancelled') === 'true' && (
<div className="rounded-lg border border-yellow-400 bg-yellow-50 p-4">
<div className="flex">
<div className="flex-shrink-0">
<Info className="h-5 w-5 text-yellow-400" />
</div>
<div className="ml-3">
<p className="text-sm leading-5 text-yellow-700">
You have cancelled the payment process. If you didn't mean to do this, please
try again.
</p>
</div>
</div>
</div>
)}
<div>
<Label className="text-muted-foreground">Name</Label>
<Input type="text" className="mt-2" {...register('name')} autoFocus />
<FormErrorMessage className="mt-1" error={errors.name} />
</div>
<div>
<Label className="text-muted-foreground">Email</Label>
<Input type="email" className="mt-2" {...register('email')} />
<FormErrorMessage className="mt-1" error={errors.email} />
</div>
<Button type="submit" size="lg" loading={isSubmitting}>
Claim the early adopters Plan (
{/* eslint-disable-next-line turbo/no-undeclared-env-vars */}
{planId === process.env.NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_MONTHLY_PRICE_ID
? 'Monthly'
: 'Yearly'}
)
</Button>
</fieldset>
</form>
</DialogContent>
</Dialog>
);
};

View File

@@ -2,13 +2,14 @@ import { HTMLAttributes } from 'react';
import Image from 'next/image';
import backgroundPattern from '@documenso/assets/images/background-pattern.png';
import cardBeautifulFigure from '@documenso/assets/images/card-beautiful-figure.png';
import cardFastFigure from '@documenso/assets/images/card-fast-figure.png';
import cardSmartFigure from '@documenso/assets/images/card-smart-figure.png';
import { cn } from '@documenso/ui/lib/utils';
import { Card, CardContent } from '@documenso/ui/primitives/card';
import backgroundPattern from '~/assets/background-pattern.png';
import cardBeautifulFigure from '~/assets/card-beautiful-figure.png';
import cardFastFigure from '~/assets/card-fast-figure.png';
import cardSmartFigure from '~/assets/card-smart-figure.png';
export type FasterSmarterBeautifulBentoProps = HTMLAttributes<HTMLDivElement>;
export const FasterSmarterBeautifulBento = ({

View File

@@ -1,6 +1,6 @@
'use client';
import type { HTMLAttributes } from 'react';
import { HTMLAttributes } from 'react';
import Image from 'next/image';
import Link from 'next/link';
@@ -9,7 +9,6 @@ import { FaXTwitter } from 'react-icons/fa6';
import { LiaDiscord } from 'react-icons/lia';
import { LuGithub } from 'react-icons/lu';
import LogoImage from '@documenso/assets/logo.png';
import { cn } from '@documenso/ui/lib/utils';
import { ThemeSwitcher } from '@documenso/ui/primitives/theme-switcher';
@@ -26,12 +25,10 @@ const FOOTER_LINKS = [
{ href: '/singleplayer', text: 'Singleplayer' },
{ href: '/blog', text: 'Blog' },
{ href: '/design-system', text: 'Design' },
{ href: '/open', text: 'Open Startup' },
{ href: '/open', text: 'Open' },
{ href: 'https://shop.documenso.com', text: 'Shop', target: '_blank' },
{ href: 'https://status.documenso.com', text: 'Status', target: '_blank' },
{ href: 'mailto:support@documenso.com', text: 'Support', target: '_blank' },
{ href: '/oss-friends', text: 'OSS Friends' },
{ href: '/careers', text: 'Careers' },
{ href: '/privacy', text: 'Privacy' },
];
@@ -39,10 +36,10 @@ export const Footer = ({ className, ...props }: FooterProps) => {
return (
<div className={cn('border-t py-12', className)} {...props}>
<div className="mx-auto flex w-full max-w-screen-xl flex-wrap items-start justify-between gap-8 px-8">
<div className="flex-shrink-0">
<div>
<Link href="/">
<Image
src={LogoImage}
src="/logo.png"
alt="Documenso Logo"
className="dark:invert"
width={170}
@@ -64,13 +61,13 @@ export const Footer = ({ className, ...props }: FooterProps) => {
</div>
</div>
<div className="grid w-full max-w-sm grid-cols-2 gap-x-4 gap-y-2 md:w-auto md:gap-x-8">
<div className="grid max-w-xs flex-1 grid-cols-2 gap-x-4 gap-y-2">
{FOOTER_LINKS.map((link, index) => (
<Link
key={index}
href={link.href}
target={link.target}
className="text-muted-foreground hover:text-muted-foreground/80 flex-shrink-0 break-words text-sm"
className="text-muted-foreground hover:text-muted-foreground/80 flex-shrink-0 text-sm"
>
{link.text}
</Link>

View File

@@ -1,12 +1,10 @@
'use client';
import type { HTMLAttributes } from 'react';
import { useState } from 'react';
import { HTMLAttributes, useState } from 'react';
import Image from 'next/image';
import Link from 'next/link';
import LogoImage from '@documenso/assets/logo.png';
import { useFeatureFlags } from '@documenso/lib/client-only/providers/feature-flag';
import { cn } from '@documenso/ui/lib/utils';
@@ -27,7 +25,7 @@ export const Header = ({ className, ...props }: HeaderProps) => {
<div className="flex items-center space-x-4">
<Link href="/" className="z-10" onClick={() => setIsHamburgerMenuOpen(false)}>
<Image
src={LogoImage}
src="/logo.png"
alt="Documenso Logo"
className="dark:invert"
width={170}
@@ -64,7 +62,7 @@ export const Header = ({ className, ...props }: HeaderProps) => {
href="/open"
className="text-muted-foreground hover:text-muted-foreground/80 text-sm font-semibold"
>
Open Startup
Open
</Link>
<Link

View File

@@ -8,11 +8,12 @@ import { usePlausible } from 'next-plausible';
import { LuGithub } from 'react-icons/lu';
import { match } from 'ts-pattern';
import backgroundPattern from '@documenso/assets/images/background-pattern.png';
import { useFeatureFlags } from '@documenso/lib/client-only/providers/feature-flag';
import { cn } from '@documenso/ui/lib/utils';
import { Button } from '@documenso/ui/primitives/button';
import backgroundPattern from '~/assets/background-pattern.png';
import { Widget } from './widget';
export type HeroProps = {

View File

@@ -8,7 +8,6 @@ import { FaXTwitter } from 'react-icons/fa6';
import { LiaDiscord } from 'react-icons/lia';
import { LuGithub } from 'react-icons/lu';
import LogoImage from '@documenso/assets/logo.png';
import { Sheet, SheetContent } from '@documenso/ui/primitives/sheet';
export type MobileNavigationProps = {
@@ -31,7 +30,7 @@ export const MENU_NAVIGATION_LINKS = [
},
{
href: '/open',
text: 'Open Startup',
text: 'Open',
},
{
href: 'https://status.documenso.com',
@@ -64,7 +63,7 @@ export const MobileNavigation = ({ isMenuOpen, onMenuOpenChange }: MobileNavigat
<SheetContent className="w-full max-w-[400px]">
<Link href="/" className="z-10" onClick={handleMenuItemClick}>
<Image
src={LogoImage}
src="/logo.png"
alt="Documenso Logo"
className="dark:invert"
width={170}

View File

@@ -2,13 +2,14 @@ import { HTMLAttributes } from 'react';
import Image from 'next/image';
import backgroundPattern from '@documenso/assets/images/background-pattern.png';
import cardBuildFigure from '@documenso/assets/images/card-build-figure.png';
import cardOpenFigure from '@documenso/assets/images/card-open-figure.png';
import cardTemplateFigure from '@documenso/assets/images/card-template-figure.png';
import { cn } from '@documenso/ui/lib/utils';
import { Card, CardContent } from '@documenso/ui/primitives/card';
import backgroundPattern from '~/assets/background-pattern.png';
import cardBuildFigure from '~/assets/card-build-figure.png';
import cardOpenFigure from '~/assets/card-open-figure.png';
import cardTemplateFigure from '~/assets/card-template-figure.png';
export type OpenBuildTemplateBentoProps = HTMLAttributes<HTMLDivElement>;
export const OpenBuildTemplateBento = ({ className, ...props }: OpenBuildTemplateBentoProps) => {

View File

@@ -1,9 +1,9 @@
'use client';
import type { HTMLAttributes } from 'react';
import { useState } from 'react';
import { HTMLAttributes, useState } from 'react';
import Link from 'next/link';
import { useSearchParams } from 'next/navigation';
import { AnimatePresence, motion } from 'framer-motion';
import { usePlausible } from 'next-plausible';
@@ -16,9 +16,14 @@ export type PricingTableProps = HTMLAttributes<HTMLDivElement>;
const SELECTED_PLAN_BAR_LAYOUT_ID = 'selected-plan-bar';
export const PricingTable = ({ className, ...props }: PricingTableProps) => {
const params = useSearchParams();
const event = usePlausible();
const [period, setPeriod] = useState<'MONTHLY' | 'YEARLY'>('MONTHLY');
const [period, setPeriod] = useState<'MONTHLY' | 'YEARLY'>(() =>
params?.get('planId') === process.env.NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_YEARLY_PRICE_ID
? 'YEARLY'
: 'MONTHLY',
);
return (
<div className={cn('', className)} {...props}>

View File

@@ -2,14 +2,15 @@ import { HTMLAttributes } from 'react';
import Image from 'next/image';
import backgroundPattern from '@documenso/assets/images/background-pattern.png';
import cardConnectionsFigure from '@documenso/assets/images/card-connections-figure.png';
import cardPaidFigure from '@documenso/assets/images/card-paid-figure.png';
import cardSharingFigure from '@documenso/assets/images/card-sharing-figure.png';
import cardWidgetFigure from '@documenso/assets/images/card-widget-figure.png';
import { cn } from '@documenso/ui/lib/utils';
import { Card, CardContent } from '@documenso/ui/primitives/card';
import backgroundPattern from '~/assets/background-pattern.png';
import cardConnectionsFigure from '~/assets/card-connections-figure.png';
import cardPaidFigure from '~/assets/card-paid-figure.png';
import cardSharingFigure from '~/assets/card-sharing-figure.png';
import cardWidgetFigure from '~/assets/card-widget-figure.png';
export type ShareConnectPaidWidgetBentoProps = HTMLAttributes<HTMLDivElement>;
export const ShareConnectPaidWidgetBento = ({

View File

@@ -0,0 +1,234 @@
'use server';
import { createElement } from 'react';
import { DateTime } from 'luxon';
import { PDFDocument } from 'pdf-lib';
import { match } from 'ts-pattern';
import { z } from 'zod';
import { mailer } from '@documenso/email/mailer';
import { render } from '@documenso/email/render';
import { DocumentSelfSignedEmailTemplate } from '@documenso/email/templates/document-self-signed';
import { DEFAULT_DOCUMENT_DATE_FORMAT } from '@documenso/lib/constants/date-formats';
import { FROM_ADDRESS, FROM_NAME, SERVICE_USER_EMAIL } from '@documenso/lib/constants/email';
import { insertFieldInPDF } from '@documenso/lib/server-only/pdf/insert-field-in-pdf';
import { alphaid } from '@documenso/lib/universal/id';
import { getFile } from '@documenso/lib/universal/upload/get-file';
import { putFile } from '@documenso/lib/universal/upload/put-file';
import { prisma } from '@documenso/prisma';
import {
DocumentDataType,
DocumentStatus,
FieldType,
Prisma,
ReadStatus,
SendStatus,
SigningStatus,
} from '@documenso/prisma/client';
import { signPdf } from '@documenso/signing';
const ZCreateSinglePlayerDocumentSchema = z.object({
documentData: z.object({
data: z.string(),
type: z.nativeEnum(DocumentDataType),
}),
documentName: z.string(),
signer: z.object({
email: z.string().email().min(1),
name: z.string(),
signature: z.string(),
}),
fields: z.array(
z.object({
page: z.number(),
type: z.nativeEnum(FieldType),
positionX: z.number(),
positionY: z.number(),
width: z.number(),
height: z.number(),
}),
),
});
export type TCreateSinglePlayerDocumentSchema = z.infer<typeof ZCreateSinglePlayerDocumentSchema>;
/**
* Create and self signs a document.
*
* Returns the document token.
*/
export const createSinglePlayerDocument = async (
value: TCreateSinglePlayerDocumentSchema,
): Promise<string> => {
const { signer, fields, documentData, documentName } =
ZCreateSinglePlayerDocumentSchema.parse(value);
const document = await getFile({
data: documentData.data,
type: documentData.type,
});
const doc = await PDFDocument.load(document);
const createdAt = new Date();
const isBase64 = signer.signature.startsWith('data:image/png;base64,');
const signatureImageAsBase64 = isBase64 ? signer.signature : null;
const typedSignature = !isBase64 ? signer.signature : null;
// Update the document with the fields inserted.
for (const field of fields) {
const isSignatureField = field.type === FieldType.SIGNATURE;
await insertFieldInPDF(doc, {
...mapField(field, signer),
Signature: isSignatureField
? {
created: createdAt,
signatureImageAsBase64,
typedSignature,
// Dummy data.
id: -1,
recipientId: -1,
fieldId: -1,
}
: null,
// Dummy data.
id: -1,
documentId: -1,
recipientId: -1,
});
}
const unsignedPdfBytes = await doc.save();
const signedPdfBuffer = await signPdf({ pdf: Buffer.from(unsignedPdfBytes) });
const { token } = await prisma.$transaction(
async (tx) => {
const token = alphaid();
// Fetch service user who will be the owner of the document.
const serviceUser = await tx.user.findFirstOrThrow({
where: {
email: SERVICE_USER_EMAIL,
},
});
const { id: documentDataId } = await putFile({
name: `${documentName}.pdf`,
type: 'application/pdf',
arrayBuffer: async () => Promise.resolve(signedPdfBuffer),
});
// Create document.
const document = await tx.document.create({
data: {
title: documentName,
status: DocumentStatus.COMPLETED,
documentDataId,
userId: serviceUser.id,
createdAt,
},
});
// Create recipient.
const recipient = await tx.recipient.create({
data: {
documentId: document.id,
name: signer.name,
email: signer.email,
token,
signedAt: createdAt,
readStatus: ReadStatus.OPENED,
signingStatus: SigningStatus.SIGNED,
sendStatus: SendStatus.SENT,
},
});
// Create fields and signatures.
await Promise.all(
fields.map(async (field) => {
const insertedField = await tx.field.create({
data: {
documentId: document.id,
recipientId: recipient.id,
...mapField(field, signer),
},
});
if (field.type === FieldType.SIGNATURE || field.type === FieldType.FREE_SIGNATURE) {
await tx.signature.create({
data: {
fieldId: insertedField.id,
signatureImageAsBase64,
typedSignature,
recipientId: recipient.id,
},
});
}
}),
);
return { document, token };
},
{
maxWait: 5000,
timeout: 30000,
},
);
const template = createElement(DocumentSelfSignedEmailTemplate, {
documentName: documentName,
assetBaseUrl: process.env.NEXT_PUBLIC_WEBAPP_URL || 'http://localhost:3000',
});
// Send email to signer.
await mailer.sendMail({
to: {
address: signer.email,
name: signer.name,
},
from: {
name: FROM_NAME,
address: FROM_ADDRESS,
},
subject: 'Document signed',
html: render(template),
text: render(template, { plainText: true }),
attachments: [{ content: signedPdfBuffer, filename: documentName }],
});
return token;
};
/**
* Map the fields provided by the user to fields compatible with Prisma.
*
* Signature fields are handled separately.
*
* @param field The field passed in by the user.
* @param signer The details of the person who is signing this document.
* @returns A field compatible with Prisma.
*/
const mapField = (
field: TCreateSinglePlayerDocumentSchema['fields'][number],
signer: TCreateSinglePlayerDocumentSchema['signer'],
) => {
const customText = match(field.type)
.with(FieldType.DATE, () => DateTime.now().toFormat(DEFAULT_DOCUMENT_DATE_FORMAT))
.with(FieldType.EMAIL, () => signer.email)
.with(FieldType.NAME, () => signer.name)
.otherwise(() => '');
return {
type: field.type,
page: field.page,
positionX: new Prisma.Decimal(field.positionX),
positionY: new Prisma.Decimal(field.positionY),
width: new Prisma.Decimal(field.width),
height: new Prisma.Decimal(field.height),
customText,
inserted: true,
};
};

View File

@@ -4,11 +4,9 @@ import { useEffect, useState } from 'react';
import Link from 'next/link';
import signingCelebration from '@documenso/assets/images/signing-celebration.png';
import { useFeatureFlags } from '@documenso/lib/client-only/providers/feature-flag';
import type { Signature } from '@documenso/prisma/client';
import { DocumentStatus } from '@documenso/prisma/client';
import type { DocumentWithRecipient } from '@documenso/prisma/types/document-with-recipient';
import { DocumentStatus, Signature } from '@documenso/prisma/client';
import { DocumentWithRecipient } from '@documenso/prisma/types/document-with-recipient';
import DocumentDialog from '@documenso/ui/components/document/document-dialog';
import { DocumentDownloadButton } from '@documenso/ui/components/document/document-download-button';
import { DocumentShareButton } from '@documenso/ui/components/document/document-share-button';
@@ -16,6 +14,7 @@ import { SigningCard3D } from '@documenso/ui/components/signing-card';
import { cn } from '@documenso/ui/lib/utils';
import { Button } from '@documenso/ui/primitives/button';
import signingCelebration from '~/assets/signing-celebration.png';
import { ConfettiScreen } from '~/components/(marketing)/confetti-screen';
interface SinglePlayerModeSuccessProps {

View File

@@ -1,7 +1,6 @@
'use client';
import type { HTMLAttributes, KeyboardEvent } from 'react';
import { useMemo, useState } from 'react';
import { HTMLAttributes, KeyboardEvent, useMemo, useState } from 'react';
import { zodResolver } from '@hookform/resolvers/zod';
import { AnimatePresence, motion } from 'framer-motion';
@@ -27,7 +26,6 @@ import { useToast } from '@documenso/ui/primitives/use-toast';
import { claimPlan } from '~/api/claim-plan/fetcher';
import { STEP } from '../constants';
import { FormErrorMessage } from '../form/form-error-message';
const ZWidgetFormSchema = z
@@ -50,16 +48,13 @@ const ZWidgetFormSchema = z
export type TWidgetFormSchema = z.infer<typeof ZWidgetFormSchema>;
type StepKeys = keyof typeof STEP;
type StepValues = (typeof STEP)[StepKeys];
export type WidgetProps = HTMLAttributes<HTMLDivElement>;
export const Widget = ({ className, children, ...props }: WidgetProps) => {
const { toast } = useToast();
const event = usePlausible();
const [step, setStep] = useState<StepValues>(STEP.EMAIL);
const [step, setStep] = useState<'EMAIL' | 'NAME' | 'SIGN'>('EMAIL');
const [showSigningDialog, setShowSigningDialog] = useState(false);
const [draftSignatureDataUrl, setDraftSignatureDataUrl] = useState<string | null>(null);
@@ -86,28 +81,28 @@ export const Widget = ({ className, children, ...props }: WidgetProps) => {
const signatureText = watch('signatureText');
const stepsRemaining = useMemo(() => {
if (step === STEP.NAME) {
if (step === 'NAME') {
return 2;
}
if (step === STEP.EMAIL) {
return 3;
if (step === 'SIGN') {
return 1;
}
return 1;
return 3;
}, [step]);
const onNextStepClick = () => {
if (step === STEP.EMAIL) {
setStep(STEP.NAME);
if (step === 'EMAIL') {
setStep('NAME');
setTimeout(() => {
document.querySelector<HTMLElement>('#name')?.focus();
}, 0);
}
if (step === STEP.NAME) {
setStep(STEP.SIGN);
if (step === 'NAME') {
setStep('SIGN');
setTimeout(() => {
document.querySelector<HTMLElement>('#signatureText')?.focus();
@@ -231,7 +226,7 @@ export const Widget = ({ className, children, ...props }: WidgetProps) => {
type="button"
className="bg-primary h-full w-14 rounded"
disabled={!field.value || !!errors.email?.message}
onClick={() => step === STEP.EMAIL && onNextStepClick()}
onClick={() => step === 'EMAIL' && onNextStepClick()}
>
Next
</Button>
@@ -243,7 +238,7 @@ export const Widget = ({ className, children, ...props }: WidgetProps) => {
<FormErrorMessage error={errors.email} className="mt-1" />
</motion.div>
{(step === STEP.NAME || step === STEP.SIGN) && (
{(step === 'NAME' || step === 'SIGN') && (
<motion.div
key="name"
className="mt-4"

View File

@@ -1,5 +0,0 @@
export const STEP = {
EMAIL: 'EMAIL',
NAME: 'NAME',
SIGN: 'SIGN',
} as const;

View File

@@ -1,6 +1,7 @@
import type { NextApiRequest, NextApiResponse } from 'next';
import { randomBytes } from 'crypto';
import { readFileSync } from 'fs';
import { buffer } from 'micro';
import { insertImageInPDF } from '@documenso/lib/server-only/pdf/insert-image-in-pdf';
@@ -88,11 +89,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
const now = new Date();
const bytes64 = await fetch(
new URL('@documenso/assets/documenso-supporter-pledge.pdf', import.meta.url),
)
.then(async (res) => res.arrayBuffer())
.then((buffer) => Buffer.from(buffer).toString('base64'));
const bytes64 = readFileSync('./public/documenso-supporter-pledge.pdf').toString('base64');
const { id: documentDataId } = await prisma.documentData.create({
data: {

View File

@@ -2,15 +2,6 @@ import * as trpcNext from '@documenso/trpc/server/adapters/next';
import { createTrpcContext } from '@documenso/trpc/server/context';
import { appRouter } from '@documenso/trpc/server/router';
export const config = {
maxDuration: 60,
api: {
bodyParser: {
sizeLimit: '50mb',
},
},
};
export default trpcNext.createNextApiHandler({
router: appRouter,
createContext: async ({ req, res }) => createTrpcContext({ req, res }),

View File

@@ -1,5 +1,4 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const fs = require('fs');
const path = require('path');
const { version } = require('./package.json');
@@ -11,35 +10,23 @@ ENV_FILES.forEach((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 = {
output: process.env.DOCKER_OUTPUT ? 'standalone' : undefined,
experimental: {
outputFileTracingRoot: path.join(__dirname, '../../'),
serverActions: {
bodySizeLimit: '50mb',
},
serverActionsBodySizeLimit: '50mb',
},
reactStrictMode: true,
transpilePackages: [
'@documenso/assets',
'@documenso/ee',
'@documenso/lib',
'@documenso/prisma',
'@documenso/tailwind-config',
'@documenso/trpc',
'@documenso/ui',
'@documenso/email',
],
env: {
APP_VERSION: version,
NEXT_PUBLIC_PROJECT: 'web',
FONT_CAVEAT_URI: `data:font/ttf;base64,${FONT_CAVEAT_BYTES.toString('base64')}`,
},
modularizeImports: {
'lucide-react': {

View File

@@ -1,6 +1,6 @@
{
"name": "@documenso/web",
"version": "1.2.3",
"version": "0.1.0",
"private": true,
"license": "AGPL-3.0",
"scripts": {
@@ -8,13 +8,11 @@
"build": "next build",
"start": "next start",
"lint": "next lint",
"e2e:prepare": "next build && next start",
"lint:fix": "next lint --fix",
"clean": "rimraf .next && rimraf node_modules",
"copy:pdfjs": "node ../../scripts/copy-pdfjs.cjs"
},
"dependencies": {
"@documenso/assets": "*",
"@documenso/ee": "*",
"@documenso/lib": "*",
"@documenso/prisma": "*",
@@ -28,8 +26,8 @@
"lucide-react": "^0.279.0",
"luxon": "^3.4.0",
"micro": "^10.0.1",
"next": "14.0.3",
"next-auth": "4.24.5",
"next": "14.0.0",
"next-auth": "4.24.3",
"next-plausible": "^3.10.1",
"next-themes": "^0.2.1",
"perfect-freehand": "^1.2.0",
@@ -42,7 +40,7 @@
"react-hotkeys-hook": "^4.4.1",
"react-icons": "^4.11.0",
"react-rnd": "^10.4.1",
"sharp": "0.33.1",
"sharp": "0.32.5",
"ts-pattern": "^5.0.5",
"typescript": "5.2.2",
"uqr": "^0.1.2",
@@ -54,13 +52,5 @@
"@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

@@ -6,6 +6,8 @@ declare namespace NodeJS {
NEXT_PRIVATE_DATABASE_URL: string;
NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_MONTHLY_PRICE_ID: string;
NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_YEARLY_PRICE_ID: string;
NEXT_PUBLIC_STRIPE_FREE_PLAN_ID?: string;
NEXT_PRIVATE_STRIPE_API_KEY: string;
NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET: string;

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
apps/web/public/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

Before

Width:  |  Height:  |  Size: 743 KiB

After

Width:  |  Height:  |  Size: 743 KiB

View File

@@ -8,7 +8,7 @@ import { Edit, Loader } from 'lucide-react';
import { useDebouncedValue } from '@documenso/lib/client-only/hooks/use-debounced-value';
import { useUpdateSearchParams } from '@documenso/lib/client-only/hooks/use-update-search-params';
import type { Document, Role, Subscription } from '@documenso/prisma/client';
import { Document, Role, Subscription } from '@documenso/prisma/client';
import { Button } from '@documenso/ui/primitives/button';
import { DataTable } from '@documenso/ui/primitives/data-table';
import { DataTablePagination } from '@documenso/ui/primitives/data-table-pagination';
@@ -19,7 +19,7 @@ type UserData = {
name: string | null;
email: string;
roles: Role[];
Subscription?: SubscriptionLite[] | null;
Subscription?: SubscriptionLite | null;
Document: DocumentLite[];
};
@@ -35,16 +35,9 @@ type UsersDataTableProps = {
totalPages: number;
perPage: number;
page: number;
individualPriceIds: string[];
};
export const UsersDataTable = ({
users,
totalPages,
perPage,
page,
individualPriceIds,
}: UsersDataTableProps) => {
export const UsersDataTable = ({ users, totalPages, perPage, page }: UsersDataTableProps) => {
const [isPending, startTransition] = useTransition();
const updateSearchParams = useUpdateSearchParams();
const [searchString, setSearchString] = useState('');
@@ -107,13 +100,7 @@ export const UsersDataTable = ({
{
header: 'Subscription',
accessorKey: 'subscription',
cell: ({ row }) => {
const foundIndividualSubscription = (row.original.Subscription ?? []).find((sub) =>
individualPriceIds.includes(sub.priceId),
);
return foundIndividualSubscription?.status ?? 'NONE';
},
cell: ({ row }) => row.original.Subscription?.status ?? 'NONE',
},
{
header: 'Documents',

View File

@@ -1,16 +1,8 @@
'use server';
import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session';
import { isAdmin } from '@documenso/lib/next-auth/guards/is-admin';
import { findUsers } from '@documenso/lib/server-only/user/get-all-users';
export async function search(search: string, page: number, perPage: number) {
const { user } = await getRequiredServerComponentSession();
if (!isAdmin(user)) {
throw new Error('Unauthorized');
}
const results = await findUsers({ username: search, email: search, page, perPage });
return results;

View File

@@ -1,5 +1,3 @@
import { getPricesByType } from '@documenso/ee/server-only/stripe/get-prices-by-type';
import { UsersDataTable } from './data-table-users';
import { search } from './fetch-users.actions';
@@ -16,23 +14,12 @@ export default async function AdminManageUsers({ searchParams = {} }: AdminManag
const perPage = Number(searchParams.perPage) || 10;
const searchString = searchParams.search || '';
const [{ users, totalPages }, individualPrices] = await Promise.all([
search(searchString, page, perPage),
getPricesByType('individual'),
]);
const individualPriceIds = individualPrices.map((price) => price.id);
const { users, totalPages } = await search(searchString, page, perPage);
return (
<div>
<h2 className="text-4xl font-semibold">Manage users</h2>
<UsersDataTable
users={users}
individualPriceIds={individualPriceIds}
totalPages={totalPages}
page={page}
perPage={perPage}
/>
<UsersDataTable users={users} totalPages={totalPages} page={page} perPage={perPage} />
</div>
);
}

View File

@@ -4,10 +4,8 @@ import { useState } from 'react';
import { useRouter } from 'next/navigation';
import type { DocumentData, DocumentMeta, Field, Recipient, User } from '@documenso/prisma/client';
import { DocumentStatus } from '@documenso/prisma/client';
import type { DocumentData, Field, Recipient, User } from '@documenso/prisma/client';
import type { DocumentWithData } from '@documenso/prisma/types/document-with-data';
import { trpc } from '@documenso/trpc/react';
import { cn } from '@documenso/ui/lib/utils';
import { Card, CardContent } from '@documenso/ui/primitives/card';
import { AddFieldsFormPartial } from '@documenso/ui/primitives/document-flow/add-fields';
@@ -16,95 +14,63 @@ import { AddSignersFormPartial } from '@documenso/ui/primitives/document-flow/ad
import type { TAddSignersFormSchema } from '@documenso/ui/primitives/document-flow/add-signers.types';
import { AddSubjectFormPartial } from '@documenso/ui/primitives/document-flow/add-subject';
import type { TAddSubjectFormSchema } from '@documenso/ui/primitives/document-flow/add-subject.types';
import { AddTitleFormPartial } from '@documenso/ui/primitives/document-flow/add-title';
import type { TAddTitleFormSchema } from '@documenso/ui/primitives/document-flow/add-title.types';
import { DocumentFlowFormContainer } from '@documenso/ui/primitives/document-flow/document-flow-root';
import {
DocumentFlowFormContainer,
DocumentFlowFormContainerHeader,
} from '@documenso/ui/primitives/document-flow/document-flow-root';
import type { DocumentFlowStep } from '@documenso/ui/primitives/document-flow/types';
import { LazyPDFViewer } from '@documenso/ui/primitives/lazy-pdf-viewer';
import { Stepper } from '@documenso/ui/primitives/stepper';
import { useToast } from '@documenso/ui/primitives/use-toast';
import { addFields } from '~/components/forms/edit-document/add-fields.action';
import { addSigners } from '~/components/forms/edit-document/add-signers.action';
import { completeDocument } from '~/components/forms/edit-document/add-subject.action';
export type EditDocumentFormProps = {
className?: string;
user: User;
document: DocumentWithData;
recipients: Recipient[];
documentMeta: DocumentMeta | null;
fields: Field[];
documentData: DocumentData;
};
type EditDocumentStep = 'title' | 'signers' | 'fields' | 'subject';
const EditDocumentSteps: EditDocumentStep[] = ['title', 'signers', 'fields', 'subject'];
type EditDocumentStep = 'signers' | 'fields' | 'subject';
export const EditDocumentForm = ({
className,
document,
recipients,
fields,
documentMeta,
user: _user,
documentData,
}: EditDocumentFormProps) => {
const { toast } = useToast();
const router = useRouter();
// controlled stepper state
const [step, setStep] = useState<EditDocumentStep>(
document.status === DocumentStatus.DRAFT ? 'title' : 'signers',
);
const { mutateAsync: addTitle } = trpc.document.setTitleForDocument.useMutation();
const { mutateAsync: addFields } = trpc.field.addFields.useMutation();
const { mutateAsync: addSigners } = trpc.recipient.addSigners.useMutation();
const { mutateAsync: sendDocument } = trpc.document.sendDocument.useMutation();
const { mutateAsync: setPasswordForDocument } =
trpc.document.setPasswordForDocument.useMutation();
const [step, setStep] = useState<EditDocumentStep>('signers');
const documentFlow: Record<EditDocumentStep, DocumentFlowStep> = {
title: {
title: 'Add Title',
description: 'Add the title to the document.',
stepIndex: 1,
},
signers: {
title: 'Add Signers',
description: 'Add the people who will sign the document.',
stepIndex: 2,
stepIndex: 1,
},
fields: {
title: 'Add Fields',
description: 'Add all relevant fields for each recipient.',
stepIndex: 3,
stepIndex: 2,
onBackStep: () => setStep('signers'),
},
subject: {
title: 'Add Subject',
description: 'Add the subject and message you wish to send to signers.',
stepIndex: 4,
stepIndex: 3,
onBackStep: () => setStep('fields'),
},
};
const onAddTitleFormSubmit = async (data: TAddTitleFormSchema) => {
try {
// Custom invocation server action
await addTitle({
documentId: document.id,
title: data.title,
});
router.refresh();
setStep('signers');
} catch (err) {
console.error(err);
toast({
title: 'Error',
description: 'An error occurred while updating title.',
variant: 'destructive',
});
}
};
const currentDocumentFlow = documentFlow[step];
const onAddSignersFormSubmit = async (data: TAddSignersFormSchema) => {
try {
@@ -115,6 +81,7 @@ export const EditDocumentForm = ({
});
router.refresh();
setStep('fields');
} catch (err) {
console.error(err);
@@ -136,6 +103,7 @@ export const EditDocumentForm = ({
});
router.refresh();
setStep('subject');
} catch (err) {
console.error(err);
@@ -152,7 +120,7 @@ export const EditDocumentForm = ({
const { subject, message, timezone, dateFormat } = data.meta;
try {
await sendDocument({
await completeDocument({
documentId: document.id,
meta: {
subject,
@@ -180,15 +148,6 @@ export const EditDocumentForm = ({
}
};
const onPasswordSubmit = async (password: string) => {
await setPasswordForDocument({
documentId: document.id,
password,
});
};
const currentDocumentFlow = documentFlow[step];
return (
<div className={cn('grid w-full grid-cols-12 gap-8', className)}>
<Card
@@ -196,58 +155,49 @@ export const EditDocumentForm = ({
gradient
>
<CardContent className="p-2">
<LazyPDFViewer
key={documentData.id}
documentData={documentData}
document={document}
password={documentMeta?.password}
onPasswordSubmit={onPasswordSubmit}
/>
<LazyPDFViewer key={documentData.id} documentData={documentData} />
</CardContent>
</Card>
<div className="col-span-12 lg:col-span-6 xl:col-span-5">
<DocumentFlowFormContainer
className="lg:h-[calc(100vh-6rem)]"
onSubmit={(e) => e.preventDefault()}
>
<Stepper
currentStep={currentDocumentFlow.stepIndex}
setCurrentStep={(step) => setStep(EditDocumentSteps[step - 1])}
>
<AddTitleFormPartial
key={recipients.length}
documentFlow={documentFlow.title}
recipients={recipients}
fields={fields}
document={document}
onSubmit={onAddTitleFormSubmit}
<DocumentFlowFormContainer onSubmit={(e) => e.preventDefault()}>
<DocumentFlowFormContainerHeader
title={currentDocumentFlow.title}
description={currentDocumentFlow.description}
/>
{step === 'signers' && (
<AddSignersFormPartial
key={recipients.length}
documentFlow={documentFlow.signers}
document={document}
recipients={recipients}
fields={fields}
numberOfSteps={Object.keys(documentFlow).length}
onSubmit={onAddSignersFormSubmit}
/>
)}
{step === 'fields' && (
<AddFieldsFormPartial
key={fields.length}
documentFlow={documentFlow.fields}
recipients={recipients}
fields={fields}
numberOfSteps={Object.keys(documentFlow).length}
onSubmit={onAddFieldsFormSubmit}
/>
)}
{step === 'subject' && (
<AddSubjectFormPartial
key={recipients.length}
documentFlow={documentFlow.subject}
document={document}
recipients={recipients}
fields={fields}
numberOfSteps={Object.keys(documentFlow).length}
onSubmit={onAddSubjectFormSubmit}
/>
</Stepper>
)}
</DocumentFlowFormContainer>
</div>
</div>

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