Skip to content
← All work

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

tugas-demo.dzakihf.my.idFull demo ↗

/ 02

Decisions that mattered

  1. 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. 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. 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. 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

  1. 01

    Teacher

    creates class + assignment

  2. 02

    Student

    submits through one link

  3. 03

    Storage

    files in R2, rows in D1

  4. 04

    Review

    media streamed with Range

  5. 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
Next projectMIPA Reservation↗