diff --git a/package-lock.json b/package-lock.json
index 5a3d0b2..9500488 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1283,6 +1283,7 @@
"version": "5.101.0",
"resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.101.0.tgz",
"integrity": "sha512-rLlJXSpkqfizLWgkR5+eLeIk0MvTx/meEIR7LRjxic+qxiQP8zVjq7BqQkiCMNLQBlLfuOLqqr6KO5GtrDlmSg==",
+ "license": "MIT",
"dependencies": {
"@tanstack/query-core": "5.101.0"
},
@@ -1298,6 +1299,7 @@
"version": "5.101.0",
"resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.101.0.tgz",
"integrity": "sha512-cpZA0+WqKXwrwMfiWZEGGF6QrIWVQFbhBtxqDF5sQsAfrFf47HIE6fiPbQU3wyAUEN2+7UNqLCQe7oG6m3f93w==",
+ "license": "MIT",
"dependencies": {
"@tanstack/query-devtools": "5.101.0"
},
@@ -5011,6 +5013,7 @@
"resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.79.0.tgz",
"integrity": "sha512-mhYp/MTmXvzYX6AJcJVko0rktoIhhmRnEouObj4wF5i/tCttgJvnp1+9wRkpITZjDTqpo4IOSJqu0dBlPlV/Lw==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=18.0.0"
},
diff --git a/src/app/(dashboard)/subscriptions/page.tsx b/src/app/(dashboard)/subscriptions/page.tsx
new file mode 100644
index 0000000..112f1c0
--- /dev/null
+++ b/src/app/(dashboard)/subscriptions/page.tsx
@@ -0,0 +1,7 @@
+export default function SubscriptionsPage() {
+ return (
+
+ Subscriptions
+
+ );
+}
diff --git a/src/components/navigation/BottomNav.tsx b/src/components/navigation/BottomNav.tsx
new file mode 100644
index 0000000..e80e801
--- /dev/null
+++ b/src/components/navigation/BottomNav.tsx
@@ -0,0 +1,84 @@
+"use client";
+
+import Link from "next/link";
+import { usePathname } from "next/navigation";
+import { Compass, Home, Heart, User } from "lucide-react";
+import { cn } from "@/lib/utils";
+
+const NAV_ITEMS = [
+ {
+ label: "Discover",
+ href: "/discover",
+ Icon: Compass,
+ },
+ {
+ label: "Dashboard",
+ href: "/dashboard",
+ Icon: Home,
+ },
+ {
+ label: "Subscriptions",
+ href: "/subscriptions",
+ Icon: Heart,
+ },
+ {
+ label: "Profile",
+ href: "/profile",
+ Icon: User,
+ },
+] as const;
+
+export function BottomNav() {
+ const pathname = usePathname();
+
+ return (
+
+ );
+}
diff --git a/src/middleware.ts b/src/middleware.ts
index 1e15c13..bf46c2d 100644
--- a/src/middleware.ts
+++ b/src/middleware.ts
@@ -3,7 +3,7 @@ import type { NextRequest } from "next/server";
import { isAuthenticatedFromRequest } from "@/lib/auth/session";
const AUTH_ROUTES = ["/login", "/signup"];
-const PROTECTED_PREFIXES = ["/dashboard", "/profile"];
+const PROTECTED_PREFIXES = ["/dashboard", "/profile", "/discover", "/subscriptions"];
function isProtectedPath(pathname: string): boolean {
return PROTECTED_PREFIXES.some(
@@ -34,5 +34,7 @@ export const config = {
"/signup",
"/dashboard/:path*",
"/profile/:path*",
+ "/discover/:path*",
+ "/subscriptions/:path*",
],
};
diff --git a/src/types/api.ts b/src/types/api.ts
index 3bc3943..d064f36 100644
--- a/src/types/api.ts
+++ b/src/types/api.ts
@@ -29,3 +29,22 @@ export interface Post {
authorId: string;
createdAt: string;
}
+
+export interface Subscription {
+ id: string;
+ creatorId: string;
+ status: "active" | "cancelled" | "expired";
+ createdAt: string;
+ expiresAt?: string;
+}
+
+export interface Creator {
+ id: string;
+ name: string;
+ handle: string;
+ avatarUrl?: string;
+ bio?: string;
+ subscriberCount: number;
+ isSubscribed?: boolean;
+ subscriptionPrice?: number;
+}