diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx
new file mode 100644
index 0000000..aea9093
--- /dev/null
+++ b/src/app/not-found.tsx
@@ -0,0 +1,57 @@
+import Link from "next/link";
+
+export default function NotFound() {
+ return (
+
+
+
+
+
+ The page you're looking for doesn't exist or has been moved.
+
+
+
+
+ Go to Home
+
+
+
+
+
Looking for something specific?
+
+
+ API Documentation
+
+
+ Sourcify Main Site
+
+
+ GitHub Repository
+
+
+
+
+
+ );
+}
diff --git a/src/app/signatures/page.tsx b/src/app/signatures/page.tsx
new file mode 100644
index 0000000..baef458
--- /dev/null
+++ b/src/app/signatures/page.tsx
@@ -0,0 +1,5 @@
+import { redirect } from "next/navigation";
+
+export default function SignaturesPage() {
+ redirect("/");
+}
diff --git a/src/app/tools/abi/page.tsx b/src/app/tools/abi/page.tsx
new file mode 100644
index 0000000..7db0084
--- /dev/null
+++ b/src/app/tools/abi/page.tsx
@@ -0,0 +1,77 @@
+import Link from "next/link";
+import { FiExternalLink, FiArrowRight } from "react-icons/fi";
+import type { Metadata } from "next";
+
+export const metadata: Metadata = {
+ title: "ABI Decoder - 4byte.sourcify.dev",
+ description: "ABI decoder has moved to Swiss Knife calldata decoder",
+};
+
+export default function ABIDecoderPage() {
+ return (
+
+
+
+
+
ABI Decoder
+
Decode Ethereum calldata and transaction inputs
+
+
+
+
+
+
Other Resources
+
+
+
+ Search for function signatures
+
+
+
+ Import/Submit signatures
+
+
+
+ Sourcify API documentation
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/Header.tsx b/src/components/Header.tsx
index e7cab50..ea2d23e 100644
--- a/src/components/Header.tsx
+++ b/src/components/Header.tsx
@@ -69,7 +69,7 @@ export default function Header() {
return (
<>
{/* Migration Banner */}
-
+
📢 Migration Notice: Sourcify is taking over{" "}