Add LICENSE, README, and Docs tab to Mission Control

This commit is contained in:
root
2026-02-22 07:33:18 +00:00
parent 3e7b457d5f
commit 0817444dc5
68 changed files with 6677 additions and 1673 deletions
+79
View File
@@ -0,0 +1,79 @@
export type SiteMenteMessage = {
role: "user" | "assistant" | "system";
content: string;
};
export type SiteMenteSpeechResult = {
audioBytes: Uint8Array;
mimeType: string;
};
const TEXT_MODEL = "MiniMax-M2.5";
const API_KEY = process.env.MINIMAX_API_KEY || "sk-cp-q8FpnlRzqa2oHVrHYVKXgCDAltN85KdsiSqAzRZeP6zvSSauupHu4ffVPKLgVWFz534az2lgM39T6ReXUvfT-8sUlQd9faush2Kr3KNmykoJNNgE8IET73Q";
const MINIMAX_API_BASE = "https://api.minimax.io/v1";
const SYSTEM_PROMPT = `You are SiteMente, an AI site strategist that helps business owners make their websites think like a smart assistant.
You deeply understand landing pages, funnels, customer psychology, and automation.
You recommend specific AI Minds, suggest copy and UX changes, and ask focused clarifying questions before proposing changes.
Keep answers concise, practical, and business-oriented.`;
export const generateSiteMenteText = async (
messages: SiteMenteMessage[]
): Promise<string> => {
try {
// Build messages - add system prompt if not present
const hasSystem = messages.some((m) => m.role === "system");
// Filter and format messages
const contents = messages
.filter((m) => m.role !== "system")
.map((m) => ({
role: m.role === "assistant" ? "assistant" : "user",
content: m.content,
}));
// Add system instruction
if (!hasSystem) {
contents.unshift({ role: "system", content: SYSTEM_PROMPT });
}
const response = await fetch(`${MINIMAX_API_BASE}/text/chatcompletion_v2`, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${API_KEY}`,
},
body: JSON.stringify({
model: TEXT_MODEL,
messages: contents,
max_tokens: 1024,
}),
});
if (!response.ok) {
const errorText = await response.text();
throw new Error(`MiniMax API error: ${response.status} - ${errorText}`);
}
const data = await response.json();
const text = data?.choices?.[0]?.message?.content;
if (!text) {
throw new Error("MiniMax returned an empty response.");
}
return text;
} catch (error) {
console.error("[SiteMente][MiniMax] Text generation failed", error);
throw error;
}
};
export const generateSiteMenteSpeech = async (
text: string
): Promise<SiteMenteSpeechResult> => {
// MiniMax doesn't have built-in TTS in their text API
// Vapi handles voice output on their end
throw new Error("TTS not implemented - Vapi handles voice output");
};
+4 -5
View File
@@ -1,8 +1,7 @@
import {
generateSiteMenteSpeech,
generateSiteMenteText,
type SiteMenteMessage,
} from "./geminiClient";
} from "./minimaxClient";
export type SiteMenteTextRequest = {
messages: SiteMenteMessage[];
@@ -49,13 +48,13 @@ export const runSiteMenteVoiceTurn = async (
{ role: "user", content: request.transcript },
];
const reply = await generateSiteMenteText(withSystemPrompt(messages));
const audio = await generateSiteMenteSpeech(reply);
// Return text only - Vapi handles voice output on their end
return {
reply,
audio: {
data: Buffer.from(audio.audioBytes).toString("base64"),
mimeType: audio.mimeType,
data: "",
mimeType: "audio/mp3",
},
};
};
+41 -9
View File
@@ -1,4 +1,4 @@
// Agent Types for Council
// Agent Types for Council - SiteMente Ecosystem
export interface Agent {
id: string;
@@ -20,42 +20,71 @@ export interface AgentTeam {
}
export const defaultTeams: AgentTeam[] = [
// === HORUS - Master Orchestrator ===
{
id: "horus-team",
name: "Horus Command",
icon: "👁️",
description: "Lead orchestrator - delegates to all agents",
agents: [
{ id: "horus", name: "Horus", role: "Master Orchestrator", description: "Command center, delegates tasks, manages all agents", status: "idle", project: "horus" },
],
},
// === SiteMente Squad ===
{
id: "sitemente-squad",
name: "SiteMente Squad",
icon: "🌐",
description: "Building and growing SiteMente B2B platform",
agents: [
{ id: "sm-architect", name: "Architect", role: "PM & Architecture", description: "Planning, architecture, task breakdown", status: "idle", project: "sitemente" },
{ id: "sm-frontend", name: "Frontend Dev", role: "UI/UX Implementation", description: "React, Next.js, components", status: "idle", project: "sitemente" },
{ id: "sm-ai", name: "AI Engineer", role: "LLM & Voice Integration", description: "Gemini, voice agents, widgets", status: "idle", project: "sitemente" },
{ id: "sm-seo", name: "SEO Specialist", role: "Content & Copy", description: "SEO, content, marketing copy", status: "idle", project: "sitemente" },
{ id: "thoth", name: "Thoth", role: "Strategy & Research", description: "SiteMente planning, research, analysis", status: "idle", project: "sitemente" },
{ id: "ptah", name: "Ptah", role: "Dev \& Ops", description: "Development, deployment, technical implementation", status: "idle", project: "sitemente" },
{ id: "seshat", name: "Seshat", role: "Content \& SEO", description: "Content strategy, SEO, marketing copy", status: "idle", project: "sitemente" },
{ id: "anubis", name: "Anubis", role: "Outreach \& Growth", description: "Lead generation, client acquisition", status: "idle", project: "sitemente" },
],
},
// === Trading Squad ===
{
id: "trading-squad",
name: "Trading Squad",
icon: "📈",
description: "Crypto market research and trade execution",
agents: [
{ id: "thoth-trading", name: "Thoth Trading", role: "Research \& Analysis", description: "Market research, chart analysis", status: "idle", project: "trading" },
{ id: "sekhmet", name: "Sekhmet", role: "Trade Executor", description: "Risk management, position sizing", status: "idle", project: "trading" },
],
},
// === HolaCompi Squad (Paused) ===
{
id: "holacompi-squad",
name: "HolaCompi Squad",
icon: "🤝",
description: "Consumer AI ally (paused until revenue)",
agents: [
{ id: "hc-product", name: "Product Manager", role: "Flows & UX", description: "User flows, product decisions", status: "idle", project: "holacompi" },
{ id: "hc telephony", name: "Telephony Engineer", role: "Voice & Telco", description: "Telnyx, Vapi, phone lines", status: "idle", project: "holacompi" },
{ id: "hc-product", name: "Product Manager", role: "Flows \& UX", description: "User flows, product decisions", status: "idle", project: "holacompi" },
{ id: "hc-telephony", name: "Telephony Engineer", role: "Voice \& Telco", description: "Telnyx, Vapi, phone lines", status: "idle", project: "holacompi" },
{ id: "hc-voice", name: "Voice UX", role: "Conversation Design", description: "Dialogues, prompts, voice UX", status: "idle", project: "holacompi" },
],
},
// === Infrastructure ===
{
id: "infrastructure-team",
name: "Infrastructure",
icon: "🔧",
description: "Security, backups, and system ops",
agents: [
{ id: "infra-sec", name: "Security Lead", role: "Hardening & Audits", description: "UFW, SSH, security audits", status: "idle", project: "infrastructure" },
{ id: "infra-backup", name: "Backup Manager", role: "Backup & Recovery", description: "Auto backups, cloud sync", status: "idle", project: "infrastructure" },
{ id: "infra-sec", name: "Security Lead", role: "Hardening \& Audits", description: "UFW, SSH, security audits", status: "idle", project: "infrastructure" },
{ id: "infra-ops", name: "Ops Manager", role: "DevOps \& Backups", description: "Deployments, backups, monitoring", status: "idle", project: "infrastructure" },
],
},
];
export const agentRoles = [
{ id: "orchestrator", name: "Orchestrator", icon: "👁️" },
{ id: "architect", name: "Architect / PM", icon: "📋" },
{ id: "frontend", name: "Frontend Dev", icon: "🎨" },
{ id: "backend", name: "Backend Dev", icon: "⚙️" },
@@ -64,4 +93,7 @@ export const agentRoles = [
{ id: "product", name: "Product Manager", icon: "📦" },
{ id: "security", name: "Security", icon: "🛡️" },
{ id: "devops", name: "DevOps", icon: "🚀" },
{ id: "trader", name: "Trader", icon: "📈" },
{ id: "researcher", name: "Researcher", icon: "🔍" },
{ id: "outreach", name: "Outreach", icon: "📣" },
];
+47 -25
View File
@@ -1,7 +1,7 @@
// Mission Control Task Types
export type TaskStatus = 'todo' | 'in_progress' | 'done' | 'blocked' | 'paused';
export type ProjectType = 'sitemente' | 'holacompi' | 'infrastructure';
export type ProjectType = 'sitemente' | 'holacompi' | 'infrastructure' | 'arabredox' | 'trading';
export interface Task {
id: string;
@@ -26,43 +26,65 @@ export interface Project {
color: string;
}
// V1 SiteMente Checklist
// SiteMente & Operations Task List
export const initialTasks: Task[] = [
// === SiteMente v1 ===
{ id: 't1', title: 'Pricing + Services section', description: '3 tiers + vertical packs + yearly toggle', status: 'done', priority: 'high', project: 'sitemente', order: 1, completedAt: '2026-02-16' },
{ id: 't2', title: 'Vertical pack cards', description: 'Real Estate, Restaurant, Clinic as distinct upsells', status: 'todo', priority: 'high', project: 'sitemente', order: 2 },
{ id: 't2', title: 'Vertical pack cards', description: 'Real Estate, Restaurant, Clinic as distinct upsells', status: 'done', priority: 'high', project: 'sitemente', order: 2, completedAt: '2026-02-17' },
{ id: 't3', title: 'Contact/onboarding form', description: 'Lead capture: name, business type, phone, needs', status: 'todo', priority: 'high', project: 'sitemente', order: 3 },
{ id: 't4', title: 'Real Estate demo page', description: 'Polished vertical demo for realtors', status: 'todo', priority: 'high', project: 'sitemente', order: 4 },
{ id: 't5', title: 'Restaurant demo page', description: 'Polished vertical demo for restaurants', status: 'todo', priority: 'medium', project: 'sitemente', order: 5 },
{ id: 't6', title: 'Clinic demo page', description: 'Polished vertical demo for clinics', status: 'todo', priority: 'low', project: 'sitemente', order: 6 },
{ id: 't7', title: 'AI Widget live on landing', description: 'Embed widget on main landing page', status: 'todo', priority: 'high', project: 'sitemente', order: 7 },
{ id: 't4', title: 'Real Estate demo page', description: 'Polished vertical demo for realtors', status: 'done', priority: 'high', project: 'sitemente', order: 4, completedAt: '2026-02-17' },
{ id: 't5', title: 'Restaurant demo page', description: 'Polished vertical demo for restaurants', status: 'done', priority: 'medium', project: 'sitemente', order: 5, completedAt: '2026-02-17' },
{ id: 't6', title: 'Clinic demo page', description: 'Polished vertical demo for clinics', status: 'done', priority: 'low', project: 'sitemente', order: 6, completedAt: '2026-02-17' },
{ id: 't7', title: 'AI Voice Widget - Vapi integration', description: 'Embed voice widget with MiniMax brain', status: 'in_progress', priority: 'high', project: 'sitemente', order: 7 },
{ id: 't8', title: '"How it works" flow', description: '3-step visual flow showing the process', status: 'todo', priority: 'medium', project: 'sitemente', order: 8 },
{ id: 't9', title: 'FAQ accordion', description: '6-8 key questions for objection handling', status: 'todo', priority: 'medium', project: 'sitemente', order: 9 },
{ id: 't10', title: 'Mobile responsive pass', description: 'Ensure all components work on mobile', status: 'todo', priority: 'high', project: 'sitemente', order: 10 },
{ id: 't11', title: 'Loading states / transitions', description: 'Add skeleton loaders and smooth transitions', status: 'todo', priority: 'low', project: 'sitemente', order: 11 },
{ id: 't12', title: 'Meta tags + SEO basics', description: 'Open Graph, Twitter cards, sitemap', status: 'todo', priority: 'medium', project: 'sitemente', order: 12 },
{ id: 't13', title: 'Identify 2-3 local businesses', description: 'Target list for first pitches', status: 'todo', priority: 'high', project: 'sitemente', order: 13 },
{ id: 't14', title: '1-pager PDF or demo link', description: 'Leave-behind for prospects', status: 'todo', priority: 'high', project: 'sitemente', order: 14 },
{ id: 't15', title: 'First paying client', description: 'Close the first deal', status: 'todo', priority: 'critical', project: 'sitemente', order: 15 },
{ id: 't11', title: 'SSL + Domain setup', description: 'SiteMente.com with Lets Encrypt SSL', status: 'done', priority: 'critical', project: 'sitemente', order: 11, completedAt: '2026-02-20' },
{ id: 't12', title: 'Meta tags + SEO basics', description: 'Open Graph, Twitter cards, sitemap', status: 'done', priority: 'medium', project: 'sitemente', order: 12, completedAt: '2026-02-17' },
{ id: 't13', title: 'Stripe payments', description: 'Payment processing for subscriptions', status: 'done', priority: 'high', project: 'sitemente', order: 13, completedAt: '2026-02-16' },
{ id: 't14', title: 'CRM + Leads system', description: 'Lead capture and management', status: 'done', priority: 'high', project: 'sitemente', order: 14, completedAt: '2026-02-16' },
{ id: 't15', title: 'Identify local businesses', description: 'Target list for first pitches', status: 'todo', priority: 'high', project: 'sitemente', order: 15 },
{ id: 't16', title: '1-pager PDF or demo link', description: 'Leave-behind for prospects', status: 'todo', priority: 'high', project: 'sitemente', order: 16 },
{ id: 't17', title: 'First paying client', description: 'Close the first deal', status: 'todo', priority: 'critical', project: 'sitemente', order: 17 },
{ id: 't18', title: 'Voice AI - fix Vapi webhook', description: 'Get Vapi to call /api/site-mente/voice', status: 'todo', priority: 'critical', project: 'sitemente', order: 18 },
// === HolaCompi (paused) ===
{ id: 'h1', title: 'HolaCompi core concept', description: 'AI ally for immigrants/consumers', status: 'paused', priority: 'medium', project: 'holacompi', order: 100 },
{ id: 'h2', title: 'Cross-sell to SiteMente businesses', description: 'Route leads from HolaCompi to SiteMente clients', status: 'paused', priority: 'medium', project: 'holacompi', order: 101 },
{ id: 'h2', title: 'Cross-sell to SiteMente businesses', description: 'Route leads to SiteMente clients', status: 'paused', priority: 'medium', project: 'holacompi', order: 101 },
// === Infrastructure & Security ===
{ id: 'i1', title: 'Configure UFW firewall', description: 'Enable UFW, allow SSH (22) and web (80, 443)', status: 'todo', priority: 'high', project: 'infrastructure', order: 200 },
{ id: 'i2', title: 'Restrict port 3000', description: 'Only allow localhost for dev server', status: 'todo', priority: 'high', project: 'infrastructure', order: 201 },
{ id: 'i3', title: 'Set up SSH key-only auth', description: 'Disable password login, use keys only', status: 'todo', priority: 'high', project: 'infrastructure', order: 202 },
{ id: 'i4', title: 'Enable automatic security updates', description: 'Configure unattended-upgrades', status: 'todo', priority: 'medium', project: 'infrastructure', order: 203 },
{ id: 'i5', title: 'Set up automated backups', description: 'Daily backup to local + cloud (Dropbox/Google Drive)', status: 'todo', priority: 'high', project: 'infrastructure', order: 204 },
{ id: 'i6', title: 'Configure Brave Search API', description: 'Enable web research for AI-powered searches', status: 'todo', priority: 'medium', project: 'infrastructure', order: 205 },
{ id: 'i7', title: 'Configure Weather API', description: 'OpenWeatherMap for morning brief', status: 'todo', priority: 'medium', project: 'infrastructure', order: 206 },
{ id: 'i8', title: 'Configure News API', description: 'AI and market news for morning brief', status: 'todo', priority: 'medium', project: 'infrastructure', order: 207 },
{ id: 'i9', title: 'Connect Things 3 or Todoist', description: 'Import tasks for morning brief', status: 'todo', priority: 'medium', project: 'infrastructure', order: 208 },
{ id: 'i10', title: 'Hardening health check', description: 'Run full security audit and apply fixes', status: 'todo', priority: 'high', project: 'infrastructure', order: 209 },
// === Infrastructure ===
{ id: 'i1', title: 'Configure UFW firewall', description: 'Enable UFW, allow SSH and web', status: 'done', priority: 'high', project: 'infrastructure', order: 200, completedAt: '2026-02-13' },
{ id: 'i2', title: 'Restrict port 3000', description: 'Only allow localhost for dev', status: 'done', priority: 'high', project: 'infrastructure', order: 201, completedAt: '2026-02-13' },
{ id: 'i3', title: 'Set up SSH key-only auth', description: 'Disable password login', status: 'todo', priority: 'high', project: 'infrastructure', order: 202 },
{ id: 'i4', title: 'Auto security updates', description: 'Configure unattended-upgrades', status: 'done', priority: 'medium', project: 'infrastructure', order: 203, completedAt: '2026-02-13' },
{ id: 'i5', title: 'Set up backups', description: 'Daily backup to local + cloud', status: 'todo', priority: 'high', project: 'infrastructure', order: 204 },
{ id: 'i6', title: 'Morning Brief cron', description: 'Daily 6am CET to Telegram', status: 'done', priority: 'high', project: 'infrastructure', order: 205, completedAt: '2026-02-20' },
{ id: 'i7', title: 'Install trading skills', description: 'Coingecko, eth-readonly, x-twitter', status: 'done', priority: 'medium', project: 'infrastructure', order: 206, completedAt: '2026-02-20' },
{ id: 'i8', title: 'Security health check', description: 'Run full audit and apply fixes', status: 'todo', priority: 'high', project: 'infrastructure', order: 207 },
// === ArabRedox ===
{ id: 'a1', title: 'Brand colors from logo', description: 'Extract HEX codes from logo', status: 'done', priority: 'critical', project: 'arabredox', order: 300, completedAt: '2026-02-17' },
{ id: 'a2', title: 'Upload logo to Hostinger', description: 'Upload to Horizons AI builder', status: 'done', priority: 'critical', project: 'arabredox', order: 301, completedAt: '2026-02-17' },
{ id: 'a3', title: 'Apply brand colors', description: 'Set in Hostinger Styles', status: 'done', priority: 'high', project: 'arabredox', order: 302, completedAt: '2026-02-17' },
{ id: 'a4', title: 'Hero section', description: 'Future of Health messaging', status: 'done', priority: 'high', project: 'arabredox', order: 303, completedAt: '2026-02-17' },
{ id: 'a5', title: 'Science section', description: 'Arabic/English Redox explanation', status: 'done', priority: 'high', project: 'arabredox', order: 304, completedAt: '2026-02-17' },
{ id: 'a6', title: 'Opportunity section', description: 'Financial Freedom messaging', status: 'done', priority: 'high', project: 'arabredox', order: 305, completedAt: '2026-02-17' },
{ id: 'a7', title: 'Products section', description: 'Display Redox products', status: 'done', priority: 'medium', project: 'arabredox', order: 306, completedAt: '2026-02-17' },
{ id: 'a8', title: 'Testimonials section', description: 'Customer stories', status: 'done', priority: 'medium', project: 'arabredox', order: 307, completedAt: '2026-02-17' },
{ id: 'a9', title: 'Genesis story section', description: 'People over pharma', status: 'done', priority: 'medium', project: 'arabredox', order: 308, completedAt: '2026-02-17' },
{ id: 'a10', title: 'Global reach section', description: '29+ countries', status: 'done', priority: 'medium', project: 'arabredox', order: 309, completedAt: '2026-02-17' },
{ id: 'a11', title: 'Contact/Join pages', description: 'Join Mission + Shop Now', status: 'done', priority: 'high', project: 'arabredox', order: 310, completedAt: '2026-02-17' },
{ id: 'a12', title: 'Point domain', description: 'ArabRedox.com to Hostinger', status: 'done', priority: 'high', project: 'arabredox', order: 311, completedAt: '2026-02-17' },
{ id: 'a13', title: 'Launch & test', description: 'Final QA and go live', status: 'done', priority: 'critical', project: 'arabredox', order: 312, completedAt: '2026-02-17' },
// === Trading ===
{ id: 'tr1', title: 'Trading infrastructure', description: 'API keys, monitoring, alerts', status: 'todo', priority: 'high', project: 'trading', order: 400 },
{ id: 'tr2', title: 'Risk parameters', description: 'Position size, stop loss, take profit', status: 'todo', priority: 'critical', project: 'trading', order: 401 },
{ id: 'tr3', title: 'Learn DopeTrades strategy', description: 'Watch videos, extract patterns', status: 'todo', priority: 'high', project: 'trading', order: 402 },
{ id: 'tr4', title: 'Paper trading phase', description: 'Test without real money', status: 'todo', priority: 'high', project: 'trading', order: 403 },
{ id: 'tr5', title: 'Live trading', description: 'Start with minimal SOL', status: 'todo', priority: 'medium', project: 'trading', order: 404 },
];
// Lightweight project summary (used in UI, not stored)
export interface ProjectSummary {
id: ProjectType;
name: string;
+15
View File
@@ -109,6 +109,21 @@ export function MorningBriefProvider({ children }: { children: ReactNode }) {
"Crypto Treasury Meeting (2:00 PM ET)",
],
},
// Load OpenClaw use cases from memory/cron
openclowUseCases: (() => {
try {
const oc = localStorage.getItem("sitemente:openclaw-usecases");
if (oc) return JSON.parse(oc);
} catch (e) {}
return {
topUseCases: ["PR Review Automation", "Browser Shopping", "Wine Cellar CSV"],
skillIdeas: [
{ name: "Auto-Shop", selected: false },
{ name: "Wine Cellar", selected: false },
{ name: "Health Dashboard", selected: false }
],
};
})(),
};
setBriefs((prev) => {
+8 -1
View File
@@ -40,6 +40,12 @@ export interface MorningBrief {
topNews: string[];
events: string[];
};
// OpenClaw Use Cases (from daily research)
openclowUseCases?: {
topUseCases: string[];
skillIdeas: { name: string; selected: boolean }[];
};
}
export const defaultBrief: MorningBrief = {
@@ -55,5 +61,6 @@ export const defaultBrief: MorningBrief = {
sentiment: 'neutral',
topNews: [],
events: [],
}
},
openclowUseCases: { topUseCases: [], skillIdeas: [] },
};