Changes to taskflow2.scroll.pub

root
root
25 days ago
Initial commit
.log.txt
Changed around line 1
+ read taskflow2.scroll.pub https://hub.scroll.pub/edit.html?folderName=taskflow2.scroll.pub 1735360731614 ::ffff:49.204.225.94 0.0 200 Chrome.131 WindowsNT.10.0
+ read taskflow2.scroll.pub https://hub.scroll.pub/ls.json?folderName=taskflow2.scroll.pub 1735360733476 ::ffff:49.204.225.94 0.0 200 Chrome.131 WindowsNT.10.0
+ read taskflow2.scroll.pub https://hub.scroll.pub/readFile.htm?folderName=taskflow2.scroll.pub&filePath=taskflow2.scroll.pub%2Findex.scroll 1735360733713 ::ffff:49.204.225.94 0.0 200 Chrome.131 WindowsNT.10.0
+ read taskflow2.scroll.pub http://taskflow2.scroll.pub/index.html 1735360742325 ::ffff:49.204.225.94 0.0 200 Chrome.131 WindowsNT.10.0
+ read taskflow2.scroll.pub http://taskflow2.scroll.pub/script.js 1735360742642 ::ffff:49.204.225.94 0.0 200 Chrome.131 WindowsNT.10.0
+ read taskflow2.scroll.pub http://taskflow2.scroll.pub/style.css 1735360742648 ::ffff:49.204.225.94 0.0 200 Chrome.131 WindowsNT.10.0
+ read taskflow2.scroll.pub http://taskflow2.scroll.pub/favicon.ico 1735360743038 ::ffff:49.204.225.94 0.0 200 Chrome.131 WindowsNT.10.0
.stats.json
Changed around line 1
+ {
+ "files": [
+ "body.html",
+ "index.scroll",
+ "prompt.json",
+ "readme.scroll",
+ "script.js",
+ "style.css"
+ ],
+ "hasSslCert": false,
+ "stats": {
+ "folder": "taskflow2.scroll.pub",
+ "folderLink": "http://taskflow2.scroll.pub",
+ "created": "2024-12-28T04:38:50.000Z",
+ "revised": "2024-12-28T04:38:50.000Z",
+ "files": 6,
+ "mb": 1,
+ "revisions": 1,
+ "hash": "13f6b4250e"
+ }
+ }
body.html
Changed around line 1
-

TaskFlow

-
-
-
+
+
+
+ ☀️
+ 🌙
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
+
-
-
+
+
-
+
+ Completed Tasks
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+

Add Task

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-

Organize your workflow with ease

-
+

TaskFlow - Organize your work with ease

+
index.html
Changed around line 1
+
+
+
+
+ TaskFlow - Simple Task Management
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

TaskFlow

+
+
+
+
+
+
+
+
+
+

To Do

+
+
+
+
+
+

In Progress

+
+
+
+
+

Completed

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Organize your workflow with ease

+
+
+
+
index.scroll
Changed around line 2: buildHtml
- title TaskFlow - Simple Task Management
+ title TaskFlow - Beautiful Task Management
- script.js
+ script.js
prompt.json
Changed around line 1
- "id": "8f148f52-9304-4942-aae1-ccb03bb3fceb",
- "object": "chat.completion",
- "created": 1735360709,
- "model": "deepseek-chat",
- "choices": [
+ "id": "msg_01XgHvSswAwefPgqXfVfPC13",
+ "type": "message",
+ "role": "assistant",
+ "model": "claude-3-5-sonnet-20241022",
+ "content": [
- "index": 0,
- "message": {
- "role": "assistant",
- "content": "---domain---\ntaskflow.scroll.pub\n---index.scroll---\nbuildHtml\nbaseUrl https://taskflow.scroll.pub\nmetaTags\neditButton /edit.html\ntitle TaskFlow - Simple Task Management\nstyle.css\nbody.html\nscript.js\n---body.html---\n
\n

TaskFlow

\n
\n \n \n
\n
\n\n
\n
\n
\n

To Do

\n \n
\n
\n \n
\n

In Progress

\n
\n
\n \n
\n

Completed

\n
\n
\n
\n\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n
\n
\n
\n
\n\n
\n

Organize your workflow with ease

\n
\n---style.css---\n:root {\n --bg-light: #f5f5f5;\n --bg-dark: #1a1a1a;\n --text-light: #333;\n --text-dark: #f5f5f5;\n --primary: #6366f1;\n --primary-hover: #4f46e5;\n --gradient: linear-gradient(135deg, #6366f1, #a855f7);\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: 'Segoe UI', sans-serif;\n line-height: 1.6;\n background: var(--bg-light);\n color: var(--text-light);\n transition: all 0.3s ease;\n}\n\nbody.dark-mode {\n background: var(--bg-dark);\n color: var(--text-dark);\n}\n\nheader {\n background: var(--gradient);\n color: white;\n padding: 2rem;\n text-align: center;\n}\n\n.theme-switch {\n position: absolute;\n top: 1rem;\n right: 1rem;\n}\n\nmain {\n padding: 2rem;\n max-width: 1200px;\n margin: 0 auto;\n}\n\n.taskboard {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 2rem;\n}\n\n.column {\n background: rgba(255, 255, 255, 0.9);\n border-radius: 1rem;\n padding: 1rem;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n}\n\n.dark-mode .column {\n background: rgba(0, 0, 0, 0.2);\n}\n\n.tasks {\n min-height: 100px;\n margin-top: 1rem;\n}\n\n.task {\n background: white;\n border-radius: 0.5rem;\n padding: 1rem;\n margin-bottom: 1rem;\n cursor: grab;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n\n.dark-mode .task {\n background: rgba(255, 255, 255, 0.1);\n}\n\n.add-task {\n width: 100%;\n padding: 0.5rem;\n border: none;\n border-radius: 0.5rem;\n background: var(--primary);\n color: white;\n cursor: pointer;\n transition: background 0.3s ease;\n}\n\n.add-task:hover {\n background: var(--primary-hover);\n}\n\n@media (max-width: 768px) {\n .taskboard {\n grid-template-columns: 1fr;\n }\n}\n---script.js---\ndocument.addEventListener('DOMContentLoaded', () => {\n const themeToggle = document.getElementById('theme-toggle');\n const body = document.body;\n const taskModal = document.getElementById('task-modal');\n const addTaskBtn = document.querySelector('.add-task');\n const cancelBtn = document.querySelector('.cancel');\n const taskForm = document.querySelector('#task-modal form');\n const todoColumn = document.querySelector('#todo .tasks');\n\n // Theme toggle\n themeToggle.addEventListener('change', () => {\n body.classList.toggle('dark-mode');\n });\n\n // Task modal\n addTaskBtn.addEventListener('click', () => {\n taskModal.showModal();\n });\n\n cancelBtn.addEventListener('click', () => {\n taskModal.close();\n });\n\n // Add new task\n taskForm.addEventListener('submit', (e) => {\n e.preventDefault();\n \n const task = {\n name: document.getElementById('task-name').value,\n description: document.getElementById('task-desc').value,\n labels: document.getElementById('task-labels').value,\n dueDate: document.getElementById('task-due').value,\n color: document.getElementById('task-color').value\n };\n\n createTask(task);\n taskModal.close();\n taskForm.reset();\n });\n\n function createTask(task) {\n const taskElement = document.createElement('div');\n taskElement.classList.add('task');\n taskElement.style.backgroundColor = task.color;\n taskElement.innerHTML = `\n

${task.name}

\n

${task.description}

\n
\n ${task.labels}\n ${task.dueDate}\n
\n `;\n todoColumn.appendChild(taskElement);\n }\n\n // Drag and drop functionality\n const tasks = document.querySelectorAll('.task');\n const columns = document.querySelectorAll('.column');\n\n tasks.forEach(task => {\n task.addEventListener('dragstart', dragStart);\n task.addEventListener('dragend', dragEnd);\n });\n\n columns.forEach(column => {\n column.addEventListener('dragover', dragOver);\n column.addEventListener('drop', dragDrop);\n });\n\n let draggedTask = null;\n\n function dragStart() {\n draggedTask = this;\n setTimeout(() => this.style.display = 'none', 0);\n }\n\n function dragEnd() {\n draggedTask.style.display = 'block';\n draggedTask = null;\n }\n\n function dragOver(e) {\n e.preventDefault();\n }\n\n function dragDrop() {\n this.querySelector('.tasks').appendChild(draggedTask);\n }\n});\n---end---"
- },
- "logprobs": null,
- "finish_reason": "stop"
+ "type": "text",
+ "text": "I'll help create a sleek taskboard application. For the domain, I suggest:\n\n---domain---\ntaskflow.scroll.pub\n\n---index.scroll---\nbuildHtml\nbaseUrl https://taskflow.scroll.pub\nmetaTags\neditButton /edit.html\ntitle TaskFlow - Beautiful Task Management\nstyle.css\nbody.html\nscript.js\n\n---body.html---\n
\n
TaskFlow
\n
\n \n
\n
\n\n
\n
\n
\n

To Do

\n
\n \n
\n\n
\n

In Progress

\n
\n \n
\n\n
\n

Completed

\n
\n Completed Tasks\n \n
\n
\n
\n
\n\n \n
\n

Add Task

\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n\n
\n

TaskFlow - Organize your work with ease

\n
\n\n---style.css---\n:root {\n --primary-gradient: linear-gradient(135deg, #6e8efb, #a777e3);\n --bg-light: #f8f9fa;\n --bg-dark: #1a1a1a;\n --text-light: #333;\n --text-dark: #fff;\n --card-light: #fff;\n --card-dark: #2d2d2d;\n --shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n}\n\n[data-theme=\"dark\"] {\n --bg-color: var(--bg-dark);\n --text-color: var(--text-dark);\n --card-bg: var(--card-dark);\n}\n\n[data-theme=\"light\"] {\n --bg-color: var(--bg-light);\n --text-color: var(--text-light);\n --card-bg: var(--card-light);\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: 'Segoe UI', system-ui, sans-serif;\n background: var(--bg-color);\n color: var(--text-color);\n transition: background-color 0.3s, color 0.3s;\n}\n\nheader {\n background: var(--primary-gradient);\n padding: 1rem 2rem;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: var(--shadow);\n}\n\n.logo {\n font-size: 1.5rem;\n font-weight: bold;\n color: white;\n}\n\n.theme-toggle button {\n background: none;\n border: none;\n cursor: pointer;\n font-size: 1.2rem;\n padding: 0.5rem;\n}\n\nmain {\n padding: 2rem;\n max-width: 1400px;\n margin: 0 auto;\n}\n\n.board-container {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 2rem;\n margin-bottom: 2rem;\n}\n\n.board-column {\n background: var(--card-bg);\n border-radius: 10px;\n padding: 1rem;\n box-shadow: var(--shadow);\n}\n\n.task-list {\n min-height: 200px;\n margin: 1rem 0;\n}\n\n.task-card {\n background: var(--card-bg);\n border-radius: 8px;\n padding: 1rem;\n margin-bottom: 1rem;\n cursor: grab;\n box-shadow: var(--shadow);\n transition: transform 0.2s;\n}\n\n.task-card:hover {\n transform: translateY(-2px);\n}\n\n.task-card.dragging {\n opacity: 0.5;\n}\n\n.add-task-btn {\n width: 100%;\n padding: 0.8rem;\n background: var(--primary-gradient);\n color: white;\n border: none;\n border-radius: 5px;\n cursor: pointer;\n transition: opacity 0.2s;\n}\n\n.add-task-btn:hover {\n opacity: 0.9;\n}\n\ndialog {\n background: var(--card-bg);\n border: none;\n border-radius: 10px;\n padding: 2rem;\n max-width: 500px;\n width: 90%;\n}\n\ndialog::backdrop {\n background: rgba(0, 0, 0, 0.5);\n}\n\n.form-group {\n margin-bottom: 1rem;\n}\n\nlabel {\n display: block;\n margin-bottom: 0.5rem;\n}\n\ninput, textarea {\n width: 100%;\n padding: 0.5rem;\n border: 1px solid #ddd;\n border-radius: 4px;\n background: var(--card-bg);\n color: var(--text-color);\n}\n\n.dialog-buttons {\n display: flex;\n gap: 1rem;\n justify-content: flex-end;\n margin-top: 1rem;\n}\n\n.dialog-buttons button {\n padding: 0.5rem 1rem;\n border-radius: 4px;\n cursor: pointer;\n}\n\n.dialog-buttons button[type=\"submit\"] {\n background: var(--primary-gradient);\n color: white;\n border: none;\n}\n\n.cancel-btn {\n background: transparent;\n border: 1px solid #ddd;\n}\n\nfooter {\n text-align: center;\n padding: 2rem;\n background: var(--primary-gradient);\n color: white;\n margin-top: auto;\n}\n\n@media (max-width: 768px) {\n main {\n padding: 1rem;\n }\n \n .board-container {\n grid-template-columns: 1fr;\n }\n}\n\n---script.js---\ndocument.addEventListener('DOMContentLoaded', () => {\n const themeToggle = document.getElementById('themeToggle');\n const taskDialog = document.getElementById('taskDialog');\n const taskForm = document.getElementById('taskForm');\n const addTaskBtns = document.querySelectorAll('.add-task-btn');\n \n let currentColumn = null;\n \n // Theme Management\n const setTheme = (theme) => {\n document.documentElement.setAttribute('data-theme', theme);\n localStorage.setItem('theme', theme);\n };\n\n themeToggle.addEventListener('click', () => {\n const currentTheme = localStorage.getItem('theme') || 'light';\n setTheme(currentTheme === 'light' ? 'dark' : 'light');\n });\n\n // Initialize theme\n setTheme(localStorage.getItem('theme') || 'light');\n\n // Dialog Management\n addTaskBtns.forEach(btn => {\n btn.addEventListener('click', () => {\n currentColumn = btn.dataset.column;\n taskDialog.showModal();\n });\n });\n\n document.querySelector('.cancel-btn').addEventListener('click', () => {\n taskDialog.close();\n taskForm.reset();\n });\n\n // Task Management\n taskForm.addEventListener('submit', (e) => {\n e.preventDefault();\n \n const task = {\n id: Date.now(),\n name: document.getElementById('taskName').value,\n description: document.getElementById('taskDescription').value,\n labels: document.getElementById('taskLabels').value.split(',').map(label => label.trim()),\n dueDate: document.getElementById('taskDueDate').value,\n color: document.getElementById('taskColor').value,\n completed: false\n };\n\n createTaskCard(task, currentColumn);\n taskDialog.close();\n taskForm.reset();\n });\n\n function createTaskCard(task, column) {\n const taskCard = document.createElement('div');\n taskCard.className = 'task-card';\n taskCard.draggable = true;\n taskCard.style.backgroundColor = task.color;\n \n taskCard.innerHTML = `\n \n

${task.name}

\n

${task.description}

\n
\n ${task.labels.map(label => `${label}`).join('')}\n
\n ${task.dueDate ? `
Due: ${task.dueDate}
` : ''}\n `;\n\n const targetColumn = document.querySelector(`[data-column=\"${column}\"] .task-list`);\n targetColumn.appendChild(taskCard);\n\n // Drag and Drop\n taskCard.addEventListener('dragstart', () => {\n taskCard.classList.add('dragging');\n });\n\n taskCard.addEventListener('dragend', () => {\n taskCard.classList.remove('dragging');\n });\n\n // Checkbox handling\n const checkbox = taskCard.querySelector('input[type=\"checkbox\"]');\n checkbox.addEventListener('change', () => {\n if (checkbox.checked) {\n const completedList = document.querySelector('[data-column=\"completed\"] .task-list');\n completedList.appendChild(taskCard);\n task.completed = true;\n }\n });\n }\n\n // Drag and Drop Logic\n document.querySelectorAll('.task-list').forEach(list => {\n list.addEventListener('dragover', e => {\n e.preventDefault();\n const draggingCard = document.querySelector('.dragging');\n const cards = [...list.querySelectorAll('.task-card:not(.dragging)')];\n const afterCard = cards.reduce((closest, card) => {\n const box = card.getBoundingClientRect();\n const offset = e.clientY - box.top - box.height / 2;\n if (offset < 0 && offset > closest.offset) {\n return { offset, element: card };\n }\n return closest;\n }, { offset: Number.NEGATIVE_INFINITY }).element;\n\n if (afterCard) {\n list.insertBefore(draggingCard, afterCard);\n } else {\n list.appendChild(draggingCard);\n }\n });\n });\n});\n\n---end---\n\nThis implementation creates a beautiful and functional taskboard with drag-and-drop capabilities, task management, and theme switching. Key features include:\n\n1. Responsive design that works on all devices\n2. Smooth animations and transitions\n3. Beautiful gradient accents\n4. Dark/light theme support\n5. Drag and drop functionality\n6. Task creation with custom properties\n7. Completed tasks management\n8. Accessible form controls and semantic HTML\n9. Clean, modern UI with subtle shadows and hover effects\n10. Local storage for theme preference\n\nThe CSS uses modern features like CSS Grid, custom properties, and smooth transitions. The JavaScript handles all interactions without any external dependencies. The design is professional and user-friendly while maintaining a clean, minimal aesthetic."
+ "stop_reason": "end_turn",
+ "stop_sequence": null,
- "prompt_tokens": 330,
- "completion_tokens": 1640,
- "total_tokens": 1970,
- "prompt_cache_hit_tokens": 0,
- "prompt_cache_miss_tokens": 330
- },
- "system_fingerprint": "fp_f1afce2943"
+ "input_tokens": 367,
+ "cache_creation_input_tokens": 0,
+ "cache_read_input_tokens": 0,
+ "output_tokens": 3339
+ }
readme.scroll
Changed around line 1
- Website generated by DeepSeek from prompt: create a taskboard application similar to trello where I can drag and drop tasks. there should be a check box for each task, I should be able to assign task name, description, labels, due date, color to the task. The website should have both light and dark mode. I should be able to check out the tasks and once completed they should be moved to the bottom of completed task dropdown. The UI should be responsive and aesthetic with nice gradients and comfy look
+ Website generated by Claude from prompt: create a taskboard application similar to trello where I can drag and drop tasks. there should be a check box for each task, I should be able to assign task name, description, labels, due date, color to the task. The website should have both light and dark mode. I should be able to check out the tasks and once completed they should be moved to the bottom of completed task dropdown. The UI should be responsive and aesthetic with nice gradients and comfy look
script.js
Changed around line 1
- const themeToggle = document.getElementById('theme-toggle');
- const body = document.body;
- const taskModal = document.getElementById('task-modal');
- const addTaskBtn = document.querySelector('.add-task');
- const cancelBtn = document.querySelector('.cancel');
- const taskForm = document.querySelector('#task-modal form');
- const todoColumn = document.querySelector('#todo .tasks');
+ const themeToggle = document.getElementById('themeToggle');
+ const taskDialog = document.getElementById('taskDialog');
+ const taskForm = document.getElementById('taskForm');
+ const addTaskBtns = document.querySelectorAll('.add-task-btn');
+
+ let currentColumn = null;
+
+ // Theme Management
+ const setTheme = (theme) => {
+ document.documentElement.setAttribute('data-theme', theme);
+ localStorage.setItem('theme', theme);
+ };
- // Theme toggle
- themeToggle.addEventListener('change', () => {
- body.classList.toggle('dark-mode');
+ themeToggle.addEventListener('click', () => {
+ const currentTheme = localStorage.getItem('theme') || 'light';
+ setTheme(currentTheme === 'light' ? 'dark' : 'light');
- // Task modal
- addTaskBtn.addEventListener('click', () => {
- taskModal.showModal();
+ // Initialize theme
+ setTheme(localStorage.getItem('theme') || 'light');
+
+ // Dialog Management
+ addTaskBtns.forEach(btn => {
+ btn.addEventListener('click', () => {
+ currentColumn = btn.dataset.column;
+ taskDialog.showModal();
+ });
- cancelBtn.addEventListener('click', () => {
- taskModal.close();
+ document.querySelector('.cancel-btn').addEventListener('click', () => {
+ taskDialog.close();
+ taskForm.reset();
- // Add new task
+ // Task Management
- name: document.getElementById('task-name').value,
- description: document.getElementById('task-desc').value,
- labels: document.getElementById('task-labels').value,
- dueDate: document.getElementById('task-due').value,
- color: document.getElementById('task-color').value
+ id: Date.now(),
+ name: document.getElementById('taskName').value,
+ description: document.getElementById('taskDescription').value,
+ labels: document.getElementById('taskLabels').value.split(',').map(label => label.trim()),
+ dueDate: document.getElementById('taskDueDate').value,
+ color: document.getElementById('taskColor').value,
+ completed: false
- createTask(task);
- taskModal.close();
+ createTaskCard(task, currentColumn);
+ taskDialog.close();
- function createTask(task) {
- const taskElement = document.createElement('div');
- taskElement.classList.add('task');
- taskElement.style.backgroundColor = task.color;
- taskElement.innerHTML = `
+ function createTaskCard(task, column) {
+ const taskCard = document.createElement('div');
+ taskCard.className = 'task-card';
+ taskCard.draggable = true;
+ taskCard.style.backgroundColor = task.color;
+
+ taskCard.innerHTML = `
+
-
- ${task.labels}
- ${task.dueDate}
+
+ ${task.labels.map(label => `${label}`).join('')}
+ ${task.dueDate ? `
Due: ${task.dueDate}
` : ''}
- todoColumn.appendChild(taskElement);
- }
- // Drag and drop functionality
- const tasks = document.querySelectorAll('.task');
- const columns = document.querySelectorAll('.column');
+ const targetColumn = document.querySelector(`[data-column="${column}"] .task-list`);
+ targetColumn.appendChild(taskCard);
- tasks.forEach(task => {
- task.addEventListener('dragstart', dragStart);
- task.addEventListener('dragend', dragEnd);
- });
-
- columns.forEach(column => {
- column.addEventListener('dragover', dragOver);
- column.addEventListener('drop', dragDrop);
- });
+ // Drag and Drop
+ taskCard.addEventListener('dragstart', () => {
+ taskCard.classList.add('dragging');
+ });
- let draggedTask = null;
+ taskCard.addEventListener('dragend', () => {
+ taskCard.classList.remove('dragging');
+ });
- function dragStart() {
- draggedTask = this;
- setTimeout(() => this.style.display = 'none', 0);
+ // Checkbox handling
+ const checkbox = taskCard.querySelector('input[type="checkbox"]');
+ checkbox.addEventListener('change', () => {
+ if (checkbox.checked) {
+ const completedList = document.querySelector('[data-column="completed"] .task-list');
+ completedList.appendChild(taskCard);
+ task.completed = true;
+ }
+ });
- function dragEnd() {
- draggedTask.style.display = 'block';
- draggedTask = null;
- }
-
- function dragOver(e) {
- e.preventDefault();
- }
+ // Drag and Drop Logic
+ document.querySelectorAll('.task-list').forEach(list => {
+ list.addEventListener('dragover', e => {
+ e.preventDefault();
+ const draggingCard = document.querySelector('.dragging');
+ const cards = [...list.querySelectorAll('.task-card:not(.dragging)')];
+ const afterCard = cards.reduce((closest, card) => {
+ const box = card.getBoundingClientRect();
+ const offset = e.clientY - box.top - box.height / 2;
+ if (offset < 0 && offset > closest.offset) {
+ return { offset, element: card };
+ }
+ return closest;
+ }, { offset: Number.NEGATIVE_INFINITY }).element;
- function dragDrop() {
- this.querySelector('.tasks').appendChild(draggedTask);
- }
- });
+ if (afterCard) {
+ list.insertBefore(draggingCard, afterCard);
+ } else {
+ list.appendChild(draggingCard);
+ }
+ });
+ });
+ });
style.css
Changed around line 1
- --bg-light: #f5f5f5;
+ --primary-gradient: linear-gradient(135deg, #6e8efb, #a777e3);
+ --bg-light: #f8f9fa;
- -bg-dark: #1a1a1a;
- -text-light: #333;
- --text-dark: #f5f5f5;
- --primary: #6366f1;
- --primary-hover: #4f46e5;
- --gradient: linear-gradient(135deg, #6366f1, #a855f7);
+ --text-dark: #fff;
+ --card-light: #fff;
+ --card-dark: #2d2d2d;
+ --shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+ }
+
+ [data-theme="dark"] {
+ --bg-color: var(--bg-dark);
+ --text-color: var(--text-dark);
+ --card-bg: var(--card-dark);
+ }
+
+ [data-theme="light"] {
+ --bg-color: var(--bg-light);
+ --text-color: var(--text-light);
+ --card-bg: var(--card-light);
Changed around line 28
- font-family: 'Segoe UI', sans-serif;
- line-height: 1.6;
- background: var(--bg-light);
- color: var(--text-light);
- transition: all 0.3s ease;
+ font-family: 'Segoe UI', system-ui, sans-serif;
+ background: var(--bg-color);
+ color: var(--text-color);
+ transition: background-color 0.3s, color 0.3s;
- body.dark-mode {
- background: var(--bg-dark);
- color: var(--text-dark);
+ header {
+ background: var(--primary-gradient);
+ padding: 1rem 2rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ box-shadow: var(--shadow);
- header {
- background: var(--gradient);
+ .logo {
+ font-size: 1.5rem;
+ font-weight: bold;
- padding: 2rem;
- text-align: center;
- .theme-switch {
- position: absolute;
- top: 1rem;
- right: 1rem;
+ .theme-toggle button {
+ background: none;
+ border: none;
+ cursor: pointer;
+ font-size: 1.2rem;
+ padding: 0.5rem;
- max-width: 1200px;
+ max-width: 1400px;
- .taskboard {
+ .board-container {
+ margin-bottom: 2rem;
- .column {
- background: rgba(255, 255, 255, 0.9);
- border-radius: 1rem;
+ .board-column {
+ background: var(--card-bg);
+ border-radius: 10px;
- box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+ box-shadow: var(--shadow);
- .dark-mode .column {
- background: rgba(0, 0, 0, 0.2);
- }
-
- .tasks {
- min-height: 100px;
- margin-top: 1rem;
+ .task-list {
+ min-height: 200px;
+ margin: 1rem 0;
- .task {
- background: white;
- border-radius: 0.5rem;
+ .task-card {
+ background: var(--card-bg);
+ border-radius: 8px;
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+ box-shadow: var(--shadow);
+ transition: transform 0.2s;
- .dark-mode .task {
- background: rgba(255, 255, 255, 0.1);
+ .task-card:hover {
+ transform: translateY(-2px);
- .add-task {
+ .task-card.dragging {
+ opacity: 0.5;
+ }
+
+ .add-task-btn {
- padding: 0.5rem;
- border: none;
- border-radius: 0.5rem;
- background: var(--primary);
+ padding: 0.8rem;
+ background: var(--primary-gradient);
+ border: none;
+ border-radius: 5px;
- transition: background 0.3s ease;
+ transition: opacity 0.2s;
- .add-task:hover {
- background: var(--primary-hover);
+ .add-task-btn:hover {
+ opacity: 0.9;
+ }
+
+ dialog {
+ background: var(--card-bg);
+ border: none;
+ border-radius: 10px;
+ padding: 2rem;
+ max-width: 500px;
+ width: 90%;
+ }
+
+ dialog::backdrop {
+ background: rgba(0, 0, 0, 0.5);
+ }
+
+ .form-group {
+ margin-bottom: 1rem;
+ }
+
+ label {
+ display: block;
+ margin-bottom: 0.5rem;
+ }
+
+ input, textarea {
+ width: 100%;
+ padding: 0.5rem;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ background: var(--card-bg);
+ color: var(--text-color);
+ }
+
+ .dialog-buttons {
+ display: flex;
+ gap: 1rem;
+ justify-content: flex-end;
+ margin-top: 1rem;
+ }
+
+ .dialog-buttons button {
+ padding: 0.5rem 1rem;
+ border-radius: 4px;
+ cursor: pointer;
+ }
+
+ .dialog-buttons button[type="submit"] {
+ background: var(--primary-gradient);
+ color: white;
+ border: none;
+ }
+
+ .cancel-btn {
+ background: transparent;
+ border: 1px solid #ddd;
+ }
+
+ footer {
+ text-align: center;
+ padding: 2rem;
+ background: var(--primary-gradient);
+ color: white;
+ margin-top: auto;
- .taskboard {
+ main {
+ padding: 1rem;
+ }
+
+ .board-container {
- }
+ }
root
root
25 days ago
Initial commit
body.html
Changed around line 1
+
+

TaskFlow

+
+
+
+
+
+
+
+
+
+

To Do

+
+
+
+
+
+

In Progress

+
+
+
+
+

Completed

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

Organize your workflow with ease

+
index.scroll
Changed around line 1
+ buildHtml
+ baseUrl https://taskflow.scroll.pub
+ metaTags
+ editButton /edit.html
+ title TaskFlow - Simple Task Management
+ style.css
+ body.html
+ script.js
prompt.json
Changed around line 1
+ {
+ "id": "8f148f52-9304-4942-aae1-ccb03bb3fceb",
+ "object": "chat.completion",
+ "created": 1735360709,
+ "model": "deepseek-chat",
+ "choices": [
+ {
+ "index": 0,
+ "message": {
+ "role": "assistant",
+ "content": "---domain---\ntaskflow.scroll.pub\n---index.scroll---\nbuildHtml\nbaseUrl https://taskflow.scroll.pub\nmetaTags\neditButton /edit.html\ntitle TaskFlow - Simple Task Management\nstyle.css\nbody.html\nscript.js\n---body.html---\n
\n

TaskFlow

\n
\n \n \n
\n
\n\n
\n
\n
\n

To Do

\n \n
\n
\n \n
\n

In Progress

\n
\n
\n \n
\n

Completed

\n
\n
\n
\n\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n
\n
\n
\n
\n\n
\n

Organize your workflow with ease

\n
\n---style.css---\n:root {\n --bg-light: #f5f5f5;\n --bg-dark: #1a1a1a;\n --text-light: #333;\n --text-dark: #f5f5f5;\n --primary: #6366f1;\n --primary-hover: #4f46e5;\n --gradient: linear-gradient(135deg, #6366f1, #a855f7);\n}\n\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n font-family: 'Segoe UI', sans-serif;\n line-height: 1.6;\n background: var(--bg-light);\n color: var(--text-light);\n transition: all 0.3s ease;\n}\n\nbody.dark-mode {\n background: var(--bg-dark);\n color: var(--text-dark);\n}\n\nheader {\n background: var(--gradient);\n color: white;\n padding: 2rem;\n text-align: center;\n}\n\n.theme-switch {\n position: absolute;\n top: 1rem;\n right: 1rem;\n}\n\nmain {\n padding: 2rem;\n max-width: 1200px;\n margin: 0 auto;\n}\n\n.taskboard {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 2rem;\n}\n\n.column {\n background: rgba(255, 255, 255, 0.9);\n border-radius: 1rem;\n padding: 1rem;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n}\n\n.dark-mode .column {\n background: rgba(0, 0, 0, 0.2);\n}\n\n.tasks {\n min-height: 100px;\n margin-top: 1rem;\n}\n\n.task {\n background: white;\n border-radius: 0.5rem;\n padding: 1rem;\n margin-bottom: 1rem;\n cursor: grab;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n\n.dark-mode .task {\n background: rgba(255, 255, 255, 0.1);\n}\n\n.add-task {\n width: 100%;\n padding: 0.5rem;\n border: none;\n border-radius: 0.5rem;\n background: var(--primary);\n color: white;\n cursor: pointer;\n transition: background 0.3s ease;\n}\n\n.add-task:hover {\n background: var(--primary-hover);\n}\n\n@media (max-width: 768px) {\n .taskboard {\n grid-template-columns: 1fr;\n }\n}\n---script.js---\ndocument.addEventListener('DOMContentLoaded', () => {\n const themeToggle = document.getElementById('theme-toggle');\n const body = document.body;\n const taskModal = document.getElementById('task-modal');\n const addTaskBtn = document.querySelector('.add-task');\n const cancelBtn = document.querySelector('.cancel');\n const taskForm = document.querySelector('#task-modal form');\n const todoColumn = document.querySelector('#todo .tasks');\n\n // Theme toggle\n themeToggle.addEventListener('change', () => {\n body.classList.toggle('dark-mode');\n });\n\n // Task modal\n addTaskBtn.addEventListener('click', () => {\n taskModal.showModal();\n });\n\n cancelBtn.addEventListener('click', () => {\n taskModal.close();\n });\n\n // Add new task\n taskForm.addEventListener('submit', (e) => {\n e.preventDefault();\n \n const task = {\n name: document.getElementById('task-name').value,\n description: document.getElementById('task-desc').value,\n labels: document.getElementById('task-labels').value,\n dueDate: document.getElementById('task-due').value,\n color: document.getElementById('task-color').value\n };\n\n createTask(task);\n taskModal.close();\n taskForm.reset();\n });\n\n function createTask(task) {\n const taskElement = document.createElement('div');\n taskElement.classList.add('task');\n taskElement.style.backgroundColor = task.color;\n taskElement.innerHTML = `\n

${task.name}

\n

${task.description}

\n
\n ${task.labels}\n ${task.dueDate}\n
\n `;\n todoColumn.appendChild(taskElement);\n }\n\n // Drag and drop functionality\n const tasks = document.querySelectorAll('.task');\n const columns = document.querySelectorAll('.column');\n\n tasks.forEach(task => {\n task.addEventListener('dragstart', dragStart);\n task.addEventListener('dragend', dragEnd);\n });\n\n columns.forEach(column => {\n column.addEventListener('dragover', dragOver);\n column.addEventListener('drop', dragDrop);\n });\n\n let draggedTask = null;\n\n function dragStart() {\n draggedTask = this;\n setTimeout(() => this.style.display = 'none', 0);\n }\n\n function dragEnd() {\n draggedTask.style.display = 'block';\n draggedTask = null;\n }\n\n function dragOver(e) {\n e.preventDefault();\n }\n\n function dragDrop() {\n this.querySelector('.tasks').appendChild(draggedTask);\n }\n});\n---end---"
+ },
+ "logprobs": null,
+ "finish_reason": "stop"
+ }
+ ],
+ "usage": {
+ "prompt_tokens": 330,
+ "completion_tokens": 1640,
+ "total_tokens": 1970,
+ "prompt_cache_hit_tokens": 0,
+ "prompt_cache_miss_tokens": 330
+ },
+ "system_fingerprint": "fp_f1afce2943"
+ }
readme.scroll
Changed around line 1
+ # taskflow2.scroll.pub
+ Website generated by DeepSeek from prompt: create a taskboard application similar to trello where I can drag and drop tasks. there should be a check box for each task, I should be able to assign task name, description, labels, due date, color to the task. The website should have both light and dark mode. I should be able to check out the tasks and once completed they should be moved to the bottom of completed task dropdown. The UI should be responsive and aesthetic with nice gradients and comfy look
script.js
Changed around line 1
+ document.addEventListener('DOMContentLoaded', () => {
+ const themeToggle = document.getElementById('theme-toggle');
+ const body = document.body;
+ const taskModal = document.getElementById('task-modal');
+ const addTaskBtn = document.querySelector('.add-task');
+ const cancelBtn = document.querySelector('.cancel');
+ const taskForm = document.querySelector('#task-modal form');
+ const todoColumn = document.querySelector('#todo .tasks');
+
+ // Theme toggle
+ themeToggle.addEventListener('change', () => {
+ body.classList.toggle('dark-mode');
+ });
+
+ // Task modal
+ addTaskBtn.addEventListener('click', () => {
+ taskModal.showModal();
+ });
+
+ cancelBtn.addEventListener('click', () => {
+ taskModal.close();
+ });
+
+ // Add new task
+ taskForm.addEventListener('submit', (e) => {
+ e.preventDefault();
+
+ const task = {
+ name: document.getElementById('task-name').value,
+ description: document.getElementById('task-desc').value,
+ labels: document.getElementById('task-labels').value,
+ dueDate: document.getElementById('task-due').value,
+ color: document.getElementById('task-color').value
+ };
+
+ createTask(task);
+ taskModal.close();
+ taskForm.reset();
+ });
+
+ function createTask(task) {
+ const taskElement = document.createElement('div');
+ taskElement.classList.add('task');
+ taskElement.style.backgroundColor = task.color;
+ taskElement.innerHTML = `
+

${task.name}

+

${task.description}

+
+ ${task.labels}
+ ${task.dueDate}
+
+ `;
+ todoColumn.appendChild(taskElement);
+ }
+
+ // Drag and drop functionality
+ const tasks = document.querySelectorAll('.task');
+ const columns = document.querySelectorAll('.column');
+
+ tasks.forEach(task => {
+ task.addEventListener('dragstart', dragStart);
+ task.addEventListener('dragend', dragEnd);
+ });
+
+ columns.forEach(column => {
+ column.addEventListener('dragover', dragOver);
+ column.addEventListener('drop', dragDrop);
+ });
+
+ let draggedTask = null;
+
+ function dragStart() {
+ draggedTask = this;
+ setTimeout(() => this.style.display = 'none', 0);
+ }
+
+ function dragEnd() {
+ draggedTask.style.display = 'block';
+ draggedTask = null;
+ }
+
+ function dragOver(e) {
+ e.preventDefault();
+ }
+
+ function dragDrop() {
+ this.querySelector('.tasks').appendChild(draggedTask);
+ }
+ });
style.css
Changed around line 1
+ :root {
+ --bg-light: #f5f5f5;
+ --bg-dark: #1a1a1a;
+ --text-light: #333;
+ --text-dark: #f5f5f5;
+ --primary: #6366f1;
+ --primary-hover: #4f46e5;
+ --gradient: linear-gradient(135deg, #6366f1, #a855f7);
+ }
+
+ * {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ }
+
+ body {
+ font-family: 'Segoe UI', sans-serif;
+ line-height: 1.6;
+ background: var(--bg-light);
+ color: var(--text-light);
+ transition: all 0.3s ease;
+ }
+
+ body.dark-mode {
+ background: var(--bg-dark);
+ color: var(--text-dark);
+ }
+
+ header {
+ background: var(--gradient);
+ color: white;
+ padding: 2rem;
+ text-align: center;
+ }
+
+ .theme-switch {
+ position: absolute;
+ top: 1rem;
+ right: 1rem;
+ }
+
+ main {
+ padding: 2rem;
+ max-width: 1200px;
+ margin: 0 auto;
+ }
+
+ .taskboard {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+ gap: 2rem;
+ }
+
+ .column {
+ background: rgba(255, 255, 255, 0.9);
+ border-radius: 1rem;
+ padding: 1rem;
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
+ }
+
+ .dark-mode .column {
+ background: rgba(0, 0, 0, 0.2);
+ }
+
+ .tasks {
+ min-height: 100px;
+ margin-top: 1rem;
+ }
+
+ .task {
+ background: white;
+ border-radius: 0.5rem;
+ padding: 1rem;
+ margin-bottom: 1rem;
+ cursor: grab;
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+ }
+
+ .dark-mode .task {
+ background: rgba(255, 255, 255, 0.1);
+ }
+
+ .add-task {
+ width: 100%;
+ padding: 0.5rem;
+ border: none;
+ border-radius: 0.5rem;
+ background: var(--primary);
+ color: white;
+ cursor: pointer;
+ transition: background 0.3s ease;
+ }
+
+ .add-task:hover {
+ background: var(--primary-hover);
+ }
+
+ @media (max-width: 768px) {
+ .taskboard {
+ grid-template-columns: 1fr;
+ }
+ }