import { createClient } from "@/lib/supabase/server"; import { Card, CardContent, Badge } from "poyraz-ui/atoms"; import { FolderKanban, CheckCircle2, Clock, Activity, BarChart } from "lucide-react"; import Link from "next/link"; import { format } from "date-fns"; import { tr } from "date-fns/locale"; export default async function PortalDashboardPage() { const supabase = await createClient(); const { data: { user } } = await supabase.auth.getUser(); if (!user) return null; // 1. Get the Client record const { data: clientData } = await supabase .from("clients") .select("id, name, company_name") .eq("client_auth_id", user.id) .single(); if (!clientData) { return (

Hesabınız Henüz Aktif Değil

Freelancer'ınız sizin için hesabı oluşturdu ancak müşteri kartınızla henüz eşleşmedi veya bir hata oluştu. Lütfen iletişime geçin.

); } // 2. Get Projects const { data: projectsData } = await supabase .from("projects") .select("id, name, status, progress, due_date, created_at") .eq("client_id", clientData.id) .order("created_at", { ascending: false }); const projects = projectsData || []; const activeProjects = projects.filter(p => p.status !== 'completed' && p.status !== 'cancelled'); const completedProjects = projects.filter(p => p.status === 'completed'); const avgProgress = projects.length > 0 ? (projects.reduce((sum, p) => sum + (p.progress || 0), 0) / projects.length).toFixed(0) : "0"; return (
{/* Header */}
Genel Bakış

Müşteri Paneli

Hoş geldiniz, {clientData.name}. Aktif projelerinizi ve ilerlemeleri buradan takip edin.

{/* KPI Cards */}
{/* Projects */}

Tüm Projeleriniz

{projects.length === 0 ? (
Henüz size atanmış bir proje bulunmuyor.
) : ( projects.map(project => (

{project.name}

{project.status === 'completed' ? 'Tamamlandı' : project.status === 'active' ? 'Aktif' : 'Beklemede'} {project.due_date && (
Teslim: {format(new Date(project.due_date), 'd MMM yyyy', { locale: tr })}
)}
İlerleme %{project.progress}
)) )}
); } function StatCard({ label, value, icon: Icon, tone, }: { label: string; value: string; icon: any; tone: "green" | "blue" | "amber"; }) { const toneClass = { green: "bg-emerald-50 text-emerald-700", blue: "bg-blue-50 text-blue-700", amber: "bg-amber-50 text-amber-700", }[tone]; return (

{label}

{value}

); }