feat: Infrastructure project in Mission Control + UFW firewall configured
This commit is contained in:
@@ -28,6 +28,13 @@ const projects: ProjectSummary[] = [
|
|||||||
status: "paused",
|
status: "paused",
|
||||||
color: "#6366f1",
|
color: "#6366f1",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "infrastructure",
|
||||||
|
name: "Infrastructure",
|
||||||
|
description: "Security, backups, APIs, and system config",
|
||||||
|
status: "active",
|
||||||
|
color: "#10b981",
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const statusConfig: Record<TaskStatus, { label: string; color: string; bg: string }> = {
|
const statusConfig: Record<TaskStatus, { label: string; color: string; bg: string }> = {
|
||||||
@@ -46,7 +53,7 @@ const fadeUp = {
|
|||||||
export default function MissionControlDashboard() {
|
export default function MissionControlDashboard() {
|
||||||
const { tasks, toggleTask, updateTaskStatus, getProjectProgress, getTasksByProject } =
|
const { tasks, toggleTask, updateTaskStatus, getProjectProgress, getTasksByProject } =
|
||||||
useMissionControl();
|
useMissionControl();
|
||||||
const [selectedProject, setSelectedProject] = useState<"sitemente" | "holacompi">("sitemente");
|
const [selectedProject, setSelectedProject] = useState<"sitemente" | "holacompi" | "infrastructure">("sitemente");
|
||||||
const [filter, setFilter] = useState<TaskStatus | "all">("all");
|
const [filter, setFilter] = useState<TaskStatus | "all">("all");
|
||||||
|
|
||||||
const projectTasks = getTasksByProject(selectedProject);
|
const projectTasks = getTasksByProject(selectedProject);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Mission Control Task Types
|
// Mission Control Task Types
|
||||||
|
|
||||||
export type TaskStatus = 'todo' | 'in_progress' | 'done' | 'blocked' | 'paused';
|
export type TaskStatus = 'todo' | 'in_progress' | 'done' | 'blocked' | 'paused';
|
||||||
export type ProjectType = 'sitemente' | 'holacompi';
|
export type ProjectType = 'sitemente' | 'holacompi' | 'infrastructure';
|
||||||
|
|
||||||
export interface Task {
|
export interface Task {
|
||||||
id: string;
|
id: string;
|
||||||
@@ -28,36 +28,38 @@ export interface Project {
|
|||||||
|
|
||||||
// V1 SiteMente Checklist
|
// V1 SiteMente Checklist
|
||||||
export const initialTasks: Task[] = [
|
export const initialTasks: Task[] = [
|
||||||
// Step 1: Pricing + Services (already mostly done)
|
// === 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: '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: 'todo', priority: 'high', project: 'sitemente', order: 2 },
|
||||||
|
|
||||||
// Step 2: Contact/Lead Capture
|
|
||||||
{ id: 't3', title: 'Contact/onboarding form', description: 'Lead capture: name, business type, phone, needs', status: 'todo', priority: 'high', project: 'sitemente', order: 3 },
|
{ id: 't3', title: 'Contact/onboarding form', description: 'Lead capture: name, business type, phone, needs', status: 'todo', priority: 'high', project: 'sitemente', order: 3 },
|
||||||
|
|
||||||
// Step 3: Demo Pages
|
|
||||||
{ id: 't4', title: 'Real Estate demo page', description: 'Polished vertical demo for realtors', status: 'todo', priority: 'high', project: 'sitemente', order: 4 },
|
{ 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: '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: '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: 't7', title: 'AI Widget live on landing', description: 'Embed widget on main landing page', status: 'todo', priority: 'high', project: 'sitemente', order: 7 },
|
||||||
|
|
||||||
// Step 4: How it works + FAQ
|
|
||||||
{ id: 't8', title: '"How it works" flow', description: '3-step visual flow showing the process', status: 'todo', priority: 'medium', project: 'sitemente', order: 8 },
|
{ 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: 't9', title: 'FAQ accordion', description: '6-8 key questions for objection handling', status: 'todo', priority: 'medium', project: 'sitemente', order: 9 },
|
||||||
|
|
||||||
// Step 5: Polish
|
|
||||||
{ id: 't10', title: 'Mobile responsive pass', description: 'Ensure all components work on mobile', status: 'todo', priority: 'high', project: 'sitemente', order: 10 },
|
{ 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: '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: 't12', title: 'Meta tags + SEO basics', description: 'Open Graph, Twitter cards, sitemap', status: 'todo', priority: 'medium', project: 'sitemente', order: 12 },
|
||||||
|
|
||||||
// Step 6: Go-to-market
|
|
||||||
{ id: 't13', title: 'Identify 2-3 local businesses', description: 'Target list for first pitches', status: 'todo', priority: 'high', project: 'sitemente', order: 13 },
|
{ 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: '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: 't15', title: 'First paying client', description: 'Close the first deal', status: 'todo', priority: 'critical', project: 'sitemente', order: 15 },
|
||||||
|
|
||||||
// HolaCompi (paused until SiteMente revenue)
|
// === HolaCompi (paused) ===
|
||||||
{ id: 'h1', title: 'HolaCompi core concept', description: 'AI ally for immigrants/consumers', status: 'paused', priority: 'medium', project: 'holacompi', order: 100 },
|
{ 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 from HolaCompi 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 },
|
||||||
];
|
];
|
||||||
|
|
||||||
// Lightweight project summary (used in UI, not stored)
|
// Lightweight project summary (used in UI, not stored)
|
||||||
|
|||||||
Reference in New Issue
Block a user