docs: students analytics blog post

This commit is contained in:
Rotimi Best
2024-12-31 01:15:51 +01:00
parent ae55349f27
commit 09ef36de99
8 changed files with 67 additions and 44 deletions
@@ -6,7 +6,7 @@ date: '2024-10-11'
author: Rotimi Best
avatar: /blog/best.jpg
role: Founder
tags: ['Launch Week', 'Custom Domains']
tags: ['Launch Week', 'Custom Domains', 'Company Update']
published: true
---
@@ -6,7 +6,7 @@ date: '2024-10-07'
author: Rotimi Best
avatar: /blog/best.jpg
role: Founder
tags: ['Launch Week']
tags: ['Launch Week', 'Company Update']
published: true
---
+1 -1
View File
@@ -6,7 +6,7 @@ date: '2024-10-09'
author: Rotimi Best
avatar: /blog/best.jpg
role: Founder
tags: ['Launch Week', 'Self-host']
tags: ['Launch Week', 'Self-host', 'Company Update']
published: true
---
@@ -0,0 +1,59 @@
---
title: 'Introducing Student Analytics'
description: 'You can now view analytics on your students, including their last login date, course completion status, and more.'
imageUrl: 'https://assets.cdn.clsrio.com/blog/students-analytics.png'
date: '2024-12-31'
author: Rotimi Best
avatar: /blog/best.jpg
role: Founder
tags: ['Analytics', 'Company Update']
published: true
---
![classroomio-student-analytics](https://assets.cdn.clsrio.com/blog/students-analytics.png)
_ClassroomIO Students Analytics_
As we end the year, we are excited to announce that we have added student analytics to our platform. This is a feature that we have been working on for a while and we are happy to finally launch it. With this new feature, you can better understand the progress of specific students in your course or your organisation.
## Audience Analytics
The audience page as you already know allows you to view the students in your **organisation**. With audience analytics, you can drill into each registered student of yours to understand the last time they logged in, all the courses they are enrolled in and the progress they have made.
<br />
<video
loop
muted
autoplay
preload="auto"
autoPictureInPicture
class="rounded-md" src="https://assets.cdn.clsrio.com/blog/organisation-student-analytics.mp4" controls
>
</video>
## Course Student Analytics
Further more, when you go into any course and go to the people tab, you can view all the students currently enrolled in that course. With this new release, you can now also drill into each enrolled student to see their course progress. You can see:
- The last time they logged in
- The progress they have made in the course
- The average grade they have received in the course
- Their submitted assignments and the score they received
<br />
<video loop
muted
autoplay
preload="auto"
autoPictureInPicture
class="rounded-md"
src="https://assets.cdn.clsrio.com/blog/course-students-analytics.mp4" controls
>
</video>
## What's Next?
We are working on adding more analytics to the platform to help you better understand what's going on in your organisation. You will know the coutries of your students, their overall performance and more.
Give us feedback on what you think about this feature and what you would like to see next on [Discord](https://classroomio.com/discord).
@@ -41,7 +41,7 @@
<svelte:fragment slot="cell" let:row let:cell>
{#if cell.key === 'name'}
<Link
class="flex items-center gap-2 text-black hover:text-black"
class="flex items-center gap-2"
href={`${$pageStore.url.href}/${row.id}/${$currentOrg.id}`}
>
<Avatar src={row.avatar_url} width="w-5" height="h-5" />
@@ -7,17 +7,16 @@
import DeleteConfirmation from '$lib/components/Course/components/People/DeleteConfirmation.svelte';
import InvitationModal from '$lib/components/Course/components/People/InvitationModal.svelte';
import { deleteMemberModal } from '$lib/components/Course/components/People/store';
import type { Person, ProfileRole } from '$lib/components/Course/components/People/types';
import type { ProfileRole } from '$lib/components/Course/components/People/types';
import { group } from '$lib/components/Course/store';
import Select from '$lib/components/Form/Select.svelte';
import IconButton from '$lib/components/IconButton/index.svelte';
import { VARIANTS } from '$lib/components/PrimaryButton/constants';
import PrimaryButton from '$lib/components/PrimaryButton/index.svelte';
import RoleBasedSecurity from '$lib/components/RoleBasedSecurity/index.svelte';
import { snackbar } from '$lib/components/Snackbar/store';
import { ROLE_LABEL, ROLES } from '$lib/utils/constants/roles';
import { t } from '$lib/utils/functions/translations';
import { deleteGroupMember, updatedGroupMember } from '$lib/utils/services/courses';
import { deleteGroupMember } from '$lib/utils/services/courses';
import { profile } from '$lib/utils/store/user';
import type { GroupPerson } from '$lib/utils/types';
import {
@@ -30,22 +29,12 @@
StructuredListRow
} from 'carbon-components-svelte';
import TrashCanIcon from 'carbon-icons-svelte/lib/TrashCan.svelte';
import copy from 'copy-to-clipboard';
let people: Array<GroupPerson> = [];
let member: { id?: string; email?: string; profile?: { email: string } } = {};
let shouldEditMemberId: string | null = null;
let filterBy: ProfileRole = ROLES[0];
let searchValue = '';
// function setPeople(people: Array<Person>) {
// if (!Array.isArray(people)) return;
// people = (people || []).sort((a, b) => a.role_id - b.role_id);
// console.log(`people changed`, people);
// }
// function for the searchbar
function filterPeople(_query, people) {
const query = _query.toLowerCase();
return people.filter((person) => {
@@ -62,14 +51,6 @@
await deleteGroupMember(member.id);
}
async function editMemberId(person: Person) {
await updatedGroupMember(
{ assigned_student_id: person.assigned_student_id },
{ id: person.id }
);
shouldEditMemberId = null;
}
function sortAndFilterPeople(_people: Array<GroupPerson>, filterBy: ProfileRole) {
people = (_people || [])
.filter((person) => {
@@ -98,23 +79,6 @@
return `${obscuredUsername}@${domain}`;
}
function handleEditStudentIdMode(personId: string) {
shouldEditMemberId = personId;
}
function copyToClipboard(studentAssignedId: string | null) {
snackbar.success(`snackbar.people.success.copied`);
if (studentAssignedId) {
copy(studentAssignedId);
}
}
const handleClick = () => {
const url = $page.url.href + '?add=true';
goto(url);
};
function gotoPerson(person) {
goto(`${$page.url.href}/${person.profile_id}`);
}
@@ -196,7 +196,7 @@
: 'bg-yellow-200 text-yellow-700'
}`}
>
{exercise.isCompleted ? $t('analytics.complete') : $t('analytics.incomplete')}
{exercise.isCompleted ? $t('analytics.completed') : $t('analytics.incomplete')}
</Tag>
</div>
{/key}
@@ -186,7 +186,7 @@
}`}
>
{course.lessons_count === course.lessons_completed
? $t('analytics.complete')
? $t('analytics.completed')
: $t('analytics.incomplete')}
</Tag>
</div>