diff --git a/frontend/src/pages/integrations/cloudflare-workers/authorize.tsx b/frontend/src/pages/integrations/cloudflare-workers/authorize.tsx
new file mode 100644
index 000000000..3b46751fc
--- /dev/null
+++ b/frontend/src/pages/integrations/cloudflare-workers/authorize.tsx
@@ -0,0 +1,92 @@
+import { useState } from "react";
+import { useRouter } from "next/router";
+
+import {
+ useSaveIntegrationAccessToken
+} from "@app/hooks/api";
+
+import { Button,Card, CardTitle, FormControl, Input } from "../../../components/v2";
+
+export default function CloudflareWorkersIntegrationPage() {
+ const router = useRouter();
+ const { mutateAsync } = useSaveIntegrationAccessToken();
+
+ const [accessKey, setAccessKey] = useState("");
+ const [accessKeyErrorText, setAccessKeyErrorText] = useState("");
+ const [accountId, setAccountId] = useState("");
+ const [accountIdErrorText, setAccountIdErrorText] = useState("");
+ const [isLoading, setIsLoading] = useState(false);
+
+ const handleButtonClick = async () => {
+ try {
+ setAccessKeyErrorText("");
+ setAccountIdErrorText("");
+ if (accessKey.length === 0 || accountId.length === 0) {
+ if (accessKey.length === 0) setAccessKeyErrorText("API token cannot be blank!");
+ if (accountId.length === 0) setAccountIdErrorText("Account ID cannot be blank!");
+ return;
+ }
+
+ setIsLoading(true);
+
+ const integrationAuth = await mutateAsync({
+ workspaceId: localStorage.getItem("projectData.id"),
+ integration: "cloudflare-workers",
+ accessId: accountId,
+ accessToken: accessKey
+ });
+
+ setAccessKey("");
+ setAccountId("");
+ setIsLoading(false);
+
+ router.push(`/integrations/cloudflare-workers/create?integrationAuthId=${integrationAuth._id}`);
+ } catch (err) {
+ console.error(err);
+ }
+ }
+
+ return (
+
+
+ Cloudflare Workers Integration
+
+ setAccessKey(e.target.value)}
+ />
+
+
+ setAccountId(e.target.value)}
+ />
+
+
+
+
+ );
+}
+
+CloudflareWorkersIntegrationPage.requireAuth = true;
\ No newline at end of file
diff --git a/frontend/src/pages/integrations/cloudflare-workers/create.tsx b/frontend/src/pages/integrations/cloudflare-workers/create.tsx
new file mode 100644
index 000000000..f019e7ff6
--- /dev/null
+++ b/frontend/src/pages/integrations/cloudflare-workers/create.tsx
@@ -0,0 +1,158 @@
+import { useEffect,useState } from "react";
+import { useRouter } from "next/router";
+import queryString from "query-string";
+
+import {
+ useCreateIntegration
+, useGetWorkspaceById } from "@app/hooks/api";
+
+import { Button, Card, CardTitle, FormControl, Select, SelectItem } from "../../../components/v2";
+import { useGetIntegrationAuthApps, useGetIntegrationAuthById } from "../../../hooks/api/integrationAuth";
+
+const cloudflareEnvironments = [
+ { name: "Production", slug: "production" }
+];
+
+export default function CloudflareWorkersIntegrationPage() {
+ const router = useRouter();
+ const { mutateAsync } = useCreateIntegration();
+
+ const { integrationAuthId } = queryString.parse(router.asPath.split("?")[1]);
+ const { data: workspace } = useGetWorkspaceById(localStorage.getItem("projectData.id") ?? "");
+ const { data: integrationAuth } = useGetIntegrationAuthById((integrationAuthId as string) ?? "");
+ const { data: integrationAuthApps } = useGetIntegrationAuthApps({
+ integrationAuthId: (integrationAuthId as string) ?? ""
+ });
+
+ const [selectedSourceEnvironment, setSelectedSourceEnvironment] = useState("");
+ const [targetApp, setTargetApp] = useState("");
+ const [targetAppId, setTargetAppId] = useState("");
+ const [targetEnvironment, setTargetEnvironment] = useState("");
+
+ const [isLoading, setIsLoading] = useState(false);
+
+ useEffect(() => {
+ if (workspace) {
+ setSelectedSourceEnvironment(workspace.environments[0].slug);
+ }
+ }, [workspace]);
+
+ useEffect(() => {
+ if (integrationAuthApps) {
+ if (integrationAuthApps.length > 0) {
+ setTargetApp(integrationAuthApps[0].name);
+ setTargetAppId(String(integrationAuthApps[0].appId));
+ setTargetEnvironment(cloudflareEnvironments[0].slug);
+ } else {
+ setTargetApp("none");
+ setTargetEnvironment(cloudflareEnvironments[0].slug);
+ }
+ }
+ }, [integrationAuthApps]);
+
+ const handleButtonClick = async () => {
+ try {
+ if (!integrationAuth?._id) return;
+
+ setIsLoading(true);
+
+ await mutateAsync({
+ integrationAuthId: integrationAuth?._id,
+ isActive: true,
+ app: targetApp,
+ appId: targetAppId,
+ sourceEnvironment: selectedSourceEnvironment,
+ targetEnvironment,
+ secretPath: "/",
+ });
+
+ setIsLoading(false);
+
+ router.push(`/integrations/${localStorage.getItem("projectData.id")}`);
+ } catch(err) {
+ console.error(err);
+ }
+ }
+
+ return integrationAuth &&
+ workspace &&
+ selectedSourceEnvironment &&
+ integrationAuthApps &&
+ targetEnvironment &&
+ targetApp ? (
+
+
+ Cloudflare Workers Integration
+
+
+
+
+
+
+
+
+
+
+
+
+ ) : (
+
+ );
+}
+
+CloudflareWorkersIntegrationPage.requireAuth = true;
\ No newline at end of file