mirror of
https://github.com/decolua/9router.git
synced 2026-05-08 12:01:28 +00:00
SonarQube/SonarLint fixes:
- Remove unused imports (useMemo, PROVIDER_ENDPOINTS, updateSettings, APP_CONFIG)
- Add PropTypes validation to all components receiving props
- Fix accessibility issues (semantic buttons, ARIA attributes, form labels)
- Replace array index keys with stable identifiers
- Extract duplicate getStatusDisplay function in providers page
- Fix negated conditions for better readability
- Add node: prefix to Node.js imports in localDb.js
- Fix optional chaining in pricing lookup
- Add explanatory comments to empty catch blocks
- Consolidate duplicate OAuth flow branches
- Change parseInt to Number.parseInt
- Disable false positive rules in VS Code settings
Next.js Image fixes:
- Add style={{ width: "auto", height: "auto" }} to all Image components
- Resolves aspect ratio warnings without triggering lint issues
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
107 lines
4.3 KiB
JavaScript
107 lines
4.3 KiB
JavaScript
"use client";
|
|
import { useRouter } from "next/navigation";
|
|
import Navigation from "./components/Navigation";
|
|
import HeroSection from "./components/HeroSection";
|
|
import FlowAnimation from "./components/FlowAnimation";
|
|
import HowItWorks from "./components/HowItWorks";
|
|
import Features from "./components/Features";
|
|
import GetStarted from "./components/GetStarted";
|
|
import Footer from "./components/Footer";
|
|
|
|
export default function LandingPage() {
|
|
const router = useRouter();
|
|
return (
|
|
<div className="relative text-white font-sans overflow-x-hidden antialiased selection:bg-[#f97815] selection:text-white">
|
|
{/* Animated Background */}
|
|
<div className="fixed inset-0 z-0 overflow-hidden pointer-events-none bg-[#181411]">
|
|
{/* Grid pattern */}
|
|
<div className="absolute inset-0 opacity-[0.06]" style={{
|
|
backgroundImage: `linear-gradient(to right, #f97815 1px, transparent 1px), linear-gradient(to bottom, #f97815 1px, transparent 1px)`,
|
|
backgroundSize: '50px 50px'
|
|
}}></div>
|
|
|
|
{/* Animated gradient orbs */}
|
|
<div className="absolute top-0 left-1/4 w-[700px] h-[700px] bg-[#f97815]/12 rounded-full blur-[130px] animate-blob"></div>
|
|
<div className="absolute top-1/3 right-1/4 w-[600px] h-[600px] bg-purple-500/10 rounded-full blur-[130px] animate-blob" style={{ animationDelay: '2s', animationDuration: '22s' }}></div>
|
|
<div className="absolute bottom-0 left-1/2 w-[650px] h-[650px] bg-blue-500/8 rounded-full blur-[130px] animate-blob" style={{ animationDelay: '4s', animationDuration: '25s' }}></div>
|
|
|
|
{/* Vignette effect */}
|
|
<div className="absolute inset-0" style={{
|
|
background: 'radial-gradient(circle at center, transparent 0%, rgba(24, 20, 17, 0.4) 100%)'
|
|
}}></div>
|
|
</div>
|
|
|
|
<div className="relative z-10">
|
|
<Navigation />
|
|
|
|
<main>
|
|
{/* Hero with Flow Animation */}
|
|
<div className="relative">
|
|
<HeroSection />
|
|
<div className="flex justify-center pb-20">
|
|
<FlowAnimation />
|
|
</div>
|
|
</div>
|
|
|
|
<GetStarted />
|
|
<HowItWorks />
|
|
<Features />
|
|
|
|
{/* CTA Section */}
|
|
<section className="py-32 px-6 relative overflow-hidden">
|
|
<div className="absolute inset-0 bg-linear-to-t from-[#f97815]/5 to-transparent pointer-events-none"></div>
|
|
<div className="max-w-4xl mx-auto text-center relative z-10">
|
|
<h2 className="text-4xl md:text-5xl font-black mb-6">Ready to Simplify Your AI Infrastructure?</h2>
|
|
<p className="text-xl text-gray-400 mb-10 max-w-2xl mx-auto">
|
|
Join developers who are streamlining their AI integrations with 9Router. Open source and free to start.
|
|
</p>
|
|
<div className="flex flex-col sm:flex-row items-center justify-center gap-4">
|
|
<button
|
|
onClick={() => router.push("/dashboard")}
|
|
className="w-full sm:w-auto h-14 px-10 rounded-lg bg-[#f97815] hover:bg-[#e0650a] text-[#181411] text-lg font-bold transition-all shadow-[0_0_20px_rgba(249,120,21,0.5)]"
|
|
>
|
|
Start Free
|
|
</button>
|
|
<button
|
|
onClick={() => window.open("https://github.com/decolua/9router#readme", "_blank")}
|
|
className="w-full sm:w-auto h-14 px-10 rounded-lg border border-[#3a2f27] hover:bg-[#23180f] text-white text-lg font-bold transition-all"
|
|
>
|
|
Read Documentation
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<Footer />
|
|
</div>
|
|
|
|
{/* Global styles for keyframes */}
|
|
<style jsx global>{`
|
|
@keyframes float {
|
|
0%, 100% { transform: translateY(0); }
|
|
50% { transform: translateY(-10px); }
|
|
}
|
|
@keyframes dash {
|
|
to { stroke-dashoffset: -20; }
|
|
}
|
|
@keyframes blob {
|
|
0%, 100% {
|
|
transform: translate(0, 0) scale(1);
|
|
}
|
|
33% {
|
|
transform: translate(30px, -50px) scale(1.1);
|
|
}
|
|
66% {
|
|
transform: translate(-20px, 20px) scale(0.9);
|
|
}
|
|
}
|
|
.animate-blob {
|
|
animation: blob 20s ease-in-out infinite;
|
|
}
|
|
`}</style>
|
|
</div>
|
|
);
|
|
}
|
|
|