diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx
index 911d48d44..cb551cad7 100644
--- a/frontend/src/app/layout.tsx
+++ b/frontend/src/app/layout.tsx
@@ -5,6 +5,7 @@ import { Inter } from "next/font/google";
import Script from "next/script";
import React from "react";
+import { CopycatWarningToast } from "@/components/copycat-warning-toast";
import { ThemeProvider } from "@/components/theme-provider";
import { analytics, basePath } from "@/config/site-config";
import QueryProvider from "@/components/query-provider";
@@ -116,6 +117,7 @@ export default function RootLayout({
{children}
+
diff --git a/frontend/src/components/copycat-warning-toast.tsx b/frontend/src/components/copycat-warning-toast.tsx
new file mode 100644
index 000000000..e77c94802
--- /dev/null
+++ b/frontend/src/components/copycat-warning-toast.tsx
@@ -0,0 +1,24 @@
+"use client";
+
+import { useEffect } from "react";
+import { toast } from "sonner";
+
+const STORAGE_KEY = "copycat-warning-dismissed";
+
+export function CopycatWarningToast() {
+ useEffect(() => {
+ if (typeof window === "undefined")
+ return;
+ if (localStorage.getItem(STORAGE_KEY) === "true")
+ return;
+
+ toast.warning("Beware of copycat sites. Always verify the URL is correct before trusting or running scripts.", {
+ position: "top-center",
+ duration: Number.POSITIVE_INFINITY,
+ closeButton: true,
+ onDismiss: () => localStorage.setItem(STORAGE_KEY, "true"),
+ });
+ }, []);
+
+ return null;
+}