Skip to content
@TheGuys52

TheGuys52

Project Requirement Document


Executive Summary

Product Name: Suar: Accessible Theater Script Reader

Problem Statement:

Aktor teater tunanetra mengalami hambatan akses naskah (Format-Access Failure) ketika naskah dibagikan dalam format PDF hasil scan atau foto dokumen tanpa text layer, sehingga dokumen tersebut tidak dapat dibaca oleh Screen Reader (VoiceOver) secara mandiri.

Proposed Solution:

Aplikasi iOS yang mengekstrak teks dari naskah berbasis gambar/PDF menggunakan Vision OCR, memilah teks ke dalam struktur dialog standar via AI parser, dan menyajikannya dalam antarmuka yang ramah Screen Reader (VoiceOver) untuk navigasi latihan mandiri.

Success Metrics:

  • OCR Conversion Rate: $\ge 90%$ akurasi ekstraksi teks naskah ke format terstruktur (Scene, Tokoh, Dialog, Cue).
  • VoiceOver Navigation Independence: $100%$ komponen antarmuka dapat diakses mandiri menggunakan gestur rotor dan swipe per blok dialog VoiceOver.
  • Page-Matching Accuracy: $100%$ kesesuaian nomor halaman digital di aplikasi dengan jumlah halaman dokumen fisik/PDF asli.
  • Processing Latency: Proses OCR dan perapian naskah 1–5 halaman selesai dalam $< 5$ detik.

Scope of Work

Cakupan Pengguna

No User Category User Main Activity
1 Aktor Tunanetra (Primary User) Mengimpor naskah fisik/PDF gambar, mendengarkan pembacaan naskah terstruktur halaman-per-halaman via VoiceOver, dan menavigasi baris dialog/adegan secara mandiri selama latihan.

Fitur yang Akan Dikembangkan

No Epic Feature
1 File Ingestion & OCR PDF Document Picker
Vision OCR Text Extraction
2 AI Script Formatting Engine Script Entity Classifier (Scene, Tokoh, Dialog, Cue)
OCR Typo & Formatting Cleaner
Page-Preserving Boundary Mapping
3 Homepage Recent Scripts (Continue Reading)
Import CTA Button
Library & Search List
4 Library & Search (Breakdown) List All Stored Scripts
Search Script by Title
5 Accessible Script Reader 1:1 Page-Based Pagination Layout
Discrete Paragraph/Dialogue Block Navigation
Structured VoiceOver Text Layout
Custom Accessibility Rotor (Per Halaman, Adegan, Tokoh, Aksi)

Detail Spesifikasi Fitur per Epic


I. File Ingestion & OCR

I.1. Suar: Accessible Theater Script Reader -01 - File Ingestion & OCR Extraction

Parameter Keterangan
Target Date Sprint 1
Epic File Ingestion & OCR
Short Explanation Memfasilitasi pengguna untuk mengimpor file PDF gambar atau dokumen naskah fisik, mengekstrak teks mentah per halaman menggunakan Vision OCR, dan mencatat total halaman dokumen asli.
Document Status Approved

I.1.1. User Story

No User Story Priority Notes
1 Sebagai aktor tunanetra, saya ingin memindai file PDF naskah berbasis gambar agar teks naskah dapat diekstrak menjadi teks digital sesuai urutan halaman aslinya. Must Have Terintegrasi dengan DocumentPicker dan kamera VisionKit.

I.1.2. Scenario

No Type Description Validation
1 Positif Memilih file PDF naskah (misal: 11 halaman). Sistem mengekstrak teks dari ke-11 halaman dan memicu pengumuman suara (Accessibility Announcement): "11 halaman naskah berhasil dipindai, memproses format...".
2 Negatif Berkas PDF rusak / gambar buram. Sistem menampilkan dialog kesalahan aksesibel dengan tombol "Coba Lagi" dan fokus VoiceOver otomatis diarahkan ke tombol tersebut.
3 Negatif Pengguna membatalkan pemilihan dokumen. Sistem mengembalikan fokus layar ke halaman utama tanpa error.

I.1.3. User Interaction and Design

Description UI Design / Accessibility Notes
Ingestion Sheet / File Picker Area sentuh tombol minimal $44 \times 44\text{ pt}$. Label VoiceOver: "Pilih naskah PDF atau foto, tombol". Umpan balik haptik sukses/gagal di akhir proses.

II. AI Script Formatting Engine

II.1. Suar: Accessible Theater Script Reader -02 - AI Script Formatting Engine

Parameter Keterangan
Target Date Sprint 2
Epic AI Script Formatting Engine
Short Explanation Memproses teks hasil OCR menjadi entitas terstruktur (Scene, Character, Dialogue, Stage Direction), menjaga pemetaan batas halaman (1:1), memecah dialog menjadi blok-blok terpisah, dan menyimpannya ke SwiftData.
Document Status Approved

II.1.1. User Story

No User Story Priority Notes
1 Sebagai aktor, saya ingin naskah terbagi persis per halaman aslinya dan terpecah per baris dialog agar saya dapat melompat baris per baris tanpa terbebani membaca 1 halaman penuh sekaligus. Must Have Disimpan lokal ke model database SwiftData.

II.1.2. Scenario

No Type Description Validation
1 Positif Parsing teks naskah 11 halaman. Menghasilkan 11 objek ScriptPage, di mana setiap halaman memuat kumpulan ScriptBlock (dialog/paragraf terpisah).
2 Negatif Format teks dalam 1 halaman tidak memiliki pemisah dialog yang jelas. Sistem memecah teks per paragraf narasi tanpa menghilangkan nomor halaman asli atau membuat aplikasi crash.

II.1.3. User Interaction and Design

Description UI Design / Accessibility Notes
Processing State Indikator progres dengan label suara dinamis: "Sedang menyusun naskah per halaman...".

III. Homepage

III.1. Suar: Accessible Theater Script Reader -03 - Homepage

Parameter Keterangan
Target Date Sprint 3
Epic Homepage
Short Explanation Menampilkan beranda utama dengan akses cepat ke naskah terakhir yang dibaca (Continue Reading), tombol aksi impor naskah baru, serta daftar ringkas naskah dan pencarian.
Document Status Approved

III.1.1. User Story

No User Story Priority Notes
1 Sebagai aktor, saya ingin melihat naskah yang terakhir saya buka di beranda agar saya dapat langsung melanjutkan latihan pada halaman terakhir yang sedang dipelajari. Must Have Memuat 1 kartu naskah aktif terakhir beserta info halaman terakhir dibaca.

III.1.2. Scenario

No Type Description Validation
1 Positif Membuka beranda saat ada riwayat naskah aktif. Menampilkan kartu Recent Script dengan info judul naskah, posisi halaman terakhir (misal: "Halaman 4 dari 11"), dan tombol "Lanjutkan Membaca".
2 Positif Membuka beranda saat pertama kali (Empty State). Menampilkan instruksi suara ramah dan tombol besar "Mulai Pindai Naskah Pertama".
3 Positif Mengetuk tombol "Import / Pindai Naskah". Membuka alur File Ingestion (Epic [AppName]-01).

III.1.3. User Interaction and Design

Description UI Design / Accessibility Notes
Homepage Layout Desain kontras tinggi (Grayscale compliant). Kartu naskah digabung menjadi satu elemen VoiceOver: "Naskah aktif [Judul], terakhir di halaman 4 dari 11. Ketuk dua kali untuk melanjutkan."

IV. Library & Search (Breakdown)

IV.1. Suar: Accessible Theater Script Reader -04 - Library & Search

Parameter Keterangan
Target Date Sprint 3
Epic Library & Search (Breakdown)
Short Explanation Menampilkan daftar seluruh naskah yang tersimpan di perangkat lokal dan menyediakan bilah pencarian judul naskah.
Document Status Approved

IV.1.1. User Story

No User Story Priority Notes
1 Sebagai aktor, saya ingin mencari dan membuka koleksi naskah yang pernah saya impor agar saya dapat mengakses naskah proyek teater lainnya. Must Have Mengambil data lokal dari SwiftData.

IV.1.2. Scenario

No Type Description Validation
1 Positif Membuka halaman Library. Menampilkan daftar seluruh naskah yang tersimpan lengkap dengan total halaman.
2 Positif Mengetik kata kunci judul pada kolom pencarian. Daftar naskah menyaring dan menampilkan hasil yang cocok secara instan.
3 Negatif Judul naskah tidak ditemukan. Menampilkan teks status: "Tidak ada naskah dengan judul tersebut" dan VoiceOver membacakannya secara otomatis.

IV.1.3. User Interaction and Design

Description UI Design / Accessibility Notes
Script List View Daftar berbasis baris dengan trailing delete action. Kolom pencarian memiliki accessibility label eksplisit: "Cari judul naskah, bidang teks".

V. Accessible Script Reader

V.1. Suar: Accessible Theater Script Reader -05 - Accessible Script Reader

Parameter Keterangan
Target Date Sprint 2
Epic Accessible Script Reader
Short Explanation Menampilkan naskah dengan sistem paginasi 1:1 sesuai dokumen asli (tanpa endless scroll), memecah isi naskah per dialog/paragraf menjadi elemen VoiceOver mandiri (next/previous), serta menyediakan Custom Accessibility Rotor.
Document Status Approved

V.1.1. User Story

No User Story Priority Notes
1 Sebagai aktor tunanetra, saya ingin naskah terbagi per halaman seperti aslinya dan berpindah dialog demi dialog dengan gestur geser (swipe) agar saya dapat mengontrol ritme latihan tanpa harus mendengarkan satu halaman penuh selesai. Must Have Menggunakan TabView (Paged Style) & AccessibilityRotor.

V.1.2. Scenario

No Type Description Validation
1 Positif Membuka naskah 11 halaman. Antarmuka menampilkan Halaman 1 dari 11. Tidak ada infinite scroll. Paginasi dapat digeser horizontal atau via tombol navigasi halaman.
2 Positif Menavigasi dialog di dalam satu halaman aktif via VoiceOver. Setiap swipe kanan berpindah ke 1 blok dialog berikutnya: "Tokoh [Nama Tokoh], Dialog: [Teks Dialog]". Pengguna bisa langsung swipe kiri untuk kembali ke dialog sebelumnya tanpa mengulang halaman.
3 Positif Menggunakan Custom Rotor VoiceOver. Aktor dapat memilih rotor: Per Halaman (Page), Per Adegan (Scene), Per Tokoh (Character), atau Arahan Aksi (Stage Cues).
4 Positif Berpindah ke halaman berikutnya. Fokus VoiceOver otomatis mengumumkan: "Halaman 2 dari 11" dan memposisikan fokus pada dialog pertama halaman tersebut.

V.1.3. User Interaction and Design

Description UI Design / Accessibility Notes
Paged Reader Layout Paginasi kartu 1:1 (Page Style TabView / Stepper). Setiap dialog dibungkus dalam .accessibilityElement(children: .combine). Indikator halaman eksplisit: "Halaman 1 dari 11". Target sentuh tombol navigasi $\ge 44 \times 44\text{ pt}$.

Popular repositories Loading

  1. .github .github Public

  2. suar-swiftui suar-swiftui Public

    Swift

Repositories

Showing 2 of 2 repositories

Top languages

Loading…

Most used topics

Loading…