diff --git a/app/(dashboard)/analytics/page.tsx b/app/(dashboard)/analytics/page.tsx new file mode 100644 index 0000000..75fe45f --- /dev/null +++ b/app/(dashboard)/analytics/page.tsx @@ -0,0 +1,17 @@ +export default function AnalyticsPage() { + return ( +
+
+
+

Analizler

+

+ Zaman içindeki duygu durumunuzu ve görev istatistiklerinizi inceleyin. +

+
+
+
+ Gelişmiş veri analiz modülü yakında eklenecek. +
+
+ ); +} diff --git a/app/(dashboard)/calendar/page.tsx b/app/(dashboard)/calendar/page.tsx new file mode 100644 index 0000000..1923660 --- /dev/null +++ b/app/(dashboard)/calendar/page.tsx @@ -0,0 +1,17 @@ +export default function CalendarPage() { + return ( +
+
+
+

Takvim

+

+ Günlük, haftalık ve aylık programınızı yönetin. +

+
+
+
+ Takvim görünümü yakında eklenecek. +
+
+ ); +} diff --git a/app/(dashboard)/documents/page.tsx b/app/(dashboard)/documents/page.tsx new file mode 100644 index 0000000..dddb896 --- /dev/null +++ b/app/(dashboard)/documents/page.tsx @@ -0,0 +1,17 @@ +export default function DocumentsPage() { + return ( +
+
+
+

Dökümanlar

+

+ Notlarınızı, raporlarınızı ve belgelerinizi saklayın. +

+
+
+
+ Döküman yönetim modülü yakında eklenecek. +
+
+ ); +} diff --git a/app/(dashboard)/goals/page.tsx b/app/(dashboard)/goals/page.tsx new file mode 100644 index 0000000..729d253 --- /dev/null +++ b/app/(dashboard)/goals/page.tsx @@ -0,0 +1,17 @@ +export default function GoalsPage() { + return ( +
+
+
+

Hedefler

+

+ Kısa ve uzun vadeli hedeflerinizi belirleyin ve ilerlemenizi izleyin. +

+
+
+
+ Hedef yönetim modülü yakında eklenecek. +
+
+ ); +} diff --git a/app/(dashboard)/habits/page.tsx b/app/(dashboard)/habits/page.tsx new file mode 100644 index 0000000..08894fc --- /dev/null +++ b/app/(dashboard)/habits/page.tsx @@ -0,0 +1,17 @@ +export default function HabitsPage() { + return ( +
+
+
+

Alışkanlıklar

+

+ Günlük alışkanlıklarınızı takip edin ve zinciri kırmayın. +

+
+
+
+ Alışkanlık takip modülü yakında eklenecek. +
+
+ ); +} diff --git a/app/(dashboard)/projects/page.tsx b/app/(dashboard)/projects/page.tsx new file mode 100644 index 0000000..8734ec9 --- /dev/null +++ b/app/(dashboard)/projects/page.tsx @@ -0,0 +1,17 @@ +export default function ProjectsPage() { + return ( +
+
+
+

Projeler

+

+ Geniş çaplı projelerinizi ve aşamalarını takip edin. +

+
+
+
+ Proje yönetim modülü yakında eklenecek. +
+
+ ); +} diff --git a/app/(dashboard)/team/page.tsx b/app/(dashboard)/team/page.tsx new file mode 100644 index 0000000..1b741c8 --- /dev/null +++ b/app/(dashboard)/team/page.tsx @@ -0,0 +1,17 @@ +export default function TeamPage() { + return ( +
+
+
+

Ekip / Kişiler

+

+ Birlikte çalıştığınız kişileri ve takım koordinasyonunu yönetin. +

+
+
+
+ Ekip modülü yakında eklenecek. +
+
+ ); +} diff --git a/app/globals.css b/app/globals.css index 4df6b9e..a5dc537 100644 --- a/app/globals.css +++ b/app/globals.css @@ -64,3 +64,21 @@ transition: background-color 5000s ease-in-out 0s; } } + +@layer utilities { + .tiny-scrollbar::-webkit-scrollbar { + width: 4px; + height: 4px; + } + .tiny-scrollbar::-webkit-scrollbar-track { + background: transparent; + } + .tiny-scrollbar::-webkit-scrollbar-thumb { + background: theme('colors.primary.DEFAULT' / 30%); + border-radius: 4px; + } + .tiny-scrollbar::-webkit-scrollbar-thumb:hover { + background: theme('colors.primary.DEFAULT' / 60%); + } +} + diff --git a/assets/logo.png b/assets/logo.png deleted file mode 100644 index 42cab0d..0000000 Binary files a/assets/logo.png and /dev/null differ diff --git a/assets/screen1.png b/assets/screen1.png deleted file mode 100644 index c0799dc..0000000 Binary files a/assets/screen1.png and /dev/null differ diff --git a/assets/screen2.png b/assets/screen2.png deleted file mode 100644 index 9ddf5d0..0000000 Binary files a/assets/screen2.png and /dev/null differ diff --git a/components/layout/dashboard-shell.tsx b/components/layout/dashboard-shell.tsx index ad19259..11c292b 100644 --- a/components/layout/dashboard-shell.tsx +++ b/components/layout/dashboard-shell.tsx @@ -10,23 +10,14 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; +import { sidebarData } from "@/config/sidebar"; import { cn } from "@/lib/utils"; import { AnimatePresence, motion } from "framer-motion"; -import { - BookOpenText, - CheckSquare2, - ChevronRight, - LogOut, - Menu, - MessageCircleHeart, - PanelLeftClose, - Settings2, - Sparkles, -} from "lucide-react"; +import { ChevronDown, LogOut, Menu, Settings2 } from "lucide-react"; import Image from "next/image"; import Link from "next/link"; import { usePathname } from "next/navigation"; -import { useMemo, useState } from "react"; +import { useState } from "react"; type DashboardShellProps = { children: React.ReactNode; @@ -38,110 +29,23 @@ type DashboardShellProps = { }; }; -type RouteMeta = { - eyebrow: string; - title: string; - description: string; -}; - -const routes = [ - { - label: "Dashboard", - href: "/", - icon: Sparkles, - description: "Günün ritmi ve genel görünüm", - }, - { - label: "Günlük", - href: "/journal", - icon: BookOpenText, - description: "Düşünceler, duygu ve enerji kayıtları", - }, - { - label: "Görevler", - href: "/tasks", - icon: CheckSquare2, - description: "Planlar, öncelikler ve aksiyonlar", - }, - { - label: "Sohbet", - href: "/chat", - icon: MessageCircleHeart, - description: "AI ile bağlamsal yansıma alanı", - }, - { - label: "Ayarlar", - href: "/settings", - icon: Settings2, - description: "Profil, güvenlik ve AI tercihleri", - }, -] as const; - -const routeMeta: Record = { - "/": { - eyebrow: "MindSpace Workspace", - title: "Günün Nabzı", - description: "Verilerini, odağını ve kişisel akışını tek panelden yönet.", - }, - "/journal": { - eyebrow: "Journal", - title: "Düşünce Akışı", - description: "Bugünün zihinsel yükünü yaz, duygu ve enerji izlerini kaydet.", - }, - "/tasks": { - eyebrow: "Tasks", - title: "Aksiyon Katmanı", - description: "Önceliklerini sadeleştir, küçük ama net adımlar belirle.", - }, - "/chat": { - eyebrow: "Reflective AI", - title: "Yansıtıcı Sohbet", - description: "Geçmiş kayıtlarınla bağ kuran özel AI eşlikçin burada.", - }, - "/settings": { - eyebrow: "Preferences", - title: "Hesap ve Kontroller", - description: "Profilini, güvenliği ve AI ayarlarını tek yerden yönet.", - }, -}; - export function DashboardShell({ children, user }: DashboardShellProps) { const pathname = usePathname(); const [isMobileSidebarOpen, setIsMobileSidebarOpen] = useState(false); const closeMobileSidebar = () => setIsMobileSidebarOpen(false); - const currentMeta = useMemo(() => { - if (pathname === "/") return routeMeta["/"]; - if (pathname?.startsWith("/journal")) return routeMeta["/journal"]; - if (pathname?.startsWith("/tasks")) return routeMeta["/tasks"]; - if (pathname?.startsWith("/chat")) return routeMeta["/chat"]; - if (pathname?.startsWith("/settings")) return routeMeta["/settings"]; - - return routeMeta["/"]; - }, [pathname]); - - const todayLabel = useMemo( - () => - new Intl.DateTimeFormat("tr-TR", { - weekday: "long", - day: "numeric", - month: "long", - }).format(new Date()), - [], - ); - return ( -
+
-
-
-
- -
+
+ {/* Desktop Sidebar */} +
+
+ {/* Mobile Sidebar */} {isMobileSidebarOpen ? ( -
-
- setIsMobileSidebarOpen(true)} - /> -
+ {/* Main Content Area (Scrollable internally) */} +
+ {/* Mobile Menu Button */} +
+
+ Cognis Logo + Cognis +
+ +
-
-
-
{children}
+
+
+
{children}
@@ -206,304 +119,139 @@ function SidebarPanel({ onNavigate?: () => void; }) { return ( - ); } -function TopBar({ - user, - currentMeta, - todayLabel, - onOpenSidebar, -}: { - user: DashboardShellProps["user"]; - currentMeta: RouteMeta; - todayLabel: string; - onOpenSidebar: () => void; -}) { - return ( -
-
-
- - -
-
- {currentMeta.eyebrow} -
-
-

- {currentMeta.title} -

-
- {todayLabel} -
-
-

- {currentMeta.description} -

-
-
- -
-
- Protected session -
- -
-
- -
- -
-
- ); -} - -function UserMenu({ - user, - compact = false, -}: { - user: DashboardShellProps["user"]; - compact?: boolean; -}) { - return ( - - - - - - - -
- -
-
{user.displayName}
-
- {user.email} -
-
-
-
- - - - - Ayarlar - - - - - - Günlük Alanı - - - -
- Bu menü profil ve hızlı erişim içindir. Ana çıkış aksiyonu soldaki - panelin altındadır. -
-
-
- ); -} - -function Avatar({ - user, - size = "md", -}: { - user: DashboardShellProps["user"]; - size?: "sm" | "md"; -}) { - const dimensions = size === "sm" ? "h-11 w-11 text-sm" : "h-12 w-12 text-sm"; - +function Avatar({ user }: { user: DashboardShellProps["user"] }) { if (user.avatarUrl) { return ( -
- {/* Avatar URL dış kaynaklı olduğu için bu önizlemede native img kullanıyoruz. */} +
{/* eslint-disable-next-line @next/next/no-img-element */} +
{user.shortName}
); @@ -529,17 +272,8 @@ function Avatar({ function AmbientBackdrop() { return ( <> -
- - +
); } + diff --git a/config/sidebar.ts b/config/sidebar.ts new file mode 100644 index 0000000..abab265 --- /dev/null +++ b/config/sidebar.ts @@ -0,0 +1,70 @@ +import { + Activity, + BarChart3, + BookOpenText, + Calendar, + CheckSquare2, + FileText, + FolderKanban, + MessageCircleHeart, + Sparkles, + Target, + Users, + Wallet, + Building2, + Tags, +} from "lucide-react"; + +export type SidebarNavItem = { + title: string; + href?: string; + icon?: any; + items?: SidebarNavItem[]; // For nested (accordion) links later +}; + +export type SidebarNavGroup = { + title: string; + items: SidebarNavItem[]; +}; + +export const sidebarData: SidebarNavGroup[] = [ + { + title: "GENEL BAKIŞ", + items: [ + { title: "Dashboard", href: "/", icon: Sparkles }, + { title: "Takvim", href: "/calendar", icon: Calendar }, + { title: "Analizler", href: "/analytics", icon: BarChart3 }, + ], + }, + { + title: "YÖNETİM", + items: [ + { title: "Görevler", href: "/tasks", icon: CheckSquare2 }, + { title: "Projeler", href: "/projects", icon: FolderKanban }, + { title: "Dökümanlar", href: "/documents", icon: FileText }, + { title: "Finans", href: "/finance", icon: Wallet }, + ], + }, + { + title: "KİŞİSEL", + items: [ + { title: "Günlük", href: "/journal", icon: BookOpenText }, + { title: "Alışkanlıklar", href: "/habits", icon: Activity }, + { title: "Hedefler", href: "/goals", icon: Target }, + ], + }, + { + title: "ORGANİZASYON", + items: [ + { title: "Ekip", href: "/team", icon: Users }, + { title: "Müşteriler", href: "/clients", icon: Building2 }, + { title: "Etiketler", href: "/tags", icon: Tags }, + ], + }, + { + title: "AI ASİSTAN", + items: [ + { title: "Sohbet", href: "/chat", icon: MessageCircleHeart }, + ], + }, +];