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 (
+ <>
+
+
+
+ >
+ );
+};
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';