diff --git a/.env.example b/.env.example index fea246621..3ce57722b 100644 --- a/.env.example +++ b/.env.example @@ -1,19 +1,56 @@ +# [[AUTH]] NEXTAUTH_URL="http://localhost:3000" NEXTAUTH_SECRET="secret" +# [[APP]] NEXT_PUBLIC_SITE_URL="http://localhost:3000" NEXT_PUBLIC_APP_URL="http://localhost:3000" +# [[DATABASE]] NEXT_PRIVATE_DATABASE_URL="postgres://documenso:password@127.0.0.1:54320/documenso" +# [[SMTP]] +# OPTIONAL: Defines the transport to use for sending emails. Available options: smtp-auth (default) | smtp-api | mailchannels +NEXT_PRIVATE_SMTP_TRANSPORT="smtp-auth" +# OPTIONAL: Defines the host to use for sending emails. +NEXT_PRIVATE_SMTP_HOST="127.0.0.1" +# OPTIONAL: Defines the port to use for sending emails. +NEXT_PRIVATE_SMTP_PORT=2500 +# OPTIONAL: Defines the username to use with the SMTP server. +NEXT_PRIVATE_SMTP_USERNAME="documenso" +# OPTIONAL: Defines the password to use with the SMTP server. +NEXT_PRIVATE_SMTP_PASSWORD="password" +# OPTIONAL: Defines the API key user to use with the SMTP server. +NEXT_PRIVATE_SMTP_APIKEY_USER= +# OPTIONAL: Defines the API key to use with the SMTP server. +NEXT_PRIVATE_SMTP_APIKEY= +# OPTIONAL: Defines whether to force the use of TLS. +NEXT_PRIVATE_SMTP_SECURE= +# REQUIRED: Defines the sender name to use for the from address. +NEXT_PRIVATE_SMTP_FROM_NAME="No Reply @ Documenso" +# REQUIRED: Defines the email address to use as the from address. +NEXT_PRIVATE_SMTP_FROM_ADDRESS="noreply@documenso.com" +# OPTIONAL: The API key to use for the MailChannels proxy endpoint. +NEXT_PRIVATE_MAILCHANNELS_API_KEY= +# OPTIONAL: The endpoint to use for the MailChannels API if using a proxy. +NEXT_PRIVATE_MAILCHANNELS_ENDPOINT= +# OPTIONAL: The domain to use for DKIM signing. +NEXT_PRIVATE_MAILCHANNELS_DKIM_DOMAIN= +# OPTIONAL: The selector to use for DKIM signing. +NEXT_PRIVATE_MAILCHANNELS_DKIM_SELECTOR= +# OPTIONAL: The private key to use for DKIM signing. +NEXT_PRIVATE_MAILCHANNELS_DKIM_PRIVATE_KEY= + +# [[STRIPE]] +NEXT_PRIVATE_STRIPE_API_KEY= +NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET= NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_MONTHLY_PRICE_ID= NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_YEARLY_PRICE_ID= -NEXT_PRIVATE_STRIPE_API_KEY= -NEXT_PRIVATE_STRIPE_WEBHOOK_SECRET= - +# [[FEATURES]] NEXT_PUBLIC_SUBSCRIPTIONS_ENABLED=false # This is only required for the marketing site +# [[REDIS]] NEXT_PRIVATE_REDIS_URL= NEXT_PRIVATE_REDIS_TOKEN= diff --git a/apps/marketing/package.json b/apps/marketing/package.json index e34c66b99..523a23a90 100644 --- a/apps/marketing/package.json +++ b/apps/marketing/package.json @@ -18,7 +18,7 @@ "framer-motion": "^10.12.8", "lucide-react": "^0.214.0", "micro": "^10.0.1", - "next": "13.4.1", + "next": "13.4.9", "next-auth": "^4.22.1", "next-plausible": "^3.7.2", "perfect-freehand": "^1.2.0", diff --git a/apps/web/next.config.js b/apps/web/next.config.js index b57b41780..09760f806 100644 --- a/apps/web/next.config.js +++ b/apps/web/next.config.js @@ -7,9 +7,23 @@ const { parsed: env } = require('dotenv').config({ /** @type {import('next').NextConfig} */ const config = { + experimental: { + serverActions: true, + }, reactStrictMode: true, - transpilePackages: ['@documenso/lib', '@documenso/prisma', '@documenso/trpc', '@documenso/ui'], + transpilePackages: [ + '@documenso/lib', + '@documenso/prisma', + '@documenso/trpc', + '@documenso/ui', + '@documenso/email', + ], env, + modularizeImports: { + 'lucide-react': { + transform: 'lucide-react/dist/esm/icons/{{ kebabCase member }}', + }, + }, }; module.exports = config; diff --git a/apps/web/package.json b/apps/web/package.json index d493b92d9..32d0d61b3 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -22,7 +22,7 @@ "lucide-react": "^0.214.0", "micro": "^10.0.1", "nanoid": "^4.0.2", - "next": "13.4.1", + "next": "13.4.9", "next-auth": "^4.22.1", "next-plausible": "^3.7.2", "next-themes": "^0.2.1", diff --git a/apps/web/public/static/clock.png b/apps/web/public/static/clock.png new file mode 100644 index 000000000..ce8ee6481 Binary files /dev/null and b/apps/web/public/static/clock.png differ diff --git a/apps/web/public/static/completed.png b/apps/web/public/static/completed.png new file mode 100644 index 000000000..11a10f445 Binary files /dev/null and b/apps/web/public/static/completed.png differ diff --git a/apps/web/public/static/document.png b/apps/web/public/static/document.png new file mode 100644 index 000000000..8baa22639 Binary files /dev/null and b/apps/web/public/static/document.png differ diff --git a/apps/web/public/static/download.png b/apps/web/public/static/download.png new file mode 100644 index 000000000..c376d6051 Binary files /dev/null and b/apps/web/public/static/download.png differ diff --git a/apps/web/public/static/logo.png b/apps/web/public/static/logo.png new file mode 100644 index 000000000..4813aaaef Binary files /dev/null and b/apps/web/public/static/logo.png differ diff --git a/apps/web/public/static/review.png b/apps/web/public/static/review.png new file mode 100644 index 000000000..84bec4f62 Binary files /dev/null and b/apps/web/public/static/review.png differ diff --git a/apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx b/apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx new file mode 100644 index 000000000..b79c46671 --- /dev/null +++ b/apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx @@ -0,0 +1,111 @@ +'use client'; + +import { useState } from 'react'; + +import dynamic from 'next/dynamic'; + +import { Loader } from 'lucide-react'; + +import { Document, Field, Recipient, User } from '@documenso/prisma/client'; +import { cn } from '@documenso/ui/lib/utils'; +import { Card, CardContent } from '@documenso/ui/primitives/card'; + +import { AddFieldsFormPartial } from '~/components/forms/edit-document/add-fields'; +import { AddSignersFormPartial } from '~/components/forms/edit-document/add-signers'; +import { AddSubjectFormPartial } from '~/components/forms/edit-document/add-subject'; + +const PDFViewer = dynamic(async () => import('~/components/(dashboard)/pdf-viewer/pdf-viewer'), { + ssr: false, + loading: () => ( +
Loading document...
+Loading document...
diff --git a/apps/web/src/app/(dashboard)/documents/[id]/loading.tsx b/apps/web/src/app/(dashboard)/documents/[id]/loading.tsx index e68b149dc..e97489a6e 100644 --- a/apps/web/src/app/(dashboard)/documents/[id]/loading.tsx +++ b/apps/web/src/app/(dashboard)/documents/[id]/loading.tsx @@ -4,7 +4,7 @@ import { ChevronLeft, Loader } from 'lucide-react'; export default function Loading() { return ( -Loading document...
Loading document...
-- Add all relevant fields for each recipient. -
- -- Add the people who will sign the document. -
- -- Add the subject and message you wish to send to signers. -
- -+ You can use the following variables in your message: +
+ +
+ {'{signer.name}'}
+ {' '}
+ - The signer's name
+
+ {'{signer.email}'}
+ {' '}
+ - The signer's email
+
+ {'{document.name}'}
+ {' '}
+ - The document's name
+ - You can use the following variables in your message: -
+
- {'{signer.name}'}
- {' '}
- - The signer's name
-
- {'{signer.email}'}
- {' '}
- - The signer's email
-
- {'{document.name}'}
- {' '}
- - The document's name
- {description}
+ ++ {title}{' '} + + ({step}/{maxStep}) + +
+ +