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.
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.
-
Unggah buku
Pengguna mengunggah berkas PDF atau EPUB, lalu mengisi judul dan informasi sampul.
-
Ekstraksi teks
Sistem menarik teks dari dokumen, membersihkannya dari header, footer, dan nomor halaman, lalu memecahnya per kalimat.
-
Generasi audio
Kalimat dikirim ke antrean dan diproses di latar belakang. Potongan yang gagal dicoba ulang, lalu seluruh bagian digabung menjadi satu MP3.
-
QR Code siap cetak
Setelah selesai, sistem membuat QR Code yang menautkan UUID buku ke halaman pemutar, sehingga bisa ditempel di sampul.
-
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.