Files
vibn-frontend/app/[workspace]/project/[projectId]/product/page.tsx

180 lines
6.2 KiB
TypeScript

"use client";
import { useParams, usePathname } from "next/navigation";
import {
Code2,
Globe,
Server,
MessageSquare,
ChevronRight,
} from "lucide-react";
import {
PageTemplate,
PageSection,
PageCard,
PageGrid,
} from "@/components/layout/page-template";
const PRODUCT_NAV_ITEMS = [
{ title: "Code", icon: Code2, href: "/code" },
{ title: "Website", icon: Globe, href: "/product#website" },
{ title: "Chat Agent", icon: MessageSquare, href: "/product#agent" },
{ title: "Deployment", icon: Server, href: "/product#deployment" },
];
export default function ProductPage() {
const params = useParams();
const pathname = usePathname();
const workspace = params.workspace as string;
const projectId = params.projectId as string;
const sidebarItems = PRODUCT_NAV_ITEMS.map((item) => {
const fullHref = `/${workspace}/project/${projectId}${item.href}`;
return {
...item,
href: fullHref,
isActive: pathname === fullHref || pathname.startsWith(fullHref),
};
});
return (
<PageTemplate
sidebar={{
items: sidebarItems,
}}
>
{/* Quick Navigation Cards */}
<PageSection>
<PageGrid cols={2}>
{PRODUCT_NAV_ITEMS.map((item) => {
const Icon = item.icon;
const fullHref = `/${workspace}/project/${projectId}${item.href}`;
return (
<a key={item.href} href={fullHref}>
<PageCard hover>
<div className="flex items-start gap-4">
<div className="h-10 w-10 rounded-lg bg-muted flex items-center justify-center shrink-0">
<Icon className="h-5 w-5 text-muted-foreground" />
</div>
<div className="flex-1 min-w-0">
<h3 className="font-semibold mb-1">{item.title}</h3>
<p className="text-sm text-muted-foreground">
{item.title === "Code" &&
"Browse codebase, manage repositories"}
{item.title === "Website" &&
"Marketing site, landing pages"}
{item.title === "Chat Agent" &&
"Conversational AI interface"}
{item.title === "Deployment" &&
"Hosting, CI/CD, environments"}
</p>
</div>
<ChevronRight className="h-5 w-5 text-muted-foreground opacity-0 group-hover:opacity-100 transition-opacity shrink-0" />
</div>
</PageCard>
</a>
);
})}
</PageGrid>
</PageSection>
{/* Code Section */}
<PageSection
title="Code"
description="Your application codebase"
>
<PageCard>
<div className="flex items-center justify-between">
<div className="flex items-center gap-3">
<div className="h-10 w-10 rounded-lg bg-muted flex items-center justify-center">
<Code2 className="h-5 w-5 text-muted-foreground" />
</div>
<div>
<p className="font-medium">Browse Repository</p>
<p className="text-sm text-muted-foreground">
View files, commits, and code structure
</p>
</div>
</div>
<a href={`/${workspace}/project/${projectId}/code`}>
<ChevronRight className="h-5 w-5 text-muted-foreground" />
</a>
</div>
</PageCard>
</PageSection>
{/* Website Section */}
<PageSection
title="Website"
description="Marketing site and landing pages"
>
<PageCard>
<div className="text-center py-8 text-muted-foreground">
<Globe className="h-12 w-12 mx-auto mb-3 opacity-50" />
<p className="text-sm">
Manage your marketing website and landing pages
</p>
</div>
</PageCard>
</PageSection>
{/* Chat Agent Section */}
<PageSection
title="Chat Agent"
description="Conversational AI interface"
>
<PageCard>
<div className="text-center py-8 text-muted-foreground">
<MessageSquare className="h-12 w-12 mx-auto mb-3 opacity-50" />
<p className="text-sm">
Configure and manage your AI chat agent
</p>
</div>
</PageCard>
</PageSection>
{/* Deployment Section */}
<PageSection
title="Deployment"
description="Hosting and CI/CD"
>
<PageGrid cols={3}>
<PageCard>
<div className="text-center">
<div className="h-12 w-12 rounded-full bg-muted flex items-center justify-center mx-auto mb-3">
<Server className="h-6 w-6 text-muted-foreground" />
</div>
<h3 className="font-semibold mb-1">Production</h3>
<p className="text-sm text-muted-foreground mb-2">Live</p>
<p className="text-xs text-muted-foreground">vercel.app</p>
</div>
</PageCard>
<PageCard>
<div className="text-center">
<div className="h-12 w-12 rounded-full bg-muted flex items-center justify-center mx-auto mb-3">
<Server className="h-6 w-6 text-muted-foreground" />
</div>
<h3 className="font-semibold mb-1">Staging</h3>
<p className="text-sm text-muted-foreground mb-2">Preview</p>
<p className="text-xs text-muted-foreground">staging.vercel.app</p>
</div>
</PageCard>
<PageCard>
<div className="text-center">
<div className="h-12 w-12 rounded-full bg-muted flex items-center justify-center mx-auto mb-3">
<Server className="h-6 w-6 text-muted-foreground" />
</div>
<h3 className="font-semibold mb-1">Development</h3>
<p className="text-sm text-muted-foreground mb-2">Local</p>
<p className="text-xs text-muted-foreground">localhost:3000</p>
</div>
</PageCard>
</PageGrid>
</PageSection>
</PageTemplate>
);
}