diff --git a/client/src/pages/tools/base64/Encoder.jsx b/client/src/pages/tools/base64/Encoder.jsx
new file mode 100644
index 0000000..1300579
--- /dev/null
+++ b/client/src/pages/tools/base64/Encoder.jsx
@@ -0,0 +1,44 @@
+import {useEffect, useState} from "react";
+import {useSearchParams} from "react-router-dom";
+import {Buffer} from "buffer";
+import Button from "@/common/components/Button";
+import {faCopy, faShare} from "@fortawesome/free-solid-svg-icons";
+import InfoArea from "@/common/components/InfoArea/index.js";
+import "./styles.sass";
+
+export const Encoder = () => {
+ const [searchParams] = useSearchParams();
+ const [inputString, setInputString] = useState(searchParams.get("input") || "");
+ const [outputString, setOutputString] = useState("");
+
+ useEffect(() => {
+ setOutputString(Buffer.from(inputString).toString("base64"));
+ }, [inputString]);
+
+ const shareLink = () => {
+ const url = new URL(window.location.href);
+ url.searchParams.set("input", inputString);
+ navigator.clipboard.writeText(url.href);
+ }
+
+ const copyToClipboard = () => outputString !== "" ? navigator.clipboard.writeText(outputString) : "";
+
+ return (
+ <>
+