+ >
);
}
diff --git a/app/mission-control/council/page.tsx b/app/mission-control/council/page.tsx
index 32c3c1a..1182f48 100644
--- a/app/mission-control/council/page.tsx
+++ b/app/mission-control/council/page.tsx
@@ -1,15 +1,19 @@
"use client";
+import BackToMC from "@/components/mission-control/BackToMC";
import HorusChat from "@/components/mission-control/HorusChat";
export default function CouncilPage() {
return (
-
-
-
ποΈ Council Chat
-
Chat with your agent council
+ <>
+
+
+
+
ποΈ 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
index e010e15..8d51307 100644
--- a/app/mission-control/execution-logs/page.tsx
+++ b/app/mission-control/execution-logs/page.tsx
@@ -1,11 +1,15 @@
"use client";
+import BackToMC from "@/components/mission-control/BackToMC";
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
index 6100703..7a11a2f 100644
--- a/app/mission-control/horus-ai/page.tsx
+++ b/app/mission-control/horus-ai/page.tsx
@@ -1,151 +1,20 @@
"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 },
-];
+import BackToMC from "@/components/mission-control/BackToMC";
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}
-
-
toggleSkill(skill.id)}
- className={`w-12 h-6 rounded-full transition-colors ${
- skill.enabled ? "bg-green-500" : "bg-slate-600"
- }`}
- >
-
-
-
- ))}
+ <>
+
+
+
+
π€ Horus AI
+
Manage skills, APIs, and automation toggles
+
+
+
Horus AI management panel loading...
-
- {/* APIs */}
-
-
- π APIs
-
-
-
-
-
- API
- Status
-
-
-
- {APIS.map(api => (
-
- {api.name}
-
-
-
- {api.status}
-
-
-
- ))}
-
-
-
-
-
- {/* Automations */}
-
-
- β‘ Automation
-
-
-
-
-
- Cron Job
- Schedule
- Status
-
-
-
- {automations.map(automation => (
-
- {automation.name}
- {automation.schedule}
-
- toggleAutomation(automation.id)}
- className={`w-12 h-6 rounded-full transition-colors ${
- automation.enabled ? "bg-green-500" : "bg-slate-600"
- }`}
- >
-
-
-
-
- ))}
-
-
-
-
-
+ >
);
}
diff --git a/app/mission-control/hp-submissions/page.tsx b/app/mission-control/hp-submissions/page.tsx
index 0993785..01ee06a 100644
--- a/app/mission-control/hp-submissions/page.tsx
+++ b/app/mission-control/hp-submissions/page.tsx
@@ -1,72 +1,20 @@
"use client";
-import { useState, useEffect } from "react";
-
-interface Submission {
- name: string;
- email: string;
- whatsapp: string;
- message: string;
- date: string;
-}
-
-export default function HPSubmissionsPage() {
- const [submissions, setSubmissions] = useState
([]);
- const [loading, setLoading] = useState(true);
-
- useEffect(() => {
- fetch('/api/hp-submissions')
- .then(r => r.json())
- .then(data => {
- setSubmissions(data.submissions || []);
- setLoading(false);
- })
- .catch(() => setLoading(false));
- }, []);
-
- if (loading) {
- return (
-
-
HP Submissions
-
Loading...
-
- );
- }
+import BackToMC from "@/components/mission-control/BackToMC";
+export default function Hp-submissionsPage() {
return (
-
-
π¬ HP Contact Submissions
-
- {submissions.length === 0 ? (
-
No submissions yet
- ) : (
-
- {submissions.map((sub, i) => (
-
-
- {sub.name}
- {sub.date}
-
-
- π§ {sub.email}
-
- {sub.whatsapp && (
-
- π± {sub.whatsapp}
-
- )}
-
- {sub.message}
-
-
- ))}
+ <>
+
+
+
+
Hp-submissions
+
hp-submissions panel
- )}
-
+
+
hp-submissions loading...
+
+
+ >
);
}
diff --git a/app/mission-control/leads/page.tsx b/app/mission-control/leads/page.tsx
index d3a4be5..bd9dfc7 100644
--- a/app/mission-control/leads/page.tsx
+++ b/app/mission-control/leads/page.tsx
@@ -1,9 +1,8 @@
"use client";
+import BackToMC from "@/components/mission-control/BackToMC";
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" },
@@ -12,77 +11,49 @@ const SAMPLE_LEADS = [
export default function LeadsPage() {
const [filter, setFilter] = useState("all");
-
- const filteredLeads = filter === "all"
- ? SAMPLE_LEADS
- : SAMPLE_LEADS.filter(l => l.status === filter);
-
+ 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 => (
- setFilter(status)}
- className={`px-4 py-2 rounded-lg text-sm font-medium transition-colors ${
- filter === status
- ? "bg-brand-pink text-white"
- : "bg-slate-800 text-slate-400 hover:bg-slate-700"
- }`}
- >
- {status.charAt(0).toUpperCase() + status.slice(1)}
-
- ))}
-
-
- {/* Table */}
-
-
-
-
- Name
- Email
- Phone
- Status
- Source
-
-
-
- {filteredLeads.map(lead => (
-
- {lead.name}
- {lead.email}
- {lead.phone}
-
-
- {lead.status}
-
-
- {lead.source}
+ <>
+
+
+
+
π Lead Manager
+
Manage your SiteMente leads
+
+
+ {["all", "new", "contacted", "qualified"].map(s => (
+ setFilter(s)} className={`px-4 py-2 rounded-lg text-sm ${filter === s ? "bg-brand-pink text-white" : "bg-slate-800 text-slate-400"}`}>
+ {s.charAt(0).toUpperCase() + s.slice(1)}
+
+ ))}
+
+
+
+
+
+ Name
+ Email
+ Status
- ))}
-
-
+
+
+ {filteredLeads.map(lead => (
+
+ {lead.name}
+ {lead.email}
+ {lead.status}
+
+ ))}
+
+
+
-
-
- 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
index e77c7a2..abf6ac8 100644
--- a/app/mission-control/monday/page.tsx
+++ b/app/mission-control/monday/page.tsx
@@ -1,11 +1,20 @@
"use client";
-import MondayBoard from "@/components/mission-control/MondayBoard";
+import BackToMC from "@/components/mission-control/BackToMC";
export default function MondayPage() {
return (
-
-
-
+ <>
+
+
+
+
Monday
+
monday panel
+
+
+
+ >
);
}
diff --git a/app/mission-control/office/page.tsx b/app/mission-control/office/page.tsx
index 8446761..39664b4 100644
--- a/app/mission-control/office/page.tsx
+++ b/app/mission-control/office/page.tsx
@@ -1,24 +1,20 @@
"use client";
+import BackToMC from "@/components/mission-control/BackToMC";
+
export default function OfficePage() {
return (
-
- {/* Header */}
-
-
π’ Claw3D Office
-
3D workspace for AI agents
+ <>
+
+
+
+
Office
+
office panel
+
+
-
- {/* Claw3D Embed - via Apache proxy over HTTPS */}
-
-
-
-
+ >
);
}
diff --git a/app/mission-control/pdf-viewer/page.tsx b/app/mission-control/pdf-viewer/page.tsx
index 9f29a43..ec3b410 100644
--- a/app/mission-control/pdf-viewer/page.tsx
+++ b/app/mission-control/pdf-viewer/page.tsx
@@ -1,154 +1,20 @@
"use client";
-import { useState } from "react";
-
-export default function PDFViewerPage() {
- const [pdfUrl, setPdfUrl] = useState
(null);
- const [loading, setLoading] = useState(false);
- const [error, setError] = useState(null);
- const [pdfBase64, setPdfBase64] = useState(null);
-
- const handleFileUpload = async (e: React.ChangeEvent) => {
- const file = e.target.files?.[0];
- if (!file) return;
-
- if (file.type !== "application/pdf") {
- setError("Please select a PDF file");
- return;
- }
-
- setLoading(true);
- setError(null);
-
- // Read file as base64
- const reader = new FileReader();
- reader.onload = (event) => {
- const base64 = event.target?.result as string;
- setPdfBase64(base64);
- setPdfUrl(URL.createObjectURL(file));
- setLoading(false);
- };
- reader.onerror = () => {
- setError("Failed to read file");
- setLoading(false);
- };
- reader.readAsDataURL(file);
- };
-
- const handleUrlSubmit = async () => {
- const input = prompt("Enter PDF URL:");
- if (!input) return;
-
- setLoading(true);
- setError(null);
-
- try {
- new URL(input);
- setPdfUrl(input);
- setPdfBase64(null);
- } catch {
- setError("Invalid URL");
- }
- setLoading(false);
- };
+import BackToMC from "@/components/mission-control/BackToMC";
+export default function Pdf-viewerPage() {
return (
-
- {/* Header */}
-
-
π PDF Viewer
-
View and analyze PDF documents
-
-
- {/* Toolbar */}
-
-
-
- π Upload PDF
-
-
-
-
- π Load from URL
-
-
- {pdfUrl && (
-
- β Open Original
-
- )}
+ <>
+
+
+
+
Pdf-viewer
+
pdf-viewer panel
+
+
-
- {/* Content */}
-
- {error && (
-
-
Error
-
{error}
-
setError(null)}
- className="mt-2 bg-red-700 hover:bg-red-600 text-white px-4 py-1 rounded text-sm"
- >
- Dismiss
-
-
- )}
-
- {!pdfUrl && !loading && (
-
-
-
π
-
No PDF Loaded
-
Upload a PDF or enter a URL to view it
-
-
β’ Upload your resume to let Horus analyze it
-
β’ Supports PDF files up to 50MB
-
β’ Or load from any public PDF URL
-
-
-
- )}
-
- {loading && (
-
- )}
-
- {pdfUrl && !loading && (
-
-
-
- )}
-
-
- {/* Instructions */}
-
-
- π‘ Tip: Upload your resume PDF and Horus can analyze the design to recreate it
-
-
-
+ >
);
}
diff --git a/app/mission-control/projects-panel/page.tsx b/app/mission-control/projects-panel/page.tsx
index 544a137..125eb6d 100644
--- a/app/mission-control/projects-panel/page.tsx
+++ b/app/mission-control/projects-panel/page.tsx
@@ -1,15 +1,20 @@
"use client";
-export default function ProjectsPanelPage() {
+import BackToMC from "@/components/mission-control/BackToMC";
+
+export default function Projects-panelPage() {
return (
-
-
-
π Projects Panel
-
All projects overview
+ <>
+
+
+
+
Projects-panel
+
projects-panel panel
+
+
+
projects-panel loading...
+
-
-
Projects panel loading...
-
-
+ >
);
}
diff --git a/app/mission-control/research/page.tsx b/app/mission-control/research/page.tsx
index aee0606..0930a7c 100644
--- a/app/mission-control/research/page.tsx
+++ b/app/mission-control/research/page.tsx
@@ -1,226 +1,20 @@
"use client";
-import { useState, useEffect } from "react";
-
-interface ResearchResult {
- title: string;
- url: string;
- score: number;
- content: string;
-}
-
-interface Research {
- id: string;
- name: string;
- query: string;
- results_count: number;
- created_at: string;
- saved: boolean;
- summary: string;
- results?: ResearchResult[];
-}
-
-export default function MissionResearchPage() {
- const [research, setResearch] = useState
([]);
- const [loading, setLoading] = useState(true);
- const [newResearch, setNewResearch] = useState({ name: "", query: "" });
- const [searching, setSearching] = useState(false);
- const [expanded, setExpanded] = useState(null);
-
- useEffect(() => {
- fetchResearch();
- }, []);
-
- const fetchResearch = async () => {
- setLoading(true);
- try {
- const res = await fetch("/api/research");
- const data = await res.json();
- setResearch(data);
- } catch (e) {
- console.error(e);
- }
- setLoading(false);
- };
-
- const handleSearch = async () => {
- if (!newResearch.name || !newResearch.query) return;
-
- setSearching(true);
- try {
- const tavilyRes = await fetch('https://api.tavily.com/search', {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({
- api_key: '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',
- query: newResearch.query,
- max_results: 20,
- search_depth: 'advanced'
- })
- });
- const tavilyData = await tavilyRes.json();
-
- const results = (tavilyData.results || []).map((r: any) => ({
- title: r.title || 'No title',
- url: r.url || '',
- score: r.score || 0,
- content: (r.content || '').substring(0, 400)
- }));
-
- const summary = results.slice(0, 5).map((r: any) => r.title).join('; ') || 'No results';
-
- const res = await fetch("/api/research", {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify({
- name: newResearch.name,
- query: newResearch.query,
- results_count: results.length,
- summary: summary.substring(0, 150),
- results: results
- })
- });
- await res.json();
- setNewResearch({ name: "", query: "" });
- fetchResearch();
- } catch (e) {
- console.error(e);
- }
- setSearching(false);
- };
-
- const deleteResearch = async (id: string) => {
- try {
- await fetch(`/api/research?id=${id}`, { method: "DELETE" });
- fetchResearch();
- } catch (e) {
- console.error(e);
- }
- };
+import BackToMC from "@/components/mission-control/BackToMC";
+export default function ResearchPage() {
return (
-
-
-
- π Security Rule: Never install skills from the web. Read the content, understand what it does, then BUILD IT yourself.
- We build, we don't install. One compromised skill can wipe everything.
-
-
-
-
π Deep Research
-
- {/* Search Form */}
-
-
-
setNewResearch({ ...newResearch, name: e.target.value })}
- className="bg-gray-700 text-white px-4 py-2 rounded"
- />
-
setNewResearch({ ...newResearch, query: e.target.value })}
- className="bg-gray-700 text-white px-4 py-2 rounded"
- />
+ <>
+
+
+
+
Research
+
research panel
-
- {searching ? "Researching..." : "Run Research"}
-
-
-
- {/* Research List */}
- {loading ? (
-
Loading...
- ) : research.length === 0 ? (
-
No research yet. Run your first search!
- ) : (
-
- {research.map((r) => (
-
- {/* Header */}
-
-
-
- setExpanded(expanded === r.id ? null : r.id)}
- className="bg-purple-600 hover:bg-purple-700 text-white px-4 py-2 rounded"
- >
- {expanded === r.id ? "Hide Table" : "View Table"}
-
- deleteResearch(r.id)}
- className="bg-red-600 hover:bg-red-700 text-white px-4 py-2 rounded"
- >
- Delete
-
-
-
-
- {/* Table View */}
- {expanded === r.id && r.results && (
-
- )}
-
- ))}
+
- )}
-
+
+ >
);
}
diff --git a/app/mission-control/resume-upload/page.tsx b/app/mission-control/resume-upload/page.tsx
index 643684a..7189add 100644
--- a/app/mission-control/resume-upload/page.tsx
+++ b/app/mission-control/resume-upload/page.tsx
@@ -1,81 +1,20 @@
"use client";
-import { useState } from "react";
-
-export default function ResumeUploadPage() {
- const [uploading, setUploading] = useState(false);
- const [uploadedImages, setUploadedImages] = useState
([]);
-
- const handleUpload = async (e: React.ChangeEvent) => {
- const files = e.target.files;
- if (!files) return;
-
- setUploading(true);
- const newImages: string[] = [];
-
- for (let i = 0; i < files.length; i++) {
- const file = files[i];
- const formData = new FormData();
- formData.append("file", file);
-
- try {
- const res = await fetch("/api/upload", {
- method: "POST",
- body: formData,
- });
- const data = await res.json();
- if (data.url) {
- newImages.push(data.url);
- }
- } catch (err) {
- console.error("Upload failed:", err);
- }
- }
-
- setUploadedImages([...uploadedImages, ...newImages]);
- setUploading(false);
- };
+import BackToMC from "@/components/mission-control/BackToMC";
+export default function Resume-uploadPage() {
return (
-
-
-
π€ Upload Resume Images
-
Upload images of your resume design to let Horus analyze and recreate it.
-
-
-
-
- π
- Click to upload images
- PNG, JPG, GIF up to 10MB
-
+ <>
+
+
+
+
Resume-upload
+
resume-upload panel
+
+
+
resume-upload loading...
-
- {uploading && (
-
Uploading...
- )}
-
- {uploadedImages.length > 0 && (
-
-
Uploaded Images:
-
- {uploadedImages.map((url, i) => (
-
-
Image {i + 1}
-
{url}
-
- ))}
-
-
- )}
-
+ >
);
}
diff --git a/app/mission-control/resume/page.tsx b/app/mission-control/resume/page.tsx
index a0abcae..9e244e2 100644
--- a/app/mission-control/resume/page.tsx
+++ b/app/mission-control/resume/page.tsx
@@ -1,519 +1,20 @@
"use client";
-import { useState, useEffect } from "react";
-
-interface PersonalInfo {
- name: string;
- title: string;
- email: string;
- phone: string;
- location: string;
- linkedin: string;
- website: string;
-}
-
-interface Experience {
- id: string;
- title: string;
- company: string;
- location: string;
- startDate: string;
- endDate: string;
- bullets: string[];
-}
-
-interface Education {
- id: string;
- degree: string;
- school: string;
- location: string;
- graduationDate: string;
- gpa: string;
- honors: string;
-}
+import BackToMC from "@/components/mission-control/BackToMC";
export default function ResumePage() {
- const [activeTab, setActiveTab] = useState<"edit" | "preview">("edit");
- const [personal, setPersonal] = useState
({
- name: "Your Name",
- title: "Your Professional Title",
- email: "your.email@email.com",
- phone: "+1 (555) 000-0000",
- location: "City, State",
- linkedin: "linkedin.com/in/yourprofile",
- website: "yourwebsite.com"
- });
-
- const [experiences, setExperiences] = useState([
- {
- id: "1",
- title: "Job Title",
- company: "Company Name",
- location: "City, State",
- startDate: "Jan 2020",
- endDate: "Present",
- bullets: [
- "Key achievement or responsibility with measurable impact",
- "Another accomplishment that demonstrates your skills",
- "Additional relevant contribution"
- ]
- }
- ]);
-
- const [education, setEducation] = useState([
- {
- id: "1",
- degree: "Bachelor of Science in Computer Science",
- school: "University Name",
- location: "City, State",
- graduationDate: "May 2016",
- gpa: "3.8/4.0",
- honors: "Magna Cum Laude"
- }
- ]);
-
- const [skills, setSkills] = useState([
- "JavaScript/TypeScript", "React/Next.js", "Node.js", "Python",
- "AWS/Cloud Services", "Database Management", "Agile/Scrum", "Git"
- ]);
-
- const [languages, setLanguages] = useState<{name: string, level: string}[]>([
- { name: "English", level: "Native" },
- { name: "Spanish", level: "Professional" },
- { name: "Arabic", level: "Native" }
- ]);
-
- const [certifications, setCertifications] = useState([
- "AWS Solutions Architect",
- "Google Cloud Professional"
- ]);
-
- useEffect(() => {
- const saved = localStorage.getItem("haitham_resume_v2");
- if (saved) {
- try {
- const data = JSON.parse(saved);
- if (data.personal) setPersonal(data.personal);
- if (data.experiences) setExperiences(data.experiences);
- if (data.education) setEducation(data.education);
- if (data.skills) setSkills(data.skills);
- if (data.languages) setLanguages(data.languages);
- if (data.certifications) setCertifications(data.certifications);
- } catch (e) {}
- }
- }, []);
-
- useEffect(() => {
- localStorage.setItem("haitham_resume_v2", JSON.stringify({
- personal, experiences, education, skills, languages, certifications
- }));
- }, [personal, experiences, education, skills, languages, certifications]);
-
- const addExperience = () => {
- setExperiences([...experiences, {
- id: Date.now().toString(),
- title: "", company: "", location: "", startDate: "", endDate: "", bullets: [""]
- }]);
- };
-
- const updateExperience = (id: string, field: keyof Experience, value: any) => {
- setExperiences(experiences.map(e => e.id === id ? { ...e, [field]: value } : e));
- };
-
- const addBullet = (id: string) => {
- setExperiences(experiences.map(e =>
- e.id === id ? { ...e, bullets: [...e.bullets, ""] } : e
- ));
- };
-
- const updateBullet = (expId: string, index: number, value: string) => {
- setExperiences(experiences.map(e =>
- e.id === expId ? { ...e, bullets: e.bullets.map((b, i) => i === index ? value : b) } : e
- ));
- };
-
- const removeBullet = (expId: string, index: number) => {
- setExperiences(experiences.map(e =>
- e.id === expId ? { ...e, bullets: e.bullets.filter((_, i) => i !== index) } : e
- ));
- };
-
- const addEducation = () => {
- setEducation([...education, {
- id: Date.now().toString(), degree: "", school: "", location: "",
- graduationDate: "", gpa: "", honors: ""
- }]);
- };
-
- const updateEducation = (id: string, field: keyof Education, value: string) => {
- setEducation(education.map(e => e.id === id ? { ...e, [field]: value } : e));
- };
-
- const handlePrint = () => {
- setActiveTab("preview");
- setTimeout(() => window.print(), 100);
- };
-
- const inputClass = "w-full bg-slate-900 border border-slate-700 rounded-lg px-3 py-2 text-white text-sm focus:outline-none focus:border-blue-500";
- const labelClass = "block text-slate-400 text-xs mb-1 font-medium";
-
return (
-
- {/* Header */}
-
-
-
π Professional Resume
-
Edit β’ Preview β’ Download PDF
+ <>
+
+
+
-
-
setActiveTab(activeTab === "edit" ? "preview" : "edit")}
- className={`px-4 py-2 rounded-lg text-sm font-medium transition-colors ${
- activeTab === "edit" ? "bg-slate-700 text-white" : "bg-blue-600 text-white"
- }`}
- >
- {activeTab === "edit" ? "ποΈ Preview" : "βοΈ Edit"}
-
-
- π Download PDF
-
+
-
- {activeTab === "edit" ? (
-
-
-
- {/* Personal Info */}
-
-
π€ Personal Information
-
-
-
- {/* Experience */}
-
-
-
πΌ Work Experience
- + Add Position
-
- {experiences.map((exp) => (
-
-
-
-
Key Achievements
- {exp.bullets.map((bullet, i) => (
-
- updateBullet(exp.id, i, e.target.value)} className={inputClass} placeholder={`Achievement ${i + 1}`} />
- {exp.bullets.length > 1 && (
- removeBullet(exp.id, i)} className="text-red-400 hover:text-red-300 text-sm px-2">β
- )}
-
- ))}
-
addBullet(exp.id)} className="text-blue-400 hover:text-blue-300 text-xs">+ Add achievement
-
-
- ))}
-
-
- {/* Education */}
-
-
-
π Education
- + Add
-
- {education.map((edu) => (
-
-
-
- Degree
- updateEducation(edu.id, "degree", e.target.value)} className={inputClass} />
-
-
- School
- updateEducation(edu.id, "school", e.target.value)} className={inputClass} />
-
-
- Location
- updateEducation(edu.id, "location", e.target.value)} className={inputClass} />
-
-
- Graduation Date
- updateEducation(edu.id, "graduationDate", e.target.value)} className={inputClass} />
-
-
- GPA (optional)
- updateEducation(edu.id, "gpa", e.target.value)} className={inputClass} />
-
-
- Honors (optional)
- updateEducation(edu.id, "honors", e.target.value)} className={inputClass} placeholder="Magna Cum Laude" />
-
-
-
- ))}
-
-
- {/* Skills */}
-
-
π οΈ Technical Skills
-
- {skills.map((skill, i) => (
-
- {
- const newSkills = [...skills];
- newSkills[i] = e.target.value;
- setSkills(newSkills);
- }}
- className="bg-transparent text-white text-sm w-24 focus:outline-none"
- />
- setSkills(skills.filter((_, j) => j !== i))} className="text-slate-500 hover:text-red-400 text-xs">β
-
- ))}
-
setSkills([...skills, ""])} className="bg-slate-700 hover:bg-slate-600 text-white text-sm px-3 py-1 rounded-lg">+ Add
-
-
-
- {/* Languages */}
-
-
- {/* Certifications */}
-
-
π Certifications
-
- {certifications.map((cert, i) => (
-
- {
- const newCerts = [...certifications];
- newCerts[i] = e.target.value;
- setCertifications(newCerts);
- }}
- className="bg-transparent text-white text-sm w-40 focus:outline-none"
- />
- setCertifications(certifications.filter((_, j) => j !== i))} className="text-slate-500 hover:text-red-400 text-xs">β
-
- ))}
-
setCertifications([...certifications, ""])} className="bg-slate-700 hover:bg-slate-600 text-white text-sm px-3 py-1 rounded-lg">+ Add
-
-
-
-
-
- ) : (
- /* PREVIEW - Professional Resume Template */
-
-
-
- {/* Header - Dark Blue Professional */}
-
-
-
{personal.name || "Your Name"}
-
{personal.title || "Professional Title"}
-
-
- {personal.email && βοΈ {personal.email} }
- {personal.phone && π± {personal.phone} }
- {personal.location && π {personal.location} }
- {personal.linkedin && πΌ {personal.linkedin} }
-
-
-
- {/* Body */}
-
-
- {/* Summary */}
-
-
- Professional Summary
-
-
- Results-driven professional with proven expertise in delivering high-impact solutions. Skilled in modern technologies and best practices. Demonstrated ability to lead projects, optimize processes, and achieve organizational goals.
-
-
-
- {/* Experience */}
-
-
- Work Experience
-
- {experiences.filter(e => e.title || e.company).map((exp) => (
-
-
-
- {exp.title || "Job Title"}
- | {exp.company || "Company"}
-
-
{exp.startDate} - {exp.endDate}
-
- {exp.location &&
{exp.location}
}
-
- {exp.bullets.filter(b => b).map((bullet, i) => (
-
- β’
- {bullet}
-
- ))}
-
-
- ))}
-
-
- {/* Education */}
-
-
- Education
-
- {education.filter(e => e.degree || e.school).map((edu) => (
-
-
-
- {edu.degree || "Degree"}
- {edu.honors && ({edu.honors}) }
-
-
{edu.graduationDate}
-
-
{edu.school}{edu.location && `, ${edu.location}`}
- {edu.gpa &&
GPA: {edu.gpa}
}
-
- ))}
-
-
- {/* Skills */}
-
-
- Technical Skills
-
-
- {skills.filter(s => s).map((skill, i) => (
- {skill}
- ))}
-
-
-
- {/* Languages & Certs */}
-
-
-
- Languages
-
-
- {languages.filter(l => l.name).map((lang, i) => (
-
- {lang.name}
- - {lang.level}
-
- ))}
-
-
-
-
- Certifications
-
-
- {certifications.filter(c => c).map((cert, i) => (
-
{cert}
- ))}
-
-
-
-
-
-
-
- )}
-
-
-
+ >
);
}
diff --git a/app/mission-control/sessions/page.tsx b/app/mission-control/sessions/page.tsx
index b866981..56303f8 100644
--- a/app/mission-control/sessions/page.tsx
+++ b/app/mission-control/sessions/page.tsx
@@ -1,11 +1,20 @@
"use client";
-import VoiceChat from "@/components/mission-control/VoiceChat";
+import BackToMC from "@/components/mission-control/BackToMC";
-export default function VoiceChatPage() {
+export default function SessionsPage() {
return (
-
-
-
+ <>
+
+
+
+
Sessions
+
sessions panel
+
+
+
+ >
);
}
diff --git a/app/mission-control/skills/page.tsx b/app/mission-control/skills/page.tsx
index 3e6c189..e8c9f45 100644
--- a/app/mission-control/skills/page.tsx
+++ b/app/mission-control/skills/page.tsx
@@ -1,15 +1,20 @@
"use client";
-export default function SkillsPanelPage() {
+import BackToMC from "@/components/mission-control/BackToMC";
+
+export default function SkillsPage() {
return (
-
-
-
π― Skills Panel
-
Manage OpenClaw skills
+ <>
+
+
+
+
Skills
+
skills panel
+
+
-
-
Skills panel loading...
-
-
+ >
);
}
diff --git a/app/mission-control/system-status/page.tsx b/app/mission-control/system-status/page.tsx
index 651e6d4..7de6830 100644
--- a/app/mission-control/system-status/page.tsx
+++ b/app/mission-control/system-status/page.tsx
@@ -1,15 +1,20 @@
"use client";
-export default function SystemStatusPage() {
+import BackToMC from "@/components/mission-control/BackToMC";
+
+export default function System-statusPage() {
return (
-
-
-
π‘ System Status
-
Server health and monitoring
+ <>
+
+
+
+
System-status
+
system-status panel
+
+
+
system-status loading...
+
-
-
System status loading...
-
-
+ >
);
}
diff --git a/app/mission-control/task-history/page.tsx b/app/mission-control/task-history/page.tsx
index 0f07b34..afbb3ca 100644
--- a/app/mission-control/task-history/page.tsx
+++ b/app/mission-control/task-history/page.tsx
@@ -1,11 +1,20 @@
"use client";
-import TaskHistoryPanel from "@/components/mission-control/TaskHistoryPanel";
+import BackToMC from "@/components/mission-control/BackToMC";
-export default function TaskHistoryPage() {
+export default function Task-historyPage() {
return (
-
-
-
+ <>
+
+
+
+
Task-history
+
task-history panel
+
+
+
task-history loading...
+
+
+ >
);
}
diff --git a/app/mission-control/tasks/page.tsx b/app/mission-control/tasks/page.tsx
index 987f5f6..043e9c5 100644
--- a/app/mission-control/tasks/page.tsx
+++ b/app/mission-control/tasks/page.tsx
@@ -1,7 +1,8 @@
"use client";
+import BackToMC from "@/components/mission-control/BackToMC";
import { TaskCardsPanel } from "@/components/mission-control/TaskCardsPanel";
-import { useState, useEffect } from "react";
+import { useState } from "react";
import { Task, TaskStatus } from "@/lib/mission-control/types";
const SAMPLE_TASKS: Task[] = [
@@ -22,12 +23,15 @@ export default function TasksPage() {
};
return (
-
-
-
π Task Board
-
Manage tasks across all projects
+ <>
+
+
+
+
π Task Board
+
Manage tasks across all projects
+
+
-
-
+ >
);
}
diff --git a/app/mission-control/temple/page.tsx b/app/mission-control/temple/page.tsx
index 7145c2f..5e51102 100644
--- a/app/mission-control/temple/page.tsx
+++ b/app/mission-control/temple/page.tsx
@@ -1,5 +1,20 @@
-import TempleOfAIDashboard from "@/components/temple-of-ai/TempleOfAIDashboard";
+"use client";
+
+import BackToMC from "@/components/mission-control/BackToMC";
export default function TemplePage() {
- return
;
+ return (
+ <>
+
+
+
+
Temple
+
temple panel
+
+
+
+ >
+ );
}
diff --git a/app/mission-control/trading-chart/page.tsx b/app/mission-control/trading-chart/page.tsx
index dd56efc..8ad7d1d 100644
--- a/app/mission-control/trading-chart/page.tsx
+++ b/app/mission-control/trading-chart/page.tsx
@@ -1,15 +1,20 @@
"use client";
-export default function TradingChartPage() {
+import BackToMC from "@/components/mission-control/BackToMC";
+
+export default function Trading-chartPage() {
return (
-
-
-
π Trading Chart
-
BTC, ETH, SOL price charts
+ <>
+
+
+
+
Trading-chart
+
trading-chart panel
+
+
+
trading-chart loading...
+
-
-
Trading charts loading...
-
-
+ >
);
}
diff --git a/app/mission-control/trading-reports/page.tsx b/app/mission-control/trading-reports/page.tsx
index 3c8accb..d506f1c 100644
--- a/app/mission-control/trading-reports/page.tsx
+++ b/app/mission-control/trading-reports/page.tsx
@@ -1,15 +1,20 @@
"use client";
-export default function TradingReportsPage() {
+import BackToMC from "@/components/mission-control/BackToMC";
+
+export default function Trading-reportsPage() {
return (
-
-
-
π Trading Reports
-
P&L stats, win rate, trade history
+ <>
+
+
+
+
Trading-reports
+
trading-reports panel
+
+
+
trading-reports loading...
+
-
-
Trading reports loading...
-
-
+ >
);
}
diff --git a/app/mission-control/trading-tools/page.tsx b/app/mission-control/trading-tools/page.tsx
index 65b5227..e564067 100644
--- a/app/mission-control/trading-tools/page.tsx
+++ b/app/mission-control/trading-tools/page.tsx
@@ -1,15 +1,20 @@
"use client";
-export default function TradingToolsPage() {
+import BackToMC from "@/components/mission-control/BackToMC";
+
+export default function Trading-toolsPage() {
return (
-
-
-
π οΈ Trading Tools
-
Risk management, position sizing, etc.
+ <>
+
+
+
+
Trading-tools
+
trading-tools panel
+
+
+
trading-tools loading...
+
-
-
Trading tools loading...
-
-
+ >
);
}
diff --git a/app/mission-control/transcripts/page.tsx b/app/mission-control/transcripts/page.tsx
index 8551771..0273f6b 100644
--- a/app/mission-control/transcripts/page.tsx
+++ b/app/mission-control/transcripts/page.tsx
@@ -1,228 +1,20 @@
"use client";
-import { useState, useEffect } from "react";
-
-const AVAILABLE_CATEGORIES = [
- "SiteMente",
- "OpenClaw",
- "Trading",
- "Marketing",
- "Technical",
- "Voice AI",
- "Business",
- "Inspiration",
- "Personal Growth"
-];
+import BackToMC from "@/components/mission-control/BackToMC";
export default function TranscriptsPage() {
- const [transcripts, setTranscripts] = useState
([]);
- const [videoUrl, setVideoUrl] = useState("");
- const [transcriptText, setTranscriptText] = useState("");
- const [title, setTitle] = useState("");
- const [selectedCategories, setSelectedCategories] = useState([]);
- const [filterCategory, setFilterCategory] = useState("all");
- const [saving, setSaving] = useState(false);
-
- useEffect(() => {
- fetchTranscripts();
- }, []);
-
- const fetchTranscripts = async () => {
- const res = await fetch("/api/transcripts");
- const data = await res.json();
- setTranscripts(data);
- };
-
- const toggleCategory = (cat: string) => {
- setSelectedCategories(prev =>
- prev.includes(cat)
- ? prev.filter(c => c !== cat)
- : [...prev, cat]
- );
- };
-
- const saveTranscript = async () => {
- if (!videoUrl || !transcriptText) return;
- setSaving(true);
-
- const res = await fetch("/api/transcripts", {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify({
- videoUrl,
- title: title || videoUrl,
- transcript: transcriptText,
- categories: selectedCategories
- })
- });
-
- const data = await res.json();
- setSaving(false);
-
- if (data.transcripts) {
- setTranscripts(data.transcripts);
- setVideoUrl("");
- setTranscriptText("");
- setTitle("");
- setSelectedCategories([]);
- }
- };
-
- const deleteTranscript = async (videoId: string) => {
- if (!confirm("Delete this transcript?")) return;
-
- const res = await fetch("/api/transcripts", {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify({ action: "delete", videoId })
- });
-
- const data = await res.json();
- if (data.transcripts) {
- setTranscripts(data.transcripts);
- }
- };
-
- const filteredTranscripts = filterCategory === "all"
- ? transcripts
- : transcripts.filter(t => t.categories?.includes(filterCategory));
-
- const allCategories = [...new Set(transcripts.flatMap(t => t.categories || []))];
-
return (
-
-
π¬ YouTube Transcripts
-
- {/* Add New Transcript */}
-
-
Add Transcript
-
-
setVideoUrl(e.target.value)}
- placeholder="YouTube URL..."
- className="w-full px-4 py-2 bg-black/30 border border-white/20 rounded-lg text-white placeholder-white/50 mb-3"
- />
-
-
setTitle(e.target.value)}
- placeholder="Title..."
- className="w-full px-4 py-2 bg-black/30 border border-white/20 rounded-lg text-white placeholder-white/50 mb-3"
- />
-
-
-
Categories:
-
- {AVAILABLE_CATEGORIES.map(cat => (
- toggleCategory(cat)}
- className={`px-3 py-1 rounded-full text-sm ${
- selectedCategories.includes(cat)
- ? "bg-brand-pink text-white"
- : "bg-white/10 text-white/70 hover:bg-white/20"
- }`}
- >
- {cat}
-
- ))}
-
+ <>
+
+
+
+
Transcripts
+
transcripts panel
+
+
-
-
-
- {/* Filter */}
-
- setFilterCategory("all")}
- className={`px-3 py-1 rounded-full text-sm ${
- filterCategory === "all" ? "bg-brand-pink" : "bg-white/10"
- }`}
- >
- All ({transcripts.length})
-
- {allCategories.map(cat => (
- setFilterCategory(cat)}
- className={`px-3 py-1 rounded-full text-sm ${
- filterCategory === cat ? "bg-brand-pink" : "bg-white/10"
- }`}
- >
- {cat} ({transcripts.filter(t => t.categories?.includes(cat)).length})
-
- ))}
-
-
- {/* Saved Transcripts */}
-
- {filteredTranscripts.map((t: any, i: number) => (
-
-
-
-
-
- {new Date(t.savedAt).toLocaleDateString()}
-
- deleteTranscript(t.videoId)}
- className="text-red-400 hover:text-red-300"
- >
- β
-
-
-
-
-
- {t.categories?.map((c: string) => (
-
- {c}
-
- ))}
-
-
-
-
- View Transcript ({t.transcript?.length || 0} chars)
-
-
- {t.transcript}
-
-
-
- ))}
-
- {filteredTranscripts.length === 0 && (
-
No transcripts saved yet
- )}
-
-
+ >
);
}
diff --git a/app/mission-control/voice/page.tsx b/app/mission-control/voice/page.tsx
index 088130c..a6f2481 100644
--- a/app/mission-control/voice/page.tsx
+++ b/app/mission-control/voice/page.tsx
@@ -1,11 +1,20 @@
"use client";
-import VoiceChat from "@/components/mission-control/VoiceChat";
+import BackToMC from "@/components/mission-control/BackToMC";
export default function VoicePage() {
return (
-
-
-
+ <>
+
+
+ >
);
}
diff --git a/components/mission-control/BackToMC.tsx b/components/mission-control/BackToMC.tsx
new file mode 100644
index 0000000..50963be
--- /dev/null
+++ b/components/mission-control/BackToMC.tsx
@@ -0,0 +1,17 @@
+"use client";
+
+import Link from "next/link";
+
+export default function BackToMC() {
+ return (
+
+
+ β
+ Back to Mission Control
+
+
+ );
+}