Intermediate Projects
Explore more complex applications and coding patterns with AI assistance.
Todo List Application
Create a functional todo list with AI guidance.
HTML Structure
<!-- Ask AI: "Create HTML structure for a todo list app" -->
<div class="todo-app">
<h1>Todo List</h1>
<div class="input-container">
<input type="text" id="taskInput" placeholder="Add a new task...">
<button id="addTask">Add Task</button>
</div>
<ul id="taskList"></ul>
</div>
JavaScript Implementation
// Ask AI: "Write JavaScript for a todo list that can add, toggle, and delete tasks"
document.addEventListener('DOMContentLoaded', () => {
const taskInput = document.getElementById('taskInput');
const addTaskBtn = document.getElementById('addTask');
const taskList = document.getElementById('taskList');
// Load tasks from localStorage
const tasks = JSON.parse(localStorage.getItem('tasks')) || [];
// Render existing tasks
renderTasks();
// Add new task
addTaskBtn.addEventListener('click', addTask);
taskInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') addTask();
});
function addTask() {
const taskText = taskInput.value.trim();
if (taskText === '') return;
tasks.push({
id: Date.now(),
text: taskText,
completed: false
});
saveAndRenderTasks();
taskInput.value = '';
}
function renderTasks() {
taskList.innerHTML = '';
tasks.forEach(task => {
const li = document.createElement('li');
li.dataset.id = task.id;
li.className = task.completed ? 'completed' : '';
li.innerHTML = `
${task.text}
`;
// Toggle task completion
li.querySelector('.toggle-btn').addEventListener('click', () => {
const taskId = parseInt(li.dataset.id);
const taskIndex = tasks.findIndex(t => t.id === taskId);
if (taskIndex !== -1) {
tasks[taskIndex].completed = !tasks[taskIndex].completed;
saveAndRenderTasks();
}
});
// Delete task
li.querySelector('.delete-btn').addEventListener('click', () => {
const taskId = parseInt(li.dataset.id);
const taskIndex = tasks.findIndex(t => t.id === taskId);
if (taskIndex !== -1) {
tasks.splice(taskIndex, 1);
saveAndRenderTasks();
}
});
taskList.appendChild(li);
});
}
function saveAndRenderTasks() {
localStorage.setItem('tasks', JSON.stringify(tasks));
renderTasks();
}
});