Membangun privasi CatatanKu sebagai produk: kebijakan pengumpulan data minimal, telemetry yang transparan dan bisa dimatikan, serta praktik kepatuhan GDPR untuk aplikasi desktop

Di episode 19 CatatanKu menyimpan data dengan enkripsi dan keychain. Namun keamanan teknis tidak lengkap tanpa privasi: apa yang aplikasi kumpulkan, ke mana perginya, dan apakah pengguna diberitahu. Aplikasi desktop yang mengumpulkan data diam-diam kehilangan kepercayaan — dan di era GDPR, bisa kehilangan akses ke pasar.
Episode ini membangun privasi CatatanKu sebagai produk: data collection minimal, telemetry yang transparan dan bisa dimatikan, dan praktik kepatuhan GDPR khusus aplikasi desktop. Prinsip utamanya: privasi bukan daftar centang dokumen, melainkan keputusan desain — mulai dari apa yang dikirim, sampai cara meminta persetujuan.
Aturan pertama privasi: kumpulkan data seminimal mungkin, dan hanya untuk fungsi yang jelas. Setiap field data yang dikumpulkan adalah liabilitas: kalian harus menyimpan, melindungi, dan menjelaskannya.
Diperlukan (dikumpulkan, dijelaskan):
├─ versi aplikasi & OS → diagnosa error & telemetry
├─ crash data (stack trace) → perbaikan bug
└─ id instalasi anonim → agregasi telemetry
Tidak diperlukan (tidak dikumpulkan):
├─ isi catatan pengguna → hanya di perangkat / dienkripsi
├─ nama file di sistem → privacy-first
└─ aktivitas mouse/ketikan → bukan produk analyticsPertanyaan uji untuk setiap fitur telemetry: "bisakah fungsi ini bekerja tanpa data ini?" Jika ya, jangan kumpulkan. Jika tidak, kumpulkan versi paling kecil yang cukup.
Telemetry berguna — crash report dan statistik versi membantu kualitas. Yang membedakan telemetry sehat dari pelacakan adalah transparansi dan kontrol:
interface TelemetryEvent {
name: string;
props: Record<string, string | number>;
}
export class Telemetry {
private enabled: boolean;
constructor(enabled: boolean) {
this.enabled = enabled;
}
track(event: TelemetryEvent) {
if (!this.enabled) return;
// batasi: hanya field aman, batch, kirim lewat backend (ep 18)
fetch("https://telemetry.catatanku.app/v1/event", {
method: "POST",
body: JSON.stringify({ ...event, appVersion, os }),
});
}
}Kunci lain: telemetry dikirim lewat backend, sama seperti jalur jaringan lain (episode 18) — dengan kunci telemetry yang disimpan di keychain, bukan di webview.
GDPR (dan aturan serupa seperti LGPD/CCPA) menuntut consent yang sah: informasi, spesifik, dan bisa ditarik kembali. Untuk aplikasi desktop, pola yang berlaku:
1. Saat pertama install: explainer satu layar
"CatatanKu mengirim telemetry (versi, OS, crash)
untuk memperbaiki aplikasi. Data tanpa identitas."
2. Tombol: [Setuju] [Tidak sekarang] [Pelajari lebih lanjut]
3. Pilihan disimpan; bisa diubah kapan saja di Settings
4. Perubahan pengumpulan data → minta ulang persetujuanPersetujuan yang baik tidak disembunyikan di halaman 7 dokumen legal — ia muncul di titik keputusan dengan bahasa manusia. Pengaturan privasi juga harus menyediakan ekspor dan penghapusan data yang dikirim ke server kalian.
Warning
Consent default (menyembunyikan opt-out di dalam settings) adalah jalan menuju denda. Di aplikasi desktop, "banner cookie" web tidak cukup — pengguna harus bisa memahami apa yang dikirim ke mana, dari mana data itu dikirim (aplikasi ini), dan mengubahnya tanpa mencari-cari.
Poin menarik: sebagian besar data CatatanKu tidak pernah meninggalkan perangkat (offline-first, episode 8). Ini adalah posisi privasi yang sangat kuat — dan harus dikomunikasikan sebagai fitur: "catatanmu tetap di perangkatmu". Namun perlu diingat: kalau kalian mengirim data ke server, GDPR berlaku untuk data itu, di mana pun penyimpanannya.
[ ] Kebijakan privasi tertulis & tautan di dalam aplikasi
[ ] Telemetry default-off atau minimal, bisa dimatikan
[ ] Tidak mengumpulkan isi catatan / identitas
[ ] Proses ekspor & penghapusan data tersedia
[ ] DPA dengan vendor pihak ketiga
[ ] Data lokal dienkripsi (episode 19)
[ ] Consent diminta ulang saat pengumpulan berubahInti yang harus dibawa pulang:
Di episode 21 selanjutnya kita menambahkan kecerdasan ke CatatanKu: AI-powered desktop apps — integrasi LLM, model AI lokal, dan fitur AI di aplikasi desktop. Sampai jumpa di episode 21!