Create and manage regions and Talking Time settings.
Manage mentors, assign regions, track certification.
Upload and manage programme resources.
Audit mentor documentation and session quality.
Anonymised pre/post assessment aggregation.
Schedule and manage coordinator meetings.
Anonymised pre/post assessment data will appear here once settings have completed assessments.
Meeting scheduling will be available here.
We help kids talk back
Working with schools across the UK in Early Years, Primary and Secondary.
Speech & Language Therapy
Enhancing oral language in the early years
Enter your email address and we'll send you a password reset code.
Enter the code from your email and your new password.
You must change your temporary password before continuing.
{{ card.desc }}
✓ Both Questionnaires Submitted — Thank you!
Your Staff and SENDCo feedback for "{{ activeFeedbackCampaign.title }}" has been received.
✓ Staff Questionnaire Submitted
You can also complete the SENDCo questionnaire for "{{ activeFeedbackCampaign.title }}".
✓ SENDCo Questionnaire Submitted
You can also complete the Staff questionnaire for "{{ activeFeedbackCampaign.title }}".
{{ activeFeedbackCampaign.title }} — Please complete by {{ new Date(activeFeedbackCampaign.deadline + 'T00:00:00').toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }) }}
Showing {{ filteredChildren.length }} of {{ children.length }} pupils
| Name | School | DOB | Status | Review Date | Last Contact | Referred | Record |
|---|---|---|---|---|---|---|---|
| {{ child.display_name || child.initials }} | {{ formatDate(child.date_of_birth) }} | {{ formatStatus(child.therapy_status) }} ⚠️ Potential duplicate — awaiting admin review Previously at {{ child.previous_school_name }} 🔄 Reopened Case ⚠️ {{ child.duplicate_same_school ? 'Duplicate detected — admin approval required' : 'Admin approval required' }} | {{ formatReviewDate(getNextReviewDate(child)) }} | {{ child.last_contact_date ? formatDate(child.last_contact_date) : 'No contact' }} | {{ child.created_at ? formatDate(child.created_at) : '—' }} |
|
| Date | Child | Type | Duration | Outcome | Signed | Actions |
|---|---|---|---|---|---|---|
| {{ formatDate(contact.session_date) }} | {{ contact.child_initials || 'Unknown' }} | {{ contact.session_type }} | {{ contact.duration_minutes }} min | {{ contact.session_outcome ? contact.session_outcome.replace('_', ' ').replace(/\b\w/g, l => l.toUpperCase()) : 'Not Set' }} | {{ contact.digital_signature ? '✓ Signed' : '✗ Unsigned' }} |
| Date | Child | Visit Type | Purpose | Status | Follow-up | Actions |
|---|---|---|---|---|---|---|
| {{ formatDate(note.visit_date) }} | {{ note.child_initials || 'Unknown' }} | {{ note.visit_type }} | {{ note.visit_purpose ? note.visit_purpose.substring(0, 50) + '...' : '-' }} | {{ note.visit_status }} | {{ note.follow_up_required ? '⚠ Required' : '✓ None' }} | Read Only |
| Name | Role | School/Cluster | Status | Actions | |
|---|---|---|---|---|---|
| {{ user.name }} | {{ user.email }} | {{ getRoleName(user.role) }} {{ user.job_title }} | {{ user.school_name || user.mat_name || '-' }} | {{ user.is_active ? 'Active' : 'Inactive' }} |
|
| Cluster / MAT Name {{ clusterMgmtSort.column === 'cluster_name' ? (clusterMgmtSort.direction === 'asc' ? '▲' : '▼') : '⇅' }} | Code {{ clusterMgmtSort.column === 'cluster_code' ? (clusterMgmtSort.direction === 'asc' ? '▲' : '▼') : '⇅' }} | Schools {{ clusterMgmtSort.column === 'schools_count' ? (clusterMgmtSort.direction === 'asc' ? '▲' : '▼') : '⇅' }} | Created {{ clusterMgmtSort.column === 'created' ? (clusterMgmtSort.direction === 'asc' ? '▲' : '▼') : '⇅' }} | Actions |
|---|---|---|---|---|
| {{ cluster.cluster_name }} | {{ cluster.cluster_code || '-' }} | {{ schools.filter(s => s.cluster_id === cluster.cluster_id).length }} | {{ formatDate(cluster.created_at) }} | |
| No matching clusters / MATs found. | ||||
| School Name {{ schoolMgmtSort.column === 'school_name' ? (schoolMgmtSort.direction === 'asc' ? '▲' : '▼') : '⇅' }} | Type {{ schoolMgmtSort.column === 'school_type' ? (schoolMgmtSort.direction === 'asc' ? '▲' : '▼') : '⇅' }} | Cluster {{ schoolMgmtSort.column === 'cluster' ? (schoolMgmtSort.direction === 'asc' ? '▲' : '▼') : '⇅' }} | Session Allocation {{ schoolMgmtSort.column === 'session' ? (schoolMgmtSort.direction === 'asc' ? '▲' : '▼') : '⇅' }} | Created {{ schoolMgmtSort.column === 'created' ? (schoolMgmtSort.direction === 'asc' ? '▲' : '▼') : '⇅' }} | Actions |
|---|---|---|---|---|---|
| {{ school.school_name }} | {{ formatSchoolType(school.school_type) }} | {{ school.cluster_name || 'Independent' }} | {{ school.session_count }} session(s) {{ school.session_frequency || '' }} Not set | {{ formatDate(school.created_at) }} | |
| No matching schools found. | |||||
Loading students...
No students are currently assigned to you.
Students are created by administrators and assigned supervising therapists.
No resources have been shared with your school yet.
Your therapist can share resources from the Resource Library.
{{ resource.description }}
Reports functionality coming soon!
This section will include full reports management capabilities.
Therapists assigned to a school have access to all pupil records within that school.
| School {{ schoolAssignmentSort === 'name_asc' ? '▲' : schoolAssignmentSort === 'name_desc' ? '▼' : '' }} | Assigned Therapists {{ schoolAssignmentSort === 'therapist_asc' ? '▲' : schoolAssignmentSort === 'therapist_desc' ? '▼' : '' }} | Actions |
|---|---|---|
| {{ school.school_name }} {{ clusters.find(c => c.cluster_id == school.cluster_id).cluster_name }} |
{{ therapist.therapist_name }}
{{ therapist.session_count }}x {{ therapist.session_frequency || 'weekly' }}
No therapists assigned
|
Send a feedback questionnaire to school staff with a deadline for completion.
Review feedback responses from schools and view aggregated results by campaign.
View and add success stories, photos, and resources from your work in schools.
View success stories shared by therapists and school staff for newsletters and social media.
| School | Responses | Avg. Rating |
|---|---|---|
| {{ school }} | {{ data.count }} | {{ data.emoji_avg || 'N/A' }} |
Select which sections to include in your report.
| Intervention | Schools | Groups | Pupils |
|---|---|---|---|
| {{ inv.intervention_name }} | {{ inv.school_count }} | {{ inv.total_groups }} | {{ inv.total_pupils }} |
| Area | Avg Pre | Avg Post | % Improvement |
|---|---|---|---|
| {{ a.area.replace(/_/g, ' ') }} | {{ a.avg_pre }} | {{ a.avg_post }} | {{ a.pct_improvement }}% |
| School | Allocated (Annual) | Delivered | Remaining | % Complete |
|---|---|---|---|---|
| {{ sd.school_name }} | {{ sd.allocated || '—' }} | {{ sd.delivered }} | {{ sd.allocated ? sd.remaining : '—' }} | {{ sd.pct_complete }}% — |
| Total | {{ reportData.session_delivery.reduce((s, d) => s + (d.allocated || 0), 0) || '—' }} | {{ reportData.session_delivery.reduce((s, d) => s + d.delivered, 0) }} | {{ reportData.session_delivery.reduce((s, d) => s + (d.remaining || 0), 0) }} |