Skip to content

Commit 27cd75b

Browse files
authored
Merge pull request #1 from VIDYANKSHINI/development
Add navbar and footer components
2 parents 6d5f597 + 2e5979e commit 27cd75b

2 files changed

Lines changed: 223 additions & 0 deletions

File tree

components/footer.tsx

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
"use client"
2+
3+
import Link from "next/link"
4+
import { Shield, Github, Linkedin, Twitter } from "lucide-react"
5+
6+
export function Footer() {
7+
return (
8+
<footer className="border-t border-border bg-card/50">
9+
<div className="container mx-auto px-4 py-12">
10+
<div className="grid grid-cols-1 md:grid-cols-4 gap-8">
11+
{/* Brand */}
12+
<div className="md:col-span-1">
13+
<Link href="/" className="flex items-center gap-2 mb-4">
14+
<Shield className="h-8 w-8 text-primary" />
15+
<span className="text-xl font-bold">
16+
Secure<span className="text-primary">Bob</span> AI
17+
</span>
18+
</Link>
19+
<p className="text-muted-foreground text-sm">
20+
AI-powered DevSecOps assistant for detecting vulnerabilities before deployment.
21+
</p>
22+
</div>
23+
24+
{/* Features */}
25+
<div>
26+
<h4 className="font-semibold text-foreground mb-4">Features</h4>
27+
<ul className="space-y-2 text-sm">
28+
<li>
29+
<Link href="/github-scanner" className="text-muted-foreground hover:text-primary transition-colors">
30+
GitHub Scanner
31+
</Link>
32+
</li>
33+
<li>
34+
<Link href="/vulnerability-scanner" className="text-muted-foreground hover:text-primary transition-colors">
35+
Vulnerability Detection
36+
</Link>
37+
</li>
38+
<li>
39+
<Link href="/secret-scanner" className="text-muted-foreground hover:text-primary transition-colors">
40+
Secret Leak Detection
41+
</Link>
42+
</li>
43+
<li>
44+
<Link href="/pr-review" className="text-muted-foreground hover:text-primary transition-colors">
45+
PR Security Review
46+
</Link>
47+
</li>
48+
</ul>
49+
</div>
50+
51+
{/* Resources */}
52+
<div>
53+
<h4 className="font-semibold text-foreground mb-4">Resources</h4>
54+
<ul className="space-y-2 text-sm">
55+
<li>
56+
<Link href="/security-dashboard" className="text-muted-foreground hover:text-primary transition-colors">
57+
Security Dashboard
58+
</Link>
59+
</li>
60+
<li>
61+
<Link href="/ai-assistant" className="text-muted-foreground hover:text-primary transition-colors">
62+
AI Assistant
63+
</Link>
64+
</li>
65+
<li>
66+
<span className="text-muted-foreground">Documentation</span>
67+
</li>
68+
<li>
69+
<span className="text-muted-foreground">API Reference</span>
70+
</li>
71+
</ul>
72+
</div>
73+
74+
{/* Powered By */}
75+
<div>
76+
<h4 className="font-semibold text-foreground mb-4">Powered By</h4>
77+
<div className="space-y-3">
78+
<div className="glass-card rounded-lg p-3">
79+
<p className="text-sm font-medium text-primary">IBM watsonx.ai</p>
80+
<p className="text-xs text-muted-foreground">Enterprise AI Platform</p>
81+
</div>
82+
<div className="glass-card rounded-lg p-3">
83+
<p className="text-sm font-medium text-secondary">IBM Granite</p>
84+
<p className="text-xs text-muted-foreground">Foundation Models</p>
85+
</div>
86+
</div>
87+
</div>
88+
</div>
89+
90+
{/* Bottom Bar */}
91+
<div className="mt-12 pt-8 border-t border-border flex flex-col md:flex-row items-center justify-between gap-4">
92+
<p className="text-sm text-muted-foreground">
93+
2024 SecureBob AI. Built for IBM watsonx Hackathon.
94+
</p>
95+
<div className="flex items-center gap-4">
96+
<a href="#" className="text-muted-foreground hover:text-primary transition-colors">
97+
<Github className="h-5 w-5" />
98+
</a>
99+
<a href="#" className="text-muted-foreground hover:text-primary transition-colors">
100+
<Twitter className="h-5 w-5" />
101+
</a>
102+
<a href="#" className="text-muted-foreground hover:text-primary transition-colors">
103+
<Linkedin className="h-5 w-5" />
104+
</a>
105+
</div>
106+
</div>
107+
</div>
108+
</footer>
109+
)
110+
}

components/navbar.tsx

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
"use client"
2+
3+
import Link from "next/link"
4+
import { usePathname } from "next/navigation"
5+
import { motion } from "framer-motion"
6+
import { Shield, Menu, X } from "lucide-react"
7+
import { useState } from "react"
8+
import { Button } from "@/components/ui/button"
9+
10+
const navLinks = [
11+
{ href: "/", label: "Home" },
12+
{ href: "/features", label: "Features" },
13+
{ href: "/github-scanner", label: "GitHub Scanner" },
14+
{ href: "/security-dashboard", label: "Dashboard" },
15+
{ href: "/ai-assistant", label: "AI Assistant" },
16+
]
17+
18+
export function Navbar() {
19+
const pathname = usePathname()
20+
const [mobileMenuOpen, setMobileMenuOpen] = useState(false)
21+
22+
return (
23+
<motion.header
24+
initial={{ y: -100, opacity: 0 }}
25+
animate={{ y: 0, opacity: 1 }}
26+
transition={{ duration: 0.5 }}
27+
className="fixed top-0 left-0 right-0 z-50 glass"
28+
>
29+
<nav className="container mx-auto px-4 py-4">
30+
<div className="flex items-center justify-between">
31+
{/* Logo */}
32+
<Link href="/" className="flex items-center gap-2 group">
33+
<div className="relative">
34+
<Shield className="h-8 w-8 text-primary glow-text-blue" />
35+
<div className="absolute inset-0 bg-primary/20 blur-xl rounded-full" />
36+
</div>
37+
<span className="text-xl font-bold text-foreground">
38+
Secure<span className="text-primary">Bob</span> AI
39+
</span>
40+
</Link>
41+
42+
{/* Desktop Navigation */}
43+
<div className="hidden md:flex items-center gap-6">
44+
{navLinks.map((link) => (
45+
<Link
46+
key={link.href}
47+
href={link.href}
48+
className={`relative text-sm font-medium transition-colors hover:text-primary ${
49+
pathname === link.href ? "text-primary" : "text-muted-foreground"
50+
}`}
51+
>
52+
{link.label}
53+
{pathname === link.href && (
54+
<motion.div
55+
layoutId="navbar-indicator"
56+
className="absolute -bottom-1 left-0 right-0 h-0.5 bg-primary rounded-full"
57+
/>
58+
)}
59+
</Link>
60+
))}
61+
</div>
62+
63+
{/* CTA Button */}
64+
<div className="hidden md:flex items-center gap-4">
65+
<Link href="/features">
66+
<Button className="bg-primary hover:bg-primary/90 text-primary-foreground glow-blue">
67+
Start Scanning
68+
</Button>
69+
</Link>
70+
</div>
71+
72+
{/* Mobile Menu Button */}
73+
<button
74+
className="md:hidden text-foreground"
75+
onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
76+
>
77+
{mobileMenuOpen ? <X className="h-6 w-6" /> : <Menu className="h-6 w-6" />}
78+
</button>
79+
</div>
80+
81+
{/* Mobile Menu */}
82+
{mobileMenuOpen && (
83+
<motion.div
84+
initial={{ opacity: 0, height: 0 }}
85+
animate={{ opacity: 1, height: "auto" }}
86+
exit={{ opacity: 0, height: 0 }}
87+
className="md:hidden mt-4 pb-4 border-t border-border"
88+
>
89+
<div className="flex flex-col gap-4 pt-4">
90+
{navLinks.map((link) => (
91+
<Link
92+
key={link.href}
93+
href={link.href}
94+
onClick={() => setMobileMenuOpen(false)}
95+
className={`text-sm font-medium transition-colors hover:text-primary ${
96+
pathname === link.href ? "text-primary" : "text-muted-foreground"
97+
}`}
98+
>
99+
{link.label}
100+
</Link>
101+
))}
102+
<Link href="/features" onClick={() => setMobileMenuOpen(false)}>
103+
<Button className="w-full bg-primary hover:bg-primary/90 text-primary-foreground">
104+
Start Scanning
105+
</Button>
106+
</Link>
107+
</div>
108+
</motion.div>
109+
)}
110+
</nav>
111+
</motion.header>
112+
)
113+
}

0 commit comments

Comments
 (0)