first commit
This commit is contained in:
47
frontend/app/home/components/CTASection.tsx
Normal file
47
frontend/app/home/components/CTASection.tsx
Normal file
@@ -0,0 +1,47 @@
|
||||
"use client";
|
||||
import { Button, Card } from "ikoncomponents";
|
||||
import { ArrowRight } from "lucide-react";
|
||||
import { useRouter } from "next/dist/client/components/navigation";
|
||||
|
||||
export function CTASection() {
|
||||
const router = useRouter();
|
||||
const handleGetStarted = () => {
|
||||
router.push("/main/overview/dashboard");
|
||||
};
|
||||
return (
|
||||
<section className="py-20">
|
||||
<div className="container mx-auto px-4">
|
||||
<Card className="relative max-w-5xl mx-auto overflow-hidden rounded-3xl border p-10 text-center">
|
||||
{/* Decorative radial glow */}
|
||||
<div className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-full h-full blur-[120px] pointer-events-none" />
|
||||
|
||||
<div className="relative z-10 space-y-8">
|
||||
<h2 className="text-4xl md:text-5xl font-bold tracking-tight">
|
||||
Ready to Transform Your Projects?
|
||||
</h2>
|
||||
<p className="text-gray-400 text-lg max-w-xl mx-auto">
|
||||
Join thousands of teams using AI to deliver projects on time and
|
||||
under budget.
|
||||
</p>
|
||||
|
||||
<div className="flex flex-wrap justify-center gap-4 pt-2">
|
||||
<Button
|
||||
className="bg-indigo-600 hover:bg-indigo-700 px-8 py-6 text-lg group"
|
||||
onClick={handleGetStarted}
|
||||
>
|
||||
Get Start
|
||||
<ArrowRight className="ml-2 h-5 w-5 transition-transform group-hover:translate-x-1" />
|
||||
</Button>
|
||||
<Button
|
||||
variant="outline"
|
||||
className="border-gray-800 bg-transparent px-8 py-6 text-lg hover:bg-white/5"
|
||||
>
|
||||
Contact Sales
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</Card>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
210
frontend/app/home/components/FeaturesSection.tsx
Normal file
210
frontend/app/home/components/FeaturesSection.tsx
Normal file
@@ -0,0 +1,210 @@
|
||||
"use client";
|
||||
import { Badge, Card } from "ikoncomponents";
|
||||
import {
|
||||
Zap,
|
||||
Users,
|
||||
BarChart3,
|
||||
FileText,
|
||||
Layout,
|
||||
Settings2,
|
||||
Lock,
|
||||
FolderKanban,
|
||||
AlertTriangle,
|
||||
RotateCcw,
|
||||
Binary,
|
||||
Link2,
|
||||
Shield,
|
||||
Brain,
|
||||
TrendingUp,
|
||||
Calendar,
|
||||
} from "lucide-react";
|
||||
|
||||
const features = [
|
||||
{
|
||||
title: "AI Health Scores",
|
||||
desc: "Real-time project health monitoring powered by machine learning. Predict risks before they happen.",
|
||||
icon: Brain,
|
||||
bg: "bg-purple-600",
|
||||
},
|
||||
{
|
||||
title: "Predictive Analytics",
|
||||
desc: "Forecast completion dates with confidence percentages. Know your slippage risk in advance.",
|
||||
icon: TrendingUp,
|
||||
bg: "bg-indigo-600",
|
||||
},
|
||||
{
|
||||
title: "AI Assessment Tool",
|
||||
desc: "LLM-powered project planning wizard generating BRD, SRS, timeline, budget breakdown, and risk identification.",
|
||||
icon: Zap,
|
||||
bg: "bg-blue-600",
|
||||
},
|
||||
{
|
||||
title: "Project Management",
|
||||
desc: "Complete project lifecycle management with Kanban boards, task tracking, and team collaboration.",
|
||||
icon: Layout,
|
||||
bg: "bg-cyan-600",
|
||||
},
|
||||
{
|
||||
title: "Task Management",
|
||||
desc: "Create, assign, and track tasks with priorities, story points, and sprint integration.",
|
||||
icon: Settings2,
|
||||
bg: "bg-blue-600",
|
||||
},
|
||||
{
|
||||
title: "Sprint Planning",
|
||||
desc: "Sprint velocity tracking, backlog grooming, and automated burndown charts for Agile teams..",
|
||||
icon: Calendar,
|
||||
bg: "bg-sky-600",
|
||||
},
|
||||
{
|
||||
title: "Analytics Dashboard",
|
||||
desc: "Task distribution charts, project metrics, and financial analytics in one unified view.",
|
||||
icon: BarChart3,
|
||||
bg: "bg-emerald-600",
|
||||
},
|
||||
{
|
||||
title: "Reports & Downloads",
|
||||
desc: "Generate downloadable reports filtered by time frame, projects, resources, and finances - export as CSV or PDF.",
|
||||
icon: FileText,
|
||||
bg: "bg-green-600",
|
||||
},
|
||||
{
|
||||
title: "Resource Management",
|
||||
desc: "Full team member lifecycle with CRUD, CSV bulk import, onboard/offboard workflow, and FTE calculation.",
|
||||
icon: Users,
|
||||
bg: "bg-orange-600",
|
||||
},
|
||||
{
|
||||
title: "Project Access Control",
|
||||
desc: "Request, grant, modify, and revoke resource access to projects with approval workflows.",
|
||||
icon: Lock,
|
||||
bg: "bg-amber-600",
|
||||
},
|
||||
{
|
||||
title: "Portfolio Management",
|
||||
desc: "Department-level project grouping for strategic oversight and portfolio performance tracking.",
|
||||
icon: FolderKanban,
|
||||
bg: "bg-rose-600",
|
||||
},
|
||||
{
|
||||
title: "Risk Management",
|
||||
desc: "Risk register with probability/impact scoring, severity levels, and mitigation tracking.",
|
||||
icon: AlertTriangle,
|
||||
bg: "bg-pink-600",
|
||||
},
|
||||
{
|
||||
title: "Change Management",
|
||||
desc: "Variation orders with approval workflow, budget impact tracking, and schedule adjustments.",
|
||||
icon: RotateCcw,
|
||||
bg: "bg-pink-600",
|
||||
},
|
||||
{
|
||||
title: "No-Code Automation",
|
||||
desc: "Create powerful If/Then triggers without writing code. Automate repetitive tasks instantly.",
|
||||
icon: Binary,
|
||||
bg: "bg-violet-600",
|
||||
},
|
||||
{
|
||||
title: "External Integrations",
|
||||
desc: "Connect to HRMS, CRM, ERP systems via REST API, GraphQL, webhooks, or database probes.",
|
||||
icon: Link2,
|
||||
bg: "bg-indigo-600",
|
||||
},
|
||||
{
|
||||
title: "Enterprise Security",
|
||||
desc: "Role-based access control, session management, and secure authentication for 8 stakeholder types.",
|
||||
icon: Shield,
|
||||
bg: "bg-orange-600",
|
||||
},
|
||||
];
|
||||
|
||||
const categories = [
|
||||
{
|
||||
label: "AI-Powered",
|
||||
dot: "bg-fuchsia-500",
|
||||
},
|
||||
{
|
||||
label: "Core Features",
|
||||
dot: "bg-cyan-500",
|
||||
},
|
||||
{
|
||||
label: "Analytics",
|
||||
dot: "bg-emerald-500",
|
||||
},
|
||||
{
|
||||
label: "Resources",
|
||||
dot: "bg-orange-500",
|
||||
},
|
||||
{
|
||||
label: "Management",
|
||||
dot: "bg-sky-500",
|
||||
},
|
||||
{
|
||||
label: "Automation",
|
||||
dot: "bg-violet-500",
|
||||
},
|
||||
{
|
||||
label: "Security",
|
||||
dot: "bg-orange-500",
|
||||
},
|
||||
] as const;
|
||||
|
||||
export function FeaturesSection() {
|
||||
return (
|
||||
<section className="py-10 px-4 sm:px-6">
|
||||
<div className="max-w-7xl mx-auto">
|
||||
{/* Header */}
|
||||
<div className="text-center space-y-4 mb-10">
|
||||
<Badge variant="outline" className="border px-4 py-1">
|
||||
Complete Platform
|
||||
</Badge>
|
||||
|
||||
<h2 className="text-3xl sm:text-4xl md:text-5xl font-bold tracking-tight">
|
||||
Everything You Need to Succeed
|
||||
</h2>
|
||||
|
||||
<p className="text-gray-400 max-w-2xl mx-auto text-base sm:text-lg">
|
||||
A comprehensive suite of 16 powerful features designed for modern
|
||||
project management.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Categories */}
|
||||
<div className="flex flex-wrap justify-center gap-3 mb-8">
|
||||
{categories.map((cat) => (
|
||||
<button
|
||||
key={cat.label}
|
||||
className="px-4 py-1.5 rounded-full text-xs font-medium border border-white/10
|
||||
hover:bg-white/5 transition-colors flex items-center gap-2"
|
||||
>
|
||||
<span className={`w-1.5 h-1.5 rounded-full ${cat.dot}`} />
|
||||
{cat.label}
|
||||
</button>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Features Grid */}
|
||||
<div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-4">
|
||||
{features.map((feature, idx) => (
|
||||
<Card
|
||||
key={idx}
|
||||
className="p-4 hover:bg-white/10 transition-all group"
|
||||
>
|
||||
<div
|
||||
className={`w-10 h-10 rounded-lg ${feature.bg} flex items-center justify-center group-hover:scale-105 transition-transform`}
|
||||
>
|
||||
<feature.icon size={20} />
|
||||
</div>
|
||||
|
||||
<h4 className="font-semibold">{feature.title}</h4>
|
||||
|
||||
<p className="text-gray-500 text-sm leading-relaxed">
|
||||
{feature.desc}
|
||||
</p>
|
||||
</Card>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
55
frontend/app/home/components/Footer.tsx
Normal file
55
frontend/app/home/components/Footer.tsx
Normal file
@@ -0,0 +1,55 @@
|
||||
"use client";
|
||||
import { Brain} from "lucide-react";
|
||||
|
||||
const footerLinks = {
|
||||
Product: ["Features", "Pricing", "Integrations", "API"],
|
||||
Resources: ["Documentation", "Blog", "Support", "Community"],
|
||||
Company: ["About", "Careers", "Privacy", "Terms"]
|
||||
};
|
||||
|
||||
export function Footer() {
|
||||
return (
|
||||
<footer className="pt-10 pb-12 border-t">
|
||||
<div className="container mx-auto px-6 lg:px-24">
|
||||
<div className="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-12 mb-10">
|
||||
|
||||
{/* Brand Column */}
|
||||
<div className="col-span-2 space-y-6">
|
||||
<div className="flex items-center gap-2 font-bold text-xl">
|
||||
<div className="p-1.5 rounded-lg bg-indigo-600">
|
||||
<Brain size={20} />
|
||||
</div>
|
||||
ProjectAI
|
||||
</div>
|
||||
<p className="text-gray-400 max-w-xs leading-relaxed">
|
||||
AI-powered project management for the modern enterprise.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Links Columns */}
|
||||
{Object.entries(footerLinks).map(([category, links]) => (
|
||||
<div key={category} className="space-y-3">
|
||||
<h4 className=" font-semibold">{category}</h4>
|
||||
<ul className="space-y-2">
|
||||
{links.map((link) => (
|
||||
<li key={link}>
|
||||
<a href="#" className="text-gray-400 hover:text-indigo-400 transition-colors text-sm">
|
||||
{link}
|
||||
</a>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Bottom Bar */}
|
||||
<div className="pt-8 border-t flex flex-col justify-between items-center gap-4">
|
||||
<p className="text-gray-400 text-sm">
|
||||
© 2025 ProjectAI. All rights reserved.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
);
|
||||
}
|
||||
137
frontend/app/home/components/HeroSection.tsx
Normal file
137
frontend/app/home/components/HeroSection.tsx
Normal file
@@ -0,0 +1,137 @@
|
||||
"use client";
|
||||
|
||||
import { Badge, Button, Card } from "ikoncomponents";
|
||||
import { ArrowRight, Brain, BrainCircuit } from "lucide-react";
|
||||
import { useRouter } from "next/dist/client/components/navigation";
|
||||
|
||||
export function HeroSection() {
|
||||
const router = useRouter();
|
||||
|
||||
const handleStartTrial = () => {
|
||||
router.push("/main/overview/dashboard");
|
||||
};
|
||||
|
||||
return (
|
||||
<section className="min-h-[70vh] flex justify-center py-12 px-4 sm:px-6">
|
||||
<div className="grid sm:grid-cols-1 lg:grid-cols-2 gap-12 lg:gap-16 items-center max-w-7xl w-full">
|
||||
{/* LEFT SECTION */}
|
||||
<div className="space-y-8">
|
||||
<Badge className="bg-indigo-500/10 text-indigo-400 border-indigo-500/20 px-3 py-1 flex items-center gap-2 w-fit">
|
||||
<BrainCircuit size={14} />
|
||||
AI-Powered Platform
|
||||
</Badge>
|
||||
|
||||
<div className="space-y-4">
|
||||
<h1 className="text-4xl sm:text-5xl lg:text-6xl font-bold tracking-tight">
|
||||
Predictive Project <br />
|
||||
<span className="text-transparent bg-clip-text bg-gradient-to-r from-indigo-400 to-cyan-400">
|
||||
Management
|
||||
</span>
|
||||
</h1>
|
||||
|
||||
<p className="text-gray-400 text-base sm:text-lg max-w-lg leading-relaxed">
|
||||
Transform reactive project tracking into proactive, predictive
|
||||
management. Leverage AI and ML for executive-level insights into
|
||||
financial health, resource optimization, and schedule
|
||||
predictability.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="flex gap-4">
|
||||
<Button
|
||||
className="bg-indigo-600 hover:bg-indigo-700 text-white px-8 py-6 text-lg rounded-md group"
|
||||
onClick={handleStartTrial}
|
||||
>
|
||||
Get Started
|
||||
<ArrowRight className="ml-2 h-5 w-5 transition-transform group-hover:translate-x-1" />
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-2 gap-8 pt-8 border-t border-white/5 max-w-md">
|
||||
<div>
|
||||
<div className="text-3xl font-bold text-indigo-400">20%</div>
|
||||
<p className="text-sm text-gray-500 uppercase tracking-wider mt-1">
|
||||
Reduced Schedule Overruns
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<div className="text-3xl font-bold text-indigo-400">85%</div>
|
||||
<p className="text-sm text-gray-500 uppercase tracking-wider mt-1">
|
||||
AI Prediction Accuracy
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* RIGHT SECTION */}
|
||||
<div className="relative max-w-lg w-full">
|
||||
<Card className="p-4 rounded-2xl shadow-2xl">
|
||||
<div className="flex justify-between items-center mb-3">
|
||||
<div className="flex gap-2">
|
||||
<div className="w-3 h-3 rounded-full bg-red-500/80" />
|
||||
<div className="w-3 h-3 rounded-full bg-yellow-500/80" />
|
||||
<div className="w-3 h-3 rounded-full bg-green-500/80" />
|
||||
</div>
|
||||
|
||||
<Badge variant="secondary" className="bg-white/5 font-normal">
|
||||
Live Preview
|
||||
</Badge>
|
||||
</div>
|
||||
|
||||
<div className="flex justify-between items-start p-3 border rounded-xl">
|
||||
<div>
|
||||
<h3 className="text-lg font-semibold">Enterprise Rollout</h3>
|
||||
<p className="text-sm">Phase 2 Active</p>
|
||||
</div>
|
||||
|
||||
<div className="flex items-center gap-4 text-right">
|
||||
<div>
|
||||
<div className="text-2xl font-bold text-green-400">92</div>
|
||||
<div className="text-[10px] uppercase tracking-widest">
|
||||
AI Score
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="p-2 rounded-full border border-green-500/30 bg-green-500/10">
|
||||
<Brain className="text-green-400" size={24} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="grid lg:grid-cols-3 gap-3">
|
||||
<StatBox label="Budget" value="$2.4M" />
|
||||
<StatBox label="P/L Health" value="+12%" highlight />
|
||||
<StatBox label="On-Time" value="98%" />
|
||||
</div>
|
||||
|
||||
<div className="flex items-center gap-1">
|
||||
<div className="flex-1 h-2 bg-gray-800 rounded-full overflow-hidden">
|
||||
<div className="h-full bg-gradient-to-r from-indigo-500 to-cyan-400 w-[75%]" />
|
||||
</div>
|
||||
<span className="text-xs w-10 text-right">75%</span>
|
||||
</div>
|
||||
</Card>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
|
||||
function StatBox({
|
||||
label,
|
||||
value,
|
||||
highlight,
|
||||
}: {
|
||||
label: string;
|
||||
value: string;
|
||||
highlight?: boolean;
|
||||
}) {
|
||||
return (
|
||||
<div className="p-4 rounded-xl border text-center">
|
||||
<div className={`text-xl font-bold ${highlight ? "text-green-400" : ""}`}>
|
||||
{value}
|
||||
</div>
|
||||
<div className="text-[10px] text-gray-500 uppercase mt-1">{label}</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
61
frontend/app/home/components/IntegrationSection.tsx
Normal file
61
frontend/app/home/components/IntegrationSection.tsx
Normal file
@@ -0,0 +1,61 @@
|
||||
"use client";
|
||||
|
||||
import { Badge, Card } from "ikoncomponents";
|
||||
import { Github, Slack, Code2 } from "lucide-react";
|
||||
import Image from "next/image";
|
||||
|
||||
const integrations = [
|
||||
{ name: "Slack", icon: Slack, color: "text-purple-400" },
|
||||
{ name: "GitHub", icon: Github, color: "text-gray-400" },
|
||||
{ name: "Jira", image: "/jira.svg", color: "text-blue-400" },
|
||||
{ name: "API", icon: Code2, color: "text-green-400" },
|
||||
];
|
||||
|
||||
export function IntegrationSection() {
|
||||
return (
|
||||
<section className="py-13">
|
||||
<div className="container mx-auto px-4">
|
||||
{/* Header */}
|
||||
<div className="text-center space-y-4 mb-8">
|
||||
<Badge variant="outline" className="border px-4 py-1">
|
||||
Ecosystem
|
||||
</Badge>
|
||||
<h2 className="text-4xl md:text-5xl font-bold tracking-tight">
|
||||
Seamless Integrations
|
||||
</h2>
|
||||
<p className="text-gray-400 max-w-2xl mx-auto text-lg">
|
||||
Connect with your favorite tools through our RESTful API and
|
||||
webhooks.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Integration Grid */}
|
||||
<div className="flex flex-wrap justify-center gap-6 max-w-4xl mx-auto">
|
||||
{integrations.map((item) => (
|
||||
<Card
|
||||
key={item.name}
|
||||
className="w-32 h-36 flex flex-col items-center justify-center gap-4 transition-all cursor-pointer group"
|
||||
>
|
||||
<div className="p-3 rounded-xl bg-white/5 group-hover:scale-110 transition-transform">
|
||||
{item.icon ? (
|
||||
<item.icon className={item.color} size={32} />
|
||||
) : (
|
||||
<Image
|
||||
src={item.image!}
|
||||
alt={item.name}
|
||||
width={32}
|
||||
height={32}
|
||||
className={`object-contain ${item.color}`}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
<span className="text-gray-400 text-sm font-medium">
|
||||
{item.name}
|
||||
</span>
|
||||
</Card>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
97
frontend/app/home/components/MethodologySection.tsx
Normal file
97
frontend/app/home/components/MethodologySection.tsx
Normal file
@@ -0,0 +1,97 @@
|
||||
"use client";
|
||||
|
||||
import { Badge, Card } from "ikoncomponents";
|
||||
import { CheckCircle2, GitBranch, CalendarDays } from "lucide-react";
|
||||
|
||||
const methodologyData = [
|
||||
{
|
||||
title: "Agile & Scrum",
|
||||
description:
|
||||
"Sprint planning, velocity tracking, and automated burndown charts.",
|
||||
icon: GitBranch,
|
||||
iconColor: "text-indigo-400",
|
||||
iconBg: "bg-indigo-500/10",
|
||||
features: [
|
||||
"Kanban Boards",
|
||||
"Sprint Backlogs",
|
||||
"Velocity Metrics",
|
||||
"WIP Limits",
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "Waterfall & Gantt",
|
||||
description: "Dynamic Gantt charts with drag-and-drop dependency mapping.",
|
||||
icon: CalendarDays,
|
||||
iconColor: "text-blue-400",
|
||||
iconBg: "bg-blue-500/10",
|
||||
features: ["Timeline Views", "Dependencies", "Milestones", "Critical Path"],
|
||||
},
|
||||
];
|
||||
|
||||
export function MethodologySection() {
|
||||
return (
|
||||
<section className="py-12">
|
||||
<div className="container mx-auto px-4">
|
||||
{/* Header */}
|
||||
<div className="text-center space-y-4 mb-12">
|
||||
<Badge variant="outline" className="border px-4 py-1">
|
||||
Flexible Workflows
|
||||
</Badge>
|
||||
|
||||
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight">
|
||||
Your Methodology, Your Way
|
||||
</h2>
|
||||
|
||||
<p className="text-gray-400 max-w-2xl mx-auto text-lg">
|
||||
Support diverse team workflows across Agile and Waterfall in one
|
||||
unified interface.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Cards Grid */}
|
||||
<div className="grid lg:grid-cols-2 gap-6 max-w-7xl mx-auto">
|
||||
{methodologyData.map((item, idx) => (
|
||||
<Card
|
||||
key={idx}
|
||||
className="p-6 rounded-2xl hover:border-white/10 transition-all"
|
||||
>
|
||||
{/* Top Section */}
|
||||
<div className="flex items-start gap-5 mb-6">
|
||||
<div className={`p-4 rounded-xl ${item.iconBg}`}>
|
||||
<item.icon className={item.iconColor} size={28} />
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<h3 className="text-xl lg:text-2xl font-bold mb-1">
|
||||
{item.title}
|
||||
</h3>
|
||||
<p className="text-gray-400 leading-relaxed">
|
||||
{item.description}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Features */}
|
||||
<div className="grid sm:grid-cols-2 gap-y-3 gap-x-4">
|
||||
{item.features.map((feature) => (
|
||||
<div
|
||||
key={feature}
|
||||
className="flex items-center gap-3"
|
||||
>
|
||||
<CheckCircle2
|
||||
className="text-emerald-500 shrink-0"
|
||||
size={18}
|
||||
/>
|
||||
<span className="text-sm font-medium">
|
||||
{feature}
|
||||
</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</Card>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
91
frontend/app/home/components/Navbar.tsx
Normal file
91
frontend/app/home/components/Navbar.tsx
Normal file
@@ -0,0 +1,91 @@
|
||||
"use client";
|
||||
|
||||
import Link from "next/link";
|
||||
import { Button } from "ikoncomponents";
|
||||
import { useRouter } from "next/dist/client/components/navigation";
|
||||
import { Brain, Menu, X } from "lucide-react";
|
||||
import { useState } from "react";
|
||||
|
||||
export default function Navbar() {
|
||||
const router = useRouter();
|
||||
const [open, setOpen] = useState(false);
|
||||
|
||||
const handleStartTrial = () => {
|
||||
router.push("/main/overview/dashboard");
|
||||
};
|
||||
|
||||
return (
|
||||
<header className="w-full">
|
||||
<div className="mx-auto flex h-16 max-w-7xl items-center justify-between px-6">
|
||||
{/* Logo */}
|
||||
<div className="flex items-center gap-2">
|
||||
<div className="flex h-8 w-8 items-center justify-center rounded-lg bg-gradient-to-br from-indigo-500 to-purple-600 font-bold">
|
||||
<Brain size={20} />
|
||||
</div>
|
||||
<span className="text-lg font-semibold">ProjectAI</span>
|
||||
</div>
|
||||
|
||||
{/* Desktop Navigation */}
|
||||
<nav className="hidden md:flex items-center gap-8 text-sm text-gray-400">
|
||||
<Link href="#features" className="hover:text-gray-500 transition">
|
||||
Features
|
||||
</Link>
|
||||
<Link href="#methodology" className="hover:text-gray-500 transition">
|
||||
Methodology
|
||||
</Link>
|
||||
<Link href="#integrations" className="hover:text-gray-500 transition">
|
||||
Integrations
|
||||
</Link>
|
||||
<Link href="#security" className="hover:text-gray-500 transition">
|
||||
Security
|
||||
</Link>
|
||||
</nav>
|
||||
|
||||
{/* Right Actions (Desktop) */}
|
||||
<div className="hidden md:flex items-center gap-4">
|
||||
<Button
|
||||
className="bg-indigo-600 hover:bg-indigo-700"
|
||||
onClick={handleStartTrial}
|
||||
>
|
||||
Get Started →
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
{/* Mobile Menu Button */}
|
||||
<button
|
||||
className="md:hidden text-gray-300"
|
||||
onClick={() => setOpen(!open)}
|
||||
>
|
||||
{open ? <X size={24} /> : <Menu size={24} />}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Mobile Navigation */}
|
||||
{open && (
|
||||
<div className="md:hidden border-t backdrop-blur">
|
||||
<nav className="flex flex-col gap-4 px-6 py-4 text-sm text-gray-400">
|
||||
<Link href="#features" onClick={() => setOpen(false)}>
|
||||
Features
|
||||
</Link>
|
||||
<Link href="#methodology" onClick={() => setOpen(false)}>
|
||||
Methodology
|
||||
</Link>
|
||||
<Link href="#integrations" onClick={() => setOpen(false)}>
|
||||
Integrations
|
||||
</Link>
|
||||
<Link href="#security" onClick={() => setOpen(false)}>
|
||||
Security
|
||||
</Link>
|
||||
|
||||
<Button
|
||||
className="mt-2 bg-indigo-600 hover:bg-indigo-700"
|
||||
onClick={handleStartTrial}
|
||||
>
|
||||
Get Started →
|
||||
</Button>
|
||||
</nav>
|
||||
</div>
|
||||
)}
|
||||
</header>
|
||||
);
|
||||
}
|
||||
78
frontend/app/home/components/SecuritySection.tsx
Normal file
78
frontend/app/home/components/SecuritySection.tsx
Normal file
@@ -0,0 +1,78 @@
|
||||
"use client";
|
||||
|
||||
import { Badge, Card } from "ikoncomponents";
|
||||
import { Lock, ShieldCheck, Globe } from "lucide-react";
|
||||
|
||||
const securityFeatures = [
|
||||
{
|
||||
title: "SSO & MFA",
|
||||
description: "Okta, Azure AD integration",
|
||||
icon: Lock,
|
||||
},
|
||||
{
|
||||
title: "SOC2 & GDPR",
|
||||
description: "Regulatory compliance",
|
||||
icon: ShieldCheck,
|
||||
},
|
||||
{
|
||||
title: "Data Sovereignty",
|
||||
description: "Regional data hosting",
|
||||
icon: Globe,
|
||||
},
|
||||
];
|
||||
|
||||
export function SecuritySection() {
|
||||
return (
|
||||
<section className="py-14 md:py-20">
|
||||
<div className="container mx-auto px-4">
|
||||
|
||||
{/* Header */}
|
||||
<div className="text-center space-y-4 mb-12 md:mb-16">
|
||||
<Badge
|
||||
variant="outline"
|
||||
className="text-gray-400 px-4 py-1"
|
||||
>
|
||||
Enterprise Grade
|
||||
</Badge>
|
||||
|
||||
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight">
|
||||
Security & Compliance
|
||||
</h2>
|
||||
|
||||
<p className="text-gray-400 max-w-2xl mx-auto text-lg">
|
||||
Built with enterprise security requirements in mind, ensuring your
|
||||
data is protected at every level.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Security Grid */}
|
||||
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6 md:gap-8 max-w-6xl mx-auto">
|
||||
{securityFeatures.map((feature, idx) => (
|
||||
<Card
|
||||
key={idx}
|
||||
className="p-6 flex flex-col items-center text-center gap-4
|
||||
group hover:border-white/10 transition-all"
|
||||
>
|
||||
<div className="p-4 rounded-2xl bg-indigo-500/5 border border-indigo-500/10
|
||||
group-hover:bg-indigo-500/10 transition-colors">
|
||||
<feature.icon
|
||||
className="text-indigo-400"
|
||||
size={32}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<h3 className="text-xl font-bold">
|
||||
{feature.title}
|
||||
</h3>
|
||||
|
||||
<p className="text-gray-400 text-sm">
|
||||
{feature.description}
|
||||
</p>
|
||||
</Card>
|
||||
))}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
95
frontend/app/home/components/VisibilitySection.tsx
Normal file
95
frontend/app/home/components/VisibilitySection.tsx
Normal file
@@ -0,0 +1,95 @@
|
||||
"use client";
|
||||
|
||||
import { Badge, Card } from "ikoncomponents";
|
||||
import { CheckCircle2 } from "lucide-react";
|
||||
|
||||
const visibilityPoints = [
|
||||
"AI Health Scores with confidence percentages",
|
||||
"Real-time P/L and budget tracking",
|
||||
"Resource utilization heatmaps",
|
||||
"Portfolio-level performance metrics",
|
||||
];
|
||||
|
||||
const dashboardStats = [
|
||||
{ label: "Active Projects", value: "12" },
|
||||
{ label: "Avg Health Score", value: "87%", color: "text-emerald-400" },
|
||||
{ label: "Total Budget", value: "$4.2M" },
|
||||
{ label: "At Risk", value: "3", color: "text-amber-500" },
|
||||
];
|
||||
|
||||
export function VisibilitySection() {
|
||||
return (
|
||||
<section className="py-12">
|
||||
<div className="container mx-auto px-4">
|
||||
<div className="grid sm:grid-cols-1 lg:grid-cols-2 gap-12 lg:gap-16 items-center max-w-7xl w-full mx-auto">
|
||||
|
||||
{/* Left Column */}
|
||||
<div className="space-y-6">
|
||||
<Badge variant="outline" className="px-3 py-1 w-fit border">
|
||||
Executive Dashboard
|
||||
</Badge>
|
||||
|
||||
<div className="space-y-4">
|
||||
<h2 className="text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight">
|
||||
Complete Visibility <br /> at a Glance
|
||||
</h2>
|
||||
<p className="text-gray-400 text-lg max-w-md leading-relaxed">
|
||||
A unified view of project health, financial metrics, and
|
||||
predictive insights designed for strategic decision-making.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="space-y-3">
|
||||
{visibilityPoints.map((point) => (
|
||||
<div key={point} className="flex items-start gap-3">
|
||||
<div className="mt-1 flex-shrink-0 w-5 h-5 rounded-full border border-indigo-500/30 flex items-center justify-center">
|
||||
<CheckCircle2 className="text-indigo-400" size={12} />
|
||||
</div>
|
||||
<span className="font-medium">{point}</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Right Column */}
|
||||
<div className="relative">
|
||||
{/* Background glow */}
|
||||
<div className="absolute -inset-6 bg-indigo-500/5 rounded-3xl blur-3xl" />
|
||||
|
||||
<Card className="relative p-6 rounded-2xl shadow-2xl">
|
||||
<div className="flex justify-between items-center mb-6">
|
||||
<h3 className="font-semibold text-lg">
|
||||
Portfolio Overview
|
||||
</h3>
|
||||
<Badge className="bg-emerald-500/10 text-emerald-400 border-emerald-500/20">
|
||||
Healthy
|
||||
</Badge>
|
||||
</div>
|
||||
|
||||
<div className="grid sm:grid-cols-2 gap-4">
|
||||
{dashboardStats.map((stat) => (
|
||||
<div
|
||||
key={stat.label}
|
||||
className="border p-4 rounded-xl"
|
||||
>
|
||||
<div
|
||||
className={`text-3xl font-bold mb-1 ${
|
||||
stat.color ?? ""
|
||||
}`}
|
||||
>
|
||||
{stat.value}
|
||||
</div>
|
||||
<div className="text-xs text-gray-500 uppercase tracking-wider font-medium">
|
||||
{stat.label}
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</Card>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
16
frontend/app/home/layout.tsx
Normal file
16
frontend/app/home/layout.tsx
Normal file
@@ -0,0 +1,16 @@
|
||||
"use client";
|
||||
|
||||
|
||||
export default function HomeLayout({
|
||||
children,
|
||||
}: Readonly<{
|
||||
children: React.ReactNode;
|
||||
}>) {
|
||||
return (
|
||||
<>
|
||||
|
||||
|
||||
{children}
|
||||
</>
|
||||
);
|
||||
}
|
||||
22
frontend/app/home/page.tsx
Normal file
22
frontend/app/home/page.tsx
Normal file
@@ -0,0 +1,22 @@
|
||||
"use client";
|
||||
|
||||
import { useEffect } from "react";
|
||||
import { useRouter } from "next/navigation";
|
||||
|
||||
// The marketing landing page (Hero + sections) is no longer used — opening the
|
||||
// app should land directly on the dashboard. We keep the same auth check as the
|
||||
// root page: send unauthenticated visitors to login, everyone else to the dashboard.
|
||||
export default function page() {
|
||||
const router = useRouter();
|
||||
|
||||
useEffect(() => {
|
||||
const hasToken = document.cookie.includes("accessToken");
|
||||
if (!hasToken) {
|
||||
window.location.href = "/login.html";
|
||||
} else {
|
||||
router.replace("/main/overview/dashboard");
|
||||
}
|
||||
}, [router]);
|
||||
|
||||
return null;
|
||||
}
|
||||
13
frontend/app/home/projects/layout.tsx
Normal file
13
frontend/app/home/projects/layout.tsx
Normal file
@@ -0,0 +1,13 @@
|
||||
import React from "react";
|
||||
|
||||
export default function ProjectsLayout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<div className="projects-layout">
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
9
frontend/app/home/projects/page.tsx
Normal file
9
frontend/app/home/projects/page.tsx
Normal file
@@ -0,0 +1,9 @@
|
||||
import { redirect } from "next/navigation";
|
||||
|
||||
export default function Project() {
|
||||
return (
|
||||
<div>
|
||||
<h1>Project</h1>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user