"use client"; import { useState, useEffect } from 'react'; // Types type TaskStatus = 'todo' | 'in-progress' | 'done'; type Task = { id: string; title: string; status: TaskStatus; assignee: 'me' | 'jelena' | 'neo'; priority?: string; created?: string }; type ContentStage = 'idea' | 'script' | 'thumbnail' | 'filming' | 'done'; type ContentItem = { id: string; title: string; stage: ContentStage }; type CronJob = { name: string; enabled: boolean; status: string; lastRun?: string }; type Memory = { id: string; title: string; date: string; preview: string }; type TeamMember = { id: string; name: string; role: string; status: 'working' | 'idle' }; export default function MissionControl() { const [activeTab, setActiveTab] = useState('tasks'); const [tasks, setTasks] = useState([]); const [crons, setCrons] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { async function fetchData() { try { // Fetch tasks from mounted volume const tasksRes = await fetch('/api/data?type=tasks'); const tasksData = await tasksRes.json(); setTasks(tasksData); // Fetch cron jobs const cronsRes = await fetch('/api/data?type=crons'); const cronsData = await cronsRes.json(); setCrons(cronsData); } catch (e) { console.error('Failed to fetch data:', e); } finally { setLoading(false); } } fetchData(); }, []); return (
{/* Header */}

🎯 Mission Control

{/* Content */}
{loading ? (

Loading live data...

) : ( <> {activeTab === 'tasks' && } {activeTab === 'crons' && } {activeTab === 'team' && } {activeTab === 'memory' && } )}
); } // ============ TASKS BOARD ============ function TasksBoard({ tasks }: { tasks: Task[] }) { const columns: { status: TaskStatus; label: string; color: string }[] = [ { status: 'todo', label: 'To Do', color: '#6b7280' }, { status: 'in-progress', label: 'In Progress', color: '#e94560' }, { status: 'done', label: 'Done', color: '#10b981' }, ]; return (
{columns.map(col => (

{col.label}

{tasks.filter(t => t.status === col.status).map(task => (

{task.title}

@{task.assignee}
))} {tasks.filter(t => t.status === col.status).length === 0 && (

No tasks

)}
))}
); } // ============ CRON MONITOR ============ function CronMonitor({ crons }: { crons: CronJob[] }) { return (

⏰ Cron Jobs

{crons.map((cron, i) => ( ))} {crons.length === 0 && ( )}
Job Status Enabled
{cron.name} {cron.status} {cron.enabled ? '✅' : '❌'}
No cron data available
); } // ============ TEAM ============ function Team() { const members: TeamMember[] = [ { id: '1', name: 'Jelena', role: 'Chief of Staff', status: 'working' }, { id: '2', name: 'Neo', role: 'CTO / DevOps', status: 'working' }, ]; return (
{members.map(member => (
{member.name[0]}

{member.name}

{member.role}

{member.status === 'working' ? '● Working' : '○ Idle'}
))}
); } // ============ MEMORY ============ function Memory() { const [search, setSearch] = useState(''); const [memories, setMemories] = useState([]); useEffect(() => { fetch('/api/data?type=memory') .then(r => r.json()) .then(setMemories) .catch(() => {}); }, []); const filtered = memories.filter(m => m.title.toLowerCase().includes(search.toLowerCase())); return (
setSearch(e.target.value)} style={{ width: '100%', padding: '15px', borderRadius: '8px', border: 'none', background: '#1a1a2e', color: 'white', marginBottom: '30px', fontSize: '1rem' }} />
{filtered.map(mem => (

{mem.title}

{mem.preview}

{mem.date}
))} {filtered.length === 0 && (

No memories found

)}
); }