diff --git a/.gitignore b/.gitignore
index 9965f5ca6..d7f66a11a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,3 +36,6 @@ yarn-error.log*
next-env.d.ts
.env
.env.example
+
+# turborepo
+.turbo
\ No newline at end of file
diff --git a/README.md b/README.md
index 26316054f..0861312fb 100644
--- a/README.md
+++ b/README.md
@@ -78,8 +78,6 @@ The current project goal is to [release a production ready version](https://g
- To contribute please see our [contribution guide](https://github.com/documenso/documenso/blob/main/CONTRIBUTING.md).
-
-
# Tech
Documenso is built using awesome open source tech including:
@@ -123,7 +121,7 @@ Want to get up and running quickly? Follow these steps:
- This will spin up a postgres database and inbucket mail server in docker containers.
- Run `npm run dev` in the root directory
- Want it even faster? Just use
- ```sh
+ ```sh
npm run d
```
@@ -157,10 +155,10 @@ Follow these steps to setup documenso on you local machine:
---
- Optional: Seed the database using npm run db-seed to create a test user and document
-- Optional: Upload and sign apps/web/ressources/example.pdf manually to test your setup
+- Optional: Upload and sign apps/web/resources/example.pdf manually to test your setup
- Optional: Create your own signing certificate
- - A demo certificate is provided in `/app/web/ressources/certificate.p12`
+ - A demo certificate is provided in `/app/web/resources/certificate.p12`
- To generate your own using these steps and a Linux Terminal or Windows Subsystem for Linux (WSL) see **[Create your own signing certificate](#creating-your-own-signing-certificate)**.
## Updating
@@ -185,7 +183,7 @@ For the digital signature of your documents you need a signing certificate in .p
3. Combine the private key and the self-signed certificate to create the p12 certificate. You can run the following command to do this: \
openssl pkcs12 -export -out certificate.p12 -inkey private.key -in certificate.crt
4. You will be prompted to enter a password for the p12 file. Choose a strong password and remember it, as you will need it to use the certificate (**can be empty for dev certificates**)
-5. Place the certificate /apps/web/ressource/certificate.p12
+5. Place the certificate /apps/web/resources/certificate.p12
# Docker
diff --git a/apps/web/components/layout.tsx b/apps/web/components/layout.tsx
index 06a5bb2de..aa0fad8dc 100644
--- a/apps/web/components/layout.tsx
+++ b/apps/web/components/layout.tsx
@@ -3,11 +3,11 @@ import Link from "next/link";
import { useRouter } from "next/router";
import { NEXT_PUBLIC_WEBAPP_URL } from "@documenso/lib/constants";
import { useSubscription } from "@documenso/lib/stripe";
+import { BillingWarning } from "./billing-warning";
import Navigation from "./navigation";
import { PaperAirplaneIcon } from "@heroicons/react/24/outline";
import { SubscriptionStatus } from "@prisma/client";
import { useSession } from "next-auth/react";
-import { BillingWarning } from "./billing-warning";
function useRedirectToLoginIfUnauthenticated() {
const { data: session, status } = useSession();
diff --git a/apps/web/pages/_app.tsx b/apps/web/pages/_app.tsx
index cd5541cbb..a1193a681 100644
--- a/apps/web/pages/_app.tsx
+++ b/apps/web/pages/_app.tsx
@@ -1,6 +1,7 @@
import { ReactElement, ReactNode } from "react";
import { NextPage } from "next";
import type { AppProps } from "next/app";
+import { Montserrat, Qwigley } from "next/font/google";
import { SubscriptionProvider } from "@documenso/lib/stripe/providers/subscription-provider";
import "../../../node_modules/placeholder-loading/src/scss/placeholder-loading.scss";
import "../../../node_modules/react-resizable/css/styles.css";
@@ -11,6 +12,20 @@ import "react-tooltip/dist/react-tooltip.css";
export { coloredConsole } from "@documenso/lib";
+const montserrat = Montserrat({
+ subsets: ["latin"],
+ weight: ["400", "700"],
+ display: "swap",
+ variable: "--font-sans",
+});
+
+const qwigley = Qwigley({
+ subsets: ["latin"],
+ weight: ["400"],
+ display: "swap",
+ variable: "--font-qwigley",
+});
+
export type NextPageWithLayout
= NextPage
& {
getLayout?: (page: ReactElement) => ReactNode;
};
@@ -27,8 +42,10 @@ export default function App({
return (
-
- {getLayout()}
+
+
+ {getLayout()}
+
);
diff --git a/apps/web/ressources/certificate.p12 b/apps/web/resources/certificate.p12
similarity index 100%
rename from apps/web/ressources/certificate.p12
rename to apps/web/resources/certificate.p12
diff --git a/apps/web/ressources/example.pdf b/apps/web/resources/example.pdf
similarity index 100%
rename from apps/web/ressources/example.pdf
rename to apps/web/resources/example.pdf
diff --git a/apps/web/styles/tailwind.css b/apps/web/styles/tailwind.css
index 2ea56f9bf..fcae13ac3 100644
--- a/apps/web/styles/tailwind.css
+++ b/apps/web/styles/tailwind.css
@@ -6,35 +6,3 @@
min-height: 100%;
}
-html,
-body,
-:host {
- font-family: montserrat;
-}
-
-@font-face {
- font-family: "Qwigley";
- src: url("/fonts/Qwigley-Regular.ttf");
-}
-
-/* latin */
-@font-face {
- font-family: "Montserrat";
- font-style: normal;
- font-weight: 400;
- font-display: swap;
- src: url("/fonts/montserrat.woff2") format("woff2");
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F,
- U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
-
-/* latin */
-@font-face {
- font-family: "Montserrat";
- font-style: normal;
- font-weight: 700;
- font-display: swap;
- src: url("/fonts/montserrat.woff2") format("woff2");
- unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F,
- U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
-}
diff --git a/apps/web/tailwind.config.js b/apps/web/tailwind.config.js
index 89d211331..ee8e474dc 100644
--- a/apps/web/tailwind.config.js
+++ b/apps/web/tailwind.config.js
@@ -12,8 +12,8 @@ module.exports = {
theme: {
extend: {
fontFamily: {
- monteserrat: ["Monteserrat", "serif"],
- qwigley: ["Qwigley", "serif"],
+ sans: ["var(--font-sans)", ...defaultTheme.fontFamily.sans],
+ qwigley: ["var(--font-qwigley)", "serif"],
},
colors: {
neon: {
@@ -58,6 +58,19 @@ module.exports = {
900: "#000000",
950: "#000000",
},
+ brand: {
+ DEFAULT: "#A2E771",
+ 100: "#F4FCEE",
+ 200: "#E8F9DC",
+ 300: "#D1F3B9",
+ 400: "#BBED96",
+ 500: "#A2E771",
+ 600: "#8DE151",
+ 700: "#76DC2E",
+ 800: "#63C021",
+ 900: "#519D1B",
+ 950: "#488C18",
+ },
},
borderRadius: {
"4xl": "2rem",
diff --git a/package-lock.json b/package-lock.json
index 3294ac71b..4e56abc72 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -40,6 +40,7 @@
"npm-run-all": "^4.1.5",
"prettier": "^2.8.7",
"prettier-plugin-tailwindcss": "^0.2.5",
+ "turbo": "^1.9.9",
"typescript": "4.8.4"
}
},
@@ -7665,6 +7666,102 @@
"node": "*"
}
},
+ "node_modules/turbo": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.9.9.tgz",
+ "integrity": "sha512-+ZS66LOT7ahKHxh6XrIdcmf2Yk9mNpAbPEj4iF2cs0cAeaDU3xLVPZFF0HbSho89Uxwhx7b5HBgPbdcjQTwQkg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "turbo": "bin/turbo"
+ },
+ "optionalDependencies": {
+ "turbo-darwin-64": "1.9.9",
+ "turbo-darwin-arm64": "1.9.9",
+ "turbo-linux-64": "1.9.9",
+ "turbo-linux-arm64": "1.9.9",
+ "turbo-windows-64": "1.9.9",
+ "turbo-windows-arm64": "1.9.9"
+ }
+ },
+ "node_modules/turbo-darwin-64": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.9.9.tgz",
+ "integrity": "sha512-UDGM9E21eCDzF5t1F4rzrjwWutcup33e7ZjNJcW/mJDPorazZzqXGKEPIy9kXwKhamUUXfC7668r6ZuA1WXF2Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/turbo-darwin-arm64": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.9.9.tgz",
+ "integrity": "sha512-VyfkXzTJpYLTAQ9krq2myyEq7RPObilpS04lgJ4OO1piq76RNmSpX9F/t9JCaY9Pj/4TL7i0d8PM7NGhwEA5Ag==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/turbo-linux-64": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.9.9.tgz",
+ "integrity": "sha512-Fu1MY29Odg8dHOqXcpIIGC3T63XLOGgnGfbobXMKdrC7JQDvtJv8TUCYciRsyknZYjyyKK1z6zKuYIiDjf3KeQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/turbo-linux-arm64": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.9.9.tgz",
+ "integrity": "sha512-50LI8NafPuJxdnMCBeDdzgyt1cgjQG7FwkyY336v4e95WJPUVjrHdrKH6jYXhOUyrv9+jCJxwX1Yrg02t5yJ1g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/turbo-windows-64": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.9.9.tgz",
+ "integrity": "sha512-9IsTReoLmQl1IRsy3WExe2j2RKWXQyXujfJ4fXF+jp08KxjVF4/tYP2CIRJx/A7UP/7keBta27bZqzAjsmbSTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/turbo-windows-arm64": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.9.9.tgz",
+ "integrity": "sha512-CUu4hpeQo68JjDr0V0ygTQRLbS+/sNfdqEVV+Xz9136vpKn2WMQLAuUBVZV0Sp0S/7i+zGnplskT0fED+W46wQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
"node_modules/tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
@@ -13859,6 +13956,62 @@
"safe-buffer": "^5.0.1"
}
},
+ "turbo": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.9.9.tgz",
+ "integrity": "sha512-+ZS66LOT7ahKHxh6XrIdcmf2Yk9mNpAbPEj4iF2cs0cAeaDU3xLVPZFF0HbSho89Uxwhx7b5HBgPbdcjQTwQkg==",
+ "dev": true,
+ "requires": {
+ "turbo-darwin-64": "1.9.9",
+ "turbo-darwin-arm64": "1.9.9",
+ "turbo-linux-64": "1.9.9",
+ "turbo-linux-arm64": "1.9.9",
+ "turbo-windows-64": "1.9.9",
+ "turbo-windows-arm64": "1.9.9"
+ }
+ },
+ "turbo-darwin-64": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.9.9.tgz",
+ "integrity": "sha512-UDGM9E21eCDzF5t1F4rzrjwWutcup33e7ZjNJcW/mJDPorazZzqXGKEPIy9kXwKhamUUXfC7668r6ZuA1WXF2Q==",
+ "dev": true,
+ "optional": true
+ },
+ "turbo-darwin-arm64": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.9.9.tgz",
+ "integrity": "sha512-VyfkXzTJpYLTAQ9krq2myyEq7RPObilpS04lgJ4OO1piq76RNmSpX9F/t9JCaY9Pj/4TL7i0d8PM7NGhwEA5Ag==",
+ "dev": true,
+ "optional": true
+ },
+ "turbo-linux-64": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.9.9.tgz",
+ "integrity": "sha512-Fu1MY29Odg8dHOqXcpIIGC3T63XLOGgnGfbobXMKdrC7JQDvtJv8TUCYciRsyknZYjyyKK1z6zKuYIiDjf3KeQ==",
+ "dev": true,
+ "optional": true
+ },
+ "turbo-linux-arm64": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.9.9.tgz",
+ "integrity": "sha512-50LI8NafPuJxdnMCBeDdzgyt1cgjQG7FwkyY336v4e95WJPUVjrHdrKH6jYXhOUyrv9+jCJxwX1Yrg02t5yJ1g==",
+ "dev": true,
+ "optional": true
+ },
+ "turbo-windows-64": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.9.9.tgz",
+ "integrity": "sha512-9IsTReoLmQl1IRsy3WExe2j2RKWXQyXujfJ4fXF+jp08KxjVF4/tYP2CIRJx/A7UP/7keBta27bZqzAjsmbSTA==",
+ "dev": true,
+ "optional": true
+ },
+ "turbo-windows-arm64": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.9.9.tgz",
+ "integrity": "sha512-CUu4hpeQo68JjDr0V0ygTQRLbS+/sNfdqEVV+Xz9136vpKn2WMQLAuUBVZV0Sp0S/7i+zGnplskT0fED+W46wQ==",
+ "dev": true,
+ "optional": true
+ },
"tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
diff --git a/package.json b/package.json
index 9c2a55c14..d5790a9e7 100644
--- a/package.json
+++ b/package.json
@@ -2,9 +2,9 @@
"name": "documenso-monorepo",
"version": "0.0.0",
"scripts": {
- "dev": "npm run dev -w apps/web",
- "build": "npm i && cd apps && cd web && npm i && next build",
- "start": "cd apps && cd web && next start",
+ "dev": "turbo run dev --filter=web",
+ "build": "turbo run build --filter=web",
+ "start": "turbo run start --filter=web",
"db-migrate:dev": "prisma migrate dev",
"db-seed": "prisma db seed",
"db-studio": "prisma studio",
@@ -52,6 +52,7 @@
"npm-run-all": "^4.1.5",
"prettier": "^2.8.7",
"prettier-plugin-tailwindcss": "^0.2.5",
+ "turbo": "^1.9.9",
"typescript": "4.8.4"
}
-}
\ No newline at end of file
+}
diff --git a/packages/lib/server/getServerErrorFromUnknown.ts b/packages/lib/server/getServerErrorFromUnknown.ts
index 8a4823082..fa53e8585 100644
--- a/packages/lib/server/getServerErrorFromUnknown.ts
+++ b/packages/lib/server/getServerErrorFromUnknown.ts
@@ -1,5 +1,5 @@
import { HttpError } from "@documenso/lib/server";
-import { NotFoundError, PrismaClientKnownRequestError } from "@prisma/client/runtime";
+import { PrismaClientKnownRequestError } from "@prisma/client/runtime/library";
export function getServerErrorFromUnknown(cause: unknown): HttpError {
// Error was manually thrown and does not need to be parsed.
@@ -18,7 +18,7 @@ export function getServerErrorFromUnknown(cause: unknown): HttpError {
return new HttpError({ statusCode: 400, message: cause.message, cause });
}
- if (cause instanceof NotFoundError) {
+ if (cause instanceof PrismaClientKnownRequestError) {
return new HttpError({ statusCode: 404, message: cause.message, cause });
}
diff --git a/packages/signing/addDigitalSignature.ts b/packages/signing/addDigitalSignature.ts
index f4f565c8f..8bd219bb5 100644
--- a/packages/signing/addDigitalSignature.ts
+++ b/packages/signing/addDigitalSignature.ts
@@ -10,7 +10,7 @@ export const addDigitalSignature = async (documentAsBase64: string): Promise