Lewati ke konten utama

๐Ÿ“ 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โ€‹

  1. Warm, tidak formal kaku โ€” seperti kirim WhatsApp ke teman sekampus, bukan surat resmi
  2. Islamic tapi inklusif โ€” greeting standard pakai Assalamu'alaikum, tapi jangan over-religious di semua context
  3. Celebrate small wins โ€” empty state "lunas" = "Alhamdulillah!", achievement = "Masya Allah!", thanks = "Jazakumullah khairan"
  4. Plain language untuk technical โ€” "Server error" โ†’ "Terjadi Kesalahan, coba lagi ya"
  5. 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โ€‹

PhraseArtiGunakan untuk
Assalamu'alaikumSemoga keselamatan atasmuGreeting (login, dashboard opening)
BismillahDengan nama AllahMulai sesuatu (onboarding, start quiz)
AlhamdulillahSegala puji bagi AllahCelebration small wins (empty lunas, success)
Masya AllahAtas kehendak AllahAwe/achievement (milestone hafalan, nilai A)
Barakallahu fiikSemoga Allah memberkahimuEncouragement (progress widget, streak)
Jazakumullah khairanSemoga Allah membalas kebaikanmuThanks (after payment, after feedback)
Insyaa AllahJika Allah menghendakiFuture intent (reminder "Akan dibayar")
SubhanallahMaha Suci AllahAmazement (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)โ€‹

ScreenCurrent Copy (Figma)โŒ Issueโœ… Recommended
Dashboard Polished (25:2) headline"Fatimah"Terlalu singkat, greeting di atas separateAssalamu'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 inkonsistenAssalamu'alaikum,\nFatimah
Dashboard "Dark" subtitle"Selamat pagi โ€ข Waktu Dhuha"โœ… Sudah bagusTetap pakai format ini
Splash Screen"Portal Orang Tua Santri"โœ… JelasTetap
Onboarding Welcome headline"Assalamu'alaikum!"โœ… Bagus tapi tanpa namaTetap (pre-login)
Onboarding Welcome body"Selamat datang di Amal e-Santri. Pantau perkembangan anak Anda kapan saja, dimana saja."โœ… ClearTetap

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โ€‹

FrameCurrent CopyโŒ Issueโœ… Recommended
State - Tagihan Kosong (39:2) headline"Tidak Ada Tagihan"โœ… BagusTetap
State - Tagihan Kosong subtext"Semua tagihan sudah lunas. Alhamdulillah!"โœ… BrilliantTetap โ€” ini signature copy
State - Nilai Kosong (39:32) headline"Belum Ada Nilai"โœ… BagusTetap
State - Nilai Kosong subtext"Nilai akan muncul setelah guru menginput hasil u..."โŒ TerpotongNilai akan muncul setelah guru menginput hasil ujian.
State - Offline (39:62) headline"Koneksi Terputus"โœ… JelasTetap
State - Offline subtext"Periksa koneksi internet Anda dan coba lagi."โœ… ActionableTetap
State - Offline footer"Menampilkan data terakhir yang tersimpan"โœ… InformatifTetap
State - Server Error (39:99) headline"Terjadi Kesalahan"โœ… ClearTetap
State - Server Error subtext"Mohon maaf, server sedang dalam perbaikan. Coba..."โŒ TerpotongMohon maaf, server sedang dalam perbaikan. Silakan coba beberapa saat lagi. (2 lines)

Additional empty states yang perlu ditambah:

ContextHeadlineSubtextCTA
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โ€‹

ScreenElementCurrentโŒ Issueโœ… Recommended
Payment - Sukses headlineTitle(belum di-audit)โ€”"Alhamdulillah,\nPembayaran Berhasil"
Payment - Sukses bodySubtextโ€”โ€”"Terima kasih. Bukti pembayaran sudah dikirim ke email dan tersimpan di riwayat."
Payment - Sukses CTAPrimary buttonโ€”โ€”"Lihat Bukti Pembayaran"
Payment - Sukses CTASecondaryโ€”โ€”"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โ€‹

ContextElementRecommended Copy
Hero strip โ€” hadir tepat waktuMain"Hadir hari ini"
Hero strip โ€” hadir tepat waktuDetail"Masuk {time} ยท Tepat waktu"
Hero strip โ€” terlambatMain"Hadir hari ini"
Hero strip โ€” terlambatDetail"Masuk {time} ยท Terlambat {x} menit"
Hero strip โ€” izinMain"Izin hari ini"
Hero strip โ€” izinDetail"Alasan: {reason}"
Hero strip โ€” sakitMain"Sakit hari ini"
Hero strip โ€” sakitDetail"Semoga lekas sembuh."
Hero strip โ€” alphaMain"Tidak hadir hari ini"
Hero strip โ€” alphaDetail"Belum ada keterangan. Silakan konfirmasi ke wali kelas."
Hero strip โ€” liburMain"Hari libur"
Hero strip โ€” liburDetail"{holidayName}"

Bill Status Copyโ€‹

StatusLabel di ChipDescription 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}

TriggerTitleBody
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:

IndonesianEnglish (fallback)
"Nama Lengkap"Full Name
"Nomor HP"Phone Number
"Email"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:

ContextTitleBodyPrimary 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โ€‹

StateCopy
Loading general"Memuat..." (jangan "Loading...")
Saving"Menyimpan..."
Sending"Mengirim..."
Uploading"Mengunggah... {x}%"
Downloading"Mengunduh... {x}%"
Processing payment"Memproses pembayaran..."
RefreshingPull indicator: (no text, just spinner)
Almost done"Hampir selesai..."

Success Copy Templatesโ€‹

ActionCopy
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,25jt atau Rp 15rb
  • Percentage: 95% (tanpa spasi)
  • Large number: 15.750 atau 1.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:

  1. Apakah nada-nya warm tapi profesional?
  2. Apakah sesuai context muslim Indonesia tapi inklusif?
  3. Apakah plain language, tanpa jargon teknis?
  4. Apakah actionable (user tahu harus apa selanjutnya)?
  5. Apakah konsisten dengan copy di screen lain?
  6. Apakah tidak terpotong di viewport mobile 360px?
  7. Apakah celebrate small win tanpa berlebihan?
  8. Apakah respectful untuk user (no blame language)?

Status: Ready untuk designer implement Last updated: 2026-04-16 Version: 1.0