6 poin oleh GN⁺ 2025-08-16 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2025-08-16
Komentar Hacker News
  • Menurut saya ini tulisan yang sangat menarik dan menginspirasi, benar-benar menangkap esensi seorang engineer, dan terlihat jelas bahwa OP adalah hacker sejati
    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
    • Pemberitahuan Chrome bahwa PIN PureGym telah bocor kemungkinan adalah false positive, hal seperti ini bisa terjadi saat Chrome menggunakan API HaveIBeenPwned
      Misalnya, PIN seperti 87623103 diubah menjadi hash 558B4C37F6E3FF9A5E1115C66CEF0703E3F2ADEE, dan jika dicari di rentang hash HaveIBeenPwned, memang ada catatan bahwa itu telah bocor beberapa kali
  • Ini masalah yang cukup dipikirkan sekali saja: keypad fisik yang diletakkan di luar ruangan, tertutup cuaca Inggris, protein shake, dan penyesalan, bahkan bisa jadi siaran langsung TikTok lewat Ring doorbell milik seseorang. Tapi tetap saja keypad itu menerima PIN lama saya tanpa masalah, sementara QR code digital malah butuh rotasi kriptografi yang akan membuat NSA terkesan
  • Sangat menyenangkan membaca kisah seperti ini, alih-alih menunggu aplikasinya berfungsi dengan benar, saya langsung menghafal PIN-nya. Jadi saya bisa masuk bahkan lebih cepat daripada cara yang diusulkan OP, dan menurut saya juga lebih praktis karena tidak butuh perangkat atau layanan tambahan
  • Saat membaca tulisan berjudul “ada alasan mengapa mereka tidak mengimplementasikan Apple Wallet”, melihat screenshot aplikasi PureGym, kelihatannya aplikasi itu pada dasarnya cuma pembungkus tipis untuk situs mobile, atau dibuat dengan teknologi seperti Flutter. Kemungkinannya sangat kecil mereka punya developer internal yang bisa menangani detail halus API Apple
    • Ini inti masalahnya, bisnis utama PureGym adalah mendapatkan sebanyak mungkin pelanggan dan mempersulit proses keluar, bukan pengembangan software. Kalau beruntung, mereka punya web developer internal yang pas-pasan menjaga situs dan database tetap hidup, lalu pekerjaan sisanya di-outsource dengan permintaan agar “dibuat terasa seperti aplikasi”. Kalau tidak beruntung, semua pekerjaan web diserahkan ke vendor luar dan bahkan untuk mengganti satu kata di judul pun harus bayar biaya tambahan
    • Tapi lalu muncul pertanyaan: kenapa mereka tidak belajar? Ada Google, Stack Overflow, dan LLM, tapi tetap tidak ada perbaikan. Mungkin karena memang tidak ada orang yang peduli pada UX, atau tim backend sudah lama pergi dan yang tersisa hanya engineer murah dengan jumlah minimal untuk menjaga sistem tetap hidup
    • Kalau mereka menambahkan Apple Wallet, berarti harus mendukung Android Wallet juga, jadi kode yang harus dirawat akan bertambah. Meski begitu, setidaknya mereka bisa membuat aplikasi selalu langsung menampilkan QR code saat dibuka
    • Saya juga punya aplikasi PureGym di ponsel saya, dan memang rasanya seperti aplikasi yang cuma membungkus situs web PureGym
  • Ini komentar yang sangat tepat, PIN pintu gym 8 digit itu pada dasarnya adalah password API, dan sebagian besar pengguna tidak pernah menetapkannya sendiri. Saya hanya bisa berharap ada rate limiting untuk percobaan gagal. Kelihatannya cukup tahu alamat email seseorang saja untuk langsung mendapat akses API. Saya juga penasaran apakah cakupan izin yang bisa diminta benar-benar dibatasi dengan baik
    • Saya OP
      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
  • Saya sering melihat diskusi roadmap aplikasi seperti ini di industri TI
    “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”
    • Di rapat departemen saya juga sama persis, saat bicara soal roadmap dan perencanaan, intinya selalu “apakah ini membantu pendapatan kita, atau cuma menghabiskan uang?”
      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 penasaran berapa biaya sertifikat Pass Type ID yang diterbitkan di Apple Developer Portal
    Saya ingin membuat pass Apple Wallet, tapi proses menyiapkan akun developer dan biaya tambahannya terasa membebani
    • Setahu saya itu sudah termasuk dalam langganan developer dasar, hanya saja Anda harus memperpanjang langganan developer setiap tahun agar tetap aktif
  • Saya penasaran apakah tidak ada masalah baterai kalau notifikasi push datang setiap menit untuk menerima kode baru
    • Kalau melihat isi artikelnya, pembaruan kode terjadi seminggu sekali, jadi kemungkinan paling sering ya sekali seminggu
    • Push notification punya yang namanya background mode, jadi hanya diproses saat ponsel siap
      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
  • Tulisan yang menyenangkan untuk dibaca, penuh detail teknis yang menarik