← Kembali ke Proyek

Case Study

Read-Assist

Aplikasi audiobook untuk penyandang disabilitas netra. Buku diunggah ke sistem, teksnya diubah menjadi suara secara otomatis, lalu didengarkan lewat pemindai QR Code yang ditempel pada buku fisik, tanpa perlu memasang aplikasi khusus di ponsel.

  • Peran Solo project, dirancang, ditulis, dan diuji sendiri
  • Stack Laravel, Blade, PHP, JavaScript, Tailwind CSS, SQLite
  • Status Aktif dan dapat diakses publik

Masalah yang ingin diselesaikan

Buku cetak yang tersedia di tangan, buku sekolah, novel, atau dokumen, praktis tidak bisa diakses oleh penyandang disabilitas netra. Membaca halaman demi halaman dengan buku cetak atau screen reader bawaan adalah proses yang lambat, melelahkan, dan bergantung pada orang lain.

Sebagian besar solusi audiobook yang tersedia bekerja dengan cara yang sama: pengguna harus mencari dan mengunduh berkas MP3. Untuk buku yang dicetak sendiri, atau buku yang hanya ada dalam bentuk cetak, tidak ada berkas apa pun untuk diunduh. Aplikasi pasar seperti itu juga sering mewajibkan registrasi berbulan-bulan sebelum satu buku bisa diakses.

Read-Assist berangkat dari sebaliknya: kita mulai dari buku fisik yang sudah ada, lalu sistemnya yang membuat versi suara dari buku itu.

Bagaimana cara kerjanya

Alurnya sengaja dibuat sesedikit mungkin: peminjam memindai satu QR Code, lalu halaman audiobook langsung terbuka. Semua proses berat, dari ekstraksi teks sampai pembuatan audio, terjadi di belakang layar sebelum kode itu dicetak.

  1. Unggah buku

    Pengguna mengunggah berkas PDF atau EPUB, lalu mengisi judul dan informasi sampul.

  2. Ekstraksi teks

    Sistem menarik teks dari dokumen, membersihkannya dari header, footer, dan nomor halaman, lalu memecahnya per kalimat.

  3. Generasi audio

    Kalimat dikirim ke antrean dan diproses di latar belakang. Potongan yang gagal dicoba ulang, lalu seluruh bagian digabung menjadi satu MP3.

  4. QR Code siap cetak

    Setelah selesai, sistem membuat QR Code yang menautkan UUID buku ke halaman pemutar, sehingga bisa ditempel di sampul.

  5. Pemutar di browser

    Pembaca memindai QR Code dan mendengarkan langsung dari peramban, lengkap dengan kontrol suara Bahasa Indonesia.

Pilihan teknis

Antrean, bukan permintaan langsung

Membuat audio untuk satu buku bisa memakan waktu lama. Menaruhnya di antrean membuat halaman unggahan selesai cepat, dan pengguna melihat status progres alih-alih menunggu halaman yang membeku.

Satu kalimat gagal tidak menggagalkan buku

Karena teks dipecah per kalimat, satu kalimat yang gagal diproses bisa dicoba ulang sendiri tanpa mengulang seluruh buku.

Dua jalur pemutaran

MP3 hasil generasi adalah jalur utama. Web Speech API menjadi cadangan bila berkas audio belum tersedia, sehingga halaman tidak pernah kosong.

SQLite

Database bawaan Laravel, tanpa server database terpisah. Cukup untuk satu instance aplikasi ini.

Fitur aksesibilitas

Aplikasi ini ditujukan untuk kelompok pengguna yang justru paling sering tersinggung oleh setelan bawaan peramban, jadi beberapa opsi dibuat dapat dinyalakan sendiri oleh pengguna.

  • Mode kontras tinggi untuk tampilan di luar setelan bawaan peramban.
  • Ukuran teks A, A+, dan A++ agar pembaca dapat memperbesar teks tanpa harus memperbesar seluruh halaman.
  • Pengenalan suara Bahasa Indonesia untuk memasukkan teks lewat dikte pada peramban yang mendukungnya.
  • Navigasi keyboard pada pemutar dan pengaturannya, tanpa harus memakai mouse.
  • Pengaturan tersimpan untuk kontras, ukuran teks, dan kecepatan baca, yang disimpan di server lalu dipulihkan di perangkat lain.
  • Dapat dipasang sebagai aplikasi melalui manifest PWA dan service worker, sehingga bisa dijalankan dari layar utama ponsel.

Keamanan

Karena aplikasi menyimpan berkas buku dan membatasi siapa yang boleh mengakses, beberapa hal ini diperhatikan sejak awal:

  • Autentikasi berbasis session dengan pemisahan peran.
  • Setiap buku dicek kepemilikannya, sehingga satu pengguna tidak dapat membuka buku milik pengguna lain hanya dengan menebak tautan.
  • Batas jumlah permintaan pada endpoint yang dipakai untuk generasi audio, supaya satu pengguna tidak dapat membuat antrean menumpuk.
  • Token reset password diberi masa berlaku, sehingga tautan yang tertinggal tidak berlaku selamanya.

Pengujian

Aplikasi ini punya feature test otomatis yang menyalin alur penggunaan utama, dari unggah dokumen sampai pemutarannya. Berkas tests/Feature/AudioBukuTest.php berisi 27 feature test method yang menutup alur utama, kegagalan ekstraksi, pemeriksaan kepemilikan, dan autentikasi. Satu test lagi di ExampleTest.php hanya bawaan Laravel dan tidak dihitung di sini.

Angka itu dihitung dari isi berkas test di repository. Saya tidak mengklaim aplikasi ini sudah lolos audit WCAG atau pernah diuji bersama pengguna disabilitas netra, karena pengujian seperti itu memang belum saya lakukan.

Yang tidak saya klaim

  • Tidak ada angka pengguna, jumlah buku, atau dampak bisnis yang saya laporkan, karena saya tidak punya data pengukuran seperti itu.
  • Aplikasi ini belum pernah diuji bersama penyandang disabilitas netra. Fitur aksesibilitasnya mengikuti prinsip praktik web yang baik, bukan hasil riset pengguna.
  • Aplikasi ini belum dinyatakan sesuai WCAG oleh lembaga audit mana pun.
  • Read-Assist adalah proyek pribadi. Semua kode pada repository ditulis dan diuji oleh saya sendiri.