From 9cc8bbdfc386e2253e5059c1d3fe2e9f694d5baf Mon Sep 17 00:00:00 2001
From: Tawagot0 <26726263+Tawagot0@users.noreply.github.com>
Date: Sat, 20 Jan 2024 17:45:59 +0100
Subject: [PATCH 01/47] fix: docker compose variable
---
docker/compose.yml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/docker/compose.yml b/docker/compose.yml
index 9d4f0e951..a48702bf9 100644
--- a/docker/compose.yml
+++ b/docker/compose.yml
@@ -23,7 +23,8 @@ services:
- database
- inbucket
environment:
- - DATABASE_URL=postgres://documenso:password@database:5432/documenso
+ - NEXT_PRIVATE_DATABASE_URL=postgres://documenso:password@database:5432/documenso
+ - NEXT_PRIVATE_DIRECT_DATABASE_URL=postgres://documenso:password@database:5432/documenso
- NEXT_PUBLIC_WEBAPP_URL=http://localhost:3000
- NEXTAUTH_SECRET=my-super-secure-secret
- NEXTAUTH_URL=http://localhost:3000
From e8c2ca8890df41878324f1251d29b95be7c07934 Mon Sep 17 00:00:00 2001
From: Mythie
Date: Mon, 22 Jan 2024 12:32:19 +1100
Subject: [PATCH 02/47] fix: mask documents in search
---
.../lib/server-only/document/get-document-by-token.ts | 8 ++++++--
.../document/search-documents-with-keyword.ts | 11 ++++++++++-
2 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/packages/lib/server-only/document/get-document-by-token.ts b/packages/lib/server-only/document/get-document-by-token.ts
index 89b3777ea..62c8a5ca1 100644
--- a/packages/lib/server-only/document/get-document-by-token.ts
+++ b/packages/lib/server-only/document/get-document-by-token.ts
@@ -1,5 +1,5 @@
import { prisma } from '@documenso/prisma';
-import { DocumentWithRecipient } from '@documenso/prisma/types/document-with-recipient';
+import type { DocumentWithRecipient } from '@documenso/prisma/types/document-with-recipient';
export interface GetDocumentAndSenderByTokenOptions {
token: string;
@@ -58,7 +58,11 @@ export const getDocumentAndRecipientByToken = async ({
},
},
include: {
- Recipient: true,
+ Recipient: {
+ where: {
+ token,
+ },
+ },
documentData: true,
},
});
diff --git a/packages/lib/server-only/document/search-documents-with-keyword.ts b/packages/lib/server-only/document/search-documents-with-keyword.ts
index c4014d37f..8125ae900 100644
--- a/packages/lib/server-only/document/search-documents-with-keyword.ts
+++ b/packages/lib/server-only/document/search-documents-with-keyword.ts
@@ -1,6 +1,8 @@
import { prisma } from '@documenso/prisma';
import { DocumentStatus } from '@documenso/prisma/client';
+import { maskRecipientTokensForDocument } from '../../utils/mask-recipient-tokens-for-document';
+
export type SearchDocumentsWithKeywordOptions = {
query: string;
userId: number;
@@ -77,5 +79,12 @@ export const searchDocumentsWithKeyword = async ({
take: limit,
});
- return documents;
+ const maskedDocuments = documents.map((document) =>
+ maskRecipientTokensForDocument({
+ document,
+ user,
+ }),
+ );
+
+ return maskedDocuments;
};
From 4909eee40153803a1b7afa3cb9ee2c5e544a9af6 Mon Sep 17 00:00:00 2001
From: Mythie
Date: Mon, 22 Jan 2024 21:36:46 +1100
Subject: [PATCH 03/47] feat: add viewing on completed page for pending
documents
---
.../complete/document-preview-button.tsx | 39 +++++++++++++++++++
.../sign/[token]/complete/layout.tsx | 17 ++++++++
.../(signing)/sign/[token]/complete/page.tsx | 22 ++++++++---
.../components/document/document-dialog.tsx | 2 +-
4 files changed, 73 insertions(+), 7 deletions(-)
create mode 100644 apps/web/src/app/(signing)/sign/[token]/complete/document-preview-button.tsx
create mode 100644 apps/web/src/app/(signing)/sign/[token]/complete/layout.tsx
diff --git a/apps/web/src/app/(signing)/sign/[token]/complete/document-preview-button.tsx b/apps/web/src/app/(signing)/sign/[token]/complete/document-preview-button.tsx
new file mode 100644
index 000000000..1ac50f1c0
--- /dev/null
+++ b/apps/web/src/app/(signing)/sign/[token]/complete/document-preview-button.tsx
@@ -0,0 +1,39 @@
+'use client';
+
+import { useState } from 'react';
+
+import { FileSearch } from 'lucide-react';
+
+import type { DocumentData } from '@documenso/prisma/client';
+import DocumentDialog from '@documenso/ui/components/document/document-dialog';
+import type { ButtonProps } from '@documenso/ui/primitives/button';
+import { Button } from '@documenso/ui/primitives/button';
+
+export type DocumentPreviewButtonProps = {
+ className?: string;
+ documentData: DocumentData;
+} & ButtonProps;
+
+export const DocumentPreviewButton = ({
+ className,
+ documentData,
+ ...props
+}: DocumentPreviewButtonProps) => {
+ const [showDialog, setShowDialog] = useState(false);
+
+ return (
+ <>
+ setShowDialog((visible) => !visible)}
+ {...props}
+ >
+
+ View Document
+
+
+
+ >
+ );
+};
diff --git a/apps/web/src/app/(signing)/sign/[token]/complete/layout.tsx b/apps/web/src/app/(signing)/sign/[token]/complete/layout.tsx
new file mode 100644
index 000000000..d3d1c15c3
--- /dev/null
+++ b/apps/web/src/app/(signing)/sign/[token]/complete/layout.tsx
@@ -0,0 +1,17 @@
+import React from 'react';
+
+import { RefreshOnFocus } from '~/components/(dashboard)/refresh-on-focus/refresh-on-focus';
+
+export type SigningLayoutProps = {
+ children: React.ReactNode;
+};
+
+export default function SigningLayout({ children }: SigningLayoutProps) {
+ return (
+
+ {children}
+
+
+
+ );
+}
diff --git a/apps/web/src/app/(signing)/sign/[token]/complete/page.tsx b/apps/web/src/app/(signing)/sign/[token]/complete/page.tsx
index 4b1aed265..ab73755ab 100644
--- a/apps/web/src/app/(signing)/sign/[token]/complete/page.tsx
+++ b/apps/web/src/app/(signing)/sign/[token]/complete/page.tsx
@@ -17,6 +17,8 @@ import { SigningCard3D } from '@documenso/ui/components/signing-card';
import { truncateTitle } from '~/helpers/truncate-title';
+import { DocumentPreviewButton } from './document-preview-button';
+
export type CompletedSigningPageProps = {
params: {
token?: string;
@@ -117,12 +119,20 @@ export default async function CompletedSigningPage({
-
+ {document.status === DocumentStatus.COMPLETED ? (
+
+ ) : (
+
+ )}
{isLoggedIn ? (
diff --git a/packages/ui/components/document/document-dialog.tsx b/packages/ui/components/document/document-dialog.tsx
index 6099fecff..2693638fb 100644
--- a/packages/ui/components/document/document-dialog.tsx
+++ b/packages/ui/components/document/document-dialog.tsx
@@ -5,7 +5,7 @@ import { useState } from 'react';
import * as DialogPrimitive from '@radix-ui/react-dialog';
import { X } from 'lucide-react';
-import { DocumentData } from '@documenso/prisma/client';
+import type { DocumentData } from '@documenso/prisma/client';
import { cn } from '../../lib/utils';
import { Dialog, DialogOverlay, DialogPortal } from '../../primitives/dialog';
From 08011f9545afe29e2ddba18487e0f2a4902710f0 Mon Sep 17 00:00:00 2001
From: Catalin Pit <25515812+catalinpit@users.noreply.github.com>
Date: Tue, 23 Jan 2024 02:27:10 +0200
Subject: [PATCH 04/47] chore: added target blank for github link: (#851)
---
.../src/components/(dashboard)/layout/profile-dropdown.tsx | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx b/apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx
index 2dcbb9864..252432b89 100644
--- a/apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx
+++ b/apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx
@@ -141,7 +141,11 @@ export const ProfileDropdown = ({ user }: ProfileDropdownProps) => {
-
+
Star on Github
From e63122a718af30605d924b7228a64b382d6c6046 Mon Sep 17 00:00:00 2001
From: David Nguyen
Date: Tue, 23 Jan 2024 11:28:11 +1100
Subject: [PATCH 05/47] chore: update github feature template (#849)
---
.github/ISSUE_TEMPLATE/feature-request.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/ISSUE_TEMPLATE/feature-request.yml b/.github/ISSUE_TEMPLATE/feature-request.yml
index ab21e8828..ffb788c23 100644
--- a/.github/ISSUE_TEMPLATE/feature-request.yml
+++ b/.github/ISSUE_TEMPLATE/feature-request.yml
@@ -33,3 +33,4 @@ 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
From 6aed075c56ee9ef77fa4613d8d395bd23bd7b0de Mon Sep 17 00:00:00 2001
From: Anurag Sharma
Date: Tue, 23 Jan 2024 11:38:48 +0530
Subject: [PATCH 06/47] fix: add conditional rendering of OAuth providers
(#736)
Now google OAuth provider is not rendered if client id is not provided
---
.../src/app/(unauthenticated)/signin/page.tsx | 4 +-
apps/web/src/components/forms/signin.tsx | 40 +++++++++++--------
packages/lib/constants/auth.ts | 4 ++
3 files changed, 30 insertions(+), 18 deletions(-)
diff --git a/apps/web/src/app/(unauthenticated)/signin/page.tsx b/apps/web/src/app/(unauthenticated)/signin/page.tsx
index 0b0333b65..5fda07e70 100644
--- a/apps/web/src/app/(unauthenticated)/signin/page.tsx
+++ b/apps/web/src/app/(unauthenticated)/signin/page.tsx
@@ -1,5 +1,7 @@
import Link from 'next/link';
+import { IS_GOOGLE_SSO_ENABLED } from '@documenso/lib/constants/auth';
+
import { SignInForm } from '~/components/forms/signin';
export default function SignInPage() {
@@ -11,7 +13,7 @@ export default function SignInPage() {
Welcome back, we are lucky to have you.
-
+
{process.env.NEXT_PUBLIC_DISABLE_SIGNUP !== 'true' && (
diff --git a/apps/web/src/components/forms/signin.tsx b/apps/web/src/components/forms/signin.tsx
index 4e671a569..038f9fe68 100644
--- a/apps/web/src/components/forms/signin.tsx
+++ b/apps/web/src/components/forms/signin.tsx
@@ -48,9 +48,10 @@ export type TSignInFormSchema = z.infer;
export type SignInFormProps = {
className?: string;
+ isGoogleSSOEnabled?: boolean;
};
-export const SignInForm = ({ className }: SignInFormProps) => {
+export const SignInForm = ({ className, isGoogleSSOEnabled }: SignInFormProps) => {
const { toast } = useToast();
const [isTwoFactorAuthenticationDialogOpen, setIsTwoFactorAuthenticationDialogOpen] =
useState(false);
@@ -203,24 +204,29 @@ export const SignInForm = ({ className }: SignInFormProps) => {
{isSubmitting ? 'Signing in...' : 'Sign In'}
-
+ {isGoogleSSOEnabled && (
+ <>
+
-
-
- Google
-
+
+
+ Google
+
+ >
+ )}
+
Date: Tue, 23 Jan 2024 15:54:57 +0100
Subject: [PATCH 07/47] chore: add addi to open page
---
apps/marketing/src/app/(marketing)/open/data.ts | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/apps/marketing/src/app/(marketing)/open/data.ts b/apps/marketing/src/app/(marketing)/open/data.ts
index 3b109ea74..a3f314d9f 100644
--- a/apps/marketing/src/app/(marketing)/open/data.ts
+++ b/apps/marketing/src/app/(marketing)/open/data.ts
@@ -47,6 +47,14 @@ 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 = [
From 576544344fa3274584f843bbdd432220810bf9ed Mon Sep 17 00:00:00 2001
From: Timur Ercan
Date: Tue, 23 Jan 2024 16:20:25 +0100
Subject: [PATCH 08/47] chore: first small step to tracking growth mechanics
---
packages/email/template-components/template-footer.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/email/template-components/template-footer.tsx b/packages/email/template-components/template-footer.tsx
index 4a9e2c7cf..34cd4047e 100644
--- a/packages/email/template-components/template-footer.tsx
+++ b/packages/email/template-components/template-footer.tsx
@@ -10,7 +10,7 @@ export const TemplateFooter = ({ isDocument = true }: TemplateFooterProps) => {
{isDocument && (
This document was sent using{' '}
-
+
Documenso.
From 61967b22c1bbefd3f63f6c7d897472fb793e09d0 Mon Sep 17 00:00:00 2001
From: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Date: Wed, 24 Jan 2024 06:04:30 +0530
Subject: [PATCH 09/47] fix: visibility of security fields using
identityprovider (#709)
fixes #690
---
.../(dashboard)/settings/security/page.tsx | 46 +++++++++++++------
packages/lib/constants/auth.ts | 7 +++
2 files changed, 38 insertions(+), 15 deletions(-)
diff --git a/apps/web/src/app/(dashboard)/settings/security/page.tsx b/apps/web/src/app/(dashboard)/settings/security/page.tsx
index 9e99b73e8..ae97e7fb5 100644
--- a/apps/web/src/app/(dashboard)/settings/security/page.tsx
+++ b/apps/web/src/app/(dashboard)/settings/security/page.tsx
@@ -1,3 +1,4 @@
+import { IDENTITY_PROVIDER_NAME } from '@documenso/lib/constants/auth';
import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session';
import { AuthenticatorApp } from '~/components/forms/2fa/authenticator-app';
@@ -17,28 +18,43 @@ export default async function SecuritySettingsPage() {
-
+ {user.identityProvider === 'DOCUMENSO' ? (
+
+
-
+
-
Two Factor Authentication
+
Two Factor Authentication
-
- Add and manage your two factor security settings to add an extra layer of security to your
- account!
-
+
+ Add and manage your two factor security settings to add an extra layer of security to
+ your account!
+
-
-
Two-factor methods
+
+
+
- {user.twoFactorEnabled && (
-
-
Recovery methods
+ {user.twoFactorEnabled && (
+
+
Recovery methods
-
+
+
+ )}
+
+ ) : (
+
+
+ Your account is managed by {IDENTITY_PROVIDER_NAME[user.identityProvider]}
+
+
+ To update your password, enable two-factor authentication, and manage other security
+ settings, please go to your {IDENTITY_PROVIDER_NAME[user.identityProvider]} account
+ settings.
+
)}
diff --git a/packages/lib/constants/auth.ts b/packages/lib/constants/auth.ts
index 9a9652b95..837ca3e3a 100644
--- a/packages/lib/constants/auth.ts
+++ b/packages/lib/constants/auth.ts
@@ -1,5 +1,12 @@
+import { IdentityProvider } from '@documenso/prisma/client';
+
export const SALT_ROUNDS = 12;
+export const IDENTITY_PROVIDER_NAME: { [key in IdentityProvider]: string } = {
+ [IdentityProvider.DOCUMENSO]: 'Documenso',
+ [IdentityProvider.GOOGLE]: 'Google',
+};
+
export const IS_GOOGLE_SSO_ENABLED = Boolean(
process.env.NEXT_PRIVATE_GOOGLE_CLIENT_ID && process.env.NEXT_PRIVATE_GOOGLE_CLIENT_SECRET,
);
From 51d140cf9ae0cebf2323468fc6f2b20e0ecfd4f2 Mon Sep 17 00:00:00 2001
From: Gautam Hegde <85569489+Gautam-Hegde@users.noreply.github.com>
Date: Wed, 24 Jan 2024 11:33:57 +0530
Subject: [PATCH 10/47] feat: command group distinction (#854)
fixes #836
- Explicit `div` is used instead of ` ` , since it
failed to render borders for dynamic search results, but only works for
initial menu.
(initial menu)

(search results)

---
apps/web/src/components/(dashboard)/common/command-menu.tsx | 6 +++++-
.../components/(dashboard)/layout/verify-email-banner.tsx | 4 ++--
packages/ui/primitives/command.tsx | 6 +++---
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/apps/web/src/components/(dashboard)/common/command-menu.tsx b/apps/web/src/components/(dashboard)/common/command-menu.tsx
index 93f7fa729..0312a96d2 100644
--- a/apps/web/src/components/(dashboard)/common/command-menu.tsx
+++ b/apps/web/src/components/(dashboard)/common/command-menu.tsx
@@ -252,7 +252,11 @@ const ThemeCommands = ({ setTheme }: { setTheme: (_theme: string) => void }) =>
);
return THEMES.map((theme) => (
- setTheme(theme.theme)}>
+ setTheme(theme.theme)}
+ className="mx-2 first:mt-2 last:mb-2"
+ >
{theme.label}
diff --git a/apps/web/src/components/(dashboard)/layout/verify-email-banner.tsx b/apps/web/src/components/(dashboard)/layout/verify-email-banner.tsx
index 24e47c186..43eab21c5 100644
--- a/apps/web/src/components/(dashboard)/layout/verify-email-banner.tsx
+++ b/apps/web/src/components/(dashboard)/layout/verify-email-banner.tsx
@@ -4,7 +4,7 @@ import { useEffect, useState } from 'react';
import { AlertTriangle } from 'lucide-react';
-import { ONE_SECOND } from '@documenso/lib/constants/time';
+import { ONE_DAY, ONE_SECOND } from '@documenso/lib/constants/time';
import { trpc } from '@documenso/trpc/react';
import { Button } from '@documenso/ui/primitives/button';
import {
@@ -65,7 +65,7 @@ export const VerifyEmailBanner = ({ email }: VerifyEmailBannerProps) => {
if (emailVerificationDialogLastShown) {
const lastShownTimestamp = parseInt(emailVerificationDialogLastShown);
- if (Date.now() - lastShownTimestamp < 24 * 60 * 60 * 1000) {
+ if (Date.now() - lastShownTimestamp < ONE_DAY) {
return;
}
}
diff --git a/packages/ui/primitives/command.tsx b/packages/ui/primitives/command.tsx
index cbc306c66..65f88fc4e 100644
--- a/packages/ui/primitives/command.tsx
+++ b/packages/ui/primitives/command.tsx
@@ -35,7 +35,7 @@ const CommandDialog = ({ children, commandProps, ...props }: CommandDialogProps)
{children}
@@ -92,7 +92,7 @@ const CommandGroup = React.forwardRef<
Date: Wed, 24 Jan 2024 11:42:33 +0530
Subject: [PATCH 11/47] fix: disabled signing pad when submitting form (#842)
fixes : #810
---
apps/web/src/components/forms/profile.tsx | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/apps/web/src/components/forms/profile.tsx b/apps/web/src/components/forms/profile.tsx
index 0ce5c7f3d..7036f4e43 100644
--- a/apps/web/src/components/forms/profile.tsx
+++ b/apps/web/src/components/forms/profile.tsx
@@ -112,7 +112,6 @@ export const ProfileForm = ({ className, user }: ProfileFormProps) => {
-
{
onChange(v ?? '')}
/>
From 0fac7d7b70fc7db8711d2835f15216d30272901f Mon Sep 17 00:00:00 2001
From: Timur Ercan
Date: Wed, 24 Jan 2024 16:52:38 +0100
Subject: [PATCH 12/47] chore: add tags to manifest
---
apps/marketing/content/blog/manifest.mdx | 2 ++
1 file changed, 2 insertions(+)
diff --git a/apps/marketing/content/blog/manifest.mdx b/apps/marketing/content/blog/manifest.mdx
index 4abd7c068..7f2b7e7cd 100644
--- a/apps/marketing/content/blog/manifest.mdx
+++ b/apps/marketing/content/blog/manifest.mdx
@@ -7,6 +7,8 @@ authorRole: 'Co-Founder'
date: 2023-07-13
tags:
- Manifesto
+ - Open Source
+ - Vision
---
From 2be022b9fc1daa6f6ba9cd9beb64e86b83947067 Mon Sep 17 00:00:00 2001
From: Timur Ercan
Date: Wed, 24 Jan 2024 18:01:26 +0100
Subject: [PATCH 13/47] feat: commodofying signing blogpost
---
.../content/blog/commodifying-signing.mdx | 88 ++++++++++++++++++
apps/marketing/public/blog/lighthouse.jpeg | Bin 0 -> 338815 bytes
2 files changed, 88 insertions(+)
create mode 100644 apps/marketing/content/blog/commodifying-signing.mdx
create mode 100644 apps/marketing/public/blog/lighthouse.jpeg
diff --git a/apps/marketing/content/blog/commodifying-signing.mdx b/apps/marketing/content/blog/commodifying-signing.mdx
new file mode 100644
index 000000000..8aeddb7e3
--- /dev/null
+++ b/apps/marketing/content/blog/commodifying-signing.mdx
@@ -0,0 +1,88 @@
+---
+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
+---
+
+
+
+
+
+ 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.
+
+
+
+# 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 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 in need of 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 that will be needing 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 effiency is real. Our planned enterprise components, hosting support, and partner ecosystem will all leverage this effect.
+
+We will grow our a 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
diff --git a/apps/marketing/public/blog/lighthouse.jpeg b/apps/marketing/public/blog/lighthouse.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..d71e1eb5174d725a2e4979b6902010b7a23dc61c
GIT binary patch
literal 338815
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 Fg6OBmD%sUiF)OKl$>!f!aK#WzNx#AeAKN$
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