diff --git a/app/activity/page.tsx b/app/activity/page.tsx new file mode 100644 index 0000000..b12f7ab --- /dev/null +++ b/app/activity/page.tsx @@ -0,0 +1,146 @@ +import { DashboardLayout } from "@/components/layout/sidebar"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { ScrollArea } from "@/components/ui/scroll-area"; +import { Badge } from "@/components/ui/badge"; +import { + Activity, + FileText, + Wrench, + MessageSquare, + Calendar, + CheckCircle2, +} from "lucide-react"; + +const activities = [ + { + id: 1, + type: "system", + action: "Morning briefing completed", + details: "Checked calendar, email, reminders, and disk usage", + time: "Today at 7:15 AM", + icon: CheckCircle2, + }, + { + id: 2, + type: "file", + action: "Downloads organized", + details: "Sorted 81 files into Images (18), Documents (31), Archives (32)", + time: "Today at 9:30 AM", + icon: FileText, + }, + { + id: 3, + type: "tool", + action: "Created 6 new skills", + details: "File System, Browser Automation, Calendar, Email, Knowledge Base, Daily Automation", + time: "Yesterday at 5:00 PM", + icon: Wrench, + }, + { + id: 4, + type: "doc", + action: "Updated USER.md", + details: "Added family details, daily routine, and project status", + time: "Yesterday at 4:30 PM", + icon: FileText, + }, + { + id: 5, + type: "communication", + action: "Brain dump completed", + details: "Captured interests, career, goals, family, and preferences", + time: "Yesterday at 3:00 PM", + icon: MessageSquare, + }, + { + id: 6, + type: "system", + action: "Daily automation scheduled", + details: "Morning briefing cron job set for 7:15 AM daily", + time: "Yesterday at 2:45 PM", + icon: Calendar, + }, + { + id: 7, + type: "file", + action: "Created DAILY_TOOLS_SETUP.md", + details: "Documented all skill integrations and setup instructions", + time: "Yesterday at 2:00 PM", + icon: FileText, + }, + { + id: 8, + type: "tool", + action: "Installed icalBuddy", + details: "Calendar integration now working with Apple Calendar", + time: "Yesterday at 1:30 PM", + icon: Wrench, + }, +]; + +const typeColors: Record = { + system: "bg-blue-500/10 text-blue-500", + file: "bg-green-500/10 text-green-500", + tool: "bg-purple-500/10 text-purple-500", + doc: "bg-yellow-500/10 text-yellow-500", + communication: "bg-pink-500/10 text-pink-500", +}; + +export default function ActivityPage() { + return ( + +
+
+

Activity Feed

+

+ Everything that's happening in your mission control. +

+
+ + + + + + Recent Activity + + + + +
+ {activities.map((activity) => { + const Icon = activity.icon; + return ( +
+
+ +
+
+
+

{activity.action}

+ + {activity.type} + +
+

+ {activity.details} +

+

{activity.time}

+
+
+ ); + })} +
+
+
+
+
+
+ ); +} diff --git a/app/calendar/page.tsx b/app/calendar/page.tsx new file mode 100644 index 0000000..964e579 --- /dev/null +++ b/app/calendar/page.tsx @@ -0,0 +1,197 @@ +import { DashboardLayout } from "@/components/layout/sidebar"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { Calendar as CalendarIcon, Clock, MapPin } from "lucide-react"; + +const events = [ + { + id: 1, + title: "Yearly Anniversary", + date: "February 23, 2026", + time: "All day", + type: "personal", + description: "Anniversary celebration", + }, + { + id: 2, + title: "Grabbing Anderson's dogs", + date: "February 26, 2026", + time: "5:30 PM - 6:30 PM", + type: "task", + description: "Pet sitting duties", + }, + { + id: 3, + title: "Daily Standup", + date: "Every weekday", + time: "8:30 AM", + type: "work", + description: "Toyota iOS team standup", + }, + { + id: 4, + title: "Group Workout", + date: "Every weekday", + time: "10:00 AM - 11:00 AM", + type: "health", + description: "Gym session", + }, + { + id: 5, + title: "NWW - Cowboy Club", + date: "Every Wednesday", + time: "Evening", + type: "social", + description: "No Wives Wednesday with cigars", + }, + { + id: 6, + title: "Contract Renewal", + date: "March 2026", + time: "TBD", + type: "work", + description: "Toyota contract up for renewal", + }, + { + id: 7, + title: "Mindy Turns 60", + date: "2026", + time: "TBD", + type: "family", + description: "Family milestone birthday", + }, + { + id: 8, + title: "Bailey Turns 35", + date: "2026", + time: "TBD", + type: "family", + description: "Family milestone birthday", + }, + { + id: 9, + title: "Taylor Turns 30", + date: "2026", + time: "TBD", + type: "family", + description: "Family milestone birthday", + }, +]; + +const typeColors: Record = { + personal: "bg-pink-500/10 text-pink-500 border-pink-500/20", + work: "bg-blue-500/10 text-blue-500 border-blue-500/20", + health: "bg-green-500/10 text-green-500 border-green-500/20", + social: "bg-purple-500/10 text-purple-500 border-purple-500/20", + family: "bg-yellow-500/10 text-yellow-500 border-yellow-500/20", + task: "bg-orange-500/10 text-orange-500 border-orange-500/20", +}; + +export default function CalendarPage() { + const today = new Date().toLocaleDateString("en-US", { + weekday: "long", + year: "numeric", + month: "long", + day: "numeric", + }); + + return ( + +
+
+
+

Calendar

+

{today}

+
+
+ +
+ {/* Upcoming Events */} +
+

Upcoming Events

+ {events.map((event) => ( + + +
+
+ + {event.date.split(" ")[0].slice(0, 3)} + + + {event.date.match(/\d+/)?.[0] || "--"} + +
+
+
+

{event.title}

+ + {event.type} + +
+

+ {event.description} +

+
+ + + {event.time} + + + + {event.date} + +
+
+
+
+
+ ))} +
+ + {/* Sidebar */} +
+ + + Today's Summary + + +
+ Events + 3 +
+
+ Tasks + 4 +
+
+ Reminders + 2 +
+
+
+ + + + Quick Actions + + + + + + + +
+
+
+
+ ); +} diff --git a/app/documents/page.tsx b/app/documents/page.tsx new file mode 100644 index 0000000..fba42b7 --- /dev/null +++ b/app/documents/page.tsx @@ -0,0 +1,225 @@ +import { DashboardLayout } from "@/components/layout/sidebar"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Badge } from "@/components/ui/badge"; +import { + FileText, + Folder, + Search, + Plus, + MoreVertical, + FileCode, + FileType, +} from "lucide-react"; + +const documents = [ + { + id: 1, + name: "USER.md", + type: "markdown", + size: "4.2 KB", + updated: "Today", + folder: "root", + description: "User profile and preferences", + }, + { + id: 2, + name: "SOUL.md", + type: "markdown", + size: "2.1 KB", + updated: "Today", + folder: "root", + description: "Assistant personality configuration", + }, + { + id: 3, + name: "DAILY_TOOLS_SETUP.md", + type: "markdown", + size: "6.8 KB", + updated: "Yesterday", + folder: "docs", + description: "Tool integration documentation", + }, + { + id: 4, + name: "AGENTS.md", + type: "markdown", + size: "3.5 KB", + updated: "2 days ago", + folder: "root", + description: "Workspace guidelines", + }, + { + id: 5, + name: "organize_downloads.sh", + type: "code", + size: "2.2 KB", + updated: "Yesterday", + folder: "scripts", + description: "File organization script", + }, + { + id: 6, + name: "morning_brief.sh", + type: "code", + size: "3.1 KB", + updated: "Yesterday", + folder: "scripts", + description: "Daily automation script", + }, + { + id: 7, + name: "file-system-assistant.skill", + type: "archive", + size: "12 KB", + updated: "Yesterday", + folder: "skills", + description: "Packaged skill file", + }, + { + id: 8, + name: "email-assistant.skill", + type: "archive", + size: "15 KB", + updated: "Yesterday", + folder: "skills", + description: "Packaged skill file", + }, +]; + +const folders = [ + { name: "root", count: 4 }, + { name: "docs", count: 1 }, + { name: "scripts", count: 2 }, + { name: "skills", count: 6 }, +]; + +const typeIcons: Record = { + markdown: FileType, + code: FileCode, + archive: FileText, + default: FileText, +}; + +const typeColors: Record = { + markdown: "text-blue-500", + code: "text-green-500", + archive: "text-yellow-500", + default: "text-muted-foreground", +}; + +export default function DocumentsPage() { + return ( + +
+
+
+

Documents

+

+ All the files and docs created for your mission. +

+
+ +
+ +
+ {/* Sidebar - Folders */} +
+ + + Folders + + + {folders.map((folder) => ( + + ))} + + + + + + Storage + + +
+
+ Used + 45.2 GB +
+
+
+
+

+ 54.8 GB free of 100 GB +

+
+ + +
+ + {/* Document List */} +
+
+
+ + +
+
+ + + +
+ {documents.map((doc) => { + const Icon = typeIcons[doc.type] || typeIcons.default; + const colorClass = typeColors[doc.type] || typeColors.default; + return ( +
+ +
+
+

{doc.name}

+ + {doc.folder} + +
+

+ {doc.description} +

+
+
+

{doc.size}

+

{doc.updated}

+
+ +
+ ); + })} +
+
+
+
+
+
+ + ); +} diff --git a/app/globals.css b/app/globals.css index a2dc41e..99168b5 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,26 +1,126 @@ @import "tailwindcss"; +@import "tw-animate-css"; +@import "shadcn/tailwind.css"; -:root { - --background: #ffffff; - --foreground: #171717; -} +@custom-variant dark (&:is(.dark *)); @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); --font-sans: var(--font-geist-sans); --font-mono: var(--font-geist-mono); + --color-sidebar-ring: var(--sidebar-ring); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar: var(--sidebar); + --color-chart-5: var(--chart-5); + --color-chart-4: var(--chart-4); + --color-chart-3: var(--chart-3); + --color-chart-2: var(--chart-2); + --color-chart-1: var(--chart-1); + --color-ring: var(--ring); + --color-input: var(--input); + --color-border: var(--border); + --color-destructive: var(--destructive); + --color-accent-foreground: var(--accent-foreground); + --color-accent: var(--accent); + --color-muted-foreground: var(--muted-foreground); + --color-muted: var(--muted); + --color-secondary-foreground: var(--secondary-foreground); + --color-secondary: var(--secondary); + --color-primary-foreground: var(--primary-foreground); + --color-primary: var(--primary); + --color-popover-foreground: var(--popover-foreground); + --color-popover: var(--popover); + --color-card-foreground: var(--card-foreground); + --color-card: var(--card); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --radius-2xl: calc(var(--radius) + 8px); + --radius-3xl: calc(var(--radius) + 12px); + --radius-4xl: calc(var(--radius) + 16px); } -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; +:root { + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.129 0.042 264.695); + --card: oklch(1 0 0); + --card-foreground: oklch(0.129 0.042 264.695); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.129 0.042 264.695); + --primary: oklch(0.208 0.042 265.755); + --primary-foreground: oklch(0.984 0.003 247.858); + --secondary: oklch(0.968 0.007 247.896); + --secondary-foreground: oklch(0.208 0.042 265.755); + --muted: oklch(0.968 0.007 247.896); + --muted-foreground: oklch(0.554 0.046 257.417); + --accent: oklch(0.968 0.007 247.896); + --accent-foreground: oklch(0.208 0.042 265.755); + --destructive: oklch(0.577 0.245 27.325); + --border: oklch(0.929 0.013 255.508); + --input: oklch(0.929 0.013 255.508); + --ring: oklch(0.704 0.04 256.788); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.984 0.003 247.858); + --sidebar-foreground: oklch(0.129 0.042 264.695); + --sidebar-primary: oklch(0.208 0.042 265.755); + --sidebar-primary-foreground: oklch(0.984 0.003 247.858); + --sidebar-accent: oklch(0.968 0.007 247.896); + --sidebar-accent-foreground: oklch(0.208 0.042 265.755); + --sidebar-border: oklch(0.929 0.013 255.508); + --sidebar-ring: oklch(0.704 0.04 256.788); +} + +.dark { + --background: oklch(0.129 0.042 264.695); + --foreground: oklch(0.984 0.003 247.858); + --card: oklch(0.208 0.042 265.755); + --card-foreground: oklch(0.984 0.003 247.858); + --popover: oklch(0.208 0.042 265.755); + --popover-foreground: oklch(0.984 0.003 247.858); + --primary: oklch(0.929 0.013 255.508); + --primary-foreground: oklch(0.208 0.042 265.755); + --secondary: oklch(0.279 0.041 260.031); + --secondary-foreground: oklch(0.984 0.003 247.858); + --muted: oklch(0.279 0.041 260.031); + --muted-foreground: oklch(0.704 0.04 256.788); + --accent: oklch(0.279 0.041 260.031); + --accent-foreground: oklch(0.984 0.003 247.858); + --destructive: oklch(0.704 0.191 22.216); + --border: oklch(1 0 0 / 10%); + --input: oklch(1 0 0 / 15%); + --ring: oklch(0.551 0.027 264.364); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.208 0.042 265.755); + --sidebar-foreground: oklch(0.984 0.003 247.858); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.984 0.003 247.858); + --sidebar-accent: oklch(0.279 0.041 260.031); + --sidebar-accent-foreground: oklch(0.984 0.003 247.858); + --sidebar-border: oklch(1 0 0 / 10%); + --sidebar-ring: oklch(0.551 0.027 264.364); +} + +@layer base { + * { + @apply border-border outline-ring/50; } -} - -body { - background: var(--background); - color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; -} + body { + @apply bg-background text-foreground; + } +} \ No newline at end of file diff --git a/app/layout.tsx b/app/layout.tsx index f7fa87e..53db99d 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -13,8 +13,8 @@ const geistMono = Geist_Mono({ }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "Mission Control | TopDogLabs", + description: "Central hub for activity, tasks, goals, and tools", }; export default function RootLayout({ @@ -23,9 +23,9 @@ export default function RootLayout({ children: React.ReactNode; }>) { return ( - + {children} diff --git a/app/mission/page.tsx b/app/mission/page.tsx new file mode 100644 index 0000000..28e9717 --- /dev/null +++ b/app/mission/page.tsx @@ -0,0 +1,223 @@ +import { DashboardLayout } from "@/components/layout/sidebar"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { Target, TrendingUp, Heart, Plane, DollarSign, Briefcase } from "lucide-react"; + +const missionStatement = { + title: "The Mission", + description: "Build a sustainable side hustle through iOS apps to achieve financial independence, travel with Heidi, take care of family, and retire on my own terms — all while staying healthy and having fun.", +}; + +const coreValues = [ + { name: "Family", icon: Heart, description: "Priority #1 — take care of loved ones" }, + { name: "Health", icon: Target, description: "Stay fit, strong, and mobile" }, + { name: "Fun", icon: TrendingUp, description: "Enjoy the journey, not just the destination" }, + { name: "Adventure", icon: Plane, description: "Travel and experience new things" }, +]; + +const goals = [ + { + id: 1, + title: "Double Retirement Savings", + current: 50, + target: 100, + unit: "%", + category: "financial", + deadline: "Ongoing", + status: "in-progress", + }, + { + id: 2, + title: "Build iOS App Empire", + current: 6, + target: 20, + unit: "apps", + category: "business", + deadline: "2027", + status: "in-progress", + }, + { + id: 3, + title: "Replace Contract Income", + current: 5, + target: 100, + unit: "%", + category: "financial", + deadline: "2027", + status: "in-progress", + }, + { + id: 4, + title: "Travel with Heidi", + current: 0, + target: 10, + unit: "countries", + category: "adventure", + deadline: "2028", + status: "not-started", + }, + { + id: 5, + title: "Family Trip with Mom", + current: 0, + target: 1, + unit: "trip", + category: "family", + deadline: "2026", + status: "planning", + }, + { + id: 6, + title: "Milestone Birthday Trip", + current: 0, + target: 1, + unit: "trip", + category: "family", + deadline: "2026", + status: "planning", + }, +]; + +const kpis = [ + { label: "Apps Built", value: "6", change: "+6 since Dec 2024", icon: Briefcase }, + { label: "Apps Live", value: "2", change: "2 pending LLC", icon: TrendingUp }, + { label: "Contract Months Left", value: "13", change: "Renews Mar 2026", icon: DollarSign }, + { label: "Morning Streak", value: "7", change: "days consistent", icon: Target }, +]; + +const categoryColors: Record = { + financial: "bg-green-500/10 text-green-500", + business: "bg-blue-500/10 text-blue-500", + adventure: "bg-purple-500/10 text-purple-500", + family: "bg-pink-500/10 text-pink-500", +}; + +const statusColors: Record = { + "in-progress": "bg-yellow-500/10 text-yellow-500", + "not-started": "bg-gray-500/10 text-gray-500", + planning: "bg-blue-500/10 text-blue-500", + completed: "bg-green-500/10 text-green-500", +}; + +export default function MissionPage() { + return ( + +
+ {/* Header */} +
+

The Mission

+

+ Your goals, values, and the path to freedom. +

+
+ + {/* Mission Statement */} + + +

{missionStatement.title}

+

+ {missionStatement.description} +

+
+
+ + {/* KPIs */} +
+ {kpis.map((kpi) => { + const Icon = kpi.icon; + return ( + + + + {kpi.label} + + + + +
{kpi.value}
+

{kpi.change}

+
+
+ ); + })} +
+ + {/* Core Values */} +
+

Core Values

+
+ {coreValues.map((value) => { + const Icon = value.icon; + return ( + + +
+ +
+

{value.name}

+

+ {value.description} +

+
+
+ ); + })} +
+
+ + {/* Goals */} +
+

Goals

+
+ {goals.map((goal) => ( + + +
+
+
+

{goal.title}

+ + {goal.category} + + + {goal.status} + +
+

+ Deadline: {goal.deadline} +

+
+
+
+ Progress + + {goal.current}/{goal.target} {goal.unit} + +
+
+
+
+
+
+ + + ))} +
+
+ + {/* Quote */} + + +

+ "53 is just the start of the best chapter." +

+

— The Mission

+
+
+
+ + ); +} diff --git a/app/page.tsx b/app/page.tsx index 295f8fd..ee41930 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,65 +1,174 @@ -import Image from "next/image"; +import { DashboardLayout } from "@/components/layout/sidebar"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Activity, Calendar, CheckCircle2, Target, TrendingUp, Clock } from "lucide-react"; -export default function Home() { +const kpiData = [ + { + title: "Active Tasks", + value: "12", + change: "+3 today", + icon: CheckCircle2, + trend: "up", + }, + { + title: "Goals Progress", + value: "64%", + change: "+8% this week", + icon: Target, + trend: "up", + }, + { + title: "Apps Built", + value: "6", + change: "2 in App Store", + icon: TrendingUp, + trend: "up", + }, + { + title: "Year Progress", + value: "14%", + change: "Day 51 of 365", + icon: Clock, + trend: "neutral", + }, +]; + +const recentActivity = [ + { action: "Organized Downloads", time: "2 hours ago", type: "file" }, + { action: "Completed morning briefing", time: "5 hours ago", type: "system" }, + { action: "Created 5 new skills", time: "1 day ago", type: "tool" }, + { action: "Updated USER.md", time: "2 days ago", type: "doc" }, +]; + +const upcomingEvents = [ + { title: "Yearly Anniversary", date: "Feb 23", type: "personal" }, + { title: "Grabbing Anderson's dogs", date: "Feb 26, 5:30 PM", type: "task" }, + { title: "Contract Renewal Check", date: "Mar 2026", type: "work" }, +]; + +export default function DashboardPage() { return ( -
-
- Next.js logo -
-

- To get started, edit the page.tsx file. -

-

- Looking for a starting point or more instructions? Head over to{" "} - - Templates - {" "} - or the{" "} - - Learning - {" "} - center. + +

+ {/* Header */} +
+

Dashboard

+

+ Welcome back, Matt. Here's your mission overview.

-
- - Vercel logomark - Deploy Now - - - Documentation - + + {/* KPI Cards */} +
+ {kpiData.map((kpi) => { + const Icon = kpi.icon; + return ( + + + + {kpi.title} + + + + +
{kpi.value}
+

{kpi.change}

+
+
+ ); + })}
-
-
+ + {/* Two Column Layout */} +
+ {/* Recent Activity */} + + + + + Recent Activity + + + +
+ {recentActivity.map((item, i) => ( +
+
+
+

{item.action}

+

{item.time}

+
+
+ ))} +
+ + + + {/* Upcoming Events */} + + + + + Upcoming Events + + + +
+ {upcomingEvents.map((event, i) => ( +
+
+
+

{event.title}

+

{event.date}

+
+ + {event.type} + +
+ ))} +
+ + +
+ + {/* Mission Progress */} + + + Mission Progress + + +
+
+
+ Retirement Goal + 50% complete +
+
+
+
+
+
+
+ iOS Apps Portfolio + 6 apps built +
+
+
+
+
+
+
+ Side Hustle Revenue + Just getting started +
+
+
+
+
+
+ + +
+ ); } diff --git a/app/tasks/page.tsx b/app/tasks/page.tsx new file mode 100644 index 0000000..b4d74fc --- /dev/null +++ b/app/tasks/page.tsx @@ -0,0 +1,199 @@ +import { DashboardLayout } from "@/components/layout/sidebar"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { Plus, Calendar, CheckCircle2, Circle, Clock } from "lucide-react"; + +const columns = [ + { + id: "todo", + title: "To Do", + tasks: [ + { + id: 1, + title: "Submit LLC paperwork", + description: "For remaining iOS apps", + priority: "high", + due: "ASAP", + tags: ["business", "legal"], + }, + { + id: 2, + title: "Fix App Clips testing", + description: "Debug the in-progress app", + priority: "high", + due: "This week", + tags: ["ios", "development"], + }, + { + id: 3, + title: "Plan fishing trip details", + description: "36hr offshore with Jeromy", + priority: "medium", + due: "Soon", + tags: ["family", "fun"], + }, + ], + }, + { + id: "inprogress", + title: "In Progress", + tasks: [ + { + id: 4, + title: "Mission Control Dashboard", + description: "Building the central hub", + priority: "high", + due: "Today", + tags: ["project", "development"], + }, + { + id: 5, + title: "Toyota contract work", + description: "iOS Lead Architect duties", + priority: "high", + due: "Daily", + tags: ["work", "contract"], + }, + ], + }, + { + id: "done", + title: "Done", + tasks: [ + { + id: 6, + title: "Created 6 iOS apps", + description: "2 live, 2 pending, 1 in review, 1 in progress", + priority: "high", + due: "Completed", + tags: ["ios", "milestone"], + }, + { + id: 7, + title: "Daily skills automation", + description: "File system, calendar, email, reminders", + priority: "medium", + due: "Completed", + tags: ["automation", "system"], + }, + { + id: 8, + title: "Morning briefing setup", + description: "Scheduled for 7:15 AM daily", + priority: "medium", + due: "Completed", + tags: ["automation", "routine"], + }, + ], + }, +]; + +const priorityColors: Record = { + high: "bg-red-500/10 text-red-500 border-red-500/20", + medium: "bg-yellow-500/10 text-yellow-500 border-yellow-500/20", + low: "bg-blue-500/10 text-blue-500 border-blue-500/20", +}; + +export default function TasksPage() { + return ( + +
+
+
+

Tasks

+

+ Manage your missions and track progress. +

+
+ +
+ + {/* Kanban Board */} +
+ {columns.map((column) => ( +
+
+

+ {column.id === "todo" && } + {column.id === "inprogress" && } + {column.id === "done" && } + {column.title} + + ({column.tasks.length}) + +

+
+ +
+ {column.tasks.map((task) => ( + + +
+

{task.title}

+ + {task.priority} + +
+ +

+ {task.description} +

+ +
+ {task.tags.map((tag) => ( + + {tag} + + ))} +
+ +
+ + {task.due} +
+
+
+ ))} + + +
+
+ ))} +
+ + {/* Stats */} +
+
+
12
+
Total Tasks
+
+
+
3
+
To Do
+
+
+
2
+
In Progress
+
+
+
7
+
Completed
+
+
+
+
+ ); +} diff --git a/app/tools/page.tsx b/app/tools/page.tsx new file mode 100644 index 0000000..87d6f59 --- /dev/null +++ b/app/tools/page.tsx @@ -0,0 +1,231 @@ +import { DashboardLayout } from "@/components/layout/sidebar"; +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; +import { Button } from "@/components/ui/button"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Badge } from "@/components/ui/badge"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { + Wrench, + Plus, + FileCode, + Terminal, + Globe, + Database, + Mail, + Calendar, + CheckCircle2, +} from "lucide-react"; + +const installedTools = [ + { + id: 1, + name: "File System Assistant", + description: "Organize, search, and manage local files", + category: "system", + status: "active", + lastUsed: "Today", + }, + { + id: 2, + name: "Browser Automation", + description: "Web research, screenshots, form filling", + category: "web", + status: "active", + lastUsed: "Yesterday", + }, + { + id: 3, + name: "Calendar Assistant", + description: "Apple Calendar + Google Calendar integration", + category: "calendar", + status: "active", + lastUsed: "Today", + }, + { + id: 4, + name: "Email Assistant", + description: "Apple Mail + Gmail integration", + category: "email", + status: "active", + lastUsed: "Today", + }, + { + id: 5, + name: "Daily Automation", + description: "Morning briefing orchestration", + category: "automation", + status: "active", + lastUsed: "Today", + }, +]; + +const toolTemplates = [ + { + name: "API Integration", + description: "Connect to external APIs", + icon: Globe, + category: "integration", + }, + { + name: "Database Tool", + description: "Query and manage databases", + icon: Database, + category: "data", + }, + { + name: "Script Runner", + description: "Execute custom scripts", + icon: Terminal, + category: "automation", + }, + { + name: "Email Processor", + description: "Process and route emails", + icon: Mail, + category: "email", + }, + { + name: "Calendar Sync", + description: "Sync multiple calendars", + icon: Calendar, + category: "calendar", + }, +]; + +const categoryColors: Record = { + system: "bg-blue-500/10 text-blue-500", + web: "bg-purple-500/10 text-purple-500", + calendar: "bg-green-500/10 text-green-500", + email: "bg-yellow-500/10 text-yellow-500", + automation: "bg-pink-500/10 text-pink-500", + integration: "bg-orange-500/10 text-orange-500", + data: "bg-cyan-500/10 text-cyan-500", +}; + +export default function ToolsPage() { + return ( + +
+
+
+

Tool Builder

+

+ Create and manage custom tools and skills. +

+
+ +
+ + + + Installed ({installedTools.length}) + Templates + Quick Builder + + + +
+ {installedTools.map((tool) => ( + + +
+
+ +
+ + {tool.category} + +
+ {tool.name} +
+ +

+ {tool.description} +

+
+ + + {tool.status} + + Last used: {tool.lastUsed} +
+
+
+ ))} +
+
+ + +
+ {toolTemplates.map((template, i) => { + const Icon = template.icon; + return ( + + +
+
+ +
+ Template +
+ {template.name} +
+ +

+ {template.description} +

+ +
+
+ ); + })} +
+
+ + + + + Quick Tool Builder + + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ +