+
- {icon}
+ {icon}
{titleOverride === true ? (
{title}
@@ -45,9 +56,13 @@ export const FeedContent = ({
)}
-
- {description}
-
+ {typeof description === "string" ? (
+
+ {description}
+
+ ) : (
+ description
+ )}
);
};
diff --git a/apps/frontend/src/components/ui/NavTab.tsx b/apps/frontend/src/components/ui/NavTab.tsx
new file mode 100644
index 00000000..251c94ce
--- /dev/null
+++ b/apps/frontend/src/components/ui/NavTab.tsx
@@ -0,0 +1,10 @@
+import { classed } from "@tw-classed/react";
+
+export const NavTab = classed.button("text-sm duration-200", {
+ variants: {
+ active: {
+ true: "font-semibold underline underline-offset-8 text-label-primary",
+ false: "font-normal text-label-quaternary",
+ },
+ },
+});
diff --git a/apps/frontend/src/config.ts b/apps/frontend/src/config.ts
index a0d21c0f..3d871a1b 100644
--- a/apps/frontend/src/config.ts
+++ b/apps/frontend/src/config.ts
@@ -16,7 +16,8 @@ export const FRONTEND_URL =
export const BASE_API_URL =
process.env.NEXT_PUBLIC_API_URL || "http://localhost:8080/api";
-export const BASE_API_WS = process.env.NEXT_PUBLIC_API_WS || "ws://localhost:8080";
+export const BASE_API_WS =
+ process.env.NEXT_PUBLIC_API_WS || "ws://localhost:8080";
export const OAUTH_APP_DETAILS: Record
= {
strava: {
@@ -83,8 +84,8 @@ export const ROUTER_ITEMS: RouterItem[] = [
iconSize: 20,
},
{
- label: "Narrowcast",
- href: "/narrowcast",
+ label: "Digital pheromones",
+ href: "/pheromones",
icon: Icons.NarrowCast,
iconSize: 20,
},
diff --git a/apps/frontend/src/pages/narrowcast/index.tsx b/apps/frontend/src/pages/narrowcast/index.tsx
deleted file mode 100644
index e46592bf..00000000
--- a/apps/frontend/src/pages/narrowcast/index.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { Banner } from "@/components/cards/Banner";
-import AppLayout from "@/layouts/AppLayout";
-
-export default function NarrowcastPage() {
- return (
-
- Narrowcasting
-
- >
- }
- withContainer={false}
- >
-
-
-
- Coming soon: Narrowcast events & opportunities to{" "}
- only your most relevant connections instead of
- broadcasting to the whole community or making dozens of group
- chats.
-
-
- Learn more about narrowcasting and other upcoming features like{" "}
-
digital pheromones and
superconnectors{" "}
-
- here
-
- .
-
-
- }
- textCenter={false}
- />
-
-
- );
-}
diff --git a/apps/frontend/src/pages/pheromones/cv/index.tsx b/apps/frontend/src/pages/pheromones/cv/index.tsx
new file mode 100644
index 00000000..eb081327
--- /dev/null
+++ b/apps/frontend/src/pages/pheromones/cv/index.tsx
@@ -0,0 +1,3 @@
+export default function CvPage() {
+ return <>Cv page>;
+}
diff --git a/apps/frontend/src/pages/pheromones/index.tsx b/apps/frontend/src/pages/pheromones/index.tsx
new file mode 100644
index 00000000..54ca6be7
--- /dev/null
+++ b/apps/frontend/src/pages/pheromones/index.tsx
@@ -0,0 +1,90 @@
+import { NavTab } from "@/components/ui/NavTab";
+import AppLayout from "@/layouts/AppLayout";
+import { useState } from "react";
+import { PheromonesCreate } from "./sections/PheromonesCreate";
+import { PheromonesMatches } from "./sections/PheromonesMatches";
+import { PheromonesSent } from "./sections/PheromonesSent";
+import { PheromonesReceived } from "./sections/PheromonesReceived";
+
+enum ActiveTab {
+ CREATE,
+ SENT,
+ RECEIVED,
+ MATCHES,
+}
+
+export default function PheromonesPage() {
+ const [activeTab, setActiveTab] = useState(ActiveTab.CREATE);
+
+ const ViewMapping: Record