"use client"; import Link from "next/link"; import { useEffect, useState } from "react"; import { AppShell } from "@/components/AppShell"; import { listNoteSummaries, listWorkspaceSummaries } from "@/lib/notes-client"; import { listApprovalQueue } from "@/lib/review-client"; import type { NoteSummary, WorkspaceSummary } from "@/lib/types"; export default function DashboardPage() { const [notes, setNotes] = useState([]); const [workspaces, setWorkspaces] = useState([]); const [pendingReviewCount, setPendingReviewCount] = useState(0); const [error, setError] = useState(null); useEffect(() => { void (async () => { try { const [nextNotes, nextWorkspaces, nextApprovalQueue] = await Promise.all([ listNoteSummaries(), listWorkspaceSummaries(), listApprovalQueue(), ]); setNotes(nextNotes); setWorkspaces(nextWorkspaces); setPendingReviewCount(nextApprovalQueue.length); } catch (err) { setError(err instanceof Error ? err.message : "Unable to load dashboard data"); } })(); }, []); const savedViews = [ { id: "workspace-all", name: "All workspaces", scope: "workspace", description: "Current workspace inventory derived from backend-backed workspace data.", query: "visibility:any sort:updated", resultCount: workspaces.length, }, { id: "draft-notes", name: "Draft notes", scope: "search", description: "Draft notes currently tracked across the active knowledge base.", query: "status:draft", resultCount: notes.filter((note) => note.status === "draft").length, }, { id: "pending-review", name: "Pending review", scope: "review", description: "Current agent-mediated items awaiting review.", query: "state:draft|proposed", resultCount: pendingReviewCount, }, ]; const operatorWorkflows = [ { id: "workflow-approvals", name: "Approval triage", owner: "Operator", queueCount: pendingReviewCount, sla: "< 4h", status: pendingReviewCount > 3 ? "at_risk" : "healthy", }, { id: "workflow-workspaces", name: "Workspace coverage", owner: "Knowledge Ops", queueCount: workspaces.length, sla: "< 1d", status: workspaces.length > 5 ? "at_risk" : "healthy", }, ] as const; const recentNotes = notes.slice(0, 3); function getSavedViewHref(view: (typeof savedViews)[number]) { if (view.id === "workspace-all") { return "/workspaces"; } if (view.id === "draft-notes") { return `/search?q=${encodeURIComponent("draft")}`; } return "/reviews"; } function getWorkflowHref(workflow: (typeof operatorWorkflows)[number]) { if (workflow.id === "workflow-workspaces") { return "/workspaces"; } return "/reviews"; } const summaryCards = [ { id: "summary-workspaces", label: "Active workspaces", value: workspaces.length, href: "/workspaces", }, { id: "summary-notes", label: "Tracked notes", value: notes.length, href: "/search", }, { id: "summary-reviews", label: "Pending review surfaces", value: pendingReviewCount, href: "/reviews", }, ] as const; return ( Operational shell} >
{summaryCards.map((card) => (
{card.label}
{card.value}
))}
Saved views
{savedViews.map((view) => (
{view.name} {view.scope}
{view.description}
{view.query} {view.resultCount} results
))}
Operator workflows
{operatorWorkflows.map((workflow) => (
{workflow.name} {workflow.status}
Owner: {workflow.owner}
Queue: {workflow.queueCount} SLA: {workflow.sla}
))}
Recent note activity
{error ?
{error}
: null}
{recentNotes.map((note) => (
{note.title} {note.updatedBy}
{note.excerpt}
{note.tags.map((tag) => ( #{tag} ))}
))}
); }