Seed: saas template (34 files)

This commit is contained in:
2026-07-23 22:08:35 +00:00
parent d232731c62
commit d8b0cb37f6
+85
View File
@@ -0,0 +1,85 @@
import { Link } from "react-router-dom";
import { Layers } from "lucide-react";
const columns = [
{
title: "Product",
links: [
{ label: "Features", to: "/features" },
{ label: "Pricing", to: "/pricing" },
{ label: "Integrations", to: "/features" },
{ label: "Changelog", to: "/blog" },
],
},
{
title: "Company",
links: [
{ label: "About", to: "/about" },
{ label: "Blog", to: "/blog" },
{ label: "Careers", to: "/about" },
{ label: "Contact", to: "/contact" },
],
},
{
title: "Legal",
links: [
{ label: "Privacy", to: "#" },
{ label: "Terms", to: "#" },
{ label: "Security", to: "#" },
{ label: "GDPR", to: "#" },
],
},
];
export default function Footer() {
return (
<footer className="bg-slate-950 text-slate-400 pt-16 pb-8">
<div className="mx-auto max-w-7xl px-6">
<div className="grid grid-cols-2 md:grid-cols-4 gap-8 pb-12 border-b border-slate-800">
{/* Brand */}
<div className="col-span-2 md:col-span-1">
<Link to="/" className="flex items-center gap-2 mb-4">
<div className="h-8 w-8 rounded-lg bg-gradient-to-br from-indigo-500 to-cyan-500 flex items-center justify-center">
<Layers className="h-4 w-4 text-white" />
</div>
<span className="text-lg font-bold text-white tracking-tight">Nexus</span>
</Link>
<p className="text-sm leading-relaxed text-slate-500">
Streamline your workflow with intelligent automation, real-time collaboration, and predictive analytics that keep your team ahead of every deadline.
</p>
{/* Social Icons */}
<div className="flex gap-4 mt-6">
<a href="#" className="text-slate-500 hover:text-indigo-400 transition-colors" aria-label="Twitter">
<svg className="h-5 w-5" fill="currentColor" viewBox="0 0 24 24"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg>
</a>
<a href="#" className="text-slate-500 hover:text-indigo-400 transition-colors" aria-label="GitHub">
<svg className="h-5 w-5" fill="currentColor" viewBox="0 0 24 24"><path fillRule="evenodd" clipRule="evenodd" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"/></svg>
</a>
<a href="#" className="text-slate-500 hover:text-indigo-400 transition-colors" aria-label="LinkedIn">
<svg className="h-5 w-5" fill="currentColor" viewBox="0 0 24 24"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
</a>
</div>
</div>
{/* Link Columns */}
{columns.map((col) => (
<div key={col.title}>
<h3 className="text-sm font-semibold text-white mb-4">{col.title}</h3>
<ul className="space-y-3">
{col.links.map((link) => (
<li key={link.label}>
<Link to={link.to} className="text-sm hover:text-indigo-400 transition-colors">{link.label}</Link>
</li>
))}
</ul>
</div>
))}
</div>
<div className="mt-8 text-center text-xs text-slate-600">
&copy; {new Date().getFullYear()} Nexus. All rights reserved.
</div>
</div>
</footer>
);
}