A Google Apps Script application that provides teachers with a Spotify Wrapped-style overview of their students academic year in Google Classroom. Analyze submission patterns, material engagement, assignment trends, and more.
- Submission Engagement: Track total submissions, on-time vs. late ratio, submission patterns (by month, day, hour), completion rates, and student file uploads.
- Material Analytics: See statistics on material uploads and slide counts.
- Assignment Insights: Analyze assignment creation patterns (with vs. without deadlines) over time.
- Submission Timing: Identify "Early Bird" and "Night Owl" students based on their average submission times.
- Go to Google Apps Script and create a new project
- Copy all files from the
srcdirectory into your project:code.gs,data.gs,utilities.gs(server-side code)Index.html,Scripts.html,Styles.html(client-side code)appsscript.json(project configuration)
- Click on "Services" (+ icon) and add these Google services:
- Google Classroom API
- Google Drive API
- Google Slides API
- Save the project (Ctrl+S or ⌘+S)
- Deploy as a web app:
- Click "Deploy" > "New deployment"
- Select "Web app" as the deployment type
- Set "Execute as" to "User accessing the web app"
- Set "Who has access" to "Anyone in your organization" or appropriate access level
- Click "Deploy"
- Authorize the app when prompted
- Copy the provided URL to access your app
For developers familiar with clasp (Command Line Apps Script Projects), you can deploy using:
# Login to your Google account
clasp login
# Clone this repository
git clone https://github.com/arp3xp2/classroom-wrapped.git
cd classroom-wrapped
# Push code to Apps Script (will use src directory as specified in .clasp.json)
clasp push
# Create a new version
clasp version "Initial deployment"
# Deploy as a web app
clasp deploy --description "Classroom Wrapped Web App"Important Note: The project uses the webapp configuration block in appsscript.json to ensure proper deployment as a Web App:
// appsscript.json
{
// ... other settings ...
"webapp": {
"access": "MYSELF", // Or USER_DOMAIN, ANYONE
"executeAs": "USER_ACCESSING"
}
}When you first run the app, it will request the following permissions:
- Google Classroom: To access courses, topics, assignments, student submissions, and course materials.
- Google Drive: To analyze file metadata (size, type) for materials and student attachments.
- Google Slides: To count slides in presentation files.
The app runs under your account, so it only has access to the courses where you are a teacher or owner.
The repository is organized as follows:
/
├── src/ # All Apps Script code files
│ ├── code.gs
│ ├── data.gs
│ ├── utilities.gs
│ ├── appsscript.json
│ ├── Index.html
│ ├── Scripts.html
│ └── Styles.html
├── docs/ # Documentation
│ ├── PRD.md
│ ├── system-design.md
│ └── screenshots/
└── README.md # This file
The application is organized into server-side and client-side components:
src/code.gs: Entry points and core functionalitysrc/data.gs: Data processing and analytics functionssrc/utilities.gs: Helper functions
src/Index.html: Main application interfacesrc/Styles.html: CSS styling and themessrc/Scripts.html: Client-side JavaScript and visualization logic
src/appsscript.json: API and OAuth scope configuration
- Open the web app URL
- Select a course from the dropdown
- Choose the analysis period:
- Entire course
- Custom date range
- Select optional features:
- Count presentation slides (may take a few minutes for large courses)
- Click "Generate Classroom Wrapped"
- View the statistics and visualizations
- For large courses with many assignments and submissions, the analysis may take several minutes
- The slide counting feature analyzes all Google Slide presentations in the course materials, which can significantly increase processing time
- Optimizations have been implemented to reduce API calls and improve performance

