Plan Tracking Dashboard

Monitor charity plan assignments and quarterly progress

Mind

Current Quarter: Q3 2025
Q3 Plans 106
Year to Date Cumulative 593

Race Breakdown (Q3)

London Marathon 43
London Landmarks Half Marathon 18
Manchester Marathon 13
Great North Run 10
Brighton Marathon 9
Brighton 10k 3
Great Manchester Run Half Marathon 2
Cardiff Half Marathon 2
Winter Walk 1
Shakespeare Half Marathon 1
Running 1
Coventry Half Marathon 1
Cardiff Winter Warmer Half Marathon 1
Brentwood Half 1

NSPCC

Current Quarter: Q4 2025
Q4 Plans 69

Race Breakdown (Q4)

Cardiff Half Marathon 39
London Landmarks Half Marathon 18
London Marathon 5
Manchester Marathon 3
London Winter Walk 1
Edinburgh Marathon 1
Caernarfon Half 1
Bath Half Marathon 1

Historical Tracking

Charity Quarter Year Total Plans Races
Mind Q3 2025 106 London Marathon, Great North Run, Manchester Marathon +11 more
Mind Q2 2025 364 London Marathon, London Landmarks Half Marathon, Brighton Marathon +17 more
Mind Q1 2025 123 Royal Parks Half Marathon, London Landmarks Half Marathon, Great North Run +13 more
NSPCC Q4 2025 69 Cardiff Half Marathon, London Marathon, Manchester Marathon +5 more
NSPCC Q3 2025 215 London Marathon, London Landmarks Half Marathon, Royal Parks Half Marathon +8 more
NSPCC Q2 2025 43 London Marathon, London Landmarks Half Marathon, Brighton Marathon +1 more

Recent Assignments

Date Charity Race Quarter
2025-12-03 Mind London Marathon Q3
2025-12-03 Mind London Marathon Q3
2025-12-02 Mind Coventry Half Marathon Q3
2025-12-02 Mind Manchester Marathon Q3
2025-12-01 Mind Great North Run Q3
2025-11-28 Mind Great North Run Q3
2025-11-28 Mind Manchester Marathon Q3
2025-11-28 NSPCC London Landmarks Half Marathon Q4
2025-11-27 Mind London Marathon Q3
2025-11-27 Mind Winter Walk Q3
2025-11-26 Mind Manchester Marathon Q3
2025-11-26 Mind London Marathon Q3
2025-11-25 NSPCC London Landmarks Half Marathon Q4
2025-11-25 NSPCC London Landmarks Half Marathon Q4
2025-11-25 Mind London Marathon Q3
2025-11-24 Mind London Marathon Q3
2025-11-24 Mind London Marathon Q3
2025-11-24 Mind London Marathon Q3
2025-11-24 Mind London Marathon Q3
2025-11-24 Mind London Marathon Q3
Dashboard last updated: 2025-12-06 03:24:36
Data refreshes automatically when new plans are assigned
function refreshDashboard() { location.reload(); } function exportCurrentStats() { let csvData = 'Charity,Quarter,Year,Total Plans,Race Breakdown\\n'; csvData += 'Mind,Q3,2025,106,"'; csvData += 'London Marathon: 43; '; csvData += 'London Landmarks Half Marathon: 18; '; csvData += 'Manchester Marathon: 13; '; csvData += 'Great North Run: 10; '; csvData += 'Brighton Marathon: 9; '; csvData += 'Brighton 10k: 3; '; csvData += 'Great Manchester Run Half Marathon: 2; '; csvData += 'Cardiff Half Marathon: 2; '; csvData += 'Winter Walk: 1; '; csvData += 'Shakespeare Half Marathon: 1; '; csvData += 'Running: 1; '; csvData += 'Coventry Half Marathon: 1; '; csvData += 'Cardiff Winter Warmer Half Marathon: 1; '; csvData += 'Brentwood Half: 1; '; csvData += '"\\n'; csvData += 'Mind (YTD),Q3,2025,593,"'; csvData += 'London Marathon: 264; '; csvData += 'London Landmarks Half Marathon: 71; '; csvData += 'Manchester Marathon: 58; '; csvData += 'Great North Run: 50; '; csvData += 'Brighton Marathon: 49; '; csvData += 'Royal Parks Half Marathon: 44; '; csvData += 'Trekking: 11; '; csvData += 'Cardiff Half Marathon: 7; '; csvData += 'Great Manchester Run Half Marathon: 5; '; csvData += '10k: 4; '; csvData += 'London to Brighton Bike Ride (September): 3; '; csvData += 'Brighton 10k: 3; '; csvData += 'York Marathon: 2; '; csvData += 'Plymouth Harbour 10k: 2; '; csvData += 'Winter Walk: 1; '; csvData += 'The Camino: 1; '; csvData += 'Thames Path Challenge 100k: 1; '; csvData += 'Thames Bridges Trek 25k: 1; '; csvData += 'Swansea half Ironman: 1; '; csvData += 'South Coast Ultra: 1; '; csvData += 'Solo Somerset Peak Challenge: 1; '; csvData += 'Shakespeare Half Marathon: 1; '; csvData += 'Running: 1; '; csvData += 'Ride London-Essex 100: 1; '; csvData += 'North Downs 50 Challenge: 1; '; csvData += 'London to Brighton Bike Ride (June): 1; '; csvData += 'Local 5k: 1; '; csvData += 'Lake District Ultra Challenge (Marathon): 1; '; csvData += 'Coventry Half Marathon: 1; '; csvData += 'Conwy Half Marathon: 1; '; csvData += 'Chiltern 50: 1; '; csvData += 'Cardiff Winter Warmer Half Marathon: 1; '; csvData += 'Brentwood Half: 1; '; csvData += 'Bath Half Marathon: 1; '; csvData += '"\\n'; csvData += 'NSPCC,Q4,2025,69,"'; csvData += 'Cardiff Half Marathon: 39; '; csvData += 'London Landmarks Half Marathon: 18; '; csvData += 'London Marathon: 5; '; csvData += 'Manchester Marathon: 3; '; csvData += 'London Winter Walk: 1; '; csvData += 'Edinburgh Marathon: 1; '; csvData += 'Caernarfon Half: 1; '; csvData += 'Bath Half Marathon: 1; '; csvData += '"\\n'; const blob = new Blob([csvData], { type: 'text/csv' }); const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `plan_tracking_${new Date().toISOString().split('T')[0]}.csv`; a.click(); window.URL.revokeObjectURL(url); } function exportAllData() { window.open('/charity/tracking/export/all', '_blank'); } function openGenerateReportsModal() { document.getElementById('generateReportsModal').classList.add('active'); } function closeGenerateReportsModal() { document.getElementById('generateReportsModal').classList.remove('active'); } async function generateReports() { const modalBody = document.getElementById('modalBody'); modalBody.innerHTML = '

Generating reports...

'; try { const response = await fetch('/charity/api/tracking/generate-quarterly-reports', { method: 'POST', headers: { 'Content-Type': 'application/json' } }); const result = await response.json(); if (result.success) { let html = '
'; html += '

Reports Generated Successfully

'; if (result.results.message) { html += `

${result.results.message}

`; } html += `

Todoist tasks created: ${result.results.todoist_tasks_created}

`; html += '
'; result.results.reports_generated.forEach(report => { html += '
'; html += `

${report.charity} ${report.quarter} ${report.year}

`; html += `

Total Plans: ${report.total_plans}

`; html += `

File: ${report.text_file}

`; html += `

Todoist: ${report.todoist_created ? 'Created' : 'Failed'}

`; html += '
'; }); if (result.results.errors && result.results.errors.length > 0) { html += '
'; html += '

Errors:

'; result.results.errors.forEach(error => { html += `

${error}

`; }); html += '
'; } html += ''; modalBody.innerHTML = html; } else { modalBody.innerHTML = `

Error Generating Reports

${result.message || result.error || 'Unknown error occurred'}

`; } } catch (error) { modalBody.innerHTML = `

Error

Failed to generate reports: ${error.message}

`; } } setInterval(() => { console.log('Auto-refreshing dashboard...'); refreshDashboard(); }, 300000); window.onclick = function(event) { const modal = document.getElementById('generateReportsModal'); if (event.target === modal) { closeGenerateReportsModal(); } }