diff --git a/apps/web/src/app/(dashboard)/api-keys/page.tsx b/apps/web/src/app/(dashboard)/api-keys/page.tsx
deleted file mode 100644
index c9a66fd..0000000
--- a/apps/web/src/app/(dashboard)/api-keys/page.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-"use client";
-
-import ApiList from "./api-list";
-import AddApiKey from "./add-api-key";
-import Smtp from "./smtp";
-import { Tabs, TabsList, TabsTrigger, TabsContent } from "@unsend/ui/src/tabs";
-import { useState } from 'react';
-
-export default function ApiKeysPage() {
- const [activeTab, setActiveTab] = useState("apiKeys");
- const disableSmtp = true;
- const handleTabChange = (value: any) => {
- if (value === "smtp" && disableSmtp) {
- return;
- }
- setActiveTab(value);
- };
-
- return (
-
-
-
- API keys
-
- SMTP
-
-
-
-
-
-
-
-
-
-
-
- );
-}
diff --git a/apps/web/src/app/(dashboard)/dasboard-layout.tsx b/apps/web/src/app/(dashboard)/dasboard-layout.tsx
index 83e4fc5..740972e 100644
--- a/apps/web/src/app/(dashboard)/dasboard-layout.tsx
+++ b/apps/web/src/app/(dashboard)/dasboard-layout.tsx
@@ -76,7 +76,7 @@ export function DashboardLayout({ children }: { children: React.ReactNode }) {
Campaigns
-
+
Developer settings
diff --git a/apps/web/src/app/(dashboard)/api-keys/add-api-key.tsx b/apps/web/src/app/(dashboard)/dev-settings/api-keys/add-api-key.tsx
similarity index 100%
rename from apps/web/src/app/(dashboard)/api-keys/add-api-key.tsx
rename to apps/web/src/app/(dashboard)/dev-settings/api-keys/add-api-key.tsx
diff --git a/apps/web/src/app/(dashboard)/api-keys/api-list.tsx b/apps/web/src/app/(dashboard)/dev-settings/api-keys/api-list.tsx
similarity index 100%
rename from apps/web/src/app/(dashboard)/api-keys/api-list.tsx
rename to apps/web/src/app/(dashboard)/dev-settings/api-keys/api-list.tsx
diff --git a/apps/web/src/app/(dashboard)/api-keys/delete-api-key.tsx b/apps/web/src/app/(dashboard)/dev-settings/api-keys/delete-api-key.tsx
similarity index 100%
rename from apps/web/src/app/(dashboard)/api-keys/delete-api-key.tsx
rename to apps/web/src/app/(dashboard)/dev-settings/api-keys/delete-api-key.tsx
diff --git a/apps/web/src/app/(dashboard)/dev-settings/api-keys/page.tsx b/apps/web/src/app/(dashboard)/dev-settings/api-keys/page.tsx
new file mode 100644
index 0000000..61a49f1
--- /dev/null
+++ b/apps/web/src/app/(dashboard)/dev-settings/api-keys/page.tsx
@@ -0,0 +1,16 @@
+"use client";
+
+import AddApiKey from "./add-api-key";
+import ApiList from "./api-list";
+
+export default function ApiKeysPage() {
+ return (
+
+ );
+}
diff --git a/apps/web/src/app/(dashboard)/dev-settings/layout.tsx b/apps/web/src/app/(dashboard)/dev-settings/layout.tsx
new file mode 100644
index 0000000..f128e43
--- /dev/null
+++ b/apps/web/src/app/(dashboard)/dev-settings/layout.tsx
@@ -0,0 +1,26 @@
+"use client";
+
+import { Tabs, TabsList, TabsTrigger, TabsContent } from "@unsend/ui/src/tabs";
+import { useState } from "react";
+import { SettingsNavButton } from "./settings-nav-button";
+
+export const dynamic = "force-static";
+
+export default function ApiKeysPage({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+
Developer settings
+
+
+ API Keys
+
+ SMTP
+
+
{children}
+
+ );
+}
diff --git a/apps/web/src/app/(dashboard)/dev-settings/page.tsx b/apps/web/src/app/(dashboard)/dev-settings/page.tsx
new file mode 100644
index 0000000..365314c
--- /dev/null
+++ b/apps/web/src/app/(dashboard)/dev-settings/page.tsx
@@ -0,0 +1,16 @@
+"use client";
+
+import AddApiKey from "./api-keys/add-api-key";
+import ApiList from "./api-keys/api-list";
+
+export default function ApiKeysPage() {
+ return (
+
+ );
+}
diff --git a/apps/web/src/app/(dashboard)/dev-settings/settings-nav-button.tsx b/apps/web/src/app/(dashboard)/dev-settings/settings-nav-button.tsx
new file mode 100644
index 0000000..44afe8e
--- /dev/null
+++ b/apps/web/src/app/(dashboard)/dev-settings/settings-nav-button.tsx
@@ -0,0 +1,41 @@
+"use client";
+
+import { LogOut } from "lucide-react";
+import { signOut } from "next-auth/react";
+import Link from "next/link";
+import { usePathname } from "next/navigation";
+import React from "react";
+
+export const SettingsNavButton: React.FC<{
+ href: string;
+ children: React.ReactNode;
+ comingSoon?: boolean;
+}> = ({ href, children, comingSoon }) => {
+ const pathname = usePathname();
+
+ const isActive = pathname?.startsWith(href);
+
+ if (comingSoon) {
+ return (
+
+
+ {children}
+
+
+ soon
+
+
+ );
+ }
+
+ return (
+
+ {children}
+
+ );
+};
diff --git a/apps/web/src/app/(dashboard)/api-keys/smtp.tsx b/apps/web/src/app/(dashboard)/dev-settings/smtp/page.tsx
similarity index 50%
rename from apps/web/src/app/(dashboard)/api-keys/smtp.tsx
rename to apps/web/src/app/(dashboard)/dev-settings/smtp/page.tsx
index 930a014..e0fa68b 100644
--- a/apps/web/src/app/(dashboard)/api-keys/smtp.tsx
+++ b/apps/web/src/app/(dashboard)/dev-settings/smtp/page.tsx
@@ -17,35 +17,51 @@ export default function ExampleCard() {
smtp: "smtp.example.com",
port: "587",
user: "user@example.com",
- password: "supersecretpassword"
+ password: "supersecretpassword",
};
return (
-
+
SMTP
- Send emails using SMTP instead of the REST API. See documentation for more information.
+ Send emails using SMTP instead of the REST API. See documentation for
+ more information.
Host:
-
+
Port:
-
-
For encrypted/TLS connections use 2465, 587 or 2587
+
+
+ For encrypted/TLS connections use 2465,{" "}
+ 587 or 2587
+
User:
-
+
Password:
-
+