diff --git a/apps/website/app/[locale]/blog/[slug]/page.tsx b/apps/website/app/[locale]/blog/[slug]/page.tsx
index 1845140..63a7c74 100644
--- a/apps/website/app/[locale]/blog/[slug]/page.tsx
+++ b/apps/website/app/[locale]/blog/[slug]/page.tsx
@@ -1,3 +1,4 @@
+import { CopyButton } from "@/components/ui/copy-button";
import { getPost, getPosts } from "@/lib/ghost";
import type { Metadata, ResolvingMetadata } from "next";
import { getTranslations } from "next-intl/server";
@@ -121,10 +122,13 @@ async function CodeBlock(props: LanguageProps) {
});
return (
-
+
);
}
export default async function BlogPostPage({ params }: Props) {
diff --git a/apps/website/components/ui/copy-button.tsx b/apps/website/components/ui/copy-button.tsx
new file mode 100644
index 0000000..cf131bb
--- /dev/null
+++ b/apps/website/components/ui/copy-button.tsx
@@ -0,0 +1,32 @@
+"use client";
+
+import { CheckIcon, CopyIcon } from "lucide-react";
+import { useState } from "react";
+
+interface CopyButtonProps {
+ text: string;
+}
+
+export function CopyButton({ text }: CopyButtonProps) {
+ const [isCopied, setIsCopied] = useState(false);
+
+ const copy = async () => {
+ await navigator.clipboard.writeText(text);
+ setIsCopied(true);
+ setTimeout(() => setIsCopied(false), 2000);
+ };
+
+ return (
+
+ );
+}