- Untuk mengatasi lambatnya penggunaan dan rumitnya proses masuk di aplikasi PureGym, penulis secara pribadi mengoptimalkannya dengan Apple Wallet
- Kode QR yang ada sebelumnya mengharuskan aplikasi dibuka setiap kali dan memuat informasi terlebih dahulu, sehingga menjadi metode masuk yang tidak efisien dan memakan waktu sekitar 47 detik
- Melalui berbagai proses teknis seperti reverse engineering, penggunaan mitmproxy, dan framework PassKit, penulis mengimplementasikan pass Wallet yang dapat diperbarui otomatis
- Dalam proses ini, ia juga mengonfirmasi cara kerja internal PureGym yang terekspos di web, seperti celah keamanan pada kode PIN, struktur autentikasi API, dan informasi lokasi cabang
- Pada akhirnya, ia menciptakan pengalaman masuk hanya dalam 3 detik, dan menegaskan bahwa ini hanyalah eksperimen pribadi serta bukan layanan resmi
47 Detik: Awal dari Ketidaknyamanan
- Pada hari kerja pukul 11:15 pagi, dibutuhkan 47 detik hanya untuk membuka aplikasi di pintu masuk PureGym
- Sinyal lemah, harus terhubung ke Wi-Fi, menjalankan aplikasi, lalu melewati berbagai notifikasi push dan penawaran diskon khusus sebelum kode QR muncul
- Butuh waktu lama hingga kode QR benar-benar tampil, dan ini membuat canggung di hadapan anggota lain
- Jika diulang 6 kali seminggu, pengalaman tidak efisien ini menghabiskan 282 detik setiap minggu
- Dibandingkan dengan pengalaman tanpa hambatan seperti Amazon Fresh, UX masuk PureGym terasa sangat tertinggal
Misteri PIN 8 Tahun
- Penulis telah menggunakan kode PIN 8 digit yang sama selama 8 tahun
- PIN ini tidak pernah kedaluwarsa maupun berubah
- Sebaliknya, kode QR di aplikasi diganti dengan nilai baru setiap 1 menit
- Ada kontradiksi besar antara tingkat keamanan yang nyata dan implementasi sebenarnya
- Metode PIN dipertahankan terlalu lama, sementara hanya kode QR yang dijaga ketat—sebuah fenomena "pertunjukan keamanan"
Memahami PureGym dengan mitmproxy
- Awalnya penulis mencoba memakai screenshot kode QR di Apple Wallet, tetapi langsung terbukti tidak berfungsi
- Kode QR PureGym dibuat secara dinamis, kedaluwarsa sekitar 1 minggu, tetapi diperbarui tiap 1 menit di aplikasi
- Dengan mencari repo terkait "PureGym" di GitHub, penulis menemukan struktur autentikasi API
- PIN 8 digit untuk login dipakai apa adanya sebagai kata sandi API
- Informasi autentikasi dasar yang dikodekan dengan Base64 juga memiliki keamanan yang lemah
- Untuk menganalisis traffic aplikasi, ia mencegat request dengan alat proxy seperti mitmproxy
- Struktur JSON dari kode QR terdiri dari part1 (id tetap), part2 (timestamp), dan part3 (salt untuk pembaruan)
- API bahkan memberi tahu waktu pembaruan dan syarat kedaluwarsa
PassKit: Potensi Apple Wallet
- Pass Apple Wallet bukan sekadar kartu statis, melainkan struktur mini-app yang mendukung pembaruan mandiri, notifikasi push, dan respons berbasis lokasi
- Implementasi PassKit memerlukan spesifikasi JSON, resource gambar, penandatanganan sertifikat, dan web service untuk pembaruan real-time
- Dari portal pengembang Apple, perlu menerbitkan Pass Type ID dan sertifikat WWDR
- Penandatanganan serta pengelolaan sertifikat cukup rumit, tetapi jika berhasil, pengalaman di perangkat nyata menjadi sangat mulus
Membangun Backend Swift
- Meski biasanya menggunakan Node.js, penulis membangun sendiri web service PassKit berbasis Swift dengan Vapor
- Saat pass perlu diperbarui, sistem menyediakan update otomatis melalui silent push
- Hasilnya adalah pembaruan pass yang alami tanpa disadari pengguna
Otomatisasi Lokasi PureGym di Seluruh Negeri
- Pass Apple Wallet dapat ditampilkan otomatis di lokasi yang ditentukan
- Situs resmi PureGym tidak menyediakan koordinat detail, tetapi API memberikan daftar koordinat semua cabang di seluruh negeri
- Dengan mem-parsing seluruh koordinat cabang, tiap pass diatur untuk cabang terdekat
- Kekurangannya: jika PureGym berada di dalam pusat perbelanjaan, pass bisa muncul bahkan saat hanya datang untuk belanja
Integrasi Apple Watch
- Pass Apple Wallet otomatis tersinkron ke Apple Watch tanpa pekerjaan tambahan
- Cukup klik dua kali di pergelangan tangan lalu scan, total waktu hingga masuk dipangkas menjadi 3 detik
- Penghematan waktu lebih dari 93% pun tercapai
Perubahan dalam Angka
- Waktu masuk dengan aplikasi PureGym lama: 47 detik
- Waktu masuk dengan pass Apple Wallet: 3 detik
- Rata-rata waktu yang dihemat per minggu: 4,4 menit (3,8 jam per tahun)
- Anggota di sekitar bertanya 23 kali apakah ada aplikasi seperti ini, dan semuanya dijelaskan bahwa ini tidak resmi
- Meski ada permintaan, tidak ada rencana distribusi karena masalah hak cipta/kebijakan layanan
Bonus: Integrasi Home Assistant
- Melalui endpoint jumlah orang di dalam ruangan pada API PureGym, penulis menampilkan tingkat kepadatan gym saat ini di dashboard IoT
- Berdasarkan data, ia bisa memutuskan untuk datang lagi pada jam yang lebih sepi, sehingga efisiensi dan motivasi olahraga meningkat
Realitas dan Etika Rekayasa
- Ini berawal dari upaya murni menyelesaikan ketidaknyamanan pribadi, tetapi di internal PureGym area ini tidak diperbaiki selama bertahun-tahun
- Prototipe yang dibuat di luar organisasi terkadang menyelesaikan masalah lebih cepat daripada roadmap resmi
- Secara resmi ini bisa melanggar syarat layanan, dan PureGym dapat memblokirnya kapan saja
- Penulis sama sekali tidak mengotomatiskan atau membagikannya, hanya untuk eksperimen pribadi, serta tetap mematuhi prinsip seperti penggunaan cache demi stabilitas
Langkah Berikutnya dan Penutup
- Ke depan, ide pengembangan seperti "notifikasi push rasa malu" juga bisa diusulkan
- Manfaat nyatanya memang kecil, tetapi ada kepuasan dalam mengoptimalkan 3,8 jam per tahun dari "gerakan yang tidak perlu"
- Jika PureGym membuat implementasi resmi, lebih banyak pengguna akan mendapatkan kenyamanan
- Ini menjadi contoh terciptanya "pengalaman tidak resmi tetapi efektif"
1 komentar
Komentar Hacker News
Saat saya berada di Amerika selama 3 bulan, saya mendaftar PureGym dan menerima PIN, lalu belakangan membatalkan keanggotaan. Namun kemudian Chrome memberi tahu bahwa PIN PureGym saya telah bocor
Dua tahun kemudian saya kembali ke Amerika dan menerima PIN yang sama, dan menurut saya ini masalah keamanan yang sangat serius
Aplikasi dan token PureGym juga menarik, dan saya juga menemukan celah keamanan pada sistem aktivasi kursi hydro massage, yang menerima PIN apa pun
Misalnya, PIN seperti 87623103 diubah menjadi hash 558B4C37F6E3FF9A5E1115C66CEF0703E3F2ADEE, dan jika dicari di rentang hash HaveIBeenPwned, memang ada catatan bahwa itu telah bocor beberapa kali
Untuk pertanyaan apakah akses API memang langsung bisa didapat, ya benar, saat memakai aplikasi dan situs saya belum pernah kena rate limit, dan mereka cukup longgar terhadap percobaan gagal
Scope yang saya sebutkan di postingan sama dengan yang dipakai aplikasi resmi dan klien tidak resmi di GitHub
Kemungkinan adanya scope tambahan sangat kecil; PureGym PHP Wrapper dan PureGym Attendance Python juga layak dilihat
“Kalau kita membuat fitur ini, berarti kita sendiri yang harus menanggung tanggung jawabnya”
Lalu sering ada candaan seperti, “Benar juga, ya sudah kita masukkan ke roadmap 2028”
Daftar pekerjaan rutin dan wishlist juga sudah panjang, jadi penambahan fitur sulit terjadi
Menurut saya hal terbaik yang bisa dilakukan PureGym sekarang adalah memberi beberapa ribu pound dan keanggotaan gratis seumur hidup kepada developer yang membuat aplikasi ini
Saya ingin membuat pass Apple Wallet, tapi proses menyiapkan akun developer dan biaya tambahannya terasa membebani
Saat baterai lemah atau mode hemat daya aktif, notifikasi itu bahkan bisa tidak dikirim sama sekali, karena memang dirancang untuk meminimalkan konsumsi baterai
Notifikasi yang lebih penting harus menampilkan elemen UI secara eksplisit, dan akan tetap sampai terlepas dari kondisi hemat daya