diff --git a/src/app/AuthGuard.tsx b/src/app/AuthGuard.tsx new file mode 100644 index 0000000..4e152ee --- /dev/null +++ b/src/app/AuthGuard.tsx @@ -0,0 +1,39 @@ +"use client"; + +import { useEffect } from 'react'; +import { useRouter, usePathname } from 'next/navigation'; + +interface AuthGuardProps { + children: React.ReactNode; +} + +export default function AuthGuard({ children }: AuthGuardProps) { + const router = useRouter(); + const pathname = usePathname(); + + useEffect(() => { + const isAuthenticated = localStorage.getItem('isAuthenticated') === 'true'; + + // Allow access to login page regardless of authentication status + if (pathname === '/login') { + // If user is already authenticated and tries to go to login, redirect to dashboard + if (isAuthenticated) { + router.replace('/dashboard'); + } + return; + } + + // Protect all other pages except home (/) and login (/login) + if (pathname !== '/' && !isAuthenticated) { + router.replace('/login'); + } + }, [pathname, router]); + + // If on a protected route and not authenticated, we're redirecting, so don't render children yet. + // If on home page, or on login page, or on protected page AND authenticated, render children. + if (pathname !== '/' && pathname !== '/login' && localStorage.getItem('isAuthenticated') !== 'true') { + return null; // Don't render content until redirected + } + + return <>{children}; +} \ No newline at end of file diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx index 9332f82..6d48022 100644 --- a/src/app/dashboard/page.tsx +++ b/src/app/dashboard/page.tsx @@ -4,13 +4,17 @@ import ReactLenis from "lenis/react"; import NavbarLayoutFloatingInline from "@/components/navbar/NavbarLayoutFloatingInline"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; import HeroBillboardDashboard from "@/components/sections/hero/HeroBillboardDashboard"; -import { BarChart3, Package, Users, Settings, Bell, Search, PlusCircle, ArrowUpCircle, TrendingUp, CheckCircle, XCircle } from "lucide-react"; +import { BarChart3, Package, Users, Settings, Bell, PlusCircle, ArrowUpCircle, TrendingUp, CheckCircle, XCircle } from "lucide-react"; +import AuthGuard from "../AuthGuard"; export default function DashboardPage() { const navItems = [ { name: "Özellikler", id: "features" }, { name: "Fiyatlandırma", id: "pricing" }, { name: "İzlenebilirlik", id: "traceability" }, + { name: "Günlükler", id: "/logs" }, + { name: "Hareketler", id: "/movements" }, + { name: "Raporlar", id: "/reports" }, { name: "Hakkımızda", id: "about" }, { name: "Varyasyonlar", id: "/product-variations" }, { name: "Üretim", id: "/production" }, @@ -18,52 +22,54 @@ export default function DashboardPage() { { name: "Yönetim Paneli", id: "/superadmin" }, { name: "Giriş Yap", id: "/login" }, { name: "Gösterge Paneli", id: "/dashboard" }, - { name: "Kategoriler", id: "/categories" }, { name: "İletişim", id: "contact" } ]; return ( - - - console.log("Add new product") }, - { text: "Rapor Oluştur", onClick: () => console.log("Generate report") }, - ], - chartTitle: "Son 7 Günlük Stok Hareketi", chartData: [ - { value: 120 }, { value: 150 }, { value: 130 }, { value: 170 }, { value: 140 }, { value: 190 }, { value: 160 } - ], - listItems: [ - { icon: ArrowUpCircle, title: "Yeni Giriş: Ürün X", status: "Tamamlandı" }, - { icon: TrendingUp, title: "Stok Azaldı: Ürün Y", status: "Beklemede" }, - { icon: CheckCircle, title: "Sipariş #1234", status: "Gönderildi" }, - { icon: XCircle, title: "İade: Ürün Z", status: "Sorunlu" }, - ], - listTitle: "Son Hareketler", imageSrc: "https://images.unsplash.com/photo-1579547612702-fe1e4889c565?q=80&w=2670&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", imageAlt: "Dashboard Background"}} - /> - + + + + console.log("Add new product") }, + { text: "Rapor Oluştur", onClick: () => console.log("Generate report") }, + ], + chartTitle: "Son 7 Günlük Stok Hareketi", chartData: [ + { value: 120 }, { value: 150 }, { value: 130 }, { value: 170 }, { value: 140 }, { value: 190 }, { value: 160 } + ], + listItems: [ + { icon: ArrowUpCircle, title: "Yeni Giriş: Ürün X", status: "Tamamlandı" }, + { icon: TrendingUp, title: "Stok Azaldı: Ürün Y", status: "Beklemede" }, + { icon: CheckCircle, title: "Sipariş #1234", status: "Gönderildi" }, + { icon: XCircle, title: "İade: Ürün Z", status: "Sorunlu" }, + ], + listTitle: "Son Hareketler", imageSrc: "https://images.unsplash.com/photo-1579547612702-fe1e4889c565?q=80&w=2670&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D", imageAlt: "Dashboard Background" + }} + /> + + ); } \ No newline at end of file diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index efd8462..c172203 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -1,16 +1,20 @@ "use client"; +import React from "react"; import ReactLenis from "lenis/react"; import NavbarLayoutFloatingInline from "@/components/navbar/NavbarLayoutFloatingInline"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; -import ContactCenter from "@/components/sections/contact/ContactCenter"; -import { Mail } from "lucide-react"; +import { useRouter } from 'next/navigation'; export default function LoginPage() { + const router = useRouter(); const navItems = [ { name: "Özellikler", id: "features" }, { name: "Fiyatlandırma", id: "pricing" }, { name: "İzlenebilirlik", id: "traceability" }, + { name: "Günlükler", id: "/logs" }, + { name: "Hareketler", id: "/movements" }, + { name: "Raporlar", id: "/reports" }, { name: "Hakkımızda", id: "about" }, { name: "Varyasyonlar", id: "/product-variations" }, { name: "Üretim", id: "/production" }, @@ -18,10 +22,15 @@ export default function LoginPage() { { name: "Yönetim Paneli", id: "/superadmin" }, { name: "Giriş Yap", id: "/login" }, { name: "Gösterge Paneli", id: "/dashboard" }, - { name: "Kategoriler", id: "/categories" }, { name: "İletişim", id: "contact" } ]; + const handleLogin = () => { + // Simulate successful login + localStorage.setItem('isAuthenticated', 'true'); + router.push('/dashboard'); + }; + return ( @@ -30,18 +39,17 @@ export default function LoginPage() { brandName="Stokify" button={{ text: "Hemen Başla", href: "#contact" }} /> -
- console.log("Login attempt with email:", email)} - /> +
+
+

Hesabınıza Giriş Yapın

+

Stokify yönetim paneline erişmek için giriş yapın.

+ +
diff --git a/src/app/logs/page.tsx b/src/app/logs/page.tsx index 3380466..b1e833e 100644 --- a/src/app/logs/page.tsx +++ b/src/app/logs/page.tsx @@ -4,6 +4,7 @@ import React from "react"; import ReactLenis from "lenis/react"; import NavbarLayoutFloatingInline from "@/components/navbar/NavbarLayoutFloatingInline"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import AuthGuard from "../AuthGuard"; export default function LogsPage() { const navItems = [ @@ -18,22 +19,26 @@ export default function LogsPage() { { name: "Üretim", id: "/production" }, { name: "Reçeteler", id: "/recipes" }, { name: "Yönetim Paneli", id: "/superadmin" }, + { name: "Giriş Yap", id: "/login" }, + { name: "Gösterge Paneli", id: "/dashboard" }, { name: "İletişim", id: "contact" } ]; return ( - - -
-

Sistem Günlükleri

-

Tüm sistem hareketlerinin detaylı günlükleri burada gösterilecektir.

-
-
+ + + +
+

Sistem Günlükleri

+

Tüm sistem hareketlerinin detaylı günlükleri burada gösterilecektir.

+
+
+
); } \ No newline at end of file diff --git a/src/app/movements/page.tsx b/src/app/movements/page.tsx index c7a2f07..b34c92a 100644 --- a/src/app/movements/page.tsx +++ b/src/app/movements/page.tsx @@ -4,6 +4,7 @@ import React from "react"; import ReactLenis from "lenis/react"; import NavbarLayoutFloatingInline from "@/components/navbar/NavbarLayoutFloatingInline"; import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import AuthGuard from "../AuthGuard"; export default function MovementsPage() { const navItems = [ @@ -18,22 +19,26 @@ export default function MovementsPage() { { name: "Üretim", id: "/production" }, { name: "Reçeteler", id: "/recipes" }, { name: "Yönetim Paneli", id: "/superadmin" }, + { name: "Giriş Yap", id: "/login" }, + { name: "Gösterge Paneli", id: "/dashboard" }, { name: "İletişim", id: "contact" } ]; return ( - - -
-

Stok Hareketleri

-

Ürünlerin giriş ve çıkış hareketleri bu sayfada görüntülenecektir.

-
-
+ + + +
+

Stok Hareketleri

+

Ürünlerin giriş ve çıkış hareketleri bu sayfada görüntülenecektir.

+
+
+
); } \ No newline at end of file diff --git a/src/app/page.tsx b/src/app/page.tsx index e80c4df..bec7c0b 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -26,6 +26,8 @@ export default function SaasTemplatePage() { { name: "Üretim", id: "/production" }, { name: "Reçeteler", id: "/recipes" }, { name: "Yönetim Paneli", id: "/superadmin" }, + { name: "Giriş Yap", id: "/login" }, + { name: "Gösterge Paneli", id: "/dashboard" }, { name: "İletişim", id: "contact" } ]; @@ -38,11 +40,13 @@ export default function SaasTemplatePage() { const features: FeatureCard[] = [ { - bentoComponent: "globe", title: "Kapsamlı Envanter Kontrolü", description: "Tüm ürünlerinizi, depo konumlarını ve stok seviyelerini tek bir yerden yönetin."}, + bentoComponent: "globe", title: "Kapsamlı Envanter Kontrolü", description: "Tüm ürünlerinizi, depo konumlarını ve stok seviyelerini tek bir yerden yönetin." + }, { bentoComponent: "marquee", variant: "text", centerIcon: Zap, texts: ["Gerçek Zamanlı", "Doğru", "Hızlı", "Güvenli"], - title: "Hızlı ve Gerçek Zamanlı Takip", description: "Stok hareketlerini anlık olarak izleyin ve her zaman güncel bilgilere sahip olun."}, + title: "Hızlı ve Gerçek Zamanlı Takip", description: "Stok hareketlerini anlık olarak izleyin ve her zaman güncel bilgilere sahip olun." + }, { bentoComponent: "3d-stack-cards", items: [ { icon: TrendingUp, title: "Talep Tahmini", subtitle: "Veriye Dayalı", detail: "Gelecek talebi öngörün" }, @@ -69,9 +73,11 @@ export default function SaasTemplatePage() { description="Stokify ile envanterinizi zahmetsizce yönetin, operasyonel verimliliği artırın ve işinizi büyütün." buttons={[ { - text: "Ücretsiz Deneyin", href: "#contact"}, + text: "Ücretsiz Deneyin", href: "#contact" + }, { - text: "Detaylı Bilgi", href: "#features"}, + text: "Detaylı Bilgi", href: "#features" + }, ]} marqueeItems={[ { type: "text-icon", text: "Envanter Takibi", icon: Layers }, @@ -101,16 +107,20 @@ export default function SaasTemplatePage() { features={[ { icon: Package, - title: "Kapsamlı Ürün Yönetimi", description: "Ürünlerinizi barkod, kategori ve diğer detaylarla kolayca yönetin."}, + title: "Kapsamlı Ürün Yönetimi", description: "Ürünlerinizi barkod, kategori ve diğer detaylarla kolayca yönetin." + }, { icon: TrendingUp, - title: "Gelişmiş Raporlama", description: "Stok hareketleri, satış analizleri ve performans raporları ile akıllı kararlar alın."}, + title: "Gelişmiş Raporlama", description: "Stok hareketleri, satış analizleri ve performans raporları ile akıllı kararlar alın." + }, { icon: ShieldCheck, - title: "Güvenli Veri Saklama", description: "Tüm envanter verileriniz güvenli sunucularda saklanır ve yedeklenir."}, + title: "Güvenli Veri Saklama", description: "Tüm envanter verileriniz güvenli sunucularda saklanır ve yedeklenir." + }, { icon: Zap, - title: "Gerçek Zamanlı Envanter Takibi", description: "Stok seviyelerini anlık olarak izleyin ve olası sorunlara hızla müdahale edin."}, + title: "Gerçek Zamanlı Envanter Takibi", description: "Stok seviyelerini anlık olarak izleyin ve olası sorunlara hızla müdahale edin." + }, ]} />
@@ -171,7 +181,8 @@ export default function SaasTemplatePage() { { text: "Hemen Başla", onClick: () => console.log("Starter clicked") }, ], features: [ - "500 Ürüne Kadar", "Temel Stok Takibi", "Manuel Veri Girişi", "E-posta Desteği"], + "500 Ürüne Kadar", "Temel Stok Takibi", "Manuel Veri Girişi", "E-posta Desteği" + ], }, { id: "pro", badge: "Profesyonel", badgeIcon: BarChart3, @@ -179,7 +190,8 @@ export default function SaasTemplatePage() { { text: "Hemen Başla", onClick: () => console.log("Pro clicked") }, ], features: [ - "Sınırsız Ürün", "Otomatik Envanter Güncelleme", "Barkod Entegrasyonu", "Gelişmiş Raporlama", "API Erişimi", "Öncelikli Destek"], + "Sınırsız Ürün", "Otomatik Envanter Güncelleme", "Barkod Entegrasyonu", "Gelişmiş Raporlama", "API Erişimi", "Öncelikli Destek" + ], }, { id: "enterprise", badge: "Kurumsal", badgeIcon: Building, @@ -187,7 +199,8 @@ export default function SaasTemplatePage() { { text: "Teklif Alın", onClick: () => console.log("Enterprise clicked") }, ], features: [ - "Tüm Profesyonel Özellikler", "Özel Hesap Yöneticisi", "Kişiselleştirilmiş Entegrasyonlar", "Eğitim ve Yerinde Destek", "Gelişmiş Güvenlik"], + "Tüm Profesyonel Özellikler", "Özel Hesap Yöneticisi", "Kişiselleştirilmiş Entegrasyonlar", "Eğitim ve Yerinde Destek", "Gelişmiş Güvenlik" + ], }, ]} />