diff --git a/apps/web/components/filter.tsx b/apps/web/components/filter.tsx
new file mode 100644
index 000000000..bed25decb
--- /dev/null
+++ b/apps/web/components/filter.tsx
@@ -0,0 +1,265 @@
+import { Fragment, useState } from "react";
+import {
+ Dialog,
+ Disclosure,
+ Menu,
+ Popover,
+ Transition,
+} from "@headlessui/react";
+import { XMarkIcon } from "@heroicons/react/24/outline";
+import { ChevronDownIcon } from "@heroicons/react/20/solid";
+import { classNames } from "@documenso/lib";
+
+const sortOptions = [
+ { name: "Most Popular", href: "#" },
+ { name: "Best Rating", href: "#" },
+ { name: "Newest", href: "#" },
+];
+const filters = [
+ {
+ id: "status",
+ name: "Status",
+ options: [
+ { value: "draft", label: "Draft" },
+ { value: "pending", label: "Pending" },
+ { value: "comppleted", label: "Comppleted" },
+ ],
+ },
+];
+
+export default function Example() {
+ const [open, setOpen] = useState(false);
+
+ return (
+
+ {/* Mobile filter dialog */}
+
+
+
+
+
+
+
+ New Arrivals
+
+
+ Thoughtfully designed objects for the workspace, home, and travel.
+
+
+
+
+
+ Product filters
+
+
+
+
+
+
+
+
+ {filters.map((section, sectionIdx) => (
+
+ ))}
+
+
+
+
+
+ );
+}
diff --git a/apps/web/pages/documents.tsx b/apps/web/pages/documents.tsx
index 6b3d395e9..91fc7e153 100644
--- a/apps/web/pages/documents.tsx
+++ b/apps/web/pages/documents.tsx
@@ -17,6 +17,7 @@ import { uploadDocument } from "@documenso/features";
import { DocumentStatus } from "@prisma/client";
import { Tooltip as ReactTooltip } from "react-tooltip";
import { Button, IconButton } from "@documenso/ui";
+import Filter from "../components/filter";
const DocumentsPage: NextPageWithLayout = (props: any) => {
const router = useRouter();
@@ -87,6 +88,7 @@ const DocumentsPage: NextPageWithLayout = (props: any) => {
+