diff --git a/app/mission-control/agents/page.tsx b/app/mission-control/agents/page.tsx new file mode 100644 index 0000000..f23ea28 --- /dev/null +++ b/app/mission-control/agents/page.tsx @@ -0,0 +1,88 @@ +"use client"; + +import Link from "next/link"; + +const AGENTS = [ + { id: "thoth", name: "Thoth", role: "Strategy & Research", icon: "πŸ¦‰", color: "#6366f1", status: "idle" }, + { id: "ptah", name: "Ptah", role: "Dev & Ops", icon: "πŸ› οΈ", color: "#f59e0b", status: "idle" }, + { id: "seshat", name: "Seshat", role: "Content & SEO", icon: "πŸ“œ", color: "#22c55e", status: "idle" }, + { id: "anubis", name: "Anubis", role: "Outreach & Growth", icon: "πŸ•", color: "#ef4444", status: "idle" }, + { id: "thoth-trading", name: "Thoth Trading", role: "Market Research", icon: "πŸ“ˆ", color: "#10b981", status: "idle" }, + { id: "sekhmet", name: "Sekhmet", role: "Trade Execution", icon: "🦁", color: "#fbbf24", status: "idle" }, + { id: "hathor", name: "Hathor", role: "Personal Growth", icon: "πŸ’œ", color: "#a855f7", status: "idle" }, +]; + +const SQUADS = [ + { + name: "SiteMente Squad", + icon: "🌐", + agents: ["thoth", "ptah", "seshat", "anubis"], + }, + { + name: "Trading Squad", + icon: "πŸ“ˆ", + agents: ["thoth-trading", "sekhmet"], + }, + { + name: "Personal", + icon: "πŸ’œ", + agents: ["hathor"], + }, +]; + +export default function AgentsPage() { + return ( +
+
+

πŸ‘₯ Agent Roster

+

Manage your AI agent council

+
+ + {SQUADS.map(squad => ( +
+

+ {squad.icon} {squad.name} +

+
+ {squad.agents.map(agentId => { + const agent = AGENTS.find(a => a.id === agentId); + if (!agent) return null; + return ( + +
+
+ {agent.icon} +
+
+

+ {agent.name} +

+

{agent.role}

+
+
+
+ + {agent.status} +
+ + ); + })} +
+
+ ))} + +
+

+ πŸ’‘ Click any agent to view their command center with tasks, logs, and brainown outputs. +

+
+
+ ); +} diff --git a/app/mission-control/autorun/page.tsx b/app/mission-control/autorun/page.tsx new file mode 100644 index 0000000..1c1affa --- /dev/null +++ b/app/mission-control/autorun/page.tsx @@ -0,0 +1,11 @@ +"use client"; + +import AutoRunPanel from "@/components/mission-control/AutoRunPanel"; + +export default function AutoRunPage() { + return ( +
+ +
+ ); +} diff --git a/app/mission-control/brainown/page.tsx b/app/mission-control/brainown/page.tsx new file mode 100644 index 0000000..af0fec8 --- /dev/null +++ b/app/mission-control/brainown/page.tsx @@ -0,0 +1,11 @@ +"use client"; + +import BrainownPanel from "@/components/mission-control/BrainownPanel"; + +export default function BrainownPage() { + return ( +
+ +
+ ); +} diff --git a/app/mission-control/change-log/page.tsx b/app/mission-control/change-log/page.tsx new file mode 100644 index 0000000..0055d1d --- /dev/null +++ b/app/mission-control/change-log/page.tsx @@ -0,0 +1,11 @@ +"use client"; + +import ChangeLogPanel from "@/components/mission-control/ChangeLogPanel"; + +export default function ChangeLogPage() { + return ( +
+ +
+ ); +} diff --git a/app/mission-control/command/page.tsx b/app/mission-control/command/page.tsx new file mode 100644 index 0000000..4f14bb1 --- /dev/null +++ b/app/mission-control/command/page.tsx @@ -0,0 +1,15 @@ +"use client"; + +export default function CommandPage() { + return ( +
+
+

⌨️ Command Center

+

Execute commands

+
+
+

Command center loading...

+
+
+ ); +} diff --git a/app/mission-control/council/page.tsx b/app/mission-control/council/page.tsx new file mode 100644 index 0000000..32c3c1a --- /dev/null +++ b/app/mission-control/council/page.tsx @@ -0,0 +1,15 @@ +"use client"; + +import HorusChat from "@/components/mission-control/HorusChat"; + +export default function CouncilPage() { + return ( +
+
+

πŸ›οΈ Council Chat

+

Chat with your agent council

+
+ +
+ ); +} diff --git a/app/mission-control/execution-logs/page.tsx b/app/mission-control/execution-logs/page.tsx new file mode 100644 index 0000000..e010e15 --- /dev/null +++ b/app/mission-control/execution-logs/page.tsx @@ -0,0 +1,11 @@ +"use client"; + +import ExecutionLogsPanel from "@/components/mission-control/ExecutionLogsPanel"; + +export default function ExecutionLogsPage() { + return ( +
+ +
+ ); +} diff --git a/app/mission-control/horus-ai/page.tsx b/app/mission-control/horus-ai/page.tsx new file mode 100644 index 0000000..6100703 --- /dev/null +++ b/app/mission-control/horus-ai/page.tsx @@ -0,0 +1,151 @@ +"use client"; + +import { useState } from "react"; + +const SKILLS = [ + { id: "github", name: "GitHub", description: "Manage GitHub repositories", enabled: true }, + { id: "healthcheck", name: "Health Check", description: "System security hardening", enabled: true }, + { id: "tmux", name: "Tmux", description: "Remote-control tmux sessions", enabled: true }, + { id: "weather", name: "Weather", description: "Weather forecasts via wttr.in", enabled: true }, + { id: "tavily", name: "Tavily", description: "Web search and extraction", enabled: true }, + { id: "coingecko", name: "CoinGecko", description: "Crypto prices and market data", enabled: true }, + { id: "discord", name: "Discord", description: "Discord operations", enabled: false }, + { id: "clawhub", name: "ClawHub", description: "Skill management", enabled: true }, +]; + +const APIS = [ + { id: "perplexity", name: "Perplexity", status: "active", color: "green" }, + { id: "openweather", name: "OpenWeather", status: "active", color: "green" }, + { id: "newsapi", name: "NewsAPI", status: "active", color: "green" }, + { id: "coingecko", name: "CoinGecko", status: "active", color: "green" }, + { id: "tavily", name: "Tavily", status: "active", color: "green" }, + { id: "elevenlabs", name: "ElevenLabs", status: "inactive", color: "yellow" }, +]; + +const AUTOMATIONS = [ + { id: "morning-brief", name: "Morning Brief", schedule: "06:00 CET", enabled: true }, + { id: "backups", name: "Backups", schedule: "02:00 CET", enabled: true }, + { id: "health-checks", name: "Health Checks", schedule: "30min", enabled: true }, + { id: "trading-scan", name: "Trading Scan", schedule: "30min", enabled: false }, +]; + +export default function HorusAIPage() { + const [skills, setSkills] = useState(SKILLS); + const [automations, setAutomations] = useState(AUTOMATIONS); + + const toggleSkill = (id: string) => { + setSkills(skills.map(s => s.id === id ? { ...s, enabled: !s.enabled } : s)); + }; + + const toggleAutomation = (id: string) => { + setAutomations(automations.map(a => a.id === id ? { ...a, enabled: !a.enabled } : a)); + }; + + return ( +
+
+

πŸ€– Horus AI

+

Manage skills, APIs, and automation toggles

+
+ + {/* Skills */} +
+

+ 🎯 Skills +

+
+ {skills.map(skill => ( +
+
+

{skill.name}

+

{skill.description}

+
+ +
+ ))} +
+
+ + {/* APIs */} +
+

+ πŸ”Œ APIs +

+
+ + + + + + + + + {APIS.map(api => ( + + + + + ))} + +
APIStatus
{api.name} + + + {api.status} + +
+
+
+ + {/* Automations */} +
+

+ ⚑ Automation +

+
+ + + + + + + + + + {automations.map(automation => ( + + + + + + ))} + +
Cron JobScheduleStatus
{automation.name}{automation.schedule} + +
+
+
+
+ ); +} diff --git a/app/mission-control/leads/page.tsx b/app/mission-control/leads/page.tsx new file mode 100644 index 0000000..d3a4be5 --- /dev/null +++ b/app/mission-control/leads/page.tsx @@ -0,0 +1,88 @@ +"use client"; + +import { useState } from "react"; + +const LEAD_STATUSES = ["all", "new", "contacted", "qualified", "proposal", "won", "lost"]; + +const SAMPLE_LEADS = [ + { id: 1, name: "Restaurante El GaleΓ³n", email: "info@galeon.es", phone: "+34 952 123 456", status: "qualified", source: "Website" }, + { id: 2, name: "ClΓ­nica Dental Mar", email: "contacto@clinica-dental-mar.es", phone: "+34 951 234 567", status: "contacted", source: "Referral" }, + { id: 3, name: "Inmobiliaria Sol", email: "info@inmobiliariasol.com", phone: "+34 953 345 678", status: "new", source: "Website" }, +]; + +export default function LeadsPage() { + const [filter, setFilter] = useState("all"); + + const filteredLeads = filter === "all" + ? SAMPLE_LEADS + : SAMPLE_LEADS.filter(l => l.status === filter); + + const statusColors: Record = { + new: "bg-blue-500/20 text-blue-400", + contacted: "bg-yellow-500/20 text-yellow-400", + qualified: "bg-green-500/20 text-green-400", + proposal: "bg-purple-500/20 text-purple-400", + won: "bg-emerald-500/20 text-emerald-400", + lost: "bg-red-500/20 text-red-400", + }; + + return ( +
+
+

πŸ“‹ Lead Manager

+

Manage your SiteMente leads

+
+ + {/* Filters */} +
+ {LEAD_STATUSES.map(status => ( + + ))} +
+ + {/* Table */} +
+ + + + + + + + + + + + {filteredLeads.map(lead => ( + + + + + + + + ))} + +
NameEmailPhoneStatusSource
{lead.name}{lead.email}{lead.phone} + + {lead.status} + + {lead.source}
+
+ +

+ Showing {filteredLeads.length} of {SAMPLE_LEADS.length} leads (database connection needed for full functionality) +

+
+ ); +} diff --git a/app/mission-control/monday/page.tsx b/app/mission-control/monday/page.tsx new file mode 100644 index 0000000..e77c7a2 --- /dev/null +++ b/app/mission-control/monday/page.tsx @@ -0,0 +1,11 @@ +"use client"; + +import MondayBoard from "@/components/mission-control/MondayBoard"; + +export default function MondayPage() { + return ( +
+ +
+ ); +} diff --git a/app/mission-control/projects-panel/page.tsx b/app/mission-control/projects-panel/page.tsx new file mode 100644 index 0000000..544a137 --- /dev/null +++ b/app/mission-control/projects-panel/page.tsx @@ -0,0 +1,15 @@ +"use client"; + +export default function ProjectsPanelPage() { + return ( +
+
+

πŸ“ Projects Panel

+

All projects overview

+
+
+

Projects panel loading...

+
+
+ ); +} diff --git a/app/mission-control/sessions/page.tsx b/app/mission-control/sessions/page.tsx new file mode 100644 index 0000000..b866981 --- /dev/null +++ b/app/mission-control/sessions/page.tsx @@ -0,0 +1,11 @@ +"use client"; + +import VoiceChat from "@/components/mission-control/VoiceChat"; + +export default function VoiceChatPage() { + return ( +
+ +
+ ); +} diff --git a/app/mission-control/skills/page.tsx b/app/mission-control/skills/page.tsx new file mode 100644 index 0000000..3e6c189 --- /dev/null +++ b/app/mission-control/skills/page.tsx @@ -0,0 +1,15 @@ +"use client"; + +export default function SkillsPanelPage() { + return ( +
+
+

🎯 Skills Panel

+

Manage OpenClaw skills

+
+
+

Skills panel loading...

+
+
+ ); +} diff --git a/app/mission-control/system-status/page.tsx b/app/mission-control/system-status/page.tsx new file mode 100644 index 0000000..651e6d4 --- /dev/null +++ b/app/mission-control/system-status/page.tsx @@ -0,0 +1,15 @@ +"use client"; + +export default function SystemStatusPage() { + return ( +
+
+

πŸ“‘ System Status

+

Server health and monitoring

+
+
+

System status loading...

+
+
+ ); +} diff --git a/app/mission-control/task-history/page.tsx b/app/mission-control/task-history/page.tsx new file mode 100644 index 0000000..0f07b34 --- /dev/null +++ b/app/mission-control/task-history/page.tsx @@ -0,0 +1,11 @@ +"use client"; + +import TaskHistoryPanel from "@/components/mission-control/TaskHistoryPanel"; + +export default function TaskHistoryPage() { + return ( +
+ +
+ ); +} diff --git a/app/mission-control/tasks/page.tsx b/app/mission-control/tasks/page.tsx new file mode 100644 index 0000000..987f5f6 --- /dev/null +++ b/app/mission-control/tasks/page.tsx @@ -0,0 +1,33 @@ +"use client"; + +import { TaskCardsPanel } from "@/components/mission-control/TaskCardsPanel"; +import { useState, useEffect } from "react"; +import { Task, TaskStatus } from "@/lib/mission-control/types"; + +const SAMPLE_TASKS: Task[] = [ + { id: "1", title: "Complete SiteMente landing page", status: "todo", project: "sitemente", priority: "high", createdAt: "2026-03-22", agent: "ptah" }, + { id: "2", title: "Write content for HostPioneers", status: "in_progress", project: "sitemente", priority: "medium", createdAt: "2026-03-21", agent: "seshat" }, + { id: "3", title: "Deploy trading bot", status: "done", project: "trading", priority: "high", createdAt: "2026-03-20", agent: "sekhmet" }, +]; + +export default function TasksPage() { + const [tasks, setTasks] = useState(SAMPLE_TASKS); + + const toggleTask = (id: string) => { + setTasks(tasks.map(t => + t.id === id + ? { ...t, status: t.status === "done" ? "todo" as TaskStatus : "done" as TaskStatus } + : t + )); + }; + + return ( +
+
+

πŸ“‹ Task Board

+

Manage tasks across all projects

+
+ +
+ ); +} diff --git a/app/mission-control/trading-chart/page.tsx b/app/mission-control/trading-chart/page.tsx new file mode 100644 index 0000000..dd56efc --- /dev/null +++ b/app/mission-control/trading-chart/page.tsx @@ -0,0 +1,15 @@ +"use client"; + +export default function TradingChartPage() { + return ( +
+
+

πŸ“Š Trading Chart

+

BTC, ETH, SOL price charts

+
+
+

Trading charts loading...

+
+
+ ); +} diff --git a/app/mission-control/trading-reports/page.tsx b/app/mission-control/trading-reports/page.tsx new file mode 100644 index 0000000..3c8accb --- /dev/null +++ b/app/mission-control/trading-reports/page.tsx @@ -0,0 +1,15 @@ +"use client"; + +export default function TradingReportsPage() { + return ( +
+
+

πŸ“” Trading Reports

+

P&L stats, win rate, trade history

+
+
+

Trading reports loading...

+
+
+ ); +} diff --git a/app/mission-control/trading-tools/page.tsx b/app/mission-control/trading-tools/page.tsx new file mode 100644 index 0000000..65b5227 --- /dev/null +++ b/app/mission-control/trading-tools/page.tsx @@ -0,0 +1,15 @@ +"use client"; + +export default function TradingToolsPage() { + return ( +
+
+

πŸ› οΈ Trading Tools

+

Risk management, position sizing, etc.

+
+
+

Trading tools loading...

+
+
+ ); +} diff --git a/app/mission-control/trading/page.tsx b/app/mission-control/trading/page.tsx new file mode 100644 index 0000000..f475548 --- /dev/null +++ b/app/mission-control/trading/page.tsx @@ -0,0 +1,11 @@ +"use client"; + +import { TradingPanel } from "@/components/mission-control/TradingPanel"; + +export default function TradingPage() { + return ( +
+ +
+ ); +} diff --git a/app/mission-control/voice/page.tsx b/app/mission-control/voice/page.tsx new file mode 100644 index 0000000..088130c --- /dev/null +++ b/app/mission-control/voice/page.tsx @@ -0,0 +1,11 @@ +"use client"; + +import VoiceChat from "@/components/mission-control/VoiceChat"; + +export default function VoicePage() { + return ( +
+ +
+ ); +}