Art Challenge Sheet Generator

Challenge Tasks

Task Manager

30-Day Inktober Challenge

Host: Art Community Group | Duration: 30 Days
I. Rules & Constraints
Goal: Consistency and skill growth. Medium: [Medium Constraint] All tasks must be completed sequentially and shared publicly using [Hashtag].
II. Challenge Schedule
III. General Notes
Remember, the goal is not perfection, but commitment. Have fun and be inspired by the community's work!

Challenge Details

Host: | Duration:
I. Rules & Requirements

II. Challenge Schedule
Creative Challenge Brief. Do not give up!

No tasks added.

'; return; } sortedTasks.forEach(t => { const div = document.createElement('div'); div.className = 'challenge-chip'; div.innerHTML = ` Day ${t.day}: ${t.prompt} (${t.medium || 'Any'}) `; managerContainer.appendChild(div); }); } function renderScheduleGrid(sortedTasks) { const grid = document.getElementById('challenge-schedule-grid'); grid.innerHTML = ''; sortedTasks.forEach(t => { const div = document.createElement('div'); div.className = 'challenge-item'; div.innerHTML = `
DAY ${t.day}
${t.prompt}
Medium: ${t.medium || 'Any'}
`; grid.appendChild(div); }); } // --- PDF Export --- function generatePDF() { if (tasks.length === 0) { alert("Please add at least one task before generating the PDF."); return; } const pdfTemplate = document.getElementById('pdf-template'); const pdfScheduleGrid = document.getElementById('pdf-schedule-grid'); // 1. Fill Metadata (Done in updateMeta/updateDoc) document.getElementById('pdf-rules-text').innerText = document.getElementById('cfg-rules').value || 'No rules defined.'; // 2. Fill Schedule Grid (Clone current state) pdfScheduleGrid.innerHTML = ''; const sortedTasks = [...tasks].sort((a, b) => a.day - b.day); sortedTasks.forEach(t => { pdfScheduleGrid.innerHTML += `
DAY ${t.day}
${t.prompt}
Constraint: ${t.medium || 'Any'}
`; }); // 3. Generate PDF pdfTemplate.style.display = 'block'; const opt = { margin: 0.5, filename: 'Creative_Challenge_Brief.pdf', image: { type: 'jpeg', quality: 0.98 }, html2canvas: { scale: 2 }, jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' } }; html2pdf().set(opt).from(pdfTemplate).save().then(() => { pdfTemplate.style.display = 'none'; }); } return { switchTab, updateMeta, updateDoc, addTask, deleteTask, generatePDF }; })();
Scroll to Top