Assignment hub for teachers · 1 min read
Sistem Tugas
★ Real teachers, real students
Teachers post assignments, students hand them in through one link — audio and video included — and teachers grab everything as a ZIP.
/ 01
The problem
Collecting assignments gets messy fast — especially when students hand in audio and video. Teachers needed one place for students to submit, and one button to get everything back out.
- students
- 277
- students
- submissions
- 166
- submissions
- classes
- 8
- classes
☝ Poke the mini version
/ 02
Decisions that mattered
- 1
A form per assignment
Each assignment gets its own submission form with its own deadline in WIB, attachments, and edits. Students open one link and hand in; teachers see who's done and export everything as a ZIP.
- 2
Uploads that survive big files
Media files are big, so uploads show byte-accurate progress and retry on their own. Each teacher gets 10 GB of storage.
- 3
A migration that lost nothing
I moved the app from Cloudflare Pages to Workers + D1 + R2 while it was in use, then verified it: row counts matched and every object's ETag matched.
- 4
Media that plays, uploads that can't lie
Media routes support HTTP Range so audio and video players can seek. Uploads are hardened with nosniff and file extensions forced to match the real type.
/ 03
How it flows
01
Teacher
creates class + assignment
02
Student
submits through one link
03
Storage
files in R2, rows in D1
04
Review
media streamed with Range
05
Export
everything as one ZIP
/ 04
Where it landed
- ✦In real use: 2 teachers, 8 classes, 277 students, 166 submissions (as of October 23, 2026)
- ✦Moved to a new stack without losing a single row or file
- ✦Audio and video submissions work like any other file
Built with
- React
- Cloudflare Workers
- D1
- R2