diff --git a/apps/dashboard/src/@/actions/joinWaitlist.ts b/apps/dashboard/src/@/actions/joinWaitlist.ts
deleted file mode 100644
index cdc7ce0d5e5..00000000000
--- a/apps/dashboard/src/@/actions/joinWaitlist.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-"use server";
-
-import { getAuthToken } from "../../app/api/lib/getAuthToken";
-import { API_SERVER_URL } from "../constants/env";
-
-export async function joinTeamWaitlist(options: {
- teamSlug: string;
- // currently only 'nebula' is supported
- scope: "nebula";
-}) {
- const { teamSlug, scope } = options;
- const token = await getAuthToken();
-
- if (!token) {
- return {
- errorMessage: "You are not authorized to perform this action",
- };
- }
-
- const res = await fetch(`${API_SERVER_URL}/v1/teams/${teamSlug}/waitlist`, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- Authorization: `Bearer ${token}`,
- },
- body: JSON.stringify({
- scope,
- }),
- });
-
- if (!res.ok) {
- return {
- errorMessage: "Failed to join waitlist",
- };
- }
-
- return {
- success: true,
- };
-}
diff --git a/apps/dashboard/src/@/api/team.ts b/apps/dashboard/src/@/api/team.ts
index b0c862090d4..52c66d8e2df 100644
--- a/apps/dashboard/src/@/api/team.ts
+++ b/apps/dashboard/src/@/api/team.ts
@@ -74,31 +74,3 @@ export async function getDefaultTeam() {
}
return null;
}
-
-type TeamNebulaWaitList = {
- onWaitlist: boolean;
- createdAt: null | string;
-};
-
-export async function getTeamNebulaWaitList(teamSlug: string) {
- const token = await getAuthToken();
-
- if (!token) {
- return null;
- }
-
- const res = await fetch(
- `${API_SERVER_URL}/v1/teams/${teamSlug}/waitlist?scope=nebula`,
- {
- headers: {
- Authorization: `Bearer ${token}`,
- },
- },
- );
-
- if (res.ok) {
- return (await res.json()).result as TeamNebulaWaitList;
- }
-
- return null;
-}
diff --git a/apps/dashboard/src/app/nebula-app/(app)/layout.tsx b/apps/dashboard/src/app/nebula-app/(app)/layout.tsx
index 0af841ceff0..6aba916681e 100644
--- a/apps/dashboard/src/app/nebula-app/(app)/layout.tsx
+++ b/apps/dashboard/src/app/nebula-app/(app)/layout.tsx
@@ -1,6 +1,4 @@
-import { type Team, getTeams } from "@/api/team";
-import type { Account } from "@3rdweb-sdk/react/hooks/useApi";
-import Link from "next/link";
+import { getTeams } from "@/api/team";
import type React from "react";
import { getValidAccount } from "../../account/settings/getAccount";
import {
@@ -8,11 +6,8 @@ import {
getAuthTokenWalletAddress,
} from "../../api/lib/getAuthToken";
import { loginRedirect } from "../../login/loginRedirect";
-import { NebulaWaitListPage } from "../../team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page";
import { getSessions } from "./api/session";
import { ChatPageLayout } from "./components/ChatPageLayout";
-import { NebulaAccountButton } from "./components/NebulaAccountButton";
-import { NebulaIcon } from "./icons/NebulaIcon";
export default async function Layout(props: {
children: React.ReactNode;
@@ -37,15 +32,6 @@ export default async function Layout(props: {
loginRedirect();
}
- const teamWithNebulaAccess = teams.find((team) =>
- team.enabledScopes.includes("nebula"),
- );
-
- // if none of them teams have nebula access, request access on first team, and show waitlist page
- if (!teamWithNebulaAccess) {
- return ;
- }
-
const sessions = await getSessions({
authToken,
}).catch(() => []);
@@ -61,43 +47,3 @@ export default async function Layout(props: {
);
}
-
-function NebulaWaitlistPage(props: {
- account: Account;
- team: Team;
-}) {
- return (
-
- );
-}
diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/components/ProjectSidebarLayout.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/components/ProjectSidebarLayout.tsx
index 42e28684de2..99fe01ecb65 100644
--- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/components/ProjectSidebarLayout.tsx
+++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/components/ProjectSidebarLayout.tsx
@@ -16,9 +16,8 @@ import { NebulaIcon } from "../../../../nebula-app/(app)/icons/NebulaIcon";
export function ProjectSidebarLayout(props: {
layoutPath: string;
children: React.ReactNode;
- showNebula: boolean;
}) {
- const { layoutPath, children, showNebula } = props;
+ const { layoutPath, children } = props;
const tracking = (label: string) => ({
category: "project-sidebar",
@@ -60,16 +59,12 @@ export function ProjectSidebarLayout(props: {
icon: ContractIcon,
tracking: tracking("contracts"),
},
- ...(showNebula
- ? [
- {
- href: `${layoutPath}/nebula`,
- label: "Nebula",
- icon: NebulaIcon,
- tracking: tracking("nebula"),
- },
- ]
- : []),
+ {
+ href: `${layoutPath}/nebula`,
+ label: "Nebula",
+ icon: NebulaIcon,
+ tracking: tracking("nebula"),
+ },
{
href: `${layoutPath}/insight`,
label: "Insight",
diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/layout.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/layout.tsx
index e5a14936c6d..309345de817 100644
--- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/layout.tsx
+++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/layout.tsx
@@ -1,5 +1,5 @@
import { getProjects } from "@/api/projects";
-import { getTeamNebulaWaitList, getTeams } from "@/api/team";
+import { getTeams } from "@/api/team";
import { SidebarProvider } from "@/components/ui/sidebar";
import { redirect } from "next/navigation";
import { AnnouncementBanner } from "../../../../components/notices/AnnouncementBanner";
@@ -49,9 +49,6 @@ export default async function ProjectLayout(props: {
redirect(`/team/${params.team_slug}`);
}
- const isOnNebulaWaitList = (await getTeamNebulaWaitList(team.slug))
- ?.onWaitlist;
-
const layoutPath = `/team/${params.team_slug}/${params.project_slug}`;
return (
@@ -67,10 +64,7 @@ export default async function ProjectLayout(props: {
accountAddress={accountAddress}
/>
-
+
{props.children}
diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page-ui.client.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page-ui.client.tsx
deleted file mode 100644
index 9c28e36478e..00000000000
--- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page-ui.client.tsx
+++ /dev/null
@@ -1,127 +0,0 @@
-import { Button } from "@/components/ui/button";
-import { cn } from "@/lib/utils";
-import Link from "next/link";
-import { NebulaIcon } from "../../../../../nebula-app/(app)/icons/NebulaIcon";
-import { ShareButton } from "./share-button.client";
-
-export function NebulaWaitListPageUI(props: {
- teamId: string;
- className?: string;
- hideHeader?: boolean;
-}) {
- return (
-
- {/* Header */}
- {!props.hideHeader && (
-
-
-
Nebula
-
-
-
- )}
-
-
-
-
-
- Share this invite link and get moved up the list when your
- friends sign up!
-
-
- }
- />
-
-
- );
-}
-
-function CenteredCard(props: {
- footer: React.ReactNode;
- title: React.ReactNode;
- description: string;
-}) {
- return (
-
-
- {/* fancy borders */}
-
- {/* top */}
-
- {/* bottom */}
-
- {/* left */}
-
- {/* right */}
-
-
-
-
-
- {/* Icon */}
-
-
-
-
-
- {props.title}
-
-
-
-
-
- {props.description}
-
-
-
-
- {props.footer}
-
-
-
-
- );
-}
-
-function DashedBgDiv(props: {
- className?: string;
- type: "horizontal" | "vertical";
-}) {
- return (
-
- );
-}
diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page.tsx
deleted file mode 100644
index f1ee414322c..00000000000
--- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist-page.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import { joinTeamWaitlist } from "@/actions/joinWaitlist";
-import { type Team, getTeamNebulaWaitList } from "@/api/team";
-import { Button } from "@/components/ui/button";
-import Link from "next/link";
-import { NebulaWaitListPageUI } from "./nebula-waitlist-page-ui.client";
-
-export async function NebulaWaitListPage(props: {
- team: Team;
- className?: string;
- hideHeader?: boolean;
-}) {
- const nebulaWaitList = await getTeamNebulaWaitList(props.team.slug);
-
- // this should never happen
- if (!nebulaWaitList) {
- return (
-
- );
- }
-
- // if not already on the waitlist, join the waitlist
- if (!nebulaWaitList.onWaitlist) {
- const res = await joinTeamWaitlist({
- scope: "nebula",
- teamSlug: props.team.slug,
- }).catch(() => null);
-
- // this should never happen
- if (!res?.success) {
- return (
-
- );
- }
- }
-
- return (
-
- );
-}
-
-function UnexpectedErrorPage(props: {
- message: string;
-}) {
- return (
-
-
-
- {props.message}
-
-
-
-
- );
-}
diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist.stories.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist.stories.tsx
deleted file mode 100644
index dc98b66fb52..00000000000
--- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/nebula-waitlist.stories.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import type { Meta, StoryObj } from "@storybook/react";
-import { NebulaWaitListPageUI } from "./nebula-waitlist-page-ui.client";
-
-const meta = {
- title: "nebula/waitlist",
- component: Story,
- parameters: {
- nextjs: {
- appDirectory: true,
- },
- },
-} satisfies Meta;
-
-export default meta;
-type Story = StoryObj;
-
-export const Variants: Story = {
- args: {
- inWaitlist: false,
- },
-};
-
-function Story() {
- return ;
-}
diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/share-button.client.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/share-button.client.tsx
deleted file mode 100644
index a5ef6a71ac5..00000000000
--- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/components/share-button.client.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-"use client";
-
-import { Button } from "@/components/ui/button";
-import { ToolTipLabel } from "@/components/ui/tooltip";
-import { CheckIcon, ShareIcon } from "lucide-react";
-import { useState } from "react";
-
-export function ShareButton(props: {
- teamId: string;
-}) {
- const [isCopied, setIsCopied] = useState(false);
-
- return (
-
-
-
- );
-}
diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/page.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/page.tsx
index 059430bccc7..17d1d271d55 100644
--- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/page.tsx
+++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/nebula/page.tsx
@@ -5,7 +5,6 @@ import { redirect } from "next/navigation";
import { getAuthToken } from "../../../../api/lib/getAuthToken";
import { loginRedirect } from "../../../../login/loginRedirect";
import { NebulaAnalyticsPage } from "./components/analytics/nebula-analytics-page";
-import { NebulaWaitListPage } from "./components/nebula-waitlist-page";
import { NebulaFTUX } from "./nebula-ftux";
export default async function Page(props: {
@@ -42,8 +41,6 @@ export default async function Page(props: {
loginRedirect(`/team/${params.team_slug}/${params.project_slug}/nebula`);
}
- const hasNebulaAccess = team.enabledScopes.includes("nebula");
-
const activeResponse = await isProjectActive({
teamId: team.id,
projectId: project.id,
@@ -51,35 +48,31 @@ export default async function Page(props: {
const showFTUX = !activeResponse.nebula;
- if (hasNebulaAccess) {
- if (showFTUX) {
- return (
-
-
-
-
-
+ if (showFTUX) {
+ return (
+
+
- );
- }
- return (
-
+
+
+
+
);
}
- return
;
+ return (
+
+ );
}