documentmission-control.html2/24/2026, 3:19:17 AM

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Mission Control | Tim's Command Center</title>

<link rel="preconnect" href="https://fonts.googleapis.com">

<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">

<style>

:root {

--bg-primary: #050508;

--bg-secondary: #0a0a0f;

--bg-card: rgba(20, 20, 30, 0.6);

--bg-card-hover: rgba(25, 25, 40, 0.7);

--border-subtle: rgba(255, 255, 255, 0.06);

--border-accent: rgba(255, 255, 255, 0.12);

--text-primary: #ffffff;

--text-secondary: rgba(255, 255, 255, 0.6);

--text-muted: rgba(255, 255, 255, 0.4);

--accent-green: #22c55e;

--accent-green-dim: rgba(34, 197, 94, 0.15);

--accent-green-glow: rgba(34, 197, 94, 0.4);

--danger: #ef4444;

--warning: #f59e0b;

--priority-high: #ef4444;

--priority-medium: #f59e0b;

--priority-low: #22c55e;

--header-height: 72px;

--radius-sm: 8px;

--radius-md: 12px;

--radius-lg: 16px;

}

* { margin: 0; padding: 0; box-sizing: border-box; }

body { font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif; background: var(--bg-primary); color: var(--text-primary); min-height: 100vh; line-height: 1.6; -webkit-font-smoothing: antialiased; }

@keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }

@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }

.fade-in-up { animation: fadeInUp 0.5s ease forwards; }

.delay-1 { animation-delay: 0.1s; }

.delay-2 { animation-delay: 0.2s; }

.delay-3 { animation-delay: 0.3s; }

.delay-4 { animation-delay: 0.4s; }

.app-container { min-height: 100vh; background: radial-gradient(ellipse at 20% 0%, rgba(34, 197, 94, 0.08) 0%, transparent 50%), radial-gradient(ellipse at 80% 100%, rgba(34, 197, 94, 0.05) 0%, transparent 50%), var(--bg-primary); }

.main-content { max-width: 1600px; margin: 0 auto; padding: calc(var(--header-height) + 2.5rem) 2.5rem 2.5rem; }

.header { position: fixed; top: 0; left: 0; right: 0; height: var(--header-height); background: rgba(5, 5, 8, 0.8); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border-bottom: 1px solid var(--border-subtle); display: flex; align-items: center; justify-content: space-between; padding: 0 2.5rem; z-index: 1000; }

.logo { display: flex; align-items: center; gap: 0.5rem; font-weight: 700; font-size: 1.25rem; letter-spacing: -0.02em; }

.logo-icon { width: 36px; height: 36px; background: linear-gradient(135deg, var(--accent-green), #16a34a); border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; }

.header-center { display: flex; gap: 4px; background: var(--bg-secondary); padding: 4px; border-radius: var(--radius-md); border: 1px solid var(--border-subtle); }

.tab-btn { padding: 0.5rem 1.5rem; background: transparent; border: none; color: var(--text-secondary); font-family: inherit; font-size: 0.9rem; font-weight: 500; cursor: pointer; border-radius: var(--radius-sm); transition: all 150ms ease; }

.tab-btn:hover { color: var(--text-primary); background: rgba(255, 255, 255, 0.05); }

.tab-btn.active { background: var(--accent-green-dim); color: var(--accent-green); }

.header-right { display: flex; align-items: center; gap: 1.5rem; }

.search-container { position: relative; }

.search-input { width: 280px; padding: 0.5rem 1rem 0.5rem 2.5rem; background: var(--bg-secondary); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); color: var(--text-primary); font-family: inherit; font-size: 0.875rem; outline: none; transition: all 150ms ease; }

.search-input::placeholder { color: var(--text-muted); }

.search-input:focus { border-color: var(--accent-green); box-shadow: 0 0 0 3px var(--accent-green-dim); }

.search-icon { position: absolute; left: 0.75rem; top: 50%; transform: translateY(-50%); color: var(--text-muted); pointer-events: none; }

.search-shortcut { position: absolute; right: 0.75rem; top: 50%; transform: translateY(-50%); padding: 2px 6px; background: var(--border-subtle); border-radius: 4px; font-size: 0.7rem; color: var(--text-muted); }

.status-container { display: flex; align-items: center; gap: 0.5rem; }

.status-dot { width: 10px; height: 10px; background: var(--accent-green); border-radius: 50%; box-shadow: 0 0 10px var(--accent-green-glow); animation: pulse 2s ease-in-out infinite; }

.status-text { font-size: 0.8rem; color: var(--text-secondary); font-weight: 500; }

.tab-content { display: none; animation: fadeInUp 0.4s ease; }

.tab-content.active { display: block; }

.welcome-bar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem; opacity: 0; animation: fadeInUp 0.5s ease forwards; }

.welcome-text h1 { font-size: 1.75rem; font-weight: 600; letter-spacing: -0.02em; margin-bottom: 0.25rem; }

.welcome-text p { color: var(--text-secondary); font-size: 0.95rem; }

.date-time { text-align: right; }

.date-time .time { font-size: 1.5rem; font-weight: 600; }

.date-time .date { font-size: 0.875rem; color: var(--text-secondary); }

.metrics-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.5rem; margin-bottom: 2rem; }

.metric-card { background: var(--bg-card); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: 1.5rem; position: relative; overflow: hidden; opacity: 0; animation: fadeInUp 0.5s ease forwards; transition: all 250ms ease; }

.metric-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: var(--accent-green); }

.metric-card:hover { background: var(--bg-card-hover); border-color: var(--border-accent); transform: translateY(-2px); }

.metric-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; }

.metric-icon { width: 40px; height: 40px; background: var(--accent-green-dim); border-radius: var(--radius-sm); display: flex; align-items: center; justify-content: center; font-size: 1.25rem; }

.metric-trend { display: flex; align-items: center; gap: 0.25rem; font-size: 0.8rem; font-weight: 500; }

.metric-trend.up { color: var(--accent-green); }

.metric-value { font-size: 2rem; font-weight: 700; letter-spacing: -0.02em; margin-bottom: 0.25rem; }

.metric-label { color: var(--text-secondary); font-size: 0.875rem; }

.dashboard-sections { display: grid; grid-template-columns: 2fr 1fr; gap: 1.5rem; }

.section-card { background: var(--bg-card); backdrop-filter: blur(20px); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: 1.5rem; opacity: 0; animation: fadeInUp 0.5s ease forwards; }

.section-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1.5rem; }

.section-title { font-size: 1rem; font-weight: 600; display: flex; align-items: center; gap: 0.5rem; }

.btn { padding: 0.5rem 1rem; background: var(--accent-green-dim); border: none; border-radius: var(--radius-sm); color: var(--accent-green); font-family: inherit; font-size: 0.8rem; font-weight: 500; cursor: pointer; transition: all 150ms ease; display: flex; align-items: center; gap: 0.25rem; }

.btn:hover { background: var(--accent-green); color: var(--bg-primary); }

.activity-feed { max-height: 400px; overflow-y: auto; }

.activity-feed::-webkit-scrollbar { width: 4px; }

.activity-feed::-webkit-scrollbar-track { background: transparent; }

.activity-feed::-webkit-scrollbar-thumb { background: var(--border-subtle); border-radius: 2px; }

.activity-item { display: flex; gap: 1rem; padding: 0.75rem 0; border-bottom: 1px solid var(--border-subtle); }

.activity-item:last-child { border-bottom: none; }

.activity-dot { width: 8px; height: 8px; background: var(--accent-green); border-radius: 50%; margin-top: 6px; flex-shrink: 0; }

.activity-content { flex: 1; }

.activity-text { font-size: 0.9rem; margin-bottom: 0.25rem; }

.activity-time { font-size: 0.75rem; color: var(--text-muted); }

.priorities-list { list-style: none; }

.priority-item { display: flex; align-items: center; gap: 0.75rem; padding: 0.5rem 0; border-bottom: 1px solid var(--border-subtle); }

.priority-item:last-child { border-bottom: none; }

.priority-checkbox { width: 18px; height: 18px; border: 2px solid var(--border-accent); border-radius: 4px; cursor: pointer; transition: all 150ms ease; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }

.priority-checkbox:hover { border-color: var(--accent-green); }

.priority-checkbox.checked { background: var(--accent-green); border-color: var(--accent-green); }

.priority-checkbox.checked::after { content: '✓'; color: var(--bg-primary); font-size: 0.7rem; font-weight: bold; }

.priority-text { flex: 1; font-size: 0.9rem; }

.priority-text.completed { text-decoration: line-through; color: var(--text-muted); }

.priority-delete { opacity: 0; color: var(--text-muted); cursor: pointer; transition: all 150ms ease; }

.priority-item:hover .priority-delete { opacity: 1; }

.priority-delete:hover { color: var(--danger); }

.add-priority-form { display: flex; gap: 0.5rem; margin-top: 1rem; }

.add-priority-input { flex: 1; padding: 0.5rem 0.75rem; background: var(--bg-secondary); border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); color: var(--text-primary); font-family: inherit; font-size: 0.875rem; outline: none; }

.add-priority-input::placeholder { color: var(--text-muted); }

.kanban-board { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.5rem; min-height: calc(100vh - 200px); }

.kanban-column { background: var(--bg-card); backdrop-filter: blur(20px); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: 1.5rem; display: flex; flex-direction: column; opacity: 0; animation: fadeInUp 0.5s ease forwards; }

.kanban-column:nth-child(1) { animation-delay: 0.1s; }

.kanban-column:nth-child(2) { animation-delay: 0.2s; }

.kanban-column:nth-child(3) { animation-delay: 0.3s; }

.column-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1.5rem; padding-bottom: 1rem; border-bottom: 1px solid var(--border-subtle); }

.column-title { font-weight: 600; display: flex; align-items: center; gap: 0.5rem; }

.column-count { background: var(--bg-secondary); padding: 2px 8px; border-radius: 10px; font-size: 0.75rem; color: var(--text-muted); }

.task-list { flex: 1; overflow-y: auto; min-height: 200px; }

.task-card { background: var(--bg-secondary); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); padding: 1rem; margin-bottom: 0.5rem; cursor: pointer; transition: all 150ms ease; position: relative; }

.task-card:hover { border-color: var(--border-accent); transform: translateY(-2px); }

.task-title { font-weight: 500; margin-bottom: 0.25rem; padding-right: 1.5rem; }

.task-description { font-size: 0.8rem; color: var(--text-secondary); margin-bottom: 0.5rem; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }

.task-meta { display: flex; align-items: center; justify-content: space-between; }

.task-priority { padding: 2px 8px; border-radius: 4px; font-size: 0.7rem; font-weight: 500; text-transform: uppercase; }

.task-priority.high { background: rgba(239, 68, 68, 0.15); color: var(--priority-high); }

.task-priority.medium { background: rgba(245, 158, 11, 0.15); color: var(--priority-medium); }

.task-priority.low { background: var(--accent-green-dim); color: var(--accent-green); }

.task-date { font-size: 0.7rem; color: var(--text-muted); }

.task-delete { position: absolute; top: 0.5rem; right: 0.5rem; opacity: 0; color: var(--text-muted); cursor: pointer; transition: all 150ms ease; }

.task-card:hover .task-delete { opacity: 1; }

.task-delete:hover { color: var(--danger); }

.add-task-btn { width: 100%; padding: 1rem; background: transparent; border: 1px dashed var(--border-subtle); border-radius: var(--radius-md); color: var(--text-muted); font-family: inherit; font-size: 0.875rem; cursor: pointer; transition: all 150ms ease; margin-top: 0.5rem; }

.add-task-btn:hover { border-color: var(--accent-green); color: var(--accent-green); }

.modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.7); backdrop-filter: blur(4px); display: flex; align-items: center; justify-content: center; z-index: 2000; opacity: 0; visibility: hidden; transition: all 250ms ease; }

.modal-overlay.active { opacity: 1; visibility: visible; }

.modal { background: var(--bg-secondary); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: 2rem; width: 100%; max-width: 500px; transform: scale(0.95); transition: all 250ms ease; }

.modal-overlay.active .modal { transform: scale(1); }

.modal-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1.5rem; }

.modal-title { font-size: 1.25rem; font-weight: 600; }

.modal-close { background: none; border: none; color: var(--text-muted); font-size: 1.5rem; cursor: pointer; transition: all 150ms ease; }

.modal-close:hover { color: var(--text-primary); }

.form-group { margin-bottom: 1.5rem; }

.form-label { display: block; font-size: 0.875rem; font-weight: 500; margin-bottom: 0.5rem; color: var(--text-secondary); }

.form-input, .form-select, .form-textarea { width: 100%; padding: 0.75rem; background: var(--bg-primary); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); color: var(--text-primary); font-family: inherit; font-size: 0.9rem; outline: none; transition: all 150ms ease; }

.form-input:focus, .form-select:focus, .form-textarea:focus { border-color: var(--accent-green); box-shadow: 0 0 0 3px var(--accent-green-dim); }

.form-textarea { min-height: 100px; resize: vertical; }

.modal-actions { display: flex; gap: 1rem; justify-content: flex-end; }

.btn-secondary { padding: 0.5rem 1.5rem; background: var(--bg-primary); border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); color: var(--text-secondary); font-family: inherit; font-size: 0.875rem; font-weight: 500; cursor: pointer; transition: all 150ms ease; }

.btn-secondary:hover { border-color: var(--border-accent); color: var(--text-primary); }

.timeline-container { max-width: 900px; margin: 0 auto; }

.timeline-phase { background: var(--bg-card); backdrop-filter: blur(20px); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: 2rem; margin-bottom: 1.5rem; position: relative; opacity: 0; animation: fadeInUp 0.5s ease forwards; }

.timeline-phase:nth-child(1) { animation-delay: 0.1s; }

.timeline-phase:nth-child(2) { animation-delay: 0.2s; }

.timeline-phase:nth-child(3) { animation-delay: 0.3s; }

.timeline-phase:nth-child(4) { animation-delay: 0.4s; }

.timeline-phase.active { border-color: var(--accent-green); box-shadow: 0 0 30px var(--accent-green-dim); }

.phase-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; }

.phase-title { font-size: 1.25rem; font-weight: 600; display: flex; align-items: center; gap: 1rem; }

.phase-badge { padding: 4px 12px; background: var(--accent-green-dim); color: var(--accent-green); border-radius: 20px; font-size: 0.75rem; font-weight: 500; }

.phase-date { color: var(--text-secondary); font-size: 0.875rem; }

.phase-description { color: var(--text-secondary); margin-bottom: 1.5rem; padding-bottom: 1.5rem; border-bottom: 1px solid var(--border-subtle); }

.milestones-list { list-style: none; }

.milestone-item { display: flex; align-items: center; gap: 0.75rem; padding: 0.5rem 0; }

.milestone-checkbox { width: 20px; height: 20px; border: 2px solid var(--border-accent); border-radius: 4px; cursor: pointer; transition: all 150ms ease; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }

.milestone-checkbox:hover { border-color: var(--accent-green); }

.milestone-checkbox.checked { background: var(--accent-green); border-color: var(--accent-green); }

.milestone-checkbox.checked::after { content: '✓'; color: var(--bg-primary); font-size: 0.75rem; font-weight: bold; }

.milestone-text { font-size: 0.9rem; }

.milestone-text.completed { text-decoration: line-through; color: var(--text-muted); }

.notes-container { max-width: 1000px; margin: 0 auto; }

.notes-card { background: var(--bg-card); backdrop-filter: blur(20px); border: 1px solid var(--border-subtle); border-radius: var(--radius-lg); padding: 2rem; opacity: 0; animation: fadeInUp 0.5s ease forwards; }

.notes-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1.5rem; padding-bottom: 1.5rem; border-bottom: 1px solid var(--border-subtle); }

.notes-title { font-size: 1.25rem; font-weight: 600; display: flex; align-items: center; gap: 0.5rem; }

.notes-meta { display: flex; align-items: center; gap: 1.5rem; color: var(--text-muted); font-size: 0.8rem; }

.notes-textarea { width: 100%; min-height: 500px; background: transparent; border: none; color: var(--text-primary); font-family: 'Inter', monospace; font-size: 0.95rem; line-height: 1.8; resize: vertical; outline: none; }

.notes-textarea::placeholder { color: var(--text-muted); }

@media (max-width: 1200px) { .metrics-grid { grid-template-columns: repeat(2, 1fr); } .kanban-board { grid-template-columns: 1fr; } .dashboard-sections { grid-template-columns: 1fr; } }

@media (max-width: 768px) { .header { padding: 0 1rem; } .header-center { display: none; } .search-input { width: 180px; } .main-content { padding: calc(var(--header-height) + 1rem) 1rem 1rem; } .metrics-grid { grid-template-columns: 1fr; } .welcome-bar { flex-direction: column; align-items: flex-start; gap: 1rem; } .date-time { text-align: left; } .modal { margin: 1rem; max-width: calc(100% - 2rem); } }

.hidden { display: none !important; }

</style>

</head>

<body>

<div class="app-container">

<header class="header">

<div class="logo"><div class="logo-icon">🎯</div><span>Mission Control</span></div>

<nav class="header-center">

<button class="tab-btn active" data-tab="dashboard">📊 Dashboard</button>

<button class="tab-btn" data-tab="projects">📋 Projects</button>

<button class="tab-btn" data-tab="timeline">📅 Timeline</button>

<button class="tab-btn" data-tab="notes">📝 Notes</button>

</nav>

<div class="header-right">

<div class="search-container">

<span class="search-icon">🔍</span>

<input type="text" class="search-input" placeholder="Search..." id="globalSearch">

<span class="search-shortcut">⌘K</span>

</div>

<div class="status-container">

<div class="status-dot"></div>

<span class="status-text">Online</span>

</div>

</div>

</header>

<main class="main-content">

<div class="tab-content active" id="dashboard">

<div class="welcome-bar">

<div class="welcome-text">

<h1>Good <span id="greeting">morning</span>, Tim</h1>

<p>Welcome to your command center. Let's make today count.</p>

</div>

<div class="date-time">

<div class="time" id="currentTime">--:--</div>

<div class="date" id="currentDate">Loading...</div>

</div>

</div>

<div class="metrics-grid">

<div class="metric-card delay-1">

<div class="metric-header"><div class="metric-icon">💰</div><div class="metric-trend up">↑ 12%</div></div>

<div class="metric-value">$<span id="monthlyRevenue">25,000</span></div>

<div class="metric-label">Monthly Revenue (Goal: $50k)</div>

</div>

<div class="metric-card delay-2">

<div class="metric-header"><div class="metric-icon">📁</div></div>

<div class="metric-value" id="activeProjects">0</div>

<div class="metric-label">Active Projects</div>

</div>

<div class="metric-card delay-3">

<div class="metric-header"><div class="metric-icon">✅</div></div>

<div class="metric-value" id="tasksToday">0</div>

<div class="metric-label">Tasks Today</div>

</div>

<div class="metric-card delay-4">

<div class="metric-header"><div class="metric-icon">🎯</div></div>

<div class="metric-value" id="daysToGoal">127</div>

<div class="metric-label">Days to June Goal</div>

</div>

</div>

<div class="dashboard-sections">

<div class="section-card">

<div class="section-header"><div class="section-title">📌 Top Priorities</div><button class="btn" id="addPriorityBtn">+ Add</button></div>

<ul class="priorities-list" id="prioritiesList"></ul>

<div class="add-priority-form hidden" id="addPriorityForm">

<input type="text" class="add-priority-input" placeholder="Enter priority..." id="priorityInput">

<button class="btn" id="savePriorityBtn">Add</button>

</div>

</div>

<div class="section-card">

<div class="section-header"><div class="section-title">⚡ Recent Activity</div></div>

<div class="activity-feed" id="activityFeed"></div>

</div>

</div>

</div>

<div class="tab-content" id="projects">

<div class="kanban-board">

<div class="kanban-column">

<div class="column-header"><div class="column-title">📥 Backlog <span class="column-count" id="backlogCount">0</span></div></div>

<div class="task-list" id="backlogTasks"></div>

<button class="add-task-btn" data-column="backlog">+ Add Task</button>

</div>

<div class="kanban-column">

<div class="column-header"><div class="column-title">🔥 In Progress <span class="column-count" id="inProgressCount">0</span></div></div>

<div class="task-list" id="inProgressTasks"></div>

<button class="add-task-btn" data-column="inProgress">+ Add Task</button>

</div>

<div class="kanban-column">

<div class="column-header"><div class="column-title">✅ Done <span class="column-count" id="doneCount">0</span></div></div>

<div class="task-list" id="doneTasks"></div>

<button class="add-task-btn" data-column="done">+ Add Task</button>

</div>

</div>

</div>

<div class="tab-content" id="timeline">

<div class="timeline-container" id="timelineContainer"></div>

</div>

<div class="tab-content" id="notes">

<div class="notes-container">

<div class="notes-card">

<div class="notes-header">

<div class="notes-title">📝 Notes</div>

<div class="notes-meta"><span id="charCount">0 characters</span><span id="lastSaved">Never saved</span></div>

</div>

<textarea class="notes-textarea" id="notesTextarea" placeholder="Start typing your notes here..."></textarea>

</div>

</div>

</div>

</main>

</div>

<div class="modal-overlay" id="taskModal">

<div class="modal">

<div class="modal-header"><div class="modal-title" id="modalTitle">Add New Task</div><button class="modal-close" id="modalClose">×</button></div>

<form id="taskForm">

<div class="form-group"><label class="form-label">Title</label><input type="text" class="form-input" id="taskTitle" placeholder="Task title..." required></div>

<div class="form-group"><label class="form-label">Description</label><textarea class="form-textarea" id="taskDescription" placeholder="Task description..."></textarea></div>

<div class="form-group"><label class="form-label">Priority</label><select class="form-select" id="taskPriority"><option value="low">Low</option><option value="medium" selected>Medium</option><option value="high">High</option></select></div>

<div class="modal-actions"><button type="button" class="btn-secondary" id="cancelTaskBtn">Cancel</button><button type="submit" class="btn">Save Task</button></div>

</form>

</div>

</div>

<script>

// Timeline Config - Easy to Edit

const TIMELINE_DATA = [

{ id: 1, title: "Phase 1: Foundation", dateRange: "Feb 2026 - Mar 2026", description: "Establish strong operational foundation and optimize current Amazon performance.", milestones: [{ id: 1, text: "Optimize Amazon listings for conversion", completed: true }, { id: 2, text: "Launch website e-commerce store", completed: true }, { id: 3, text: "Implement email marketing flow", completed: false }, { id: 4, text: "Reach $30k/month revenue", completed: false }], active: false },

{ id: 2, title: "Phase 2: Scale", dateRange: "Mar 2026 - Apr 2026", description: "Scale operations and expand reach through additional channels.", milestones: [{ id: 1, text: "Launch paid advertising campaigns", completed: false }, { id: 2, text: "Expand to 2nd Amazon marketplace", completed: false }, { id: 3, text: "Hire VA for customer service", completed: false }, { id: 4, text: "Reach $35k/month revenue", completed: false }], active: true },

{ id: 3, title: "Phase 3: Dominate", dateRange: "Apr 2026 - May 2026", description: "Dominate market and optimize profitability.", milestones: [{ id: 1, text: "Launch influencer partnerships", completed: false }, { id: 2, text: "Expand product line", completed: false }, { id: 3, text: "Optimize unit economics", completed: false }, { id: 4, text: "Reach $42k/month revenue", completed: false }], active: false },

{ id: 4, title: "Phase 4: Goal", dateRange: "May 2026 - Jun 2026", description: "Final push to hit $50k/month goal.", milestones: [{ id: 1, text: "Launch loyalty program", completed: false }, { id: 2, text: "Scale all winning campaigns", completed: false }, { id: 3, text: "Prepare for next growth phase", completed: false }, { id: 4, text: "Hit $50k/month revenue", completed: false }], active: false }

];

// State

let state = JSON.parse(localStorage.getItem('missionControl')) || {

priorities: [],

tasks: { backlog: [], inProgress: [], done: [], activity: [], notes: "", timeline: JSON.parse(JSON.stringify(TIMELINE_DATA)) };

// DOM Elements

const tabBtns = document.querySelectorAll('.tab-btn');

const tabContents = document.querySelectorAll('.tab-content');

const greeting = document.getElementById('greeting');

const currentTime = document.getElementById('currentTime');

const currentDate = document.getElementById('currentDate');

const monthlyRevenue = document.getElementById('monthlyRevenue');

const activeProjects = document.getElementById('activeProjects');

const tasksToday = document.getElementById('tasksToday');

const daysToGoal = document.getElementById('daysToGoal');

const prioritiesList = document.getElementById('prioritiesList');

const activityFeed = document.getElementById('activityFeed');

const addPriorityBtn = document.getElementById('addPriorityBtn');

const addPriorityForm = document.getElementById('addPriorityForm');

const priorityInput = document.getElementById('priorityInput');

const savePriorityBtn = document.getElementById('savePriorityBtn');

const taskModal = document.getElementById('taskModal');

const taskForm = document.getElementById('taskForm');

const modalTitle = document.getElementById('modalTitle');

const notesTextarea = document.getElementById('notesTextarea');

const charCount = document.getElementById('charCount');

const lastSaved = document.getElementById('lastSaved');

// Tab Navigation

tabBtns.forEach(btn => {

btn.addEventListener('click', () => {

tabBtns.forEach(b => b.classList.remove('active'));

tabContents.forEach(c => c.classList.remove('active'));

btn.classList.add('active');

document.getElementById(btn.dataset.tab).classList.add('active');

});

});

// Clock & Date

function updateDateTime() {

const now = new Date();

const hour = now.getHours();

greeting.textContent = hour < 12 ? 'morning' : hour < 17 ? 'afternoon' : 'evening';

currentTime.textContent = now.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });

currentDate.textContent = now.toLocaleDateString('en-US', { weekday: 'long', month: 'short', day: 'numeric', year: 'numeric' });

}

setInterval(updateDateTime, 1000);

updateDateTime();

// Days to June 2026

const june = new Date('2026-06-01');

const today = new Date();

daysToGoal.textContent = Math.ceil((june - today) / (1000 * 60 * 60 * 24));

// Metrics

function updateMetrics() {

activeProjects.textContent = state.tasks.inProgress.length;

const completedToday = state.tasks.done.filter(t => {

const created = new Date(t.created);

const today = new Date();

return created.toDateString() === today.toDateString();

}).length;

tasksToday.textContent = state.priorities.filter(p => p.completed).length;

}

// Priorities

function renderPriorities() {

prioritiesList.innerHTML = state.priorities.length ? '' : '<div class="empty-state">No priorities yet. Add one above!</div>';

state.priorities.forEach((p, i) => {

const li = document.createElement('li');

li.className = 'priority-item';

li.innerHTML =

<div class="priority-checkbox ${p.completed ? 'checked' : ''}" data-index="${i}"></div>

<span class="priority-text ${p.completed ? 'completed' : ''}">${p.text}</span>

<span class="priority-delete" data-index="${i}">×</span>

;

prioritiesList.appendChild(li);

});

updateMetrics();

saveState();

}

prioritiesList.addEventListener('click', (e) => {

if (e.target.classList.contains('priority-checkbox')) {

state.priorities[e.target.dataset.index].completed = !state.priorities[e.target.dataset.index].completed;

addActivity(state.priorities[e.target.dataset.index].completed ? 'Completed priority' : 'Uncompleted priority');

renderPriorities();

} else if (e.target.classList.contains('priority-delete')) {

state.priorities.splice(e.target.dataset.index, 1);

renderPriorities();

}

});

addPriorityBtn.addEventListener('click', () => {

addPriorityForm.classList.remove('hidden');

priorityInput.focus();

});

savePriorityBtn.addEventListener('click', () => {

if (priorityInput.value.trim()) {

state.priorities.push({ text: priorityInput.value.trim(), completed: false });

addActivity('Added priority: ' + priorityInput.value.trim());

priorityInput.value = '';

addPriorityForm.classList.add('hidden');

renderPriorities();

}

});

priorityInput.addEventListener('keypress', (e) => {

if (e.key === 'Enter') savePriorityBtn.click();

});

// Activity

function addActivity(text) {

state.activity.unshift({ text, time: new Date().toISOString() });

if (state.activity.length > 20) state.activity.pop();

renderActivity();

saveState();

}

function renderActivity() {

activityFeed.innerHTML = state.activity.length ? '' : '<div class="empty-state">No recent activity</div>';

state.activity.forEach(a => {

const div = document.createElement('div');

div.className = 'activity-item';

const date = new Date(a.time);

div.innerHTML =

<div class="activity-dot"></div>

<div class="activity-content">

<div class="activity-text">${a.text}</div>

<div class="activity-time">${date.toLocaleTimeString()}</div>

</div>

;

activityFeed.appendChild(div);

});

}

// Tasks (Kanban)

function renderTasks() {

['backlog', 'inProgress', 'done'].forEach(col => {

const container = document.getElementById(col + 'Tasks');

document.getElementById(col + 'Count').textContent = state.tasks[col].length;

container.innerHTML = state.tasks[col].length ? '' : '<div class="empty-state">No tasks</div>';

state.tasks[col].forEach((t, i) => {

const div = document.createElement('div');

div.className = 'task-card';

div.innerHTML =

<div class="task-title">${t.title}</div>

<div class="task-description">${t.description || ''}</div>

<div class="task-meta">

<span class="task-priority ${t.priority}">${t.priority}</span>

<span class="task-date">${new Date(t.created).toLocaleDateString()}</span>

</div>

<span class="task-delete" data-column="${col}" data-index="${i}">×</span>

;

container.appendChild(div);

});

});

updateMetrics();

saveState();

}

document.querySelectorAll('.add-task-btn').forEach(btn => {

btn.addEventListener('click', () => {

window.currentColumn = btn.dataset.column;

modalTitle.textContent = 'Add New Task';

taskForm.reset();

taskModal.classList.add('active');

});

});

taskModal.addEventListener('click', (e) => {

if (e.target === taskModal) taskModal.classList.remove('active');

});

document.getElementById('modalClose').addEventListener('click', () => taskModal.classList.remove('active'));

document.getElementById('cancelTaskBtn').addEventListener('click', () => taskModal.classList.remove('active'));

taskForm.addEventListener('submit', (e) => {

e.preventDefault();

const newTask = {

title: document.getElementById('taskTitle').value,

description: document.getElementById('taskDescription').value,

priority: document.getElementById('taskPriority').value,

created: new Date().toISOString()

};

state.tasks[window.currentColumn].unshift(newTask);

addActivity('Added task: ' + newTask.title);

renderTasks();

taskModal.classList.remove('active');

});

document.addEventListener('click', (e) => {

if (e.target.classList.contains('task-delete')) {

const col = e.target.dataset.column;

const idx = parseInt(e.target.dataset.index);

addActivity('Deleted task: ' + state.tasks[col][idx].title);

state.tasks[col].splice(idx, 1);

renderTasks();

}

});

// Timeline

function renderTimeline() {

const container = document.getElementById('timelineContainer');

container.innerHTML = '';

state.timeline.forEach(phase => {

const div = document.createElement('div');

div.className = 'timeline-phase' + (phase.active ? ' active' : '');

let milestones = phase.milestones.map(m =>

<li class="milestone-item">

<div class="milestone-checkbox ${m.completed ? 'checked' : ''}" data-phase="${phase.id}" data-milestone="${m.id}"></div>

<span class="milestone-text ${m.completed ? 'completed' : ''}">${m.text}</span>

</li>

).join('');

div.innerHTML =

<div class="phase-header">

<div class="phase-title">${phase.title}${phase.active ? '<span class="phase-badge">CURRENT</span>' : ''}</div>

<div class="phase-date">${phase.dateRange}</div>

</div>

<div class="phase-description">${phase.description}</div>

<ul class="milestones-list">${milestones}</ul>

;

container.appendChild(div);

});

saveState();

}

document.getElementById('timelineContainer').addEventListener('click', (e) => {

if (e.target.classList.contains('milestone-checkbox')) {

const phaseId = parseInt(e.target.dataset.phase);

const milestoneId = parseInt(e.target.dataset.milestone);

const phase = state.timeline.find(p => p.id === phaseId);

const milestone = phase.milestones.find(m => m.id === milestoneId);

milestone.completed = !milestone.completed;

addActivity(milestone.completed ? '✓ ' + milestone.text : '○ ' + milestone.text);

renderTimeline();

}

});

// Notes

notesTextarea.value = state.notes;

charCount.textContent = state.notes.length + ' characters';

notesTextarea.addEventListener('input', () => {

state.notes = notesTextarea.value;

charCount.textContent = state.notes.length + ' characters';

lastSaved.textContent = 'Saving...';

saveState();

lastSaved.textContent = 'Saved ' + new Date().toLocaleTimeString();

});

// Search (Cmd+K)

document.addEventListener('keydown', (e) => {

if ((e.metaKey || e.ctrlKey) && e.key === 'k') {

e.preventDefault();

document.getElementById('globalSearch').focus();

}

});

// Save State

function saveState() {

localStorage.setItem('missionControl', JSON.stringify(state));

}

// Init

renderPriorities();

renderTasks();

renderActivity();

renderTimeline();

addActivity('Mission Control opened');

</script>

</body>

</html>