Page 1 of 31
System Requirements Document for buku-cerita-direktori
1. Introduction
buku-cerita-direktori adalah website direktori buku cerita digital dan platform membaca online berbahasa Indonesia yang memuat koleksi cerita dari berbagai genre — fantasi, romansa, horor, komedi, misteri, fiksi ilmiah, dan genre lain. Produk ini dibangun sebagai perpustakaan cerita online multi-genre yang kaya fitur, melayani tiga kelompok pengguna aktif: pembaca yang menjelajah dan menikmati cerita, penulis yang menerbitkan karya per bab, serta admin/moderator yang menjaga kualitas dan ketertiban koleksi.
Tujuan produk yang diturunkan dari sumber:
- Menyediakan direktori cerita yang dapat dijelajahi melalui pengelompokan genre utama, sub-genre, tag, status cerita (tamat/ongoing), dan target usia.
- Memberi pembaca pengalaman membaca yang nyaman untuk sesi panjang, dengan mode gelap, bookmark, rating/ulasan, riwayat membaca, dan kolom komentar.
- Memberi penulis dashboard untuk mengunggah cerita per bab dan memantau statistik pembaca.
- Memberi admin/moderator sarana moderasi konten.
- Menyajikan struktur arsitektur (sitemap), halaman wajib, rencana database sederhana (Pengguna, Cerita, Bab, Komentar), dan rekomendasi teknologi yang cocok untuk pemula hingga skala menengah.
Audiens: remaja hingga dewasa di Indonesia yang membaca di ponsel dan laptop, ditambah penulis yang mengunggah bab dan moderator yang merawat koleksi.
Page 2 of 31
2. System Overview
Platform ini adalah aplikasi web first-party dengan identitas milik aplikasi sendiri. Pengunjung anonim dapat langsung masuk ke Homepage dan menjelajah Story Catalog serta Reading tanpa akun. Identitas aplikasi diperlukan untuk tindakan pembaca yang bersifat tahan lama (bookmark, rating/ulasan, komentar, riwayat membaca) dan untuk workspace penulis serta moderator yang dibatasi peran.
Aktor aktif manusia (katalog tertutup):
- Pembaca (Reader) — penjelajah dan pembaca cerita.
- Penulis (Author) — pengunggah dan pengelola cerita per bab.
- Admin/Moderator — pengelola operasional dan moderasi konten.
Aktor non-persona: sistem backend aplikasi (penyimpanan cerita, bab, komentar, statistik baca) yang mendukung interaksi manusia, bukan pengganti interaksi tersebut.
Perilaku yang diterima saat ini mencakup: sistem kategori & filter; fitur pembaca (mode gelap, bookmark, rating/ulasan, riwayat membaca, komentar); fitur penulis/admin (unggah cerita per bab, statistik pembaca, moderasi konten); desain UI/UX baca; rencana database; dan Homepage responsif dengan navbar, hero banner, "Cerita Populer Hari Ini", serta sidebar daftar genre.
Pengecualian sempit: tidak ada fitur di luar daftar di atas yang ditambahkan (misalnya tidak ada langganan berbayar, tidak ada sistem rekomendasi sosial, tidak ada akun pihak ketiga). Mode gelap adalah pilihan, bukan satu-satunya mode — default adalah warm paper.
Page 3 of 31
2a. Product Interpretation and Delivery Boundary
Kepemilikan delivery dan akses. Seluruh permukaan produk dimiliki dan dioperasikan oleh aplikasi sendiri (custom UI, app-owned identity). Tidak ada permukaan yang diserahkan ke provider eksternal atau tujuan luar. Homepage, Story Catalog, dan Reading dapat diakses tanpa identitas. Sign Up dan Login adalah permukaan identitas yang dapat diakses anonim; keduanya tidak boleh menjadi satu-satunya cara mengakses dirinya sendiri. Bookmark, Reviews, Comments, Reading History, Author Dashboard, Story Editor, Reader Statistics, Admin Dashboard, dan Content Moderation adalah permukaan yang dilindungi dan memerlukan identitas yang sudah terverifikasi.
Batas saat ini vs masa depan. Semua perilaku yang dijelaskan dalam dokumen ini adalah lingkup saat ini. Tidak ada horizon masa depan yang dinyatakan dalam sumber; karena itu tidak ada bagian "future" yang dibuat.
Batas identitas. Identitas aplikasi hanya digunakan untuk kontinuitas tindakan tahan lama dan untuk membatasi workspace peran. Tidak ada kontrol izin yang berbeda-beda di luar pemisahan peran yang dinyatakan (pembaca vs penulis vs admin/moderator). Tidak ada kemampuan manajemen akun tambahan (misalnya penggantian email, penghapusan akun, pengaturan privasi) yang ditambahkan.
2b. Source Content Inventory
Tidak ada direktif referensi dengan content_source dalam permintaan ini, sehingga tidak ada Source Content Inventory yang disertakan.
2c. Page Content and Component Coverage
Page 4 of 31
Homepage
- Informasi/state: hero banner dengan headline besar, subline, dan CTA; rail "Cerita Populer Hari Ini"; sidebar daftar semua genre; navbar.
- Aksi utama: mulai membaca (CTA), membuka cerita dari rail populer, memilih genre dari sidebar.
- Aksi pendukung: navigasi ke Story Catalog, Sign Up, Login.
- Entitas domain: Cerita (judul, genre, cover), Genre.
- Tanggung jawab komponen: Navbar (logo, tautan navigasi, tautan masuk/daftar), Hero Banner (headline, subline, CTA), Popular Stories Rail (kartu cerita dengan cover, judul, genre), Genre Sidebar (daftar semua genre sebagai chip/tautan).
- State: loading (skeleton kartu cerita dan chip genre), empty (pesan "Belum ada cerita populer hari ini" dengan tautan ke Story Catalog), success (rail dan sidebar terisi), error (pesan gagal memuat dengan tombol coba lagi), recovery (memuat ulang bagian yang gagal tanpa menutup halaman).
Sign Up
- Informasi/state: formulir pendaftaran pembaca baru.
- Aksi utama: membuat akun pembaca.
- Aksi pendukung: berpindah ke Login.
- Entitas domain: Pengguna.
- Tanggung jawab komponen: Formulir (field identitas dan kredensial), tombol submit, tautan ke Login.
- State: loading (tombol nonaktif saat mengirim), empty (formulir kosong), success (akun dibuat, diarahkan ke Login atau langsung masuk), error (pesan validasi per field, pesan email sudah terdaftar), recovery (memperbaiki field dan mengirim ulang).
Login
- Informasi/state: formulir verifikasi pengguna kembali.
- Aksi utama: masuk sebagai pembaca, penulis, atau moderator.
- Aksi pendukung: berpindah ke Sign Up.
- Entitas domain: Pengguna.
- Tanggung jawab komponen: Formulir kredensial, tombol submit, tautan ke Sign Up.
- State: loading (tombol nonaktif saat memverifikasi), empty (formulir kosong), success (diarahkan ke halaman tujuan sesuai peran), error (pesan kredensial salah), recovery (mencoba lagi atau mendaftar).
Page 5 of 31
Story Catalog
- Informasi/state: daftar cerita dengan filter genre utama, sub-genre, tag, status cerita (tamat/ongoing), dan target usia.
- Aksi utama: menerapkan filter, membuka cerita.
- Aksi pendukung: menghapus filter, mengganti urutan.
- Entitas domain: Cerita, Genre, Sub-genre, Tag, Status, Target Usia.
- Tanggung jawab komponen: Panel Filter (chip genre, sub-genre, tag, status, target usia), Grid/List Cerita (kartu dengan cover, judul, genre, status), Indikator Filter Aktif.
- State: loading (skeleton grid), empty (pesan "Tidak ada cerita yang cocok" dengan tombol reset filter), success (grid terisi), error (pesan gagal memuat dengan tombol coba lagi), recovery (reset filter atau muat ulang).
Reading
- Informasi/state: isi bab yang sedang dibaca, judul cerita, navigasi bab, kontrol tampilan (mode gelap).
- Aksi utama: membaca bab, berpindah ke bab berikutnya/sebelumnya, mengaktifkan mode gelap.
- Aksi pendukung: membuka daftar bab, menandai bookmark, membuka komentar.
- Entitas domain: Cerita, Bab, Pengguna (untuk bookmark/riwayat).
- Tanggung jawab komponen: Area Baca (tipografi, spasi, layout), Navigasi Bab, Kontrol Mode Gelap, Daftar Bab.
- State: loading (skeleton teks), empty (pesan bab belum tersedia), success (teks tampil), error (pesan gagal memuat bab dengan tombol coba lagi), recovery (memuat ulang bab atau kembali ke daftar bab).
Bookmarks
- Informasi/state: daftar cerita yang disimpan pembaca.
- Aksi utama: membuka cerita dari bookmark, menghapus bookmark.
- Aksi pendukung: menjelajah ke Story Catalog.
- Entitas domain: Pengguna, Cerita, Bookmark.
- Tanggung jawab komponen: Daftar Bookmark (kartu cerita dengan tombol hapus), Empty State.
- State: loading (skeleton), empty (pesan "Belum ada bookmark" dengan tautan ke Story Catalog), success (daftar terisi), error (pesan gagal memuat dengan tombol coba lagi), recovery (muat ulang).
Page 6 of 31
Reviews
- Informasi/state: daftar rating dan ulasan untuk sebuah cerita, formulir ulasan.
- Aksi utama: memberi rating, menulis ulasan, mengirim ulasan.
- Aksi pendukung: melihat ulasan lain.
- Entitas domain: Pengguna, Cerita, Rating, Ulasan.
- Tanggung jawab komponen: Formulir Rating/Ulasan, Daftar Ulasan.
- State: loading (skeleton ulasan), empty (pesan "Belum ada ulasan" dengan ajakan menulis), success (ulasan tampil), error (pesan gagal mengirim dengan tombol coba lagi), recovery (mengirim ulang).
Comments
- Informasi/state: daftar komentar pembaca untuk sebuah cerita, formulir komentar.
- Aksi utama: menulis komentar, mengirim komentar.
- Aksi pendukung: melihat komentar lain.
- Entitas domain: Pengguna, Cerita, Komentar.
- Tanggung jawab komponen: Formulir Komentar, Daftar Komentar.
- State: loading (skeleton komentar), empty (pesan "Belum ada komentar" dengan ajakan menulis), success (komentar tampil), error (pesan gagal mengirim dengan tombol coba lagi), recovery (mengirim ulang).
Reading History
- Informasi/state: daftar cerita yang pernah dibaca beserta bab terakhir.
- Aksi utama: melanjutkan bacaan dari bab terakhir.
- Aksi pendukung: menghapus entri riwayat.
- Entitas domain: Pengguna, Cerita, Bab, Riwayat Baca.
- Tanggung jawab komponen: Daftar Riwayat (kartu cerita dengan bab terakhir dan tombol lanjutkan), Empty State.
- State: loading (skeleton), empty (pesan "Belum ada riwayat baca" dengan tautan ke Story Catalog), success (daftar terisi), error (pesan gagal memuat dengan tombol coba lagi), recovery (muat ulang).
Page 7 of 31
Author Dashboard
- Informasi/state: ringkasan karya penulis, tautan ke Story Editor dan Reader Statistics.
- Aksi utama: membuka Story Editor, membuka Reader Statistics.
- Aksi pendukung: melihat daftar cerita yang sudah diunggah.
- Entitas domain: Pengguna (Penulis), Cerita.
- Tanggung jawab komponen: Ringkasan Karya, Tautan Navigasi.
- State: loading (skeleton), empty (pesan "Belum ada cerita" dengan tautan ke Story Editor), success (ringkasan terisi), error (pesan gagal memuat dengan tombol coba lagi), recovery (muat ulang).
Story Editor
- Informasi/state: formulir cerita (judul, genre, sub-genre, tag, status, target usia) dan editor bab.
- Aksi utama: membuat cerita baru, menambah bab, menyimpan bab, menerbitkan cerita.
- Aksi pendukung: mengedit bab yang sudah ada.
- Entitas domain: Cerita, Bab, Genre, Sub-genre, Tag, Status, Target Usia.
- Tanggung jawab komponen: Formulir Cerita, Editor Bab, Daftar Bab, Tombol Simpan/Terbitkan.
- State: loading (skeleton editor), empty (formulir kosong untuk cerita baru), success (cerita/bab tersimpan), error (pesan validasi atau gagal simpan dengan tombol coba lagi), recovery (memperbaiki dan menyimpan ulang).
Reader Statistics
- Informasi/state: statistik pembaca per cerita (jumlah baca, jumlah bab dibaca, tren).
- Aksi utama: memilih cerita untuk melihat statistik.
- Aksi pendukung: mengganti rentang waktu.
- Entitas domain: Cerita, Statistik Baca.
- Tanggung jawab komponen: Pemilih Cerita, Panel Statistik.
- State: loading (skeleton), empty (pesan "Belum ada data statistik"), success (statistik tampil), error (pesan gagal memuat dengan tombol coba lagi), recovery (muat ulang).
Page 8 of 31
Admin Dashboard
- Informasi/state: ringkasan operasional platform, tautan ke Content Moderation.
- Aksi utama: membuka Content Moderation.
- Aksi pendukung: melihat ringkasan konten yang menunggu moderasi.
- Entitas domain: Cerita, Komentar, Pengguna.
- Tanggung jawab komponen: Ringkasan Moderasi, Tautan Navigasi.
- State: loading (skeleton), empty (pesan "Tidak ada konten menunggu moderasi"), success (ringkasan terisi), error (pesan gagal memuat dengan tombol coba lagi), recovery (muat ulang).
Content Moderation
- Informasi/state: daftar cerita dan komentar yang menunggu atau memerlukan tinjauan.
- Aksi utama: meninjau konten, menyetujui, menolak, atau menghapus konten.
- Aksi pendukung: melihat detail konten.
- Entitas domain: Cerita, Komentar, Pengguna.
- Tanggung jawab komponen: Daftar Konten, Panel Detail, Tombol Aksi Moderasi.
- State: loading (skeleton), empty (pesan "Tidak ada konten untuk dimoderasi"), success (daftar terisi), error (pesan gagal memuat dengan tombol coba lagi), recovery (muat ulang).
3. Functional Requirements
Setiap persyaratan ditulis sebagai story point dengan provenance, fakta siklus hidup, dan penerimaan yang dapat diamati.
Page 9 of 31
3.1 Sistem Kategori & Filter
FR-1 — Mengelompokkan cerita berdasarkan genre utama
- Provenance: explicit
- Story: As a Pembaca (Reader), I should dapat melihat cerita dikelompokkan berdasarkan genre utama (fantasi, romansa, horor, komedi, misteri, fiksi ilmiah, dan genre lain) sehingga saya dapat menemukan cerita sesuai minat.
- Trigger/input: pembaca membuka Story Catalog atau memilih genre dari sidebar Homepage.
- Hasil yang dapat diamati: daftar cerita terfilter menampilkan hanya cerita dari genre utama yang dipilih.
- Access state: dapat diakses anonim.
- Failure/recovery: jika daftar gagal dimuat, tampilkan pesan dan tombol coba lagi.
- Continuation: pembaca dapat membuka cerita atau mengganti genre.
FR-2 — Mengelompokkan cerita berdasarkan sub-genre
- Provenance: explicit
- Story: As a Pembaca (Reader), I should dapat memfilter cerita berdasarkan sub-genre sehingga saya dapat mempersempit pilihan dalam genre utama.
- Trigger/input: pembaca memilih sub-genre pada panel filter.
- Hasil yang dapat diamati: daftar cerita diperbarui sesuai sub-genre.
- Access state: dapat diakses anonim.
- Failure/recovery: reset filter atau muat ulang.
- Continuation: pembaca dapat menambah atau menghapus filter.
FR-3 — Mengelompokkan cerita berdasarkan tag
- Provenance: explicit
- Story: As a Pembaca (Reader), I should dapat memfilter cerita berdasarkan tag sehingga saya dapat menemukan cerita dengan tema spesifik.
- Trigger/input: pembaca memilih satu atau beberapa tag.
- Hasil yang dapat diamati: daftar cerita diperbarui sesuai tag yang dipilih.
- Access state: dapat diakses anonim.
- Failure/recovery: reset filter atau muat ulang.
- Continuation: pembaca dapat membuka cerita.
FR-4 — Mengelompokkan cerita berdasarkan status cerita (tamat/ongoing)
- Provenance: explicit
- Story: As a Pembaca (Reader), I should dapat memfilter cerita berdasarkan status cerita (tamat/ongoing) sehingga saya dapat memilih cerita yang sudah selesai atau yang masih berlanjut.
- Trigger/input: pembaca memilih status pada panel filter.
- Hasil yang dapat diamati: daftar cerita diperbarui sesuai status.
- Access state: dapat diakses anonim.
- Failure/recovery: reset filter atau muat ulang.
- Continuation: pembaca dapat membuka cerita.
FR-5 — Mengelompokkan cerita berdasarkan target usia
- Provenance: explicit
- Story: As a Pembaca (Reader), I should dapat memfilter cerita berdasarkan target usia sehingga saya dapat memilih cerita yang sesuai untuk saya atau pembaca lain.
- Trigger/input: pembaca memilih target usia pada panel filter.
- Hasil yang dapat diamati: daftar cerita diperbarui sesuai target usia.
- Access state: dapat diakses anonim.
- Failure/recovery: reset filter atau muat ulang.
- Continuation: pembaca dapat membuka cerita.
Page 10 of 31
3.2 Fitur Pembaca
FR-6 — Mode gelap (dark mode)
- Provenance: explicit
- Story: As a Pembaca (Reader), I should dapat mengaktifkan mode gelap saat membaca sehingga mata saya nyaman dalam sesi panjang.
- Trigger/input: pembaca menekan kontrol mode gelap di halaman Reading.
- Hasil yang dapat diamati: tampilan beralih ke ground gelap dengan teks terang; preferensi tetap berlaku selama sesi.
- Access state: dapat diakses anonim.
- Failure/recovery: jika preferensi gagal disimpan, tampilan tetap beralih untuk sesi berjalan.
- Continuation: pembaca melanjutkan membaca.
FR-7 — Bookmark
- Provenance: explicit
- Story: As a Pembaca (Reader), I should dapat menyimpan cerita ke bookmark sehingga saya dapat menemukannya kembali nanti.
- Trigger/input: pembaca menekan tombol bookmark pada cerita.
- Hasil yang dapat diamati: cerita muncul di halaman Bookmarks.
- Access state: memerlukan identitas terverifikasi (role_restricted).
- Failure/recovery: jika penyimpanan gagal, tampilkan pesan dan tombol coba lagi.
- Continuation: pembaca dapat membuka Bookmarks atau menghapus bookmark.
FR-8 — Sistem rating/ulasan
- Provenance: explicit
- Story: As a Pembaca (Reader), I should dapat memberi rating dan menulis ulasan untuk sebuah cerita sehingga saya dapat membagikan pendapat saya.
- Trigger/input: pembaca memilih rating dan menulis ulasan di halaman Reviews.
- Hasil yang dapat diamati: rating dan ulasan tampil di daftar ulasan cerita.
- Access state: memerlukan identitas terverifikasi (role_restricted).
- Failure/recovery: jika pengiriman gagal, tampilkan pesan dan tombol coba lagi.
- Continuation: pembaca dapat melihat ulasan lain atau mengedit ulasannya.
FR-9 — Riwayat membaca
- Provenance: explicit
- Story: As a Pembaca (Reader), I should dapat melihat riwayat membaca saya sehingga saya dapat melanjutkan bacaan dari bab terakhir.
- Trigger/input: pembaca membuka halaman Reading History.
- Hasil yang dapat diamati: daftar cerita yang pernah dibaca beserta bab terakhir tampil.
- Access state: memerlukan identitas terverifikasi (role_restricted).
- Failure/recovery: jika gagal dimuat, tampilkan pesan dan tombol coba lagi.
- Continuation: pembaca dapat melanjutkan bacaan dari bab terakhir.
FR-10 — Kolom komentar
- Provenance: explicit
- Story: As a Pembaca (Reader), I should dapat menulis komentar pada sebuah cerita sehingga saya dapat berdiskusi dengan pembaca lain.
- Trigger/input: pembaca menulis dan mengirim komentar di halaman Comments.
- Hasil yang dapat diamati: komentar tampil di daftar komentar cerita.
- Access state: memerlukan identitas terverifikasi (role_restricted).
- Failure/recovery: jika pengiriman gagal, tampilkan pesan dan tombol coba lagi.
- Continuation: pembaca dapat melihat komentar lain atau menulis komentar baru.
Page 11 of 31
3.3 Fitur Penulis/Admin
FR-11 — Dashboard untuk mengunggah cerita per bab
- Provenance: explicit
- Story: As a Penulis (Author), I should dapat mengunggah cerita per bab melalui dashboard sehingga karya saya dapat terbit dan dibaca.
- Trigger/input: penulis membuka Author Dashboard dan Story Editor, mengisi formulir cerita, menambah bab, dan menyimpan.
- Hasil yang dapat diamati: cerita dan bab tersimpan serta tampil di daftar karya penulis.
- Access state: memerlukan identitas terverifikasi dengan peran penulis (role_restricted).
- Failure/recovery: jika validasi atau penyimpanan gagal, tampilkan pesan dan tombol coba lagi.
- Continuation: penulis dapat menambah bab berikutnya atau menerbitkan cerita.
FR-12 — Statistik pembaca
- Provenance: explicit
- Story: As a Penulis (Author), I should dapat melihat statistik pembaca untuk karya saya sehingga saya memahami performa cerita.
- Trigger/input: penulis membuka Reader Statistics dan memilih cerita.
- Hasil yang dapat diamati: panel statistik menampilkan data pembaca untuk cerita yang dipilih.
- Access state: memerlukan identitas terverifikasi dengan peran penulis (role_restricted).
- Failure/recovery: jika gagal dimuat, tampilkan pesan dan tombol coba lagi.
- Continuation: penulis dapat memilih cerita lain atau mengganti rentang waktu.
FR-13 — Moderasi konten
- Provenance: explicit
- Story: As an Admin/Moderator, I should dapat meninjau dan memoderasi konten yang diunggah sehingga koleksi cerita dan komentar tetap sesuai aturan.
- Trigger/input: admin membuka Admin Dashboard dan Content Moderation, memilih konten, dan memilih aksi moderasi.
- Hasil yang dapat diamati: konten yang disetujui tampil, konten yang ditolak/dihapus tidak tampil.
- Access state: memerlukan identitas terverifikasi dengan peran admin/moderator (role_restricted).
- Failure/recovery: jika aksi gagal, tampilkan pesan dan tombol coba lagi.
- Continuation: admin dapat meninjau konten berikutnya.
Page 12 of 31
3.4 Desain UI/UX Baca
FR-14 — Desain UI/UX nyaman dibaca berjam-jam
- Provenance: explicit
- Story: As a Pembaca (Reader), I should mendapatkan tipografi, spasi, dan layout halaman bacaan yang nyaman untuk sesi panjang sehingga saya dapat membaca tanpa kelelahan.
- Trigger/input: pembaca membuka halaman Reading.
- Hasil yang dapat diamati: teks tampil dengan ukuran, line-height, dan lebar kolom yang nyaman; layout responsif di ponsel dan laptop.
- Access state: dapat diakses anonim.
- Failure/recovery: jika teks gagal dimuat, tampilkan pesan dan tombol coba lagi.
- Continuation: pembaca dapat melanjutkan ke bab berikutnya.
3.5 Rencana Database
FR-15 — Rencana database sederhana (Pengguna, Cerita, Bab, Komentar)
- Provenance: explicit
- Story: As a system, I should menyimpan relasi antara Pengguna, Cerita, Bab (Chapters), dan Komentar sehingga data platform konsisten.
- Trigger/input: operasi baca/tulis dari fitur pembaca, penulis, dan admin.
- Hasil yang dapat diamati: data tersimpan dan dapat diambil kembali sesuai relasi.
- Access state: internal sistem.
- Failure/recovery: jika operasi gagal, kembalikan error yang dapat ditangani UI.
- Continuation: operasi berikutnya dapat dilakukan.
Page 13 of 31
3.6 Homepage
FR-16 — Homepage dengan navbar, hero banner, "Cerita Populer Hari Ini", dan sidebar genre responsif
- Provenance: explicit
- Story: As a Pembaca (Reader), I should melihat Homepage dengan navbar, hero banner, bagian "Cerita Populer Hari Ini", dan sidebar daftar semua genre yang responsif sehingga saya dapat mulai menjelajah.
- Trigger/input: pembaca membuka Homepage.
- Hasil yang dapat diamati: navbar, hero banner, rail cerita populer, dan sidebar genre tampil dan responsif.
- Access state: dapat diakses anonim.
- Failure/recovery: jika bagian gagal dimuat, tampilkan pesan dan tombol coba lagi per bagian.
- Continuation: pembaca dapat memilih genre atau membuka cerita.
Page 14 of 31
3.7 Arsitektur & Teknologi
FR-17 — Rencana struktur arsitektur website (sitemap) dan halaman wajib
- Provenance: explicit
- Story: As a system, I should memiliki struktur arsitektur (sitemap) dan daftar halaman wajib sehingga navigasi platform jelas.
- Trigger/input: pengembangan dan navigasi pengguna.
- Hasil yang dapat diamati: halaman-halaman dalam katalog halaman dapat diakses sesuai perannya.
- Access state: sesuai halaman.
- Failure/recovery: tautan rusak diarahkan ke halaman yang sesuai.
- Continuation: pengguna dapat melanjutkan navigasi.
FR-18 — Rekomendasi teknologi (stack) untuk pemula hingga skala menengah
- Provenance: explicit
- Story: As a system, I should menggunakan stack yang cocok untuk pemula hingga skala menengah sehingga platform dapat dibangun dan dikembangkan secara realistis.
- Trigger/input: keputusan teknologi.
- Hasil yang dapat diamati: stack yang dipilih terpasang dan berjalan.
- Access state: internal.
- Failure/recovery: jika komponen stack gagal, dokumentasi dan fallback tersedia.
- Continuation: pengembangan berlanjut.
FR-19 — Panduan langkah-demi-langkah yang terstruktur
- Provenance: explicit
- Story: As a system, I should menyajikan panduan langkah-demi-langkah yang terstruktur sehingga pembangunan platform dapat diikuti.
- Trigger/input: kebutuhan dokumentasi.
- Hasil yang dapat diamati: panduan tersedia dan terstruktur.
- Access state: internal.
- Failure/recovery: panduan diperbarui bila ada perubahan.
- Continuation: pengembangan berlanjut.
Page 15 of 31
3.8 Identitas & Akses (required_inference)
FR-20 — Pendaftaran pembaca mandiri (self-service reader enrollment)
- Provenance: required_inference
- Story: As a Pembaca (Reader), I should dapat mendaftar sendiri sehingga saya dapat menyimpan bookmark, rating/ulasan, komentar, dan riwayat membaca.
- Trigger/input: pembaca membuka Sign Up dan mengisi formulir.
- Hasil yang dapat diamati: akun pembaca dibuat dan identitas dapat digunakan untuk tindakan tahan lama.
- Access state: dapat diakses anonim.
- Failure/recovery: jika validasi gagal, tampilkan pesan per field; jika email sudah terdaftar, arahkan ke Login.
- Continuation: pembaca dapat masuk dan menggunakan fitur tahan lama.
FR-21 — Verifikasi pengguna kembali (returning verification)
- Provenance: required_inference
- Story: As a Pembaca (Reader), Penulis (Author), atau Admin/Moderator, I should dapat masuk kembali sehingga saya dapat mengakses workspace yang dilindungi.
- Trigger/input: pengguna membuka Login dan memasukkan kredensial.
- Hasil yang dapat diamati: pengguna diarahkan ke halaman tujuan sesuai peran.
- Access state: dapat diakses anonim.
- Failure/recovery: jika kredensial salah, tampilkan pesan dan opsi mencoba lagi atau mendaftar.
- Continuation: pengguna dapat menggunakan fitur yang dilindungi.
FR-22 — Penetapan peran penulis dan admin/moderator
- Provenance: required_inference
- Story: As a system, I should menetapkan peran penulis dan admin/moderator sehingga workspace yang dibatasi peran hanya dapat digunakan oleh pengguna yang berhak.
- Trigger/input: penetapan peran oleh admin atau proses provisioning.
- Hasil yang dapat diamati: pengguna dengan peran penulis dapat mengakses Author Dashboard, Story Editor, dan Reader Statistics; pengguna dengan peran admin/moderator dapat mengakses Admin Dashboard dan Content Moderation.
- Access state: role_restricted.
- Failure/recovery: jika pengguna tanpa peran mencoba mengakses, tampilkan pesan akses ditolak dan arahkan ke Homepage.
- Continuation: pengguna dapat melanjutkan ke halaman yang sesuai perannya.
Page 16 of 31
4. User Personas
Pembaca (Reader)
Konteks produk: Pembaca adalah pengguna utama platform perpustakaan cerita digital multi-genre. Mereka membaca di ponsel dan laptop, sering dalam sesi panjang, dan ingin menemukan cerita yang sesuai minat tanpa hambatan.
Tujuan utama: menemukan cerita yang sesuai minat melalui kategori genre, sub-genre, tag, status cerita, dan target usia, lalu membaca bab-bab cerita dengan nyaman dalam sesi panjang.
Tanggung jawab yang diterima: menjelajah koleksi, menyimpan cerita lewat bookmark, memberi rating/ulasan, menulis komentar, dan melanjutkan bacaan dari riwayat membaca.
Input/keputusan: memilih genre, sub-genre, tag, status, dan target usia; memutuskan cerita mana yang dibuka; memutuskan untuk menyimpan, memberi rating, atau berkomentar; memutuskan untuk melanjutkan bacaan.
Interaksi dengan peserta lain: Pembaca berinteraksi dengan Penulis melalui cerita yang dibaca dan melalui rating/ulasan serta komentar; berinteraksi dengan Admin/Moderator melalui konten yang dimoderasi (komentar yang ditolak/dihapus tidak tampil).
Keberhasilan yang dapat diamati: Pembaca menemukan dan menikmati cerita tanpa hambatan, dapat melanjutkan bacaan dari bab terakhir, dan dapat berbagi pendapat melalui rating/ulasan serta komentar.
Yang membedakan peran ini: Pembaca adalah satu-satunya peran yang mengonsumsi cerita dan menghasilkan sinyal sosial (rating, ulasan, komentar) yang menjadi masukan bagi Penulis dan Admin/Moderator.
Page 17 of 31
Penulis (Author)
Konteks produk: Penulis mengunggah cerita mereka ke platform dalam bentuk bab dan mengelola publikasinya. Mereka bekerja di Author Dashboard, Story Editor, dan Reader Statistics.
Tujuan utama: menerbitkan cerita per bab dan memahami performa karya melalui statistik pembaca.
Tanggung jawab yang diterima: membuat dan memperbarui cerita per bab serta memantau statistik pembaca.
Input/keputusan: mengisi formulir cerita (judul, genre, sub-genre, tag, status, target usia); memutuskan kapan bab disimpan dan diterbitkan; memutuskan cerita mana yang dilihat statistiknya.
Interaksi dengan peserta lain: Penulis berinteraksi dengan Pembaca melalui cerita yang diterbitkan dan melalui statistik pembaca; berinteraksi dengan Admin/Moderator melalui proses moderasi konten yang dapat meninjau cerita yang diunggah.
Keberhasilan yang dapat diamati: cerita mereka terbit dan dibaca oleh audiens, dan statistik pembaca menunjukkan performa karya.
Yang membedakan peran ini: Penulis adalah satu-satunya peran yang menghasilkan konten cerita dan bab, serta satu-satunya peran yang melihat statistik pembaca untuk karya mereka sendiri.
Page 18 of 31
Admin/Moderator
Konteks produk: Admin mengelola operasional platform melalui dashboard, termasuk moderasi konten agar koleksi cerita dan komentar tetap sesuai aturan. Mereka bekerja di Admin Dashboard dan Content Moderation.
Tujuan utama: menjaga kualitas dan ketertiban platform.
Tanggung jawab yang diterima: meninjau konten yang diunggah dan menjaga kualitas serta ketertiban platform.
Input/keputusan: memilih konten untuk ditinjau; memutuskan untuk menyetujui, menolak, atau menghapus konten.
Interaksi dengan peserta lain: Admin/Moderator berinteraksi dengan Penulis melalui moderasi cerita yang diunggah dan dengan Pembaca melalui moderasi komentar.
Keberhasilan yang dapat diamati: konten yang tampil aman dan layak bagi pembaca.
Yang membedakan peran ini: Admin/Moderator adalah satu-satunya peran yang memiliki wewenang untuk menyetujui, menolak, atau menghapus konten yang dihasilkan peserta lain.
5. Core User Flows
Page 19 of 31
5.1 Pembaca menjelajah dan membaca cerita
- Pembaca membuka Homepage (anonim). Navbar, hero banner, rail "Cerita Populer Hari Ini", dan sidebar daftar semua genre tampil.
- Pembaca memilih genre dari sidebar atau membuka Story Catalog.
- Di Story Catalog, pembaca menerapkan filter genre utama, sub-genre, tag, status cerita (tamat/ongoing), dan target usia. Daftar cerita diperbarui.
- Jika tidak ada cerita yang cocok, pembaca melihat empty state dan dapat mereset filter.
- Pembaca membuka sebuah cerita dan masuk ke Reading.
- Di Reading, pembaca membaca bab dengan tipografi, spasi, dan layout yang nyaman. Pembaca dapat mengaktifkan mode gelap.
- Pembaca berpindah ke bab berikutnya atau sebelumnya melalui navigasi bab.
- Jika bab gagal dimuat, pembaca melihat pesan error dan dapat mencoba lagi atau kembali ke daftar bab.
- Pembaca melanjutkan membaca hingga selesai atau berhenti; riwayat baca tercatat untuk kelanjutan nanti.
5.2 Pembaca mendaftar dan masuk
- Pembaca membuka Sign Up (anonim) dan mengisi formulir pendaftaran.
- Jika validasi gagal, pembaca melihat pesan per field dan memperbaikinya.
- Jika email sudah terdaftar, pembaca diarahkan ke Login.
- Setelah akun dibuat, pembaca masuk melalui Login dengan kredensial.
- Jika kredensial salah, pembaca melihat pesan dan dapat mencoba lagi atau mendaftar.
- Setelah berhasil, pembaca diarahkan ke halaman tujuan dan dapat menggunakan fitur tahan lama.
5.3 Pembaca menyimpan bookmark
- Pembaca yang sudah masuk membuka sebuah cerita di Reading atau Story Catalog.
- Pembaca menekan tombol bookmark.
- Cerita muncul di Bookmarks.
- Jika penyimpanan gagal, pembaca melihat pesan dan dapat mencoba lagi.
- Pembaca dapat membuka cerita dari Bookmarks atau menghapus bookmark.
Page 20 of 31
5.4 Pembaca memberi rating dan ulasan
- Pembaca yang sudah masuk membuka Reviews untuk sebuah cerita.
- Pembaca memilih rating dan menulis ulasan.
- Pembaca mengirim ulasan; ulasan tampil di daftar ulasan cerita.
- Jika pengiriman gagal, pembaca melihat pesan dan dapat mencoba lagi.
- Pembaca dapat melihat ulasan lain atau mengedit ulasannya.
5.5 Pembaca menulis komentar
- Pembaca yang sudah masuk membuka Comments untuk sebuah cerita.
- Pembaca menulis dan mengirim komentar.
- Komentar tampil di daftar komentar cerita.
- Jika pengiriman gagal, pembaca melihat pesan dan dapat mencoba lagi.
- Pembaca dapat melihat komentar lain atau menulis komentar baru.
5.6 Pembaca melanjutkan bacaan dari riwayat
- Pembaca yang sudah masuk membuka Reading History.
- Daftar cerita yang pernah dibaca beserta bab terakhir tampil.
- Jika belum ada riwayat, pembaca melihat empty state dengan tautan ke Story Catalog.
- Pembaca memilih cerita dan melanjutkan bacaan dari bab terakhir di Reading.
- Jika gagal dimuat, pembaca melihat pesan dan dapat mencoba lagi.
Page 21 of 31
5.7 Penulis mengunggah cerita per bab
- Penulis masuk melalui Login dan diarahkan ke Author Dashboard.
- Penulis membuka Story Editor.
- Penulis mengisi formulir cerita (judul, genre, sub-genre, tag, status, target usia).
- Penulis menambah bab dan menulis isi bab.
- Penulis menyimpan bab; cerita dan bab tersimpan serta tampil di daftar karya.
- Jika validasi atau penyimpanan gagal, penulis melihat pesan dan dapat mencoba lagi.
- Penulis dapat menambah bab berikutnya atau menerbitkan cerita.
5.8 Penulis melihat statistik pembaca
- Penulis membuka Reader Statistics dari Author Dashboard.
- Penulis memilih cerita.
- Panel statistik menampilkan data pembaca untuk cerita yang dipilih.
- Jika belum ada data, penulis melihat empty state.
- Jika gagal dimuat, penulis melihat pesan dan dapat mencoba lagi.
- Penulis dapat memilih cerita lain atau mengganti rentang waktu.
Page 22 of 31
5.9 Admin/Moderator memoderasi konten
- Admin masuk melalui Login dan diarahkan ke Admin Dashboard.
- Admin membuka Content Moderation.
- Admin melihat daftar cerita dan komentar yang menunggu atau memerlukan tinjauan.
- Admin memilih konten dan melihat detailnya.
- Admin memilih aksi: menyetujui, menolak, atau menghapus.
- Konten yang disetujui tampil; konten yang ditolak/dihapus tidak tampil.
- Jika aksi gagal, admin melihat pesan dan dapat mencoba lagi.
- Admin dapat meninjau konten berikutnya.
6. Visuals Colors and Theme
Arah kreatif yang diberikan bersifat otoritatif untuk bagian ini. Muse: Charles & Ray Eames. Headline arah: Warm mid-century modernism for a story library that feels like a sunlit reading room.
Page 23 of 31
Palet (light mode)
| Peran | Hex |
|---|
| Background | #F4EDE1 |
| Surface | #FBF7F0 |
| Text | #2B2118 |
| Primary | #1F6F6B |
| Accent | #D94F2B |
| Muted | #8A7A66 |
| Secondary genre tag — mustard | #D9A441 |
| Secondary genre tag — muted sage | #7E8C6A |
Mustard dan muted sage hanya boleh muncul sebagai warna tag genre sekunder, tidak pernah sebagai bidang besar.
Palet (dark mode)
| Peran | Hex |
|---|
| Background | #1C1A17 |
| Text | #EDE6DA |
| Primary | #1F6F6B |
| Accent | #D94F2B |
Page 24 of 31
Tipografi
- Headings: Jost, medium-to-semibold, tracking
-0.01em, kontras ukuran besar. Hero display memakai Jost light pada ukuran sangat besar.
- Body: Fraunces, 18–20px, line-height 1.7, memberi kesan buku cetak.
- Skala modular 1.25: 14 / 16 / 20 / 25 / 31 / 39 / 49 / 61 / 76 / 96px.
- Hero display:
clamp(2.75rem, 6vw, 6rem).
- Section titles:
clamp(1.75rem, 3vw, 2.5rem).
- Reading body:
1.125rem / line-height 1.75.
Bahasa bentuk
Organic-modern mid-century: kartu rounded-rectangle dengan radius 12–16px, filter chip berbentuk pill, soft offset shadow 0 2px 0 rgba(43,33,24,0.08) (bukan blurred glow), motif lingkaran dan setengah lingkaran dari pola Eames, serta garis tipis 2px sebagai perangkat struktural berulang.
Layout
Editorial modular grid dengan margin lega: 12 kolom desktop (max-width 1280px), 8 kolom tablet, satu kolom pada 375px. Homepage memasangkan hero block rata kiri dengan genre rail bertumpuk di kanan; di bawahnya, baris "Cerita Populer Hari Ini" yang dapat digulir horizontal di mobile. Halaman Reading memusatkan measure 68ch dengan progress rule tetap di atas dan chapter drawer yang dapat dilipat di samping. Author dashboard memakai layout dua panel: sidebar navigasi dan panel konten lebar dengan baris data bergaris.
Page 25 of 31
Gaya imagery
Hangat, taktil, dan ilustratif — bukan fotografi stok. Cover cerita diperlakukan sebagai jaket buku mid-century: bidang warna datar dengan motif geometris atau gambar tangan sederhana, tanpa render 3D glossy. Hero memakai satu komposisi abstrak besar dari blok warna bertekstur kertas (teal, tomato, mustard, cream) dengan satu siluet buku atau kursi baca. Empty state dan ikon genre memakai pictogram garis tebal dalam palet Eames.
Page 26 of 31
7. Signature Design Concept
Konsep visual yang dapat diimplementasikan untuk Homepage (public entry), dibangun dari hero direction dan signature moves arah kreatif:
Hero editorial dua kolom di atas kertas cream. Sisi kiri membawa headline Jost light berukuran besar — "Temukan cerita yang menemanimu" — disusun dalam tiga baris di atas blok teal solid yang bleed ke tepi kiri viewport. Di bawahnya, satu CTA pill tomato-red "Mulai Membaca" dan subline muted dalam Fraunces. Sisi kanan adalah komposisi bertumpuk tiga kartu jaket cerita dalam tomato, mustard, dan sage, sedikit diputar dan digeser, dengan satu kartu terpotong di tepi kanan. Garis tipis 2px walnut berjalan horizontal di bawah hero, memisahkan dari rail cerita populer. Tidak ada headline terpusat, tidak ada gradient blob, tidak ada tombol biru.
Signature moves yang diterapkan:
- Headline Jost light besar bertumpuk di atas blok teal solid yang bleed dari tepi kiri, dengan CTA dipasang di bawahnya, bukan di tengah.
- Genre rail sebagai tumpukan vertikal pill chip di kanan hero, masing-masing chip berwarna Eames berbeda (teal, tomato, mustard, sage, walnut) dan mengembang untuk menampilkan sub-genre saat hover atau tap.
- "Cerita Populer Hari Ini" sebagai rail horizontal kartu jaket buku mid-century dengan soft offset shadow, berhenti saat hover, dan membungkus menjadi baris yang dapat digulir dalam mode reduced-motion.
- Halaman Reading dibingkai progress rule tomato di atas dan chapter drawer kiri bergaya kartu indeks bergaris, dengan body Fraunces pada 68ch dan ground kertas hangat.
- Author dashboard memakai baris data bergaris dengan label Jost small-caps dan garis 2px antar bagian, meniru panel pameran Eames, bukan tabel admin generik.
Konsep ini hanya menyusun ulang konten, state, dan kontrol yang sudah diterima — tidak menambah perilaku, halaman, atau tujuan baru.
8. Interaction Model & Motion Direction
Interaction Model: Animated
Motion Tempo: restrained
Hero Dimensionality: layered_2d
Page 27 of 31
Landing Hero Motion Brief
- Focal subject: komposisi abstrak blok warna bertekstur kertas (teal, tomato, mustard, cream) dengan satu siluet buku atau kursi baca, dipasangkan dengan headline Jost light besar di atas blok teal yang bleed ke tepi kiri.
- Input → transformation → outcome thesis: saat pengunjung membuka Homepage, blok warna dan kartu jaket cerita muncul dengan fade 400–600ms ease-out dan reveal 12px ke atas; rail "Cerita Populer Hari Ini" bergerak horizontal perlahan; saat pengunjung hover atau tap chip genre, chip bergeser warna secara halus dan mengembang untuk menampilkan sub-genre. Hasilnya adalah hero yang terasa seperti ruang baca yang hangat dan hidup, bukan halaman statis.
- Motion vocabulary: fade 400–600ms ease-out, reveal 12px ke atas, drift horizontal perlahan pada rail, pergeseran warna halus pada chip genre. Tanpa bounce, tanpa parallax theatrics, tanpa particle effects.
- Composed first frame: headline Jost light tiga baris di atas blok teal yang bleed ke tepi kiri, CTA pill tomato-red di bawahnya, subline Fraunces muted, dan tiga kartu jaket cerita bertumpuk di kanan dengan satu kartu terpotong di tepi kanan; garis 2px walnut memisahkan hero dari rail cerita populer.
- Reduced-motion state: drift rail dihapus dan konten muncul di tempat; rail membungkus menjadi baris yang dapat digulir sehingga setiap item dapat dibawa sepenuhnya ke dalam tampilan.
Page 28 of 31
9. Non-Functional Requirements
NFR-1 — Stack cocok untuk pemula hingga skala menengah
- Provenance: explicit
- Constraint: rekomendasi teknologi (stack) harus cocok untuk pemula hingga skala menengah.
- Rationale: dinyatakan sebagai hard constraint dalam sumber.
NFR-2 — Desain UI/UX nyaman dibaca berjam-jam
- Provenance: explicit
- Constraint: desain UI/UX harus dioptimalkan agar nyaman dibaca berjam-jam (tipografi, spasi, layout halaman bacaan).
- Rationale: dinyatakan sebagai hard constraint dalam sumber.
NFR-3 — Rencana database sederhana
- Provenance: explicit
- Constraint: rencana database harus sederhana, mencakup relasi Pengguna, Cerita, Bab (Chapters), dan Komentar.
- Rationale: dinyatakan sebagai hard constraint dalam sumber.
NFR-4 — Responsif di 375px, 768px, dan 1280px
- Provenance: explicit (dari arah kreatif)
- Constraint: teks dan kontrol yang dapat dibaca harus tetap utuh di dalam viewport dan kontainernya pada 375px, 768px, dan 1280px; headline, wordmark, label, angka, teks kartu, dan kontrol tidak boleh terpotong atau tertutup elemen lain. Imagery, dekorasi, dan motion boleh terpotong atau bleed sesuai arah kreatif selama tidak menutupi teks atau kontrol yang dapat dibaca.
- Rationale: arah kreatif menetapkan aturan ini sebagai prioritas.
NFR-5 — Mode gelap sebagai pilihan, bukan default
- Provenance: explicit (dari arah kreatif)
- Constraint: default adalah warm paper dengan toggle mode gelap yang berfungsi; pengalaman baca dark-mode-only dilarang.
- Rationale: arah kreatif menetapkan ini sebagai bagian dari identitas produk.
NFR-6 — Prefers-reduced-motion
- Provenance: explicit (dari arah kreatif)
- Constraint: mode reduced-motion menghapus drift rail dan menampilkan konten di tempat; rail membungkus menjadi baris yang dapat digulir sehingga setiap item dapat dibawa sepenuhnya ke dalam tampilan.
- Rationale: arah kreatif menetapkan ini sebagai bagian dari motion direction.
NFR-7 — Larangan template indigo/blue-on-white
- Provenance: explicit (dari arah kreatif)
- Constraint: template SaaS indigo/blue-on-white generik dilarang untuk proyek ini; warna biru–indigo primer atau aksen pada ground putih/near-white (
#0057FF, #2563EB, #4F46E5, #6366F1, #7C3AED dan sekitarnya) dilarang; Inter, Roboto, Arial, Helvetica, Open Sans, Lato, Poppins, atau system-ui untuk headings atau body dilarang.
- Rationale: arah kreatif menetapkan ini sebagai larangan eksplisit.
Page 29 of 31
10. Tech Stack
Pilihan teknologi dari sumber diprioritaskan. Sumber menyatakan React (atau framework pilihan lain seperti WordPress/Next.js/HTML-CSS biasa) untuk website buku cerita multi-genre, dan meminta rekomendasi stack yang cocok untuk pemula hingga skala menengah.
- Frontend: React — dipilih sesuai sumber untuk membangun antarmuka Homepage, Story Catalog, Reading, dan dashboard. Next.js dapat digunakan sebagai kerangka React untuk routing dan rendering, sesuai opsi yang disebutkan sumber.
- Backend: Python/FastAPI — untuk API yang melayani kategori & filter, fitur pembaca, fitur penulis/admin, dan moderasi konten.
- Storage: database relasional sederhana untuk relasi Pengguna, Cerita, Bab (Chapters), dan Komentar, sesuai NFR-3.
- Deployment: Docker/docker-compose untuk pengembangan dan deployment skala menengah. Kubernetes hanya jika deployment memerlukan orkestrasi tersebut; tidak dinyatakan dalam sumber, sehingga tidak diwajibkan.
Page 30 of 31
11. Assumptions and Constraints
Asumsi:
- A-1: Identitas aplikasi diperlukan untuk tindakan pembaca yang tahan lama (bookmark, rating/ulasan, komentar, riwayat membaca) dan untuk workspace penulis serta moderator. Ini adalah
required_inference yang diperlukan agar journey yang diterima dapat dijalankan.
- A-2: Sign Up dan Login adalah permukaan identitas yang dapat diakses anonim; keduanya tidak boleh menjadi satu-satunya cara mengakses dirinya sendiri.
- A-3: Penetapan peran penulis dan admin/moderator dilakukan di luar alur pendaftaran pembaca mandiri; mekanisme penetapan tidak ditentukan oleh sumber dan tidak menambah kemampuan manajemen akun.
- A-4: Tidak ada horizon masa depan yang dinyatakan dalam sumber; semua perilaku dalam dokumen ini adalah lingkup saat ini.
- A-5: Tidak ada direktif referensi dengan
content_source, sehingga tidak ada Source Content Inventory.
Constraints:
- C-1: Stack harus cocok untuk pemula hingga skala menengah (NFR-1).
- C-2: Desain UI/UX harus dioptimalkan agar nyaman dibaca berjam-jam (NFR-2).
- C-3: Rencana database harus sederhana, mencakup relasi Pengguna, Cerita, Bab (Chapters), dan Komentar (NFR-3).
- C-4: Teks dan kontrol yang dapat dibaca harus tetap utuh di 375px, 768px, dan 1280px (NFR-4).
- C-5: Default adalah warm paper dengan toggle mode gelap; dark-mode-only dilarang (NFR-5).
- C-6: Prefers-reduced-motion harus dihormati (NFR-6).
- C-7: Template indigo/blue-on-white dan font yang dilarang tidak boleh digunakan (NFR-7).
- C-8: Mustard dan muted sage hanya boleh muncul sebagai warna tag genre sekunder, tidak pernah sebagai bidang besar.
Page 31 of 31
12. Glossary
- Cerita (Story): karya fiksi yang dipublikasikan di platform, memiliki genre utama, sub-genre, tag, status, dan target usia.
- Bab (Chapter): bagian dari sebuah cerita yang diunggah penulis secara bertahap.
- Genre utama: kategori utama cerita (fantasi, romansa, horor, komedi, misteri, fiksi ilmiah, dan genre lain).
- Sub-genre: kategori turunan di dalam genre utama.
- Tag: label tematik tambahan pada cerita.
- Status cerita: keadaan cerita, yaitu tamat atau ongoing.
- Target usia: kelompok usia pembaca yang dituju oleh sebuah cerita.
- Bookmark: penyimpanan cerita oleh pembaca untuk ditemukan kembali nanti.
- Rating/ulasan: penilaian dan komentar tertulis pembaca terhadap sebuah cerita.
- Riwayat membaca: catatan cerita yang pernah dibaca beserta bab terakhir.
- Komentar: pesan yang ditulis pembaca pada sebuah cerita.
- Moderasi konten: peninjauan dan tindakan admin/moderator terhadap cerita dan komentar.
- Pembaca (Reader): persona yang menjelajah dan membaca cerita.
- Penulis (Author): persona yang mengunggah dan mengelola cerita per bab.
- Admin/Moderator: persona yang mengelola operasional platform dan memoderasi konten.
- Warm paper: ground kertas hangat
#F4EDE1 sebagai default tampilan terang.
- Mode gelap: tampilan alternatif dengan ground
#1C1A17 dan teks #EDE6DA.
No comments yet. Be the first!