Kembali ke semua tulisan

Membangun Aplikasi Desktop Time Tracking: Cerita di Balik Layar

Membangun Aplikasi Desktop Time Tracking: Cerita di Balik Layar

"Tim saya bekerja remote. Bagaimana saya tahu berapa lama waktu yang benar-benar dipakai untuk tiap proyek?"

Pertanyaan sederhana ini ternyata menyimpan tantangan teknis yang jauh lebih dalam daripada sekadar tombol Start dan Stop.

Di artikel ini, saya berbagi pengalaman membangun sebuah aplikasi desktop time tracking: aplikasi pencatat waktu kerja yang berjalan di komputer karyawan (Windows, Linux dan macOS), mencatat durasi kerja secara akurat, mengambil screenshot berkala, dan tetap berfungsi meski koneksi internet terputus. Tujuan saya menulis ini sederhana: menunjukkan bagaimana sebuah ide bisnis yang terdengar mudah diterjemahkan menjadi produk yang andal.

Catatan: Artikel ini ditulis sebagai studi kasus pengembangan produk. Nama klien dan produk sengaja tidak disebutkan demi menjaga kerahasiaan.


Masalah yang Ingin Diselesaikan

Banyak perusahaan dengan tim remote menghadapi kendala yang sama:

  • Sulit mengukur waktu kerja secara objektif. Laporan manual rawan terlupa dan tidak konsisten.

  • Tidak ada gambaran proyek mana yang paling menyita waktu. Akibatnya, penagihan ke klien dan perencanaan kapasitas tim hanya berdasarkan perkiraan.

  • Aplikasi web saja tidak cukup. Browser bisa ditutup, laptop bisa masuk mode sleep, dan internet bisa terputus. Semua itu membuat pencatatan waktu menjadi tidak akurat.

Solusinya: aplikasi time tracking yang hidup di komputer pengguna, bekerja di latar belakang, dan jujur mencatat waktu apa adanya, bahkan saat kondisi tidak ideal.

Aplikasi time tracker


Fitur Utama Aplikasi

Dalam bahasa sehari-hari, inilah yang bisa dilakukan aplikasi ini:

  • Timer satu klik. Pilih proyek, klik mulai, dan waktu berjalan. Klik berhenti saat selesai.

  • Tetap akurat walau laptop ditidurkan. Saat komputer masuk mode sleep atau jendela aplikasi disembunyikan, timer tidak ikut mati atau salah hitung.

  • Mode offline. Internet terputus? Tidak masalah. Data tersimpan aman di komputer dan otomatis terkirim ke server begitu koneksi kembali.

  • Screenshot otomatis. Aplikasi mengambil tangkapan layar secara berkala sebagai bukti aktivitas, dengan sepengetahuan pengguna, lalu menyimpannya dengan aman ke penyimpanan cloud.

  • Rekap harian dan mingguan. Pengguna langsung melihat total jam kerja mereka.

  • Pembaruan otomatis. Versi baru terpasang sendiri tanpa pengguna harus mengunduh manual.


Tantangan Teknis yang Menarik (Dijelaskan dengan Sederhana)

Bagian inilah yang membuat proyek ini menantang sekaligus menyenangkan. Berikut beberapa "jebakan" yang harus diatasi.

1. Timer yang Tidak Boleh Mati

Tantangan terbesar: timer harus tetap berjalan benar meski jendela aplikasi disembunyikan atau komputer ditidurkan.

Solusinya, timer tidak dijalankan di tampilan layar (bagian yang dilihat pengguna), melainkan di "mesin inti" aplikasi yang terus bekerja di latar belakang. Analoginya seperti mesin mobil: lampu dasbor boleh mati, tapi mesin tetap menyala. Pendekatan ini memastikan waktu tercatat akurat dalam kondisi apa pun.

2. Menghitung Waktu Secara Jujur (Anti "Waktu Hantu")

Bayangkan seseorang menyalakan timer, lalu menutup laptop untuk pulang. Besok paginya laptop dibuka lagi. Apakah 16 jam selama laptop tertutup itu dihitung sebagai waktu kerja? Tentu tidak.

Saya membangun mekanisme yang mendeteksi "celah mati", yaitu periode saat komputer benar-benar tidur atau mati paksa, lalu tidak menghitungnya sebagai waktu kerja. Tanpa mekanisme ini, laporan bisa penuh "waktu hantu" yang menyesatkan.

3. Pergantian Hari di Tengah Malam

Apa yang terjadi kalau seseorang lembur melewati pukul 00.00? Catatan waktu tidak boleh "bocor" ke hari berikutnya secara keliru. Aplikasi otomatis menutup catatan hari kemarin tepat di tengah malam dan membuka catatan baru untuk hari ini, sehingga laporan per hari tetap rapi dan akurat.

4. Mode Offline yang Andal

Koneksi internet tidak selalu stabil. Karena itu, data kerja selalu disimpan dulu di komputer pengguna dalam sebuah database lokal kecil, baru kemudian dikirim ke server secara berurutan. Kalau pengiriman gagal, data tidak hilang. Ia menunggu di antrean dan dicoba lagi nanti. Pengguna bahkan tidak menyadari prosesnya.

5. Keamanan Data

Token login dan data sensitif dienkripsi menggunakan sistem keamanan bawaan sistem operasi, bukan disimpan dalam bentuk teks polos. Tampilan aplikasi juga dipisahkan dari akses langsung ke sistem komputer, mengikuti praktik keamanan modern untuk aplikasi desktop.


Teknologi yang Digunakan

Bagi Anda yang penasaran dengan "dapur"-nya, berikut perangkat utama yang saya pakai beserta fungsinya:

Teknologi

Fungsinya

Electron

Membuat satu aplikasi desktop yang berjalan di Windows dan macOS sekaligus.

React + TypeScript

Membangun tampilan yang interaktif sekaligus kode yang rapi dan minim error.

Vite

Membuat proses pengembangan menjadi cepat dan ringan.

SQLite

Database kecil di komputer pengguna untuk menyimpan data saat offline.

Zustand

Mengelola "kondisi" aplikasi (misalnya timer sedang berjalan atau tidak) secara sederhana.

electron-updater

Menghadirkan fitur pembaruan otomatis ke pengguna.

Vitest

Menjalankan pengujian otomatis agar fitur tetap berfungsi setiap ada perubahan.

Singkatnya, kombinasi ini memungkinkan satu basis kode menghasilkan aplikasi desktop yang stabil, cepat, dan mudah dirawat untuk dua sistem operasi sekaligus.


Pelajaran yang Saya Petik

  1. Fitur sederhana sering menyembunyikan kerumitan. Tombol "Start/Stop" terlihat mudah, tapi membuatnya akurat dalam segala kondisi adalah pekerjaan yang sebenarnya.

  2. Asumsikan hal terburuk. Internet mati, laptop ditutup, aplikasi crash. Produk yang baik harus tetap menjaga data pengguna di semua skenario itu.

  3. Akurasi adalah fondasi kepercayaan. Untuk aplikasi pencatat waktu, satu angka yang salah bisa menghapus kepercayaan pengguna terhadap seluruh sistem.


Punya Kebutuhan Serupa?

Kalau bisnis Anda membutuhkan aplikasi desktop, entah itu time tracking, alat monitoring produktivitas, atau aplikasi internal yang harus tetap berjalan dalam kondisi offline, saya senang membantu mewujudkannya dari ide hingga produk jadi.

Mari ngobrol tentang ide Anda melalui halaman kontak di website ini.