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

NoUser CategoryUser Main Activity
1Aktor 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

NoEpicFeature
1File Ingestion & OCRPDF Document Picker
Vision OCR Text Extraction
2AI Script Formatting EngineScript Entity Classifier (Scene, Tokoh, Dialog, Cue)
OCR Typo & Formatting Cleaner
Page-Preserving Boundary Mapping
3HomepageRecent Scripts (Continue Reading)
Import CTA Button
Library & Search List
4Library & Search (Breakdown)List All Stored Scripts
Search Script by Title
5Accessible Script Reader1: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

ParameterKeterangan
Target DateSprint 1
EpicFile Ingestion & OCR
Short ExplanationMemfasilitasi 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 StatusApproved

I.1.1. User Story

NoUser StoryPriorityNotes
1Sebagai aktor tunanetra, saya ingin memindai file PDF naskah berbasis gambar agar teks naskah dapat diekstrak menjadi teks digital sesuai urutan halaman aslinya.Must HaveTerintegrasi dengan DocumentPicker dan kamera VisionKit.

I.1.2. Scenario

NoTypeDescriptionValidation
1PositifMemilih 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...".
2NegatifBerkas PDF rusak / gambar buram.Sistem menampilkan dialog kesalahan aksesibel dengan tombol "Coba Lagi" dan fokus VoiceOver otomatis diarahkan ke tombol tersebut.
3NegatifPengguna membatalkan pemilihan dokumen.Sistem mengembalikan fokus layar ke halaman utama tanpa error.

I.1.3. User Interaction and Design

DescriptionUI Design / Accessibility Notes
Ingestion Sheet / File PickerArea 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

ParameterKeterangan
Target DateSprint 2
EpicAI Script Formatting Engine
Short ExplanationMemproses 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 StatusApproved

II.1.1. User Story

NoUser StoryPriorityNotes
1Sebagai 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 HaveDisimpan lokal ke model database SwiftData.

II.1.2. Scenario

NoTypeDescriptionValidation
1PositifParsing teks naskah 11 halaman.Menghasilkan 11 objek ScriptPage, di mana setiap halaman memuat kumpulan ScriptBlock (dialog/paragraf terpisah).
2NegatifFormat 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

DescriptionUI Design / Accessibility Notes
Processing StateIndikator progres dengan label suara dinamis: "Sedang menyusun naskah per halaman...".

III. Homepage

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

ParameterKeterangan
Target DateSprint 3
EpicHomepage
Short ExplanationMenampilkan beranda utama dengan akses cepat ke naskah terakhir yang dibaca (Continue Reading), tombol aksi impor naskah baru, serta daftar ringkas naskah dan pencarian.
Document StatusApproved

III.1.1. User Story

NoUser StoryPriorityNotes
1Sebagai aktor, saya ingin melihat naskah yang terakhir saya buka di beranda agar saya dapat langsung melanjutkan latihan pada halaman terakhir yang sedang dipelajari.Must HaveMemuat 1 kartu naskah aktif terakhir beserta info halaman terakhir dibaca.

III.1.2. Scenario

NoTypeDescriptionValidation
1PositifMembuka 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".
2PositifMembuka beranda saat pertama kali (Empty State).Menampilkan instruksi suara ramah dan tombol besar "Mulai Pindai Naskah Pertama".
3PositifMengetuk tombol "Import / Pindai Naskah".Membuka alur File Ingestion (Epic [AppName]-01).

III.1.3. User Interaction and Design

DescriptionUI Design / Accessibility Notes
Homepage LayoutDesain 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

ParameterKeterangan
Target DateSprint 3
EpicLibrary & Search (Breakdown)
Short ExplanationMenampilkan daftar seluruh naskah yang tersimpan di perangkat lokal dan menyediakan bilah pencarian judul naskah.
Document StatusApproved

IV.1.1. User Story

NoUser StoryPriorityNotes
1Sebagai aktor, saya ingin mencari dan membuka koleksi naskah yang pernah saya impor agar saya dapat mengakses naskah proyek teater lainnya.Must HaveMengambil data lokal dari SwiftData.

IV.1.2. Scenario

NoTypeDescriptionValidation
1PositifMembuka halaman Library.Menampilkan daftar seluruh naskah yang tersimpan lengkap dengan total halaman.
2PositifMengetik kata kunci judul pada kolom pencarian.Daftar naskah menyaring dan menampilkan hasil yang cocok secara instan.
3NegatifJudul naskah tidak ditemukan.Menampilkan teks status: "Tidak ada naskah dengan judul tersebut" dan VoiceOver membacakannya secara otomatis.

IV.1.3. User Interaction and Design

DescriptionUI Design / Accessibility Notes
Script List ViewDaftar 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

ParameterKeterangan
Target DateSprint 2
EpicAccessible Script Reader
Short ExplanationMenampilkan 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 StatusApproved

V.1.1. User Story

NoUser StoryPriorityNotes
1Sebagai 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 HaveMenggunakan TabView (Paged Style) & AccessibilityRotor.

V.1.2. Scenario

NoTypeDescriptionValidation
1PositifMembuka naskah 11 halaman.Antarmuka menampilkan Halaman 1 dari 11. Tidak ada infinite scroll. Paginasi dapat digeser horizontal atau via tombol navigasi halaman.
2PositifMenavigasi 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.
3PositifMenggunakan Custom Rotor VoiceOver.Aktor dapat memilih rotor: Per Halaman (Page), Per Adegan (Scene), Per Tokoh (Character), atau Arahan Aksi (Stage Cues).
4PositifBerpindah 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

DescriptionUI Design / Accessibility Notes
Paged Reader LayoutPaginasi 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 .githubPublic

  2. suar-swiftui suar-swiftuiPublic

    Swift

Repositories

Showing 2 of 2 repositories

Top languages

Loading…

Most used topics

Loading…