From 555d2a001d4c5f3a055e1be955be1a03d3f69eea Mon Sep 17 00:00:00 2001 From: Neo Date: Thu, 19 Feb 2026 10:09:32 +0000 Subject: [PATCH] Redesign: Rich cyberpunk aesthetic with animations --- app/globals.css | 49 +++- app/page.tsx | 592 +++++++++++++++++++++++++++++++++++++----------- 2 files changed, 502 insertions(+), 139 deletions(-) diff --git a/app/globals.css b/app/globals.css index e5cf95a..ba28bc3 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,10 +1,53 @@ +@import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600;700&display=swap'); + * { box-sizing: border-box; margin: 0; padding: 0; } -body { - background: #0f0f23; - color: white; +html, body { + background: #0a0a0f; + color: #e4e4e7; + font-family: 'JetBrains Mono', 'Fira Code', monospace; +} + +body { + min-height: 100vh; +} + +/* Scrollbar */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: rgba(255,255,255,0.02); +} + +::-webkit-scrollbar-thumb { + background: rgba(255,255,255,0.1); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: rgba(255,255,255,0.2); +} + +/* Selection */ +::selection { + background: rgba(255, 0, 80, 0.3); + color: #fff; +} + +/* Animations */ +@keyframes pulse { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.5; } +} + +@keyframes glow { + 0%, 100% { box-shadow: 0 0 20px rgba(255, 0, 80, 0.3); } + 50% { box-shadow: 0 0 40px rgba(255, 0, 80, 0.5); } } diff --git a/app/page.tsx b/app/page.tsx index c4925d3..6db359c 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -4,37 +4,33 @@ import { useState, useEffect } from 'react'; // Types type TaskStatus = 'todo' | 'in-progress' | 'done'; -type Task = { id: string; title: string; status: TaskStatus; assignee: 'me' | 'jelena' | 'neo'; priority?: string; created?: string }; - -type ContentStage = 'idea' | 'script' | 'thumbnail' | 'filming' | 'done'; -type ContentItem = { id: string; title: string; stage: ContentStage }; - -type CronJob = { name: string; enabled: boolean; status: string; lastRun?: string }; +type Task = { id: string; title: string; status: TaskStatus; assignee: string; priority?: string; created?: string }; +type CronJob = { name: string; enabled: boolean; status: string }; type Memory = { id: string; title: string; date: string; preview: string }; -type TeamMember = { id: string; name: string; role: string; status: 'working' | 'idle' }; - export default function MissionControl() { const [activeTab, setActiveTab] = useState('tasks'); const [tasks, setTasks] = useState([]); const [crons, setCrons] = useState([]); + const [memories, setMemories] = useState([]); const [loading, setLoading] = useState(true); + const [mounted, setMounted] = useState(false); useEffect(() => { + setMounted(true); async function fetchData() { try { - // Fetch tasks from mounted volume - const tasksRes = await fetch('/api/data?type=tasks'); - const tasksData = await tasksRes.json(); - setTasks(tasksData); - - // Fetch cron jobs - const cronsRes = await fetch('/api/data?type=crons'); - const cronsData = await cronsRes.json(); - setCrons(cronsData); + const [tasksRes, cronsRes, memoryRes] = await Promise.all([ + fetch('/api/data?type=tasks'), + fetch('/api/data?type=crons'), + fetch('/api/data?type=memory') + ]); + setTasks(await tasksRes.json()); + setCrons(await cronsRes.json()); + setMemories(await memoryRes.json()); } catch (e) { - console.error('Failed to fetch data:', e); + console.error(e); } finally { setLoading(false); } @@ -43,23 +39,102 @@ export default function MissionControl() { }, []); return ( -
+
+ {/* Animated background */} +
+ + {/* Grid overlay */} +
+ {/* Header */} -
-

🎯 Mission Control

-