Data Inventory
Last Updated: March 8, 2026
This page lists every piece of student data that Classroom Heroes collects and stores. For each field, we explain what it is, why we collect it, how long we keep it, and what happens when a student is deleted.
1. Student Account Data
Stored in the students table in our Supabase database.
| Field | What It Is | Why We Collect It | How Long We Keep It |
|---|---|---|---|
| name | Student's first name only | So teachers and classmates can identify the student | Until student is deleted |
| class_id | Links the student to their class | So the student appears in the right class | Until student is deleted |
| total_points | Total points the student has earned | To track overall progress and reward learning | Until student is deleted |
| current_streak | Number of consecutive days the student has been active | To encourage daily engagement with bonus points | Until student is deleted |
| last_active_date | The last date the student used the platform | To calculate the daily streak | Until student is deleted |
| avatar | Avatar customization choices (colors, features) | To let the student personalize their character | Until student is deleted |
| is_active | Whether the account is active or deactivated | To allow teachers to deactivate students without deleting data | Until student is deleted |
| created_at | When the student account was created | Internal record keeping | Until student is deleted |
| updated_at | When the student record was last changed | Internal record keeping | Until student is deleted |
When a student is deleted, every field in this table is permanently removed.
2. Learning Progress
Stored in the student_progress table. One row per student per episode.
| Field | What It Is | Why We Collect It | How Long We Keep It |
|---|---|---|---|
| video_completed | Whether the student watched the episode video | To track which episodes the student has completed | Deleted when student is deleted |
| quiz_completed | Whether the student passed the episode quiz | To unlock the next episode and show progress to teachers | Deleted when student is deleted |
| quiz_score | The student's best quiz score for this episode | To show the teacher how well the student understood the material | Deleted when student is deleted |
| game_completed | Whether the student completed the episode mini-game | To track full episode completion | Deleted when student is deleted |
| game_score | The student's best game score for this episode | To award points and show performance to teachers | Deleted when student is deleted |
| completed_at | When the student completed this episode | To show completion timeline to teachers | Deleted when student is deleted |
All learning progress rows are automatically deleted when the student is deleted (cascading deletion).
3. Quiz Attempts
Stored in the quiz_attempts table. One row per quiz attempt.
| Field | What It Is | Why We Collect It | How Long We Keep It |
|---|---|---|---|
| answers | The answers the student chose for each quiz question | To calculate the score and show which questions were missed | Deleted when student is deleted |
| score | How many questions the student got right | To determine if the student passed (80% required) | Deleted when student is deleted |
| max_score | The total number of questions on the quiz | To calculate the percentage score | Deleted when student is deleted |
| completed_at | When the student submitted this quiz attempt | To order attempts by time | Deleted when student is deleted |
All quiz attempt rows are automatically deleted when the student is deleted (cascading deletion).
4. Game Attempts
Stored in the game_attempts table. One row per game attempt.
| Field | What It Is | Why We Collect It | How Long We Keep It |
|---|---|---|---|
| score | The score the student earned in the mini-game | To award points and track performance | Deleted when student is deleted |
| completed_at | When the student finished the game | To order attempts by time | Deleted when student is deleted |
All game attempt rows are automatically deleted when the student is deleted (cascading deletion).
5. Badges Earned
Stored in the student_badges table. One row per badge earned.
| Field | What It Is | Why We Collect It | How Long We Keep It |
|---|---|---|---|
| badge_id | Which badge the student earned | To display earned badges on the student profile | Deleted when student is deleted |
| earned_at | When the student earned the badge | To show badge history in order | Deleted when student is deleted |
All badge records are automatically deleted when the student is deleted (cascading deletion).
6. Session Data
Session data is stored as cookies in the student's browser and as a hash in our database.
| Item | What It Is | Why We Use It | How Long It Lasts |
|---|---|---|---|
| student_session cookie | An HMAC-signed token stored in the browser | To keep the student logged in without a password | 8 hours, then expires automatically |
| session_token_hash | A hashed version of the session token, stored in the database | To verify the session cookie is valid when the student makes requests | Cleared on logout or when the student is deleted |
| csrf_token cookie | A random security token stored in the browser | To prevent cross-site request forgery attacks | Browser session (cleared when the browser is closed) |
The session_token_hash stored in our database does not contain the student's name, email, or any identifying information. It is only a cryptographic hash used to verify that a session cookie is valid.
7. Data We Do Not Collect
Classroom Heroes does not collect the following from students:
- Email addresses
- Last names
- Home addresses
- Phone numbers
- Photos or videos of students
- Biometric data (fingerprints, face scans, voice prints)
- Location data (GPS, IP-based geolocation)
- Browsing history outside the Classroom Heroes app
- Social media accounts
- Parent or guardian contact information
We designed Classroom Heroes to work with the minimum amount of student information possible. A first name and a class code are all a student needs to use the platform.