๐ Copy Standardization Matrix
Purpose: Standardize microcopy across 42 Parent screens dengan Islamic UX writing voice.
Principle: Copy yang tepat adalah brand voice yang paling sulit direplicate. Pola "Alhamdulillah" di empty state adalah signature โ dokumentasikan dan perluas.
๐๏ธ BRAND VOICE PRINCIPLESโ
5 Core Principlesโ
- Warm, tidak formal kaku โ seperti kirim WhatsApp ke teman sekampus, bukan surat resmi
- Islamic tapi inklusif โ greeting standard pakai Assalamu'alaikum, tapi jangan over-religious di semua context
- Celebrate small wins โ empty state "lunas" = "Alhamdulillah!", achievement = "Masya Allah!", thanks = "Jazakumullah khairan"
- Plain language untuk technical โ "Server error" โ "Terjadi Kesalahan, coba lagi ya"
- Active voice, second person โ "Anda" untuk formal, "Kamu" HINDARI (terlalu casual untuk konteks sekolah)
Do'sโ
- โ "Tidak ada tagihan. Semua sudah lunas. Alhamdulillah!"
- โ "Nilai akan muncul setelah guru menginput."
- โ "Terima kasih โ pembayaran berhasil diterima."
- โ "Silakan coba beberapa saat lagi."
- โ "Ahmad hadir di sekolah. Masuk pukul 06:45."
Don'tsโ
- โ "Data kosong" (terlalu teknis, dingin)
- โ "Anda dipersilakan untuk melakukan pembayaran." (kaku + birokratis)
- โ "Error: Failed to fetch data." (jargon teknis)
- โ "Kamu udah bayar belum?" (terlalu casual, tidak sesuai konteks sekolah)
- โ Over-religious: "Subhanallah, alhamdulillah, allahu akbar, innalillahi..." di satu kalimat
๐ ISLAMIC PHRASES USAGE GUIDEโ
| Phrase | Arti | Gunakan untuk |
|---|---|---|
| Assalamu'alaikum | Semoga keselamatan atasmu | Greeting (login, dashboard opening) |
| Bismillah | Dengan nama Allah | Mulai sesuatu (onboarding, start quiz) |
| Alhamdulillah | Segala puji bagi Allah | Celebration small wins (empty lunas, success) |
| Masya Allah | Atas kehendak Allah | Awe/achievement (milestone hafalan, nilai A) |
| Barakallahu fiik | Semoga Allah memberkahimu | Encouragement (progress widget, streak) |
| Jazakumullah khairan | Semoga Allah membalas kebaikanmu | Thanks (after payment, after feedback) |
| Insyaa Allah | Jika Allah menghendaki | Future intent (reminder "Akan dibayar") |
| Subhanallah | Maha Suci Allah | Amazement (jangan overuse โ hanya di 1-2 moment wow) |
Aturan penggunaan:
- Maksimal 1 phrase per screen
- Jangan kombinasikan 2+ phrase dalam 1 kalimat
- Jika sudah ada "Assalamu'alaikum" di greeting, jangan tambah phrase lain di subtitle
- Untuk error/negative state, hindari phrase religius (tidak sopan implikasinya)
๐ COPY AUDIT MATRIX (Per Screen)โ
Hero Greeting Pattern (Dashboard, Splash, Onboarding)โ
| Screen | Current Copy (Figma) | โ Issue | โ Recommended |
|---|---|---|---|
| Dashboard Polished (25:2) headline | "Fatimah" | Terlalu singkat, greeting di atas separate | Assalamu'alaikum,\nFatimah (2 lines, H1 + name) |
| Dashboard Polished subtitle | "Semoga hari Anda penuh keberkahan" | Generic sepanjang hari | {timeGreeting} ยท {prayerContext} โ time-aware |
| Dashboard "Dark" (30:2) headline | "Assalamu'alaikum, Fatimah!" | Exclamation + coma format inkonsisten | Assalamu'alaikum,\nFatimah |
| Dashboard "Dark" subtitle | "Selamat pagi โข Waktu Dhuha" | โ Sudah bagus | Tetap pakai format ini |
| Splash Screen | "Portal Orang Tua Santri" | โ Jelas | Tetap |
| Onboarding Welcome headline | "Assalamu'alaikum!" | โ Bagus tapi tanpa nama | Tetap (pre-login) |
| Onboarding Welcome body | "Selamat datang di Amal e-Santri. Pantau perkembangan anak Anda kapan saja, dimana saja." | โ Clear | Tetap |
Time-aware subtitle logic (recommended implementation):
03:00-05:00 โ "Waktu Tahajjud"
05:00-06:00 โ "Selamat subuh ยท Waktu Subuh"
06:00-10:00 โ "Selamat pagi ยท Waktu Dhuha"
10:00-12:00 โ "Selamat siang ยท Menjelang Dzuhur"
12:00-15:00 โ "Selamat siang ยท Waktu Dzuhur"
15:00-18:00 โ "Selamat sore ยท Waktu Ashar"
18:00-19:00 โ "Selamat petang ยท Waktu Maghrib"
19:00-24:00 โ "Selamat malam ยท Waktu Isya"
00:00-03:00 โ "Selamat malam"
Empty State Copyโ
| Frame | Current Copy | โ Issue | โ Recommended |
|---|---|---|---|
| State - Tagihan Kosong (39:2) headline | "Tidak Ada Tagihan" | โ Bagus | Tetap |
| State - Tagihan Kosong subtext | "Semua tagihan sudah lunas. Alhamdulillah!" | โ Brilliant | Tetap โ ini signature copy |
| State - Nilai Kosong (39:32) headline | "Belum Ada Nilai" | โ Bagus | Tetap |
| State - Nilai Kosong subtext | "Nilai akan muncul setelah guru menginput hasil u..." | โ Terpotong | Nilai akan muncul setelah guru menginput hasil ujian. |
| State - Offline (39:62) headline | "Koneksi Terputus" | โ Jelas | Tetap |
| State - Offline subtext | "Periksa koneksi internet Anda dan coba lagi." | โ Actionable | Tetap |
| State - Offline footer | "Menampilkan data terakhir yang tersimpan" | โ Informatif | Tetap |
| State - Server Error (39:99) headline | "Terjadi Kesalahan" | โ Clear | Tetap |
| State - Server Error subtext | "Mohon maaf, server sedang dalam perbaikan. Coba..." | โ Terpotong | Mohon maaf, server sedang dalam perbaikan. Silakan coba beberapa saat lagi. (2 lines) |
Additional empty states yang perlu ditambah:
| Context | Headline | Subtext | CTA |
|---|---|---|---|
| Absensi kosong (belum ada absensi bulan ini) | "Belum Ada Absensi" | "Absensi akan muncul setelah santri check-in di sekolah." | โ |
| Hafalan kosong (belum ada setoran) | "Belum Ada Setoran" | "Setoran hafalan akan tampil setelah ustadz/ustadzah verifikasi." | โ |
| Chat kosong | "Belum Ada Pesan" | "Mulai percakapan dengan Wali Kelas untuk diskusi perkembangan anak." | "Mulai Chat" |
| Notifikasi kosong | "Belum Ada Notifikasi" | "Notifikasi terbaru akan muncul di sini." | โ |
| Perizinan kosong | "Belum Ada Izin" | "Ajukan izin tidak masuk sekolah melalui menu ini." | "Ajukan Izin" |
| Tabungan kosong (belum ada setoran) | "Saldo Kosong" | "Mulai menabung untuk keperluan santri. Setor pertama kamu dimulai sekarang." | "Setor Sekarang" |
Payment Flow Copyโ
| Screen | Element | Current | โ Issue | โ Recommended |
|---|---|---|---|---|
| Payment - Sukses headline | Title | (belum di-audit) | โ | "Alhamdulillah,\nPembayaran Berhasil" |
| Payment - Sukses body | Subtext | โ | โ | "Terima kasih. Bukti pembayaran sudah dikirim ke email dan tersimpan di riwayat." |
| Payment - Sukses CTA | Primary button | โ | โ | "Lihat Bukti Pembayaran" |
| Payment - Sukses CTA | Secondary | โ | โ | "Kembali ke Beranda" |
| Payment - QRIS instruction | โ | โ | โ | "Scan QR code di atas dengan aplikasi pembayaran favorit Anda (GoPay, OVO, DANA, ShopeePay, dll)." |
| Payment - VA instruction | โ | โ | โ | "Transfer ke nomor Virtual Account di bawah sebelum {expiryTime}. Pembayaran otomatis terverifikasi." |
| Payment - Transfer instruction | โ | โ | โ | "Transfer ke rekening di bawah, lalu upload bukti transfer untuk konfirmasi cepat." |
| Payment fail | โ | โ | โ | Headline: "Pembayaran Gagal" ยท Subtext: "Pembayaran tidak berhasil diproses. Silakan coba metode lain atau hubungi admin sekolah." |
Attendance Copyโ
| Context | Element | Recommended Copy |
|---|---|---|
| Hero strip โ hadir tepat waktu | Main | "Hadir hari ini" |
| Hero strip โ hadir tepat waktu | Detail | "Masuk {time} ยท Tepat waktu" |
| Hero strip โ terlambat | Main | "Hadir hari ini" |
| Hero strip โ terlambat | Detail | "Masuk {time} ยท Terlambat {x} menit" |
| Hero strip โ izin | Main | "Izin hari ini" |
| Hero strip โ izin | Detail | "Alasan: {reason}" |
| Hero strip โ sakit | Main | "Sakit hari ini" |
| Hero strip โ sakit | Detail | "Semoga lekas sembuh." |
| Hero strip โ alpha | Main | "Tidak hadir hari ini" |
| Hero strip โ alpha | Detail | "Belum ada keterangan. Silakan konfirmasi ke wali kelas." |
| Hero strip โ libur | Main | "Hari libur" |
| Hero strip โ libur | Detail | "{holidayName}" |
Bill Status Copyโ
| Status | Label di Chip | Description di List |
|---|---|---|
lunas | "Lunas" | "Dibayar: {date}" |
belum-bayar | "Belum Bayar" | "Jatuh tempo: {date}" |
overdue | "Terlambat" | "Terlambat {x} hari" |
partial | "Sebagian" | "Tersisa {amount}" |
Notification Copy Templatesโ
Pattern: {Icon} {Title}\n{Subtitle body}\n{Timestamp}
| Trigger | Title | Body |
|---|---|---|
| Tagihan baru | "Tagihan SPP {bulan} sudah tersedia" | "Rp {amount} jatuh tempo {date}. Bayar sekarang?" |
| Tagihan reminder 3 hari sebelum | "Tagihan jatuh tempo dalam 3 hari" | "Jangan lupa bayar SPP {bulan} sebelum {date}." |
| Tagihan overdue | "Pembayaran SPP terlambat" | "SPP {bulan} sudah melewati jatuh tempo. Segera lakukan pembayaran." |
| Pembayaran diterima | "Pembayaran berhasil" | "Rp {amount} telah diterima. Alhamdulillah, terima kasih." |
| Nilai baru di-input | "{subject}: Nilai baru masuk" | "{subjectName} โ {score}. Lihat detail?" |
| Hafalan milestone | "Masya Allah! {childName} menyelesaikan Juz {x}" | "Setoran terbaru disetujui ustadz. Keep going!" |
| Absensi alpha | "{childName} tidak hadir hari ini" | "Belum ada keterangan. Perlu konfirmasi." |
| Chat dari wali kelas | "{teacherName}: {messagePreview}" | โ |
| Pengumuman baru | "Pengumuman: {title}" | "{body}" |
Form / Action Copyโ
Button labels โ standardize:
| Action | โ Gunakan | โ Jangan |
|---|---|---|
| Confirm | "Konfirmasi" | "OK" |
| Save | "Simpan" | "Submit" |
| Cancel | "Batal" | "Tutup" (kecuali untuk modal) |
| Delete | "Hapus" | "Delete" |
| Edit | "Ubah" | "Edit" |
| Back | "Kembali" | "Back" |
| Next | "Lanjut" | "Next" |
| Submit | "Kirim" | "Submit" |
| Retry | "Coba Lagi" | "Retry" |
| View detail | "Lihat Detail" | "Detail" (sendirian) |
| View all | "Lihat Semua" | "See All" |
| Upload | "Unggah" | "Upload" |
| Download | "Unduh" | "Download" |
| Login | "Masuk" | "Login" |
| Logout | "Keluar" | "Logout" |
| Register | "Daftar" | "Register" |
Form field labels:
| Indonesian | English (fallback) |
|---|---|
| "Nama Lengkap" | Full Name |
| "Nomor HP" | Phone Number |
| "Email" | |
| "Kata Sandi" | Password |
| "Konfirmasi Kata Sandi" | Confirm Password |
| "Lupa kata sandi?" | Forgot password? |
| "Ingat saya" | Remember me |
| "Pilih tanggal" | Select date |
| "Pilih file" | Select file |
Validation errors:
| Error type | โ Friendly copy |
|---|---|
| Required | "{Field} harus diisi" |
| Invalid email | "Format email tidak valid" |
| Password too short | "Kata sandi minimal 8 karakter" |
| Password mismatch | "Konfirmasi kata sandi tidak cocok" |
| Network error | "Gagal terhubung ke server. Periksa koneksi internet Anda." |
| File too large | "Ukuran file maksimal {size}. Silakan pilih file yang lebih kecil." |
| File type not allowed | "Hanya file {types} yang diperbolehkan." |
Dialog / Confirmation Copyโ
Pattern:
Title: [Active verb, specific]
Body: [Clear consequence, 1-2 sentences max]
CTA primary: [Verb matching title]
CTA secondary: [Cancel / Batal]
Examples:
| Context | Title | Body | Primary CTA |
|---|---|---|---|
| Logout confirm | "Keluar dari Akun?" | "Anda akan diminta masuk kembali saat membuka aplikasi." | "Keluar" |
| Delete bill | "Hapus Tagihan?" | "Tagihan ini akan dihapus permanen dan tidak bisa dipulihkan." | "Hapus" |
| Cancel payment | "Batalkan Pembayaran?" | "Transaksi akan dibatalkan. Anda bisa mencoba lagi nanti." | "Ya, Batalkan" |
| Switch child | "Ganti ke {childName}?" | "Tampilan akan menyesuaikan dengan data {childName}." | "Ganti" |
| Enable biometric | "Aktifkan Fingerprint?" | "Buat login lebih cepat dengan sentuhan jari." | "Aktifkan" |
Loading / Progress Copyโ
| State | Copy |
|---|---|
| Loading general | "Memuat..." (jangan "Loading...") |
| Saving | "Menyimpan..." |
| Sending | "Mengirim..." |
| Uploading | "Mengunggah... {x}%" |
| Downloading | "Mengunduh... {x}%" |
| Processing payment | "Memproses pembayaran..." |
| Refreshing | Pull indicator: (no text, just spinner) |
| Almost done | "Hampir selesai..." |
Success Copy Templatesโ
| Action | Copy |
|---|---|
| Pembayaran sukses | "Alhamdulillah, pembayaran berhasil." |
| Data tersimpan | "Berhasil disimpan." |
| Foto terunggah | "Foto berhasil diunggah." |
| Izin diajukan | "Izin berhasil diajukan. Menunggu persetujuan wali kelas." |
| Password diubah | "Kata sandi berhasil diubah." |
| Profile updated | "Profil berhasil diperbarui." |
| Setoran hafalan tercatat | "Masya Allah, setoran berhasil tercatat." |
๐ฑ CONTENT STRATEGY DECISIONSโ
Timezone contextโ
- Semua timestamp relative: "baru saja", "5 menit lalu", "2 jam lalu", "kemarin", "{date} lalu"
- Untuk >7 hari: full date format "15 Apr 2026"
- Di hari yang sama: jam saja "14:30"
Number formattingโ
- Currency:
Rp 750.000(dengan titik, non-breaking space setelah Rp, tanpa decimal) - Currency compact:
Rp 1,25jtatauRp 15rb - Percentage:
95%(tanpa spasi) - Large number:
15.750atau1.2M - Phone:
+62 812-3456-7890
Date formattingโ
- Full: "15 April 2026"
- Short: "15 Apr 2026"
- With day: "Senin, 15 April 2026"
- Relative: "15 April" (jika tahun = tahun ini)
- Hijri: "8 Syawal 1447 H"
Time formattingโ
- 24-hour: "14:30" (Indonesia standard)
- With seconds (live): "14:30:45"
๐ฏ CHECKLIST IMPLEMENTATIONโ
Designer menjalankan copy audit:
- Review SEMUA screen di Figma
- Replace inkonsisten greeting pattern
- Fix text truncation (Nilai Kosong, Server Error)
- Add Islamic phrase di celebration states (following usage guide)
- Standardize button labels (Indonesian, not mixed)
- Standardize date/time/currency format
- Fix error messages jadi friendly
- Add empty state copy untuk screens yang belum punya
- Verify no "Lorem ipsum" remaining
- Test dengan text yang panjang (nama Arab panjang, desa panjang)
โ Validation Questionsโ
Sebelum approve copy, tanyakan:
- Apakah nada-nya warm tapi profesional?
- Apakah sesuai context muslim Indonesia tapi inklusif?
- Apakah plain language, tanpa jargon teknis?
- Apakah actionable (user tahu harus apa selanjutnya)?
- Apakah konsisten dengan copy di screen lain?
- Apakah tidak terpotong di viewport mobile 360px?
- Apakah celebrate small win tanpa berlebihan?
- Apakah respectful untuk user (no blame language)?
Status: Ready untuk designer implement Last updated: 2026-04-16 Version: 1.0