add a google sign in option on the landing page, make the "add task" (in the task section) and "add event" (in the schedule section) actually add the input to the tasks/schedule respectively and allow reminders/alarms to be set. Make the "add resource" (in the research section), actually add the resource link and let the user click on any of the bookmarks to open the url in their native browser. also allow the ai to pick up on patterns in the users behavior to create articles/video/sites that align with their interests and introduce them at the top of the research section, in a dashboard format.
Browse files- index.html +9 -2
- research.html +65 -18
- scheduling.html +295 -204
- tasks.html +193 -255
index.html
CHANGED
|
@@ -321,10 +321,17 @@
|
|
| 321 |
</div>
|
| 322 |
</footer>
|
| 323 |
</div>
|
| 324 |
-
|
| 325 |
<script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 326 |
// Initialize Vanta.js background
|
| 327 |
-
|
| 328 |
el: "#vanta-bg",
|
| 329 |
mouseControls: true,
|
| 330 |
touchControls: true,
|
|
|
|
| 321 |
</div>
|
| 322 |
</footer>
|
| 323 |
</div>
|
|
|
|
| 324 |
<script>
|
| 325 |
+
// Google Sign-In Handler
|
| 326 |
+
function handleGoogleSignIn() {
|
| 327 |
+
// In production, use Google OAuth API
|
| 328 |
+
console.log("Google sign-in initiated");
|
| 329 |
+
// Mock implementation for demo
|
| 330 |
+
alert("Google sign-in would be implemented here");
|
| 331 |
+
}
|
| 332 |
+
|
| 333 |
// Initialize Vanta.js background
|
| 334 |
+
VANTA.WAVES({
|
| 335 |
el: "#vanta-bg",
|
| 336 |
mouseControls: true,
|
| 337 |
touchControls: true,
|
research.html
CHANGED
|
@@ -77,25 +77,48 @@
|
|
| 77 |
</div>
|
| 78 |
|
| 79 |
<div class="space-y-4">
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 84 |
</div>
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 88 |
</div>
|
| 89 |
</div>
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 95 |
</div>
|
| 96 |
</div>
|
| 97 |
-
|
| 98 |
-
<div class="
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
<div class="flex items-start mb-3">
|
| 100 |
<div class="w-10 h-10 rounded-lg bg-blue-600 flex items-center justify-center mr-3">
|
| 101 |
<i data-feather="link" class="w-5 h-5"></i>
|
|
@@ -209,10 +232,10 @@
|
|
| 209 |
<label class="block mb-2 text-sm">Tags</label>
|
| 210 |
<input type="text" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-3" placeholder="Comma separated">
|
| 211 |
</div>
|
| 212 |
-
<button class="w-full bg-[#FFA07A] py-3 rounded-lg font-bold hover:bg-[#ff8a5c] transition">
|
| 213 |
Save Resource
|
| 214 |
</button>
|
| 215 |
-
|
| 216 |
</div>
|
| 217 |
</div>
|
| 218 |
</div>
|
|
@@ -263,10 +286,34 @@
|
|
| 263 |
</div>
|
| 264 |
</footer>
|
| 265 |
</div>
|
| 266 |
-
|
| 267 |
<script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 268 |
// Initialize Vanta.js background
|
| 269 |
-
|
| 270 |
el: "#vanta-bg",
|
| 271 |
mouseControls: true,
|
| 272 |
touchControls: true,
|
|
|
|
| 77 |
</div>
|
| 78 |
|
| 79 |
<div class="space-y-4">
|
| 80 |
+
<div class="research-card rounded-3xl p-6 mb-8">
|
| 81 |
+
<h2 class="text-2xl font-bold mb-6">Recommended For You</h2>
|
| 82 |
+
<div class="grid md:grid-cols-2 gap-4">
|
| 83 |
+
<div class="research-item research-card rounded-xl p-4 hover:cursor-pointer" onclick="window.open('https://example.com/sleep-science', '_blank')">
|
| 84 |
+
<div class="flex items-start">
|
| 85 |
+
<img src="http://static.photos/science/320x240/1" class="w-16 h-16 rounded-lg object-cover mr-3">
|
| 86 |
+
<div>
|
| 87 |
+
<div class="font-bold">Sleep Science Weekly</div>
|
| 88 |
+
<div class="text-sm opacity-80">Based on your interest in sleep optimization</div>
|
| 89 |
+
</div>
|
| 90 |
</div>
|
| 91 |
+
</div>
|
| 92 |
+
<div class="research-item research-card rounded-xl p-4 hover:cursor-pointer" onclick="window.open('https://example.com/productivity-hacks', '_blank')">
|
| 93 |
+
<div class="flex items-start">
|
| 94 |
+
<img src="http://static.photos/office/320x240/2" class="w-16 h-16 rounded-lg object-cover mr-3">
|
| 95 |
+
<div>
|
| 96 |
+
<div class="font-bold">Productivity Hacks</div>
|
| 97 |
+
<div class="text-sm opacity-80">Matching your work patterns</div>
|
| 98 |
+
</div>
|
| 99 |
</div>
|
| 100 |
</div>
|
| 101 |
+
</div>
|
| 102 |
+
</div>
|
| 103 |
+
|
| 104 |
+
<div class="research-item research-card rounded-xl p-4 hover:cursor-pointer" onclick="window.open('https://journalofsleepmedicine.org/circadian-rhythm', '_blank')">
|
| 105 |
+
<div class="flex items-start mb-3">
|
| 106 |
+
<div class="w-10 h-10 rounded-lg bg-purple-600 flex items-center justify-center mr-3">
|
| 107 |
+
<i data-feather="file-text" class="w-5 h-5"></i>
|
| 108 |
+
</div>
|
| 109 |
+
<div>
|
| 110 |
+
<div class="font-bold">Circadian Rhythm Research</div>
|
| 111 |
+
<div class="text-sm opacity-80">Journal of Sleep Medicine • 2022</div>
|
| 112 |
</div>
|
| 113 |
</div>
|
| 114 |
+
<p class="text-sm mb-3">Latest findings on how circadian rhythms affect cognitive performance and productivity.</p>
|
| 115 |
+
<div class="flex flex-wrap gap-2">
|
| 116 |
+
<span class="tag bg-purple-600/30 px-2 py-1 rounded-full text-xs">sleep</span>
|
| 117 |
+
<span class="tag bg-blue-600/30 px-2 py-1 rounded-full text-xs">neuroscience</span>
|
| 118 |
+
<span class="tag bg-green-600/30 px-2 py-1 rounded-full text-xs">productivity</span>
|
| 119 |
+
</div>
|
| 120 |
+
</div>
|
| 121 |
+
<div class="research-item research-card rounded-xl p-4">
|
| 122 |
<div class="flex items-start mb-3">
|
| 123 |
<div class="w-10 h-10 rounded-lg bg-blue-600 flex items-center justify-center mr-3">
|
| 124 |
<i data-feather="link" class="w-5 h-5"></i>
|
|
|
|
| 232 |
<label class="block mb-2 text-sm">Tags</label>
|
| 233 |
<input type="text" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-3" placeholder="Comma separated">
|
| 234 |
</div>
|
| 235 |
+
<button onclick="saveResource()" class="w-full bg-[#FFA07A] py-3 rounded-lg font-bold hover:bg-[#ff8a5c] transition">
|
| 236 |
Save Resource
|
| 237 |
</button>
|
| 238 |
+
</div>
|
| 239 |
</div>
|
| 240 |
</div>
|
| 241 |
</div>
|
|
|
|
| 286 |
</div>
|
| 287 |
</footer>
|
| 288 |
</div>
|
|
|
|
| 289 |
<script>
|
| 290 |
+
// Save resource function
|
| 291 |
+
function saveResource() {
|
| 292 |
+
const type = document.querySelector('select').value;
|
| 293 |
+
const title = document.querySelector('input[type="text"]').value;
|
| 294 |
+
const url = document.querySelector('input[type="text"]:nth-of-type(2)').value;
|
| 295 |
+
const tags = document.querySelector('input[placeholder="Comma separated"]').value;
|
| 296 |
+
|
| 297 |
+
if(title && url) {
|
| 298 |
+
// In a real app, this would save to a database
|
| 299 |
+
console.log('Saving resource:', {type, title, url, tags});
|
| 300 |
+
alert('Resource saved!');
|
| 301 |
+
|
| 302 |
+
// Analyze patterns (mock implementation)
|
| 303 |
+
analyzeUserPatterns(tags);
|
| 304 |
+
} else {
|
| 305 |
+
alert('Please fill in all fields');
|
| 306 |
+
}
|
| 307 |
+
}
|
| 308 |
+
|
| 309 |
+
// Mock pattern analysis
|
| 310 |
+
function analyzeUserPatterns(tags) {
|
| 311 |
+
console.log('Analyzing user patterns based on:', tags);
|
| 312 |
+
// This would connect to AI service in production
|
| 313 |
+
}
|
| 314 |
+
|
| 315 |
// Initialize Vanta.js background
|
| 316 |
+
VANTA.CELLS({
|
| 317 |
el: "#vanta-bg",
|
| 318 |
mouseControls: true,
|
| 319 |
touchControls: true,
|
scheduling.html
CHANGED
|
@@ -6,32 +6,30 @@
|
|
| 6 |
<title>Smart Scheduling | CircaSnooze</title>
|
| 7 |
<script src="https://cdn.tailwindcss.com"></script>
|
| 8 |
<script src="https://unpkg.com/feather-icons"></script>
|
| 9 |
-
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 10 |
-
<script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.net.min.js"></script>
|
| 11 |
<style>
|
| 12 |
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
|
| 13 |
body {
|
| 14 |
font-family: 'Space Grotesk', sans-serif;
|
| 15 |
}
|
| 16 |
.gradient-bg {
|
| 17 |
-
background: linear-gradient(135deg, #
|
| 18 |
}
|
| 19 |
.schedule-card {
|
| 20 |
backdrop-filter: blur(10px);
|
| 21 |
background-color: rgba(255, 255, 255, 0.08);
|
| 22 |
}
|
| 23 |
-
.
|
| 24 |
-
transform: scale(1.02);
|
| 25 |
-
}
|
| 26 |
-
.time-slot {
|
| 27 |
transition: all 0.2s ease;
|
| 28 |
}
|
| 29 |
-
.
|
| 30 |
-
|
|
|
|
|
|
|
|
|
|
| 31 |
}
|
| 32 |
</style>
|
| 33 |
</head>
|
| 34 |
-
<body class="min-h-screen text-white gradient-bg"
|
| 35 |
<div class="container mx-auto px-4 py-8">
|
| 36 |
<header class="flex justify-between items-center mb-12">
|
| 37 |
<a href="index.html" class="flex items-center space-x-2">
|
|
@@ -39,13 +37,13 @@
|
|
| 39 |
<span class="text-xl font-bold">CircaSnooze</span>
|
| 40 |
</a>
|
| 41 |
<nav class="hidden md:flex space-x-6">
|
| 42 |
-
<a href="index.html" class="hover:text-[#
|
| 43 |
-
<a href="sleep-calculator.html" class="hover:text-[#
|
| 44 |
-
<a href="#" class="text-[#
|
| 45 |
-
<a href="tasks.html" class="hover:text-[#
|
| 46 |
-
<a href="research.html" class="hover:text-[#
|
| 47 |
</nav>
|
| 48 |
-
<button class="bg-[#
|
| 49 |
My Account
|
| 50 |
</button>
|
| 51 |
</header>
|
|
@@ -55,219 +53,312 @@
|
|
| 55 |
<div class="lg:col-span-2">
|
| 56 |
<div class="schedule-card rounded-3xl p-8 mb-8">
|
| 57 |
<div class="flex justify-between items-center mb-8">
|
| 58 |
-
<h1 class="text-3xl font-bold">Smart
|
| 59 |
-
<button class="bg-[#
|
| 60 |
</div>
|
| 61 |
|
| 62 |
-
<
|
| 63 |
-
|
| 64 |
-
<div class="
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
<div class="space-y-4">
|
| 73 |
-
<div class="time-block schedule-card rounded-xl p-4">
|
| 74 |
-
<div class="flex items-center justify-between mb-3">
|
| 75 |
-
<h3 class="font-bold">Today's Schedule</h3>
|
| 76 |
-
<span class="text-sm opacity-80">June 12, 2023</span>
|
| 77 |
-
</div>
|
| 78 |
-
|
| 79 |
-
<div class="space-y-2">
|
| 80 |
-
<div class="time-slot flex items-center justify-between p-2 rounded-lg bg-white/10">
|
| 81 |
-
<div class="flex items-center">
|
| 82 |
-
<div class="w-2 h-2 rounded-full bg-purple-500 mr-2"></div>
|
| 83 |
-
<span>6:30 AM</span>
|
| 84 |
-
<span class="ml-4 font-medium">Morning Routine</span>
|
| 85 |
-
</div>
|
| 86 |
-
<i data-feather="chevron-right" class="w-4 h-4"></i>
|
| 87 |
-
</div>
|
| 88 |
-
|
| 89 |
-
<div class="time-slot flex items-center justify-between p-2 rounded-lg bg-white/10">
|
| 90 |
-
<div class="flex items-center">
|
| 91 |
-
<div class="w-2 h-2 rounded-full bg-blue-500 mr-2"></div>
|
| 92 |
-
<span>9:00 AM</span>
|
| 93 |
-
<span class="ml-4 font-medium">Focus Work Block</span>
|
| 94 |
-
</div>
|
| 95 |
-
<i data-feather="chevron-right" class="w-4 h-4"></i>
|
| 96 |
-
</div>
|
| 97 |
-
|
| 98 |
-
<div class="time-slot flex items-center justify-between p-2 rounded-lg bg-white/10">
|
| 99 |
-
<div class="flex items-center">
|
| 100 |
-
<div class="w-2 h-2 rounded-full bg-green-500 mr-2"></div>
|
| 101 |
-
<span>12:30 PM</span>
|
| 102 |
-
<span class="ml-4 font-medium">Lunch & Walk</span>
|
| 103 |
-
</div>
|
| 104 |
-
<i data-feather="chevron-right" class="w-4 h-4"></i>
|
| 105 |
-
</div>
|
| 106 |
-
|
| 107 |
-
<div class="time-slot flex items-center justify-between p-2 rounded-lg bg-white/10">
|
| 108 |
-
<div class="flex items-center">
|
| 109 |
-
<div class="w-2 h-2 rounded-full bg-yellow-500 mr-2"></div>
|
| 110 |
-
<span>3:00 PM</span>
|
| 111 |
-
<span class="ml-4 font-medium">Creative Time</span>
|
| 112 |
-
</div>
|
| 113 |
-
<i data-feather="chevron-right" class="w-4 h-4"></i>
|
| 114 |
-
</div>
|
| 115 |
-
|
| 116 |
-
<div class="time-slot flex items-center justify-between p-2 rounded-lg bg-white/10">
|
| 117 |
-
<div class="flex items-center">
|
| 118 |
-
<div class="w-2 h-2 rounded-full bg-red-500 mr-2"></div>
|
| 119 |
-
<span>6:30 PM</span>
|
| 120 |
-
<span class="ml-4 font-medium">Dinner</span>
|
| 121 |
-
</div>
|
| 122 |
-
<i data-feather="chevron-right" class="w-4 h-4"></i>
|
| 123 |
-
</div>
|
| 124 |
-
|
| 125 |
-
<div class="time-slot flex items-center justify-between p-2 rounded-lg bg-white/10">
|
| 126 |
-
<div class="flex items-center">
|
| 127 |
-
<div class="w-2 h-2 rounded-full bg-indigo-500 mr-2"></div>
|
| 128 |
-
<span>9:00 PM</span>
|
| 129 |
-
<span class="ml-4 font-medium">Wind Down</span>
|
| 130 |
-
</div>
|
| 131 |
-
<i data-feather="chevron-right" class="w-4 h-4"></i>
|
| 132 |
-
</div>
|
| 133 |
-
</div>
|
| 134 |
-
</div>
|
| 135 |
-
|
| 136 |
-
<div class="schedule-card rounded-xl p-4">
|
| 137 |
-
<h3 class="font-bold mb-3">Add New Event</h3>
|
| 138 |
-
<div class="space-y-4">
|
| 139 |
-
<div>
|
| 140 |
-
<label class="block mb-1 text-sm">Event Name</label>
|
| 141 |
-
<input type="text" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 142 |
-
</div>
|
| 143 |
-
<div class="grid grid-cols-2 gap-4">
|
| 144 |
-
<div>
|
| 145 |
-
<label class="block mb-1 text-sm">Start Time</label>
|
| 146 |
-
<input type="time" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 147 |
-
</div>
|
| 148 |
-
<div>
|
| 149 |
-
<label class="block mb-1 text-sm">End Time</label>
|
| 150 |
-
<input type="time" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 151 |
-
</div>
|
| 152 |
-
</div>
|
| 153 |
-
<div>
|
| 154 |
-
<label class="block mb-1 text-sm">Category</label>
|
| 155 |
-
<select class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 156 |
-
<option>Work</option>
|
| 157 |
-
<option>Personal</option>
|
| 158 |
-
<option>Health</option>
|
| 159 |
-
<option>Learning</option>
|
| 160 |
-
<option>Social</option>
|
| 161 |
-
</select>
|
| 162 |
-
</div>
|
| 163 |
-
<button class="w-full bg-[#26d0ce] py-2 rounded-lg font-bold hover:bg-[#1fbdb6] transition">
|
| 164 |
-
Schedule Event
|
| 165 |
</button>
|
| 166 |
</div>
|
| 167 |
</div>
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
</div>
|
| 171 |
-
|
| 172 |
-
<div>
|
| 173 |
-
<div class="schedule-card rounded-3xl p-8 mb-8">
|
| 174 |
-
<h2 class="text-2xl font-bold mb-6">Energy Levels</h2>
|
| 175 |
-
<div class="h-64 bg-white/5 rounded-xl mb-6">
|
| 176 |
-
<!-- Chart would go here -->
|
| 177 |
-
<div class="flex items-center justify-center h-full">
|
| 178 |
-
<div class="text-center">
|
| 179 |
-
<i data-feather="activity" class="w-12 h-12 mx-auto mb-2"></i>
|
| 180 |
-
<p class="opacity-80">Your circadian energy chart</p>
|
| 181 |
-
</div>
|
| 182 |
-
</div>
|
| 183 |
-
</div>
|
| 184 |
-
<div class="space-y-4">
|
| 185 |
-
<div class="flex items-center justify-between">
|
| 186 |
-
<span>Morning Focus</span>
|
| 187 |
-
<span class="font-medium">High</span>
|
| 188 |
</div>
|
| 189 |
-
<div class="
|
| 190 |
-
<
|
| 191 |
-
<
|
| 192 |
</div>
|
| 193 |
-
|
| 194 |
-
|
| 195 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 196 |
</div>
|
| 197 |
</div>
|
| 198 |
</div>
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
</
|
| 211 |
-
|
| 212 |
-
<div class="flex items-start">
|
| 213 |
-
<div class="w-10 h-10 rounded-lg bg-blue-600 flex items-center justify-center mr-3 mt-1">
|
| 214 |
-
<i data-feather="sun" class="w-5 h-5"></i>
|
| 215 |
-
</div>
|
| 216 |
-
<div>
|
| 217 |
-
<div class="font-medium">Sunrise Alarm</div>
|
| 218 |
-
<div class="text-sm opacity-80">Daily, 6:30 AM</div>
|
| 219 |
-
</div>
|
| 220 |
</div>
|
| 221 |
-
<
|
| 222 |
-
|
| 223 |
-
|
| 224 |
-
|
| 225 |
-
<
|
| 226 |
-
|
| 227 |
-
<div class="text-sm opacity-80">Wed, 5:30 PM</div>
|
| 228 |
-
</div>
|
| 229 |
</div>
|
| 230 |
-
<
|
| 231 |
-
|
| 232 |
-
|
| 233 |
-
|
| 234 |
-
<
|
| 235 |
-
|
| 236 |
-
<div class="text-sm opacity-80">Thu, 8:00 PM</div>
|
| 237 |
-
</div>
|
| 238 |
</div>
|
|
|
|
| 239 |
</div>
|
| 240 |
</div>
|
| 241 |
</div>
|
| 242 |
</div>
|
| 243 |
</main>
|
| 244 |
|
| 245 |
-
<
|
| 246 |
-
|
| 247 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 248 |
</div>
|
| 249 |
-
</
|
| 250 |
</div>
|
| 251 |
|
| 252 |
<script>
|
| 253 |
-
// Initialize Vanta.js background
|
| 254 |
-
VANTA.NET({
|
| 255 |
-
el: "#vanta-bg",
|
| 256 |
-
mouseControls: true,
|
| 257 |
-
touchControls: true,
|
| 258 |
-
gyroControls: false,
|
| 259 |
-
minHeight: 200.00,
|
| 260 |
-
minWidth: 200.00,
|
| 261 |
-
scale: 1.00,
|
| 262 |
-
color: 0x26d0ce,
|
| 263 |
-
backgroundColor: 0x1a2980,
|
| 264 |
-
points: 12.00,
|
| 265 |
-
maxDistance: 22.00,
|
| 266 |
-
spacing: 18.00
|
| 267 |
-
});
|
| 268 |
-
|
| 269 |
// Initialize feather icons
|
| 270 |
feather.replace();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 271 |
</script>
|
| 272 |
</body>
|
| 273 |
</html>
|
|
|
|
| 6 |
<title>Smart Scheduling | CircaSnooze</title>
|
| 7 |
<script src="https://cdn.tailwindcss.com"></script>
|
| 8 |
<script src="https://unpkg.com/feather-icons"></script>
|
|
|
|
|
|
|
| 9 |
<style>
|
| 10 |
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
|
| 11 |
body {
|
| 12 |
font-family: 'Space Grotesk', sans-serif;
|
| 13 |
}
|
| 14 |
.gradient-bg {
|
| 15 |
+
background: linear-gradient(135deg, #4b6cb7 0%, #182848 100%);
|
| 16 |
}
|
| 17 |
.schedule-card {
|
| 18 |
backdrop-filter: blur(10px);
|
| 19 |
background-color: rgba(255, 255, 255, 0.08);
|
| 20 |
}
|
| 21 |
+
.calendar-day {
|
|
|
|
|
|
|
|
|
|
| 22 |
transition: all 0.2s ease;
|
| 23 |
}
|
| 24 |
+
.calendar-day:hover {
|
| 25 |
+
transform: scale(1.05);
|
| 26 |
+
}
|
| 27 |
+
.event-item:hover {
|
| 28 |
+
transform: translateY(-2px);
|
| 29 |
}
|
| 30 |
</style>
|
| 31 |
</head>
|
| 32 |
+
<body class="min-h-screen text-white gradient-bg">
|
| 33 |
<div class="container mx-auto px-4 py-8">
|
| 34 |
<header class="flex justify-between items-center mb-12">
|
| 35 |
<a href="index.html" class="flex items-center space-x-2">
|
|
|
|
| 37 |
<span class="text-xl font-bold">CircaSnooze</span>
|
| 38 |
</a>
|
| 39 |
<nav class="hidden md:flex space-x-6">
|
| 40 |
+
<a href="index.html" class="hover:text-[#FFA07A] transition">Home</a>
|
| 41 |
+
<a href="sleep-calculator.html" class="hover:text-[#FFA07A] transition">Sleep</a>
|
| 42 |
+
<a href="#" class="text-[#FFA07A] font-medium">Schedule</a>
|
| 43 |
+
<a href="tasks.html" class="hover:text-[#FFA07A] transition">Tasks</a>
|
| 44 |
+
<a href="research.html" class="hover:text-[#FFA07A] transition">Research</a>
|
| 45 |
</nav>
|
| 46 |
+
<button class="bg-[#FFA07A] px-4 py-2 rounded-lg text-sm font-medium hover:bg-[#ff8a5c] transition">
|
| 47 |
My Account
|
| 48 |
</button>
|
| 49 |
</header>
|
|
|
|
| 53 |
<div class="lg:col-span-2">
|
| 54 |
<div class="schedule-card rounded-3xl p-8 mb-8">
|
| 55 |
<div class="flex justify-between items-center mb-8">
|
| 56 |
+
<h1 class="text-3xl font-bold">Smart Scheduling</h1>
|
| 57 |
+
<button onclick="openAddEventModal()" class="bg-[#FFA07A] px-4 py-2 rounded-lg font-medium">Add Event</button>
|
| 58 |
</div>
|
| 59 |
|
| 60 |
+
<!-- Calendar View -->
|
| 61 |
+
<div class="schedule-card rounded-xl p-4 mb-8">
|
| 62 |
+
<div class="flex justify-between items-center mb-4">
|
| 63 |
+
<h3 class="font-medium">December 2023</h3>
|
| 64 |
+
<div class="flex space-x-2">
|
| 65 |
+
<button class="p-1 rounded-full hover:bg-white/10">
|
| 66 |
+
<i data-feather="chevron-left" class="w-5 h-5"></i>
|
| 67 |
+
</button>
|
| 68 |
+
<button class="p-1 rounded-full hover:bg-white/10">
|
| 69 |
+
<i data-feather="chevron-right" class="w-5 h-5"></i>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 70 |
</button>
|
| 71 |
</div>
|
| 72 |
</div>
|
| 73 |
+
<div class="grid grid-cols-7 gap-1 text-center text-sm mb-2">
|
| 74 |
+
<div>Sun</div><div>Mon</div><div>Tue</div><div>Wed</div><div>Thu</div><div>Fri</div><div>Sat</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
</div>
|
| 76 |
+
<div class="grid grid-cols-7 gap-1">
|
| 77 |
+
<!-- Calendar days will be generated here -->
|
| 78 |
+
<div id="calendarDays"></div>
|
| 79 |
</div>
|
| 80 |
+
</div>
|
| 81 |
+
|
| 82 |
+
<!-- Events List -->
|
| 83 |
+
<div>
|
| 84 |
+
<h3 class="font-medium mb-4">Today's Events</h3>
|
| 85 |
+
<div id="eventsList" class="space-y-3">
|
| 86 |
+
<!-- Events will be populated here -->
|
| 87 |
</div>
|
| 88 |
</div>
|
| 89 |
</div>
|
| 90 |
+
</div>
|
| 91 |
+
|
| 92 |
+
<div class="schedule-card rounded-3xl p-8">
|
| 93 |
+
<h2 class="text-2xl font-bold mb-6">Your Rhythm</h2>
|
| 94 |
+
<div class="h-64 bg-white/10 rounded-xl mb-6">
|
| 95 |
+
<!-- Would display circadian rhythm visualization -->
|
| 96 |
+
</div>
|
| 97 |
+
<h3 class="font-medium mb-4">Optimal Times</h3>
|
| 98 |
+
<div class="space-y-4">
|
| 99 |
+
<div class="flex items-center justify-between p-3 bg-white/10 rounded-lg">
|
| 100 |
+
<div class="flex items-center">
|
| 101 |
+
<i data-feather="zap" class="w-4 h-4 mr-2"></i>
|
| 102 |
+
<span>Focus Time</span>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
</div>
|
| 104 |
+
<span>9:00 AM - 11:30 AM</span>
|
| 105 |
+
</div>
|
| 106 |
+
<div class="flex items-center justify-between p-3 bg-white/10 rounded-lg">
|
| 107 |
+
<div class="flex items-center">
|
| 108 |
+
<i data-feather="clock" class="w-4 h-4 mr-2"></i>
|
| 109 |
+
<span>Creative Work</span>
|
|
|
|
|
|
|
| 110 |
</div>
|
| 111 |
+
<span>2:00 PM - 4:00 PM</span>
|
| 112 |
+
</div>
|
| 113 |
+
<div class="flex items-center justify-between p-3 bg-white/10 rounded-lg">
|
| 114 |
+
<div class="flex items-center">
|
| 115 |
+
<i data-feather="moon" class="w-4 h-4 mr-2"></i>
|
| 116 |
+
<span>Wind Down</span>
|
|
|
|
|
|
|
| 117 |
</div>
|
| 118 |
+
<span>9:30 PM</span>
|
| 119 |
</div>
|
| 120 |
</div>
|
| 121 |
</div>
|
| 122 |
</div>
|
| 123 |
</main>
|
| 124 |
|
| 125 |
+
<!-- Add Event Modal -->
|
| 126 |
+
<div id="addEventModal" class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50">
|
| 127 |
+
<div class="schedule-card rounded-2xl p-6 w-full max-w-md">
|
| 128 |
+
<div class="flex justify-between items-center mb-6">
|
| 129 |
+
<h3 class="text-xl font-bold">Add New Event</h3>
|
| 130 |
+
<button onclick="closeAddEventModal()" class="text-2xl">×</button>
|
| 131 |
+
</div>
|
| 132 |
+
<div class="space-y-4">
|
| 133 |
+
<div>
|
| 134 |
+
<label class="block mb-1">Event Name</label>
|
| 135 |
+
<input type="text" id="eventName" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 136 |
+
</div>
|
| 137 |
+
<div>
|
| 138 |
+
<label class="block mb-1">Date & Time</label>
|
| 139 |
+
<input type="datetime-local" id="eventDateTime" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 140 |
+
</div>
|
| 141 |
+
<div>
|
| 142 |
+
<label class="block mb-1">Duration (minutes)</label>
|
| 143 |
+
<input type="number" id="eventDuration" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2" value="30">
|
| 144 |
+
</div>
|
| 145 |
+
<div>
|
| 146 |
+
<label class="block mb-1">Category</label>
|
| 147 |
+
<select id="eventCategory" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 148 |
+
<option value="work">Work</option>
|
| 149 |
+
<option value="personal">Personal</option>
|
| 150 |
+
<option value="health">Health</option>
|
| 151 |
+
<option value="social">Social</option>
|
| 152 |
+
</select>
|
| 153 |
+
</div>
|
| 154 |
+
<div>
|
| 155 |
+
<label class="flex items-center">
|
| 156 |
+
<input type="checkbox" id="eventReminder" class="mr-2" checked>
|
| 157 |
+
<span>Set Reminder (15 mins before)</span>
|
| 158 |
+
</label>
|
| 159 |
+
</div>
|
| 160 |
+
<button onclick="addEvent()" class="w-full bg-[#FFA07A] py-3 rounded-lg font-bold hover:bg-[#ff8a5c] transition">
|
| 161 |
+
Save Event
|
| 162 |
+
</button>
|
| 163 |
+
</div>
|
| 164 |
</div>
|
| 165 |
+
</div>
|
| 166 |
</div>
|
| 167 |
|
| 168 |
<script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 169 |
// Initialize feather icons
|
| 170 |
feather.replace();
|
| 171 |
+
|
| 172 |
+
// Event management functions
|
| 173 |
+
let events = [];
|
| 174 |
+
|
| 175 |
+
function openAddEventModal() {
|
| 176 |
+
document.getElementById('addEventModal').classList.remove('hidden');
|
| 177 |
+
// Set default time to next hour
|
| 178 |
+
const now = new Date();
|
| 179 |
+
now.setHours(now.getHours() + 1, 0, 0, 0);
|
| 180 |
+
document.getElementById('eventDateTime').value = now.toISOString().slice(0, 16);
|
| 181 |
+
}
|
| 182 |
+
|
| 183 |
+
function closeAddEventModal() {
|
| 184 |
+
document.getElementById('addEventModal').classList.add('hidden');
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
function addEvent() {
|
| 188 |
+
const name = document.getElementById('eventName').value;
|
| 189 |
+
const dateTime = document.getElementById('eventDateTime').value;
|
| 190 |
+
const duration = parseInt(document.getElementById('eventDuration').value);
|
| 191 |
+
const category = document.getElementById('eventCategory').value;
|
| 192 |
+
const hasReminder = document.getElementById('eventReminder').checked;
|
| 193 |
+
|
| 194 |
+
if (name && dateTime) {
|
| 195 |
+
const newEvent = {
|
| 196 |
+
id: Date.now(),
|
| 197 |
+
name,
|
| 198 |
+
dateTime,
|
| 199 |
+
duration,
|
| 200 |
+
category,
|
| 201 |
+
hasReminder
|
| 202 |
+
};
|
| 203 |
+
|
| 204 |
+
events.push(newEvent);
|
| 205 |
+
renderCalendar();
|
| 206 |
+
renderEvents();
|
| 207 |
+
closeAddEventModal();
|
| 208 |
+
|
| 209 |
+
// Clear form
|
| 210 |
+
document.getElementById('eventName').value = '';
|
| 211 |
+
document.getElementById('eventDateTime').value = '';
|
| 212 |
+
document.getElementById('eventDuration').value = '30';
|
| 213 |
+
document.getElementById('eventCategory').value = 'work';
|
| 214 |
+
document.getElementById('eventReminder').checked = true;
|
| 215 |
+
|
| 216 |
+
// Set reminder if enabled
|
| 217 |
+
if (hasReminder) {
|
| 218 |
+
setEventReminder(newEvent);
|
| 219 |
+
}
|
| 220 |
+
} else {
|
| 221 |
+
alert('Please fill in all required fields');
|
| 222 |
+
}
|
| 223 |
+
}
|
| 224 |
+
|
| 225 |
+
function setEventReminder(event) {
|
| 226 |
+
console.log(`Reminder set for event: ${event.name} at ${event.dateTime}`);
|
| 227 |
+
// In production, this would use browser notifications or connect to a reminder service
|
| 228 |
+
alert(`Reminder set for "${event.name}"`);
|
| 229 |
+
}
|
| 230 |
+
|
| 231 |
+
function renderCalendar() {
|
| 232 |
+
const calendarDays = document.getElementById('calendarDays');
|
| 233 |
+
calendarDays.innerHTML = '';
|
| 234 |
+
|
| 235 |
+
// Generate calendar days (mock implementation)
|
| 236 |
+
const daysInMonth = 31;
|
| 237 |
+
const startDay = 5; // December 2023 starts on Friday
|
| 238 |
+
|
| 239 |
+
// Empty cells for days before the 1st
|
| 240 |
+
for (let i = 0; i < startDay; i++) {
|
| 241 |
+
const emptyDay = document.createElement('div');
|
| 242 |
+
emptyDay.className = 'h-12';
|
| 243 |
+
calendarDays.appendChild(emptyDay);
|
| 244 |
+
}
|
| 245 |
+
|
| 246 |
+
// Days of the month
|
| 247 |
+
for (let day = 1; day <= daysInMonth; day++) {
|
| 248 |
+
const dayElement = document.createElement('div');
|
| 249 |
+
dayElement.className = 'calendar-day h-12 flex items-center justify-center rounded-lg hover:bg-white/10 cursor-pointer';
|
| 250 |
+
dayElement.textContent = day;
|
| 251 |
+
|
| 252 |
+
// Highlight today
|
| 253 |
+
if (day === new Date().getDate()) {
|
| 254 |
+
dayElement.className += ' bg-[#FFA07A] text-white';
|
| 255 |
+
}
|
| 256 |
+
|
| 257 |
+
// Show event indicators
|
| 258 |
+
const dayEvents = events.filter(event => {
|
| 259 |
+
const eventDate = new Date(event.dateTime);
|
| 260 |
+
return eventDate.getDate() === day;
|
| 261 |
+
});
|
| 262 |
+
|
| 263 |
+
if (dayEvents.length > 0) {
|
| 264 |
+
const eventIndicator = document.createElement('div');
|
| 265 |
+
eventIndicator.className = 'absolute bottom-1 w-1 h-1 rounded-full bg-[#FFA07A]';
|
| 266 |
+
dayElement.appendChild(eventIndicator);
|
| 267 |
+
}
|
| 268 |
+
|
| 269 |
+
calendarDays.appendChild(dayElement);
|
| 270 |
+
}
|
| 271 |
+
}
|
| 272 |
+
|
| 273 |
+
function renderEvents() {
|
| 274 |
+
const eventsList = document.getElementById('eventsList');
|
| 275 |
+
eventsList.innerHTML = '';
|
| 276 |
+
|
| 277 |
+
// Filter today's events
|
| 278 |
+
const today = new Date().toDateString();
|
| 279 |
+
const todaysEvents = events.filter(event => {
|
| 280 |
+
return new Date(event.dateTime).toDateString() === today;
|
| 281 |
+
});
|
| 282 |
+
|
| 283 |
+
if (todaysEvents.length === 0) {
|
| 284 |
+
eventsList.innerHTML = '<p class="opacity-70 text-center py-4">No events scheduled for today</p>';
|
| 285 |
+
return;
|
| 286 |
+
}
|
| 287 |
+
|
| 288 |
+
todaysEvents.forEach(event => {
|
| 289 |
+
const eventItem = document.createElement('div');
|
| 290 |
+
eventItem.className = 'event-item schedule-card rounded-lg p-4 flex items-center justify-between transition';
|
| 291 |
+
|
| 292 |
+
const eventDate = new Date(event.dateTime);
|
| 293 |
+
const endTime = new Date(eventDate.getTime() + event.duration * 60000);
|
| 294 |
+
|
| 295 |
+
eventItem.innerHTML = `
|
| 296 |
+
<div class="flex items-center">
|
| 297 |
+
<div class="w-10 h-10 rounded-lg ${getCategoryColor(event.category)} flex items-center justify-center mr-3">
|
| 298 |
+
<i data-feather="${getCategoryIcon(event.category)}" class="w-5 h-5"></i>
|
| 299 |
+
</div>
|
| 300 |
+
<div>
|
| 301 |
+
<div class="font-medium">${event.name}</div>
|
| 302 |
+
<div class="text-xs opacity-80">
|
| 303 |
+
${formatTime(eventDate)} - ${formatTime(endTime)}
|
| 304 |
+
</div>
|
| 305 |
+
</div>
|
| 306 |
+
</div>
|
| 307 |
+
${event.hasReminder ? '<i data-feather="bell" class="w-4 h-4 text-yellow-400"></i>' : ''}
|
| 308 |
+
`;
|
| 309 |
+
|
| 310 |
+
eventsList.appendChild(eventItem);
|
| 311 |
+
});
|
| 312 |
+
|
| 313 |
+
feather.replace();
|
| 314 |
+
}
|
| 315 |
+
|
| 316 |
+
function getCategoryColor(category) {
|
| 317 |
+
switch(category) {
|
| 318 |
+
case 'work': return 'bg-blue-600';
|
| 319 |
+
case 'personal': return 'bg-purple-600';
|
| 320 |
+
case 'health': return 'bg-green-600';
|
| 321 |
+
case 'social': return 'bg-pink-600';
|
| 322 |
+
default: return 'bg-gray-600';
|
| 323 |
+
}
|
| 324 |
+
}
|
| 325 |
+
|
| 326 |
+
function getCategoryIcon(category) {
|
| 327 |
+
switch(category) {
|
| 328 |
+
case 'work': return 'briefcase';
|
| 329 |
+
case 'personal': return 'user';
|
| 330 |
+
case 'health': return 'heart';
|
| 331 |
+
case 'social': return 'users';
|
| 332 |
+
default: return 'calendar';
|
| 333 |
+
}
|
| 334 |
+
}
|
| 335 |
+
|
| 336 |
+
function formatTime(date) {
|
| 337 |
+
return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
|
| 338 |
+
}
|
| 339 |
+
|
| 340 |
+
// Initialize with some sample events
|
| 341 |
+
events = [
|
| 342 |
+
{
|
| 343 |
+
id: 1,
|
| 344 |
+
name: 'Team Meeting',
|
| 345 |
+
dateTime: '2023-12-10T10:00',
|
| 346 |
+
duration: 60,
|
| 347 |
+
category: 'work',
|
| 348 |
+
hasReminder: true
|
| 349 |
+
},
|
| 350 |
+
{
|
| 351 |
+
id: 2,
|
| 352 |
+
name: 'Yoga Session',
|
| 353 |
+
dateTime: '2023-12-10T18:00',
|
| 354 |
+
duration: 45,
|
| 355 |
+
category: 'health',
|
| 356 |
+
hasReminder: false
|
| 357 |
+
}
|
| 358 |
+
];
|
| 359 |
+
|
| 360 |
+
renderCalendar();
|
| 361 |
+
renderEvents();
|
| 362 |
</script>
|
| 363 |
</body>
|
| 364 |
</html>
|
tasks.html
CHANGED
|
@@ -6,38 +6,25 @@
|
|
| 6 |
<title>Task Genius | CircaSnooze</title>
|
| 7 |
<script src="https://cdn.tailwindcss.com"></script>
|
| 8 |
<script src="https://unpkg.com/feather-icons"></script>
|
| 9 |
-
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 10 |
-
<script src="https://cdn.jsdelivr.net/npm/vanta@latest/dist/vanta.birds.min.js"></script>
|
| 11 |
<style>
|
| 12 |
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
|
| 13 |
body {
|
| 14 |
font-family: 'Space Grotesk', sans-serif;
|
| 15 |
}
|
| 16 |
.gradient-bg {
|
| 17 |
-
background: linear-gradient(135deg, #
|
| 18 |
}
|
| 19 |
.task-card {
|
| 20 |
backdrop-filter: blur(10px);
|
| 21 |
background-color: rgba(255, 255, 255, 0.08);
|
| 22 |
}
|
| 23 |
-
.task-item {
|
| 24 |
-
transition: all 0.2s ease;
|
| 25 |
-
}
|
| 26 |
.task-item:hover {
|
| 27 |
transform: translateY(-2px);
|
| 28 |
-
|
| 29 |
-
.priority-high {
|
| 30 |
-
border-left: 4px solid #ef4444;
|
| 31 |
-
}
|
| 32 |
-
.priority-medium {
|
| 33 |
-
border-left: 4px solid #f59e0b;
|
| 34 |
-
}
|
| 35 |
-
.priority-low {
|
| 36 |
-
border-left: 4px solid #10b981;
|
| 37 |
}
|
| 38 |
</style>
|
| 39 |
</head>
|
| 40 |
-
<body class="min-h-screen text-white gradient-bg"
|
| 41 |
<div class="container mx-auto px-4 py-8">
|
| 42 |
<header class="flex justify-between items-center mb-12">
|
| 43 |
<a href="index.html" class="flex items-center space-x-2">
|
|
@@ -45,13 +32,13 @@
|
|
| 45 |
<span class="text-xl font-bold">CircaSnooze</span>
|
| 46 |
</a>
|
| 47 |
<nav class="hidden md:flex space-x-6">
|
| 48 |
-
<a href="index.html" class="hover:text-[#
|
| 49 |
-
<a href="sleep-calculator.html" class="hover:text-[#
|
| 50 |
-
<a href="scheduling.html" class="hover:text-[#
|
| 51 |
-
<a href="#" class="text-[#
|
| 52 |
-
<a href="research.html" class="hover:text-[#
|
| 53 |
</nav>
|
| 54 |
-
<button class="bg-[#
|
| 55 |
My Account
|
| 56 |
</button>
|
| 57 |
</header>
|
|
@@ -62,255 +49,206 @@
|
|
| 62 |
<div class="task-card rounded-3xl p-8 mb-8">
|
| 63 |
<div class="flex justify-between items-center mb-8">
|
| 64 |
<h1 class="text-3xl font-bold">Task Genius</h1>
|
| 65 |
-
<button class="bg-[#
|
| 66 |
</div>
|
| 67 |
-
|
| 68 |
-
<div class="flex space-x-4 mb-6 overflow-x-auto pb-2">
|
| 69 |
-
<button class="whitespace-nowrap px-4 py-2 rounded-full bg-[#8E54E9] font-medium">All Tasks</button>
|
| 70 |
-
<button class="whitespace-nowrap px-4 py-2 rounded-full bg-white/10 hover:bg-white/20 transition">Today</button>
|
| 71 |
-
<button class="whitespace-nowrap px-4 py-2 rounded-full bg-white/10 hover:bg-white/20 transition">Upcoming</button>
|
| 72 |
-
<button class="whitespace-nowrap px-4 py-2 rounded-full bg-white/10 hover:bg-white/20 transition">Completed</button>
|
| 73 |
-
<button class="whitespace-nowrap px-4 py-2 rounded-full bg-white/10 hover:bg-white/20 transition">Work</button>
|
| 74 |
-
<button class="whitespace-nowrap px-4 py-2 rounded-full bg-white/10 hover:bg-white/20 transition">Personal</button>
|
| 75 |
-
</div>
|
| 76 |
-
|
| 77 |
<div class="space-y-3">
|
| 78 |
-
<
|
| 79 |
-
|
| 80 |
-
<div class="flex items-center">
|
| 81 |
-
<input type="checkbox" class="mr-3 h-5 w-5 rounded border-white/30 bg-white/10">
|
| 82 |
-
<div>
|
| 83 |
-
<div class="font-medium">Finish project proposal</div>
|
| 84 |
-
<div class="text-sm opacity-80">Due today, 5:00 PM</div>
|
| 85 |
-
</div>
|
| 86 |
-
</div>
|
| 87 |
-
<div class="flex space-x-2">
|
| 88 |
-
<button class="p-1 rounded-full hover:bg-white/10">
|
| 89 |
-
<i data-feather="edit-2" class="w-4 h-4"></i>
|
| 90 |
-
</button>
|
| 91 |
-
<button class="p-1 rounded-full hover:bg-white/10">
|
| 92 |
-
<i data-feather="trash-2" class="w-4 h-4"></i>
|
| 93 |
-
</button>
|
| 94 |
-
</div>
|
| 95 |
-
</div>
|
| 96 |
-
</div>
|
| 97 |
-
|
| 98 |
-
<div class="task-item task-card rounded-lg p-4 priority-medium">
|
| 99 |
-
<div class="flex items-center justify-between">
|
| 100 |
-
<div class="flex items-center">
|
| 101 |
-
<input type="checkbox" class="mr-3 h-5 w-5 rounded border-white/30 bg-white/10">
|
| 102 |
-
<div>
|
| 103 |
-
<div class="font-medium">Schedule dentist appointment</div>
|
| 104 |
-
<div class="text-sm opacity-80">Due tomorrow</div>
|
| 105 |
-
</div>
|
| 106 |
-
</div>
|
| 107 |
-
<div class="flex space-x-2">
|
| 108 |
-
<button class="p-1 rounded-full hover:bg-white/10">
|
| 109 |
-
<i data-feather="edit-2" class="w-4 h-4"></i>
|
| 110 |
-
</button>
|
| 111 |
-
<button class="p-1 rounded-full hover:bg-white/10">
|
| 112 |
-
<i data-feather="trash-2" class="w-4 h-4"></i>
|
| 113 |
-
</button>
|
| 114 |
-
</div>
|
| 115 |
-
</div>
|
| 116 |
-
</div>
|
| 117 |
-
|
| 118 |
-
<div class="task-item task-card rounded-lg p-4 priority-low">
|
| 119 |
-
<div class="flex items-center justify-between">
|
| 120 |
-
<div class="flex items-center">
|
| 121 |
-
<input type="checkbox" class="mr-3 h-5 w-5 rounded border-white/30 bg-white/10">
|
| 122 |
-
<div>
|
| 123 |
-
<div class="font-medium">Research new productivity tools</div>
|
| 124 |
-
<div class="text-sm opacity-80">Due in 3 days</div>
|
| 125 |
-
</div>
|
| 126 |
-
</div>
|
| 127 |
-
<div class="flex space-x-2">
|
| 128 |
-
<button class="p-1 rounded-full hover:bg-white/10">
|
| 129 |
-
<i data-feather="edit-2" class="w-4 h-4"></i>
|
| 130 |
-
</button>
|
| 131 |
-
<button class="p-1 rounded-full hover:bg-white/10">
|
| 132 |
-
<i data-feather="trash-2" class="w-4 h-4"></i>
|
| 133 |
-
</button>
|
| 134 |
-
</div>
|
| 135 |
-
</div>
|
| 136 |
-
</div>
|
| 137 |
-
|
| 138 |
-
<div class="task-item task-card rounded-lg p-4">
|
| 139 |
-
<div class="flex items-center justify-between">
|
| 140 |
-
<div class="flex items-center">
|
| 141 |
-
<input type="checkbox" class="mr-3 h-5 w-5 rounded border-white/30 bg-white/10" checked>
|
| 142 |
-
<div>
|
| 143 |
-
<div class="font-medium opacity-70 line-through">Buy groceries</div>
|
| 144 |
-
<div class="text-sm opacity-50">Completed</div>
|
| 145 |
-
</div>
|
| 146 |
-
</div>
|
| 147 |
-
<div class="flex space-x-2">
|
| 148 |
-
<button class="p-1 rounded-full hover:bg-white/10">
|
| 149 |
-
<i data-feather="edit-2" class="w-4 h-4"></i>
|
| 150 |
-
</button>
|
| 151 |
-
<button class="p-1 rounded-full hover:bg-white/10">
|
| 152 |
-
<i data-feather="trash-2" class="w-4 h-4"></i>
|
| 153 |
-
</button>
|
| 154 |
-
</div>
|
| 155 |
-
</div>
|
| 156 |
-
</div>
|
| 157 |
-
</div>
|
| 158 |
-
</div>
|
| 159 |
-
|
| 160 |
-
<div class="task-card rounded-3xl p-8">
|
| 161 |
-
<h2 class="text-2xl font-bold mb-6">Add New Task</h2>
|
| 162 |
-
<div class="space-y-4">
|
| 163 |
-
<div>
|
| 164 |
-
<label class="block mb-1 text-sm">Task Name</label>
|
| 165 |
-
<input type="text" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 166 |
-
</div>
|
| 167 |
-
<div>
|
| 168 |
-
<label class="block mb-1 text-sm">Description</label>
|
| 169 |
-
<textarea class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2 h-24"></textarea>
|
| 170 |
-
</div>
|
| 171 |
-
<div class="grid grid-cols-2 gap-4">
|
| 172 |
-
<div>
|
| 173 |
-
<label class="block mb-1 text-sm">Due Date</label>
|
| 174 |
-
<input type="date" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 175 |
-
</div>
|
| 176 |
-
<div>
|
| 177 |
-
<label class="block mb-1 text-sm">Priority</label>
|
| 178 |
-
<select class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 179 |
-
<option>Low</option>
|
| 180 |
-
<option selected>Medium</option>
|
| 181 |
-
<option>High</option>
|
| 182 |
-
</select>
|
| 183 |
-
</div>
|
| 184 |
-
</div>
|
| 185 |
-
<div>
|
| 186 |
-
<label class="block mb-1 text-sm">Category</label>
|
| 187 |
-
<select class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 188 |
-
<option>Work</option>
|
| 189 |
-
<option>Personal</option>
|
| 190 |
-
<option>Health</option>
|
| 191 |
-
<option>Learning</option>
|
| 192 |
-
<option>Other</option>
|
| 193 |
-
</select>
|
| 194 |
-
</div>
|
| 195 |
-
<button class="w-full bg-[#8E54E9] py-3 rounded-lg font-bold hover:bg-[#7d3fd8] transition">
|
| 196 |
-
Add Task
|
| 197 |
-
</button>
|
| 198 |
</div>
|
| 199 |
</div>
|
| 200 |
</div>
|
| 201 |
-
|
| 202 |
-
<div>
|
| 203 |
-
<
|
| 204 |
-
|
| 205 |
-
<
|
| 206 |
-
<div class="text-center">
|
| 207 |
-
<div class="text-3xl font-bold">12</div>
|
| 208 |
-
<div class="text-sm opacity-80">Total Tasks</div>
|
| 209 |
-
</div>
|
| 210 |
-
<div class="text-center">
|
| 211 |
-
<div class="text-3xl font-bold">3</div>
|
| 212 |
-
<div class="text-sm opacity-80">Completed</div>
|
| 213 |
-
</div>
|
| 214 |
-
<div class="text-center">
|
| 215 |
-
<div class="text-3xl font-bold">2</div>
|
| 216 |
-
<div class="text-sm opacity-80">Overdue</div>
|
| 217 |
-
</div>
|
| 218 |
-
</div>
|
| 219 |
-
<div class="h-48 bg-white/5 rounded-xl mb-6">
|
| 220 |
-
<!-- Chart would go here -->
|
| 221 |
-
<div class="flex items-center justify-center h-full">
|
| 222 |
-
<div class="text-center">
|
| 223 |
-
<i data-feather="pie-chart" class="w-12 h-12 mx-auto mb-2"></i>
|
| 224 |
-
<p class="opacity-80">Your productivity chart</p>
|
| 225 |
-
</div>
|
| 226 |
-
</div>
|
| 227 |
-
</div>
|
| 228 |
-
<div class="space-y-4">
|
| 229 |
-
<div class="flex items-center justify-between">
|
| 230 |
-
<span>Highest Productivity</span>
|
| 231 |
-
<span class="font-medium">9:00 AM</span>
|
| 232 |
-
</div>
|
| 233 |
-
<div class="flex items-center justify-between">
|
| 234 |
-
<span>Task Completion Rate</span>
|
| 235 |
-
<span class="font-medium">75%</span>
|
| 236 |
-
</div>
|
| 237 |
-
</div>
|
| 238 |
-
</div>
|
| 239 |
-
|
| 240 |
-
<div class="task-card rounded-3xl p-8">
|
| 241 |
-
<h2 class="text-2xl font-bold mb-6">Suggested Tasks</h2>
|
| 242 |
-
<div class="space-y-4">
|
| 243 |
-
<div class="flex items-start">
|
| 244 |
-
<div class="w-10 h-10 rounded-lg bg-purple-600 flex items-center justify-center mr-3 mt-1">
|
| 245 |
-
<i data-feather="refresh-cw" class="w-5 h-5"></i>
|
| 246 |
-
</div>
|
| 247 |
-
<div>
|
| 248 |
-
<div class="font-medium">Review weekly goals</div>
|
| 249 |
-
<div class="text-sm opacity-80">Every Sunday evening</div>
|
| 250 |
-
</div>
|
| 251 |
-
</div>
|
| 252 |
-
<div class="flex items-start">
|
| 253 |
-
<div class="w-10 h-10 rounded-lg bg-blue-600 flex items-center justify-center mr-3 mt-1">
|
| 254 |
-
<i data-feather="book" class="w-5 h-5"></i>
|
| 255 |
-
</div>
|
| 256 |
-
<div>
|
| 257 |
-
<div class="font-medium">Read 30 minutes</div>
|
| 258 |
-
<div class="text-sm opacity-80">Daily before bed</div>
|
| 259 |
-
</div>
|
| 260 |
-
</div>
|
| 261 |
-
<div class="flex items-start">
|
| 262 |
-
<div class="w-10 h-10 rounded-lg bg-green-600 flex items-center justify-center mr-3 mt-1">
|
| 263 |
-
<i data-feather="dumbbell" class="w-5 h-5"></i>
|
| 264 |
-
</div>
|
| 265 |
-
<div>
|
| 266 |
-
<div class="font-medium">Exercise routine</div>
|
| 267 |
-
<div class="text-sm opacity-80">3x per week</div>
|
| 268 |
-
</div>
|
| 269 |
-
</div>
|
| 270 |
-
<div class="flex items-start">
|
| 271 |
-
<div class="w-10 h-10 rounded-lg bg-yellow-600 flex items-center justify-center mr-3 mt-1">
|
| 272 |
-
<i data-feather="coffee" class="w-5 h-5"></i>
|
| 273 |
-
</div>
|
| 274 |
-
<div>
|
| 275 |
-
<div class="font-medium">Plan next day</div>
|
| 276 |
-
<div class="text-sm opacity-80">Each evening</div>
|
| 277 |
-
</div>
|
| 278 |
-
</div>
|
| 279 |
-
</div>
|
| 280 |
</div>
|
| 281 |
</div>
|
| 282 |
</div>
|
| 283 |
</main>
|
| 284 |
|
| 285 |
-
<
|
| 286 |
-
|
| 287 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 288 |
</div>
|
| 289 |
-
</
|
| 290 |
</div>
|
| 291 |
|
| 292 |
<script>
|
| 293 |
-
// Initialize Vanta.js background
|
| 294 |
-
VANTA.BIRDS({
|
| 295 |
-
el: "#vanta-bg",
|
| 296 |
-
mouseControls: true,
|
| 297 |
-
touchControls: true,
|
| 298 |
-
gyroControls: false,
|
| 299 |
-
minHeight: 200.00,
|
| 300 |
-
minWidth: 200.00,
|
| 301 |
-
scale: 1.00,
|
| 302 |
-
color1: 0x8e54e9,
|
| 303 |
-
color2: 0x4776e6,
|
| 304 |
-
birdSize: 1.50,
|
| 305 |
-
wingSpan: 20.00,
|
| 306 |
-
speedLimit: 5.00,
|
| 307 |
-
separation: 70.00,
|
| 308 |
-
alignment: 40.00,
|
| 309 |
-
cohesion: 45.00
|
| 310 |
-
});
|
| 311 |
-
|
| 312 |
// Initialize feather icons
|
| 313 |
feather.replace();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 314 |
</script>
|
| 315 |
</body>
|
| 316 |
</html>
|
|
|
|
| 6 |
<title>Task Genius | CircaSnooze</title>
|
| 7 |
<script src="https://cdn.tailwindcss.com"></script>
|
| 8 |
<script src="https://unpkg.com/feather-icons"></script>
|
|
|
|
|
|
|
| 9 |
<style>
|
| 10 |
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
|
| 11 |
body {
|
| 12 |
font-family: 'Space Grotesk', sans-serif;
|
| 13 |
}
|
| 14 |
.gradient-bg {
|
| 15 |
+
background: linear-gradient(135deg, #1a2a6c 0%, #b21f1f 100%);
|
| 16 |
}
|
| 17 |
.task-card {
|
| 18 |
backdrop-filter: blur(10px);
|
| 19 |
background-color: rgba(255, 255, 255, 0.08);
|
| 20 |
}
|
|
|
|
|
|
|
|
|
|
| 21 |
.task-item:hover {
|
| 22 |
transform: translateY(-2px);
|
| 23 |
+
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
}
|
| 25 |
</style>
|
| 26 |
</head>
|
| 27 |
+
<body class="min-h-screen text-white gradient-bg">
|
| 28 |
<div class="container mx-auto px-4 py-8">
|
| 29 |
<header class="flex justify-between items-center mb-12">
|
| 30 |
<a href="index.html" class="flex items-center space-x-2">
|
|
|
|
| 32 |
<span class="text-xl font-bold">CircaSnooze</span>
|
| 33 |
</a>
|
| 34 |
<nav class="hidden md:flex space-x-6">
|
| 35 |
+
<a href="index.html" class="hover:text-[#FFA07A] transition">Home</a>
|
| 36 |
+
<a href="sleep-calculator.html" class="hover:text-[#FFA07A] transition">Sleep</a>
|
| 37 |
+
<a href="scheduling.html" class="hover:text-[#FFA07A] transition">Schedule</a>
|
| 38 |
+
<a href="#" class="text-[#FFA07A] font-medium">Tasks</a>
|
| 39 |
+
<a href="research.html" class="hover:text-[#FFA07A] transition">Research</a>
|
| 40 |
</nav>
|
| 41 |
+
<button class="bg-[#FFA07A] px-4 py-2 rounded-lg text-sm font-medium hover:bg-[#ff8a5c] transition">
|
| 42 |
My Account
|
| 43 |
</button>
|
| 44 |
</header>
|
|
|
|
| 49 |
<div class="task-card rounded-3xl p-8 mb-8">
|
| 50 |
<div class="flex justify-between items-center mb-8">
|
| 51 |
<h1 class="text-3xl font-bold">Task Genius</h1>
|
| 52 |
+
<button onclick="openAddTaskModal()" class="bg-[#FFA07A] px-4 py-2 rounded-lg font-medium">Add Task</button>
|
| 53 |
</div>
|
| 54 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 55 |
<div class="space-y-3">
|
| 56 |
+
<!-- Task list will be populated here -->
|
| 57 |
+
<div id="taskList"></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
</div>
|
| 59 |
</div>
|
| 60 |
</div>
|
| 61 |
+
|
| 62 |
+
<div class="task-card rounded-3xl p-8">
|
| 63 |
+
<h2 class="text-2xl font-bold mb-6">Upcoming Tasks</h2>
|
| 64 |
+
<div id="upcomingTasks" class="space-y-4">
|
| 65 |
+
<!-- Upcoming tasks will be shown here -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 66 |
</div>
|
| 67 |
</div>
|
| 68 |
</div>
|
| 69 |
</main>
|
| 70 |
|
| 71 |
+
<!-- Add Task Modal -->
|
| 72 |
+
<div id="addTaskModal" class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50">
|
| 73 |
+
<div class="task-card rounded-2xl p-6 w-full max-w-md">
|
| 74 |
+
<div class="flex justify-between items-center mb-6">
|
| 75 |
+
<h3 class="text-xl font-bold">Add New Task</h3>
|
| 76 |
+
<button onclick="closeAddTaskModal()" class="text-2xl">×</button>
|
| 77 |
+
</div>
|
| 78 |
+
<div class="space-y-4">
|
| 79 |
+
<div>
|
| 80 |
+
<label class="block mb-1">Task Name</label>
|
| 81 |
+
<input type="text" id="taskName" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 82 |
+
</div>
|
| 83 |
+
<div>
|
| 84 |
+
<label class="block mb-1">Due Date</label>
|
| 85 |
+
<input type="datetime-local" id="taskDueDate" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 86 |
+
</div>
|
| 87 |
+
<div>
|
| 88 |
+
<label class="block mb-1">Priority</label>
|
| 89 |
+
<select id="taskPriority" class="w-full bg-white/10 border border-white/20 rounded-lg px-4 py-2">
|
| 90 |
+
<option value="low">Low</option>
|
| 91 |
+
<option value="medium">Medium</option>
|
| 92 |
+
<option value="high">High</option>
|
| 93 |
+
</select>
|
| 94 |
+
</div>
|
| 95 |
+
<div>
|
| 96 |
+
<label class="flex items-center">
|
| 97 |
+
<input type="checkbox" id="taskReminder" class="mr-2">
|
| 98 |
+
<span>Set Reminder</span>
|
| 99 |
+
</label>
|
| 100 |
+
</div>
|
| 101 |
+
<button onclick="addTask()" class="w-full bg-[#FFA07A] py-3 rounded-lg font-bold hover:bg-[#ff8a5c] transition">
|
| 102 |
+
Save Task
|
| 103 |
+
</button>
|
| 104 |
+
</div>
|
| 105 |
</div>
|
| 106 |
+
</div>
|
| 107 |
</div>
|
| 108 |
|
| 109 |
<script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 110 |
// Initialize feather icons
|
| 111 |
feather.replace();
|
| 112 |
+
|
| 113 |
+
// Task management functions
|
| 114 |
+
let tasks = [];
|
| 115 |
+
|
| 116 |
+
function openAddTaskModal() {
|
| 117 |
+
document.getElementById('addTaskModal').classList.remove('hidden');
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
function closeAddTaskModal() {
|
| 121 |
+
document.getElementById('addTaskModal').classList.add('hidden');
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
function addTask() {
|
| 125 |
+
const name = document.getElementById('taskName').value;
|
| 126 |
+
const dueDate = document.getElementById('taskDueDate').value;
|
| 127 |
+
const priority = document.getElementById('taskPriority').value;
|
| 128 |
+
const hasReminder = document.getElementById('taskReminder').checked;
|
| 129 |
+
|
| 130 |
+
if (name) {
|
| 131 |
+
const newTask = {
|
| 132 |
+
id: Date.now(),
|
| 133 |
+
name,
|
| 134 |
+
dueDate,
|
| 135 |
+
priority,
|
| 136 |
+
hasReminder,
|
| 137 |
+
completed: false
|
| 138 |
+
};
|
| 139 |
+
|
| 140 |
+
tasks.push(newTask);
|
| 141 |
+
renderTasks();
|
| 142 |
+
closeAddTaskModal();
|
| 143 |
+
|
| 144 |
+
// Clear form
|
| 145 |
+
document.getElementById('taskName').value = '';
|
| 146 |
+
document.getElementById('taskDueDate').value = '';
|
| 147 |
+
document.getElementById('taskPriority').value = 'medium';
|
| 148 |
+
document.getElementById('taskReminder').checked = false;
|
| 149 |
+
|
| 150 |
+
// Set reminder if enabled
|
| 151 |
+
if (hasReminder && dueDate) {
|
| 152 |
+
setReminder(newTask);
|
| 153 |
+
}
|
| 154 |
+
} else {
|
| 155 |
+
alert('Please enter a task name');
|
| 156 |
+
}
|
| 157 |
+
}
|
| 158 |
+
|
| 159 |
+
function setReminder(task) {
|
| 160 |
+
console.log(`Reminder set for task: ${task.name} at ${task.dueDate}`);
|
| 161 |
+
// In production, this would use browser notifications or connect to a reminder service
|
| 162 |
+
alert(`Reminder set for "${task.name}"`);
|
| 163 |
+
}
|
| 164 |
+
|
| 165 |
+
function renderTasks() {
|
| 166 |
+
const taskList = document.getElementById('taskList');
|
| 167 |
+
const upcomingTasks = document.getElementById('upcomingTasks');
|
| 168 |
+
|
| 169 |
+
taskList.innerHTML = '';
|
| 170 |
+
upcomingTasks.innerHTML = '';
|
| 171 |
+
|
| 172 |
+
tasks.forEach(task => {
|
| 173 |
+
const taskItem = document.createElement('div');
|
| 174 |
+
taskItem.className = `task-item task-card rounded-lg p-4 flex items-center justify-between ${task.completed ? 'opacity-60' : ''}`;
|
| 175 |
+
|
| 176 |
+
taskItem.innerHTML = `
|
| 177 |
+
<div class="flex items-center">
|
| 178 |
+
<input type="checkbox" ${task.completed ? 'checked' : ''} onchange="toggleTaskCompletion(${task.id})" class="mr-3">
|
| 179 |
+
<div>
|
| 180 |
+
<div class="font-medium">${task.name}</div>
|
| 181 |
+
<div class="text-xs opacity-80">${formatDate(task.dueDate)}</div>
|
| 182 |
+
</div>
|
| 183 |
+
</div>
|
| 184 |
+
<div class="flex items-center space-x-2">
|
| 185 |
+
<span class="text-xs px-2 py-1 rounded-full ${getPriorityClass(task.priority)}">
|
| 186 |
+
${task.priority}
|
| 187 |
+
</span>
|
| 188 |
+
${task.hasReminder ? '<i data-feather="bell" class="w-4 h-4 text-yellow-400"></i>' : ''}
|
| 189 |
+
</div>
|
| 190 |
+
`;
|
| 191 |
+
|
| 192 |
+
taskList.appendChild(taskItem);
|
| 193 |
+
|
| 194 |
+
// Add to upcoming tasks if not completed and has due date
|
| 195 |
+
if (!task.completed && task.dueDate) {
|
| 196 |
+
const upcomingItem = document.createElement('div');
|
| 197 |
+
upcomingItem.className = 'task-card rounded-lg p-3';
|
| 198 |
+
upcomingItem.innerHTML = `
|
| 199 |
+
<div class="font-medium">${task.name}</div>
|
| 200 |
+
<div class="text-xs opacity-80">Due: ${formatDate(task.dueDate)}</div>
|
| 201 |
+
`;
|
| 202 |
+
upcomingTasks.appendChild(upcomingItem);
|
| 203 |
+
}
|
| 204 |
+
});
|
| 205 |
+
|
| 206 |
+
feather.replace();
|
| 207 |
+
}
|
| 208 |
+
|
| 209 |
+
function toggleTaskCompletion(taskId) {
|
| 210 |
+
const taskIndex = tasks.findIndex(task => task.id === taskId);
|
| 211 |
+
if (taskIndex !== -1) {
|
| 212 |
+
tasks[taskIndex].completed = !tasks[taskIndex].completed;
|
| 213 |
+
renderTasks();
|
| 214 |
+
}
|
| 215 |
+
}
|
| 216 |
+
|
| 217 |
+
function getPriorityClass(priority) {
|
| 218 |
+
switch(priority) {
|
| 219 |
+
case 'high': return 'bg-red-600/30';
|
| 220 |
+
case 'medium': return 'bg-yellow-600/30';
|
| 221 |
+
default: return 'bg-green-600/30';
|
| 222 |
+
}
|
| 223 |
+
}
|
| 224 |
+
|
| 225 |
+
function formatDate(dateString) {
|
| 226 |
+
if (!dateString) return 'No deadline';
|
| 227 |
+
const date = new Date(dateString);
|
| 228 |
+
return date.toLocaleString();
|
| 229 |
+
}
|
| 230 |
+
|
| 231 |
+
// Initialize with some sample tasks
|
| 232 |
+
tasks = [
|
| 233 |
+
{
|
| 234 |
+
id: 1,
|
| 235 |
+
name: 'Complete project proposal',
|
| 236 |
+
dueDate: '2023-12-15T14:00',
|
| 237 |
+
priority: 'high',
|
| 238 |
+
hasReminder: true,
|
| 239 |
+
completed: false
|
| 240 |
+
},
|
| 241 |
+
{
|
| 242 |
+
id: 2,
|
| 243 |
+
name: 'Schedule team meeting',
|
| 244 |
+
dueDate: '2023-12-10T10:00',
|
| 245 |
+
priority: 'medium',
|
| 246 |
+
hasReminder: false,
|
| 247 |
+
completed: false
|
| 248 |
+
}
|
| 249 |
+
];
|
| 250 |
+
|
| 251 |
+
renderTasks();
|
| 252 |
</script>
|
| 253 |
</body>
|
| 254 |
</html>
|