import { createClient } from '@/lib/supabase/server' import Link from 'next/link' import { Plus, Lock } from 'lucide-react' export default async function OpsPage() { const supabase = await createClient() const { data: { user } } = await supabase.auth.getUser() if (!user) return null const { data: member } = await supabase .from('space_members').select('space_id, role').eq('user_id', user.id).eq('status', 'current').single() if (!member) return null const [{ data: kbEntries }, { data: areaLeads }, { data: secrets }] = await Promise.all([ supabase.from('knowledge_base').select('*').eq('space_id', member!.space_id).order('is_pinned', { ascending: false }).order('created_at', { ascending: false }).limit(20), supabase.from('area_leads').select('*').eq('space_id', member!.space_id).order('area_name'), member?.role === 'admin' || member?.role === 'board' ? supabase.from('secrets').select('id, title, area').eq('space_id', member!.space_id) : Promise.resolve({ data: [] }), ]) const pinned = kbEntries?.filter(e => e.is_pinned) ?? [] const byArea = kbEntries?.filter(e => !e.is_pinned) ?? [] const accessColors: Record = { admin_only: 'text-red-600 bg-red-50 border-red-200', board: 'text-amber-600 bg-amber-50 border-amber-200', all_members: 'text-primary bg-primary/5 border-primary/20', } return (

Ops & Facilities

Add Entry
{/* Tabs */}
{['Knowledge Base', 'Processes', 'Secrets & Credentials', 'Area Leads'].map((tab, i) => ( ))}
{/* Search */}
{/* Pinned / Critical */} {pinned.length > 0 && (

Pinned / Critical

{pinned.map(entry => (
{entry.icon || }

{entry.title}

{entry.content?.slice(0, 100)}

updated {new Date(entry.updated_at).toLocaleDateString()} by {entry.updated_by_name}

{entry.visibility?.toUpperCase().replace('_', ' ') ?? 'ALL MEMBERS'}
))}
)} {/* By Area */} {byArea.length > 0 && (

By Area

{byArea.map(entry => (

{entry.title}

{entry.content?.slice(0, 100)}

{entry.area} ยท updated {new Date(entry.updated_at).toLocaleDateString()}

))}
)} {kbEntries?.length === 0 && (

No knowledge base entries yet

+ Add first entry
)}
{/* Right panel */}

Area Leads

{areaLeads && areaLeads.length > 0 ? areaLeads.map(lead => (
{lead.area_name.slice(0, 2).toUpperCase()}

{lead.area_name}

{lead.lead_handle ? `lead: ${lead.lead_handle}` : 'unassigned'}

{lead.status?.toUpperCase()}
)) : (
No area leads configured
)}
{/* Secrets Vault */}

Secrets Vault

Credentials are encrypted and role-scoped. Only designated leads can access their area.

{secrets && secrets.length > 0 ? (
{secrets.map(s => (
{s.title}
))}
) : (

No secrets stored yet

)}
) }