6 पॉइंट द्वारा GN⁺ 2025-08-16 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • PureGym ऐप की धीमी उपयोगिता और जटिल एंट्री प्रक्रिया की असुविधा को दूर करने के लिए, इसे व्यक्तिगत रूप से Apple Wallet के लिए ऑप्टिमाइज़ किया गया
  • मौजूदा QR कोड में हर बार ऐप खोलकर जानकारी लोड करनी पड़ती थी, और यह लगभग 47 सेकंड लेने वाला एक अप्रभावी एंट्री तरीका था
  • विभिन्न reverse engineering, mitmproxy के उपयोग, PassKit framework आदि तकनीकी प्रक्रियाओं के जरिए ऑटो-रिन्यू होने वाला Wallet pass लागू किया गया
  • इस प्रक्रिया में PIN code की सुरक्षा खामियां, API authentication संरचना, ब्रांच लोकेशन जानकारी आदि जैसी PureGym की आंतरिक कार्यप्रणाली, जो वेब पर उजागर थी, सामने आई
  • अंततः सिर्फ 3 सेकंड में प्रवेश करने वाला user experience बनाया गया, और यह स्पष्ट किया गया कि यह केवल एक व्यक्तिगत प्रयोग है और आधिकारिक सेवा नहीं है

47 सेकंड: असुविधा की शुरुआत

  • कार्यदिवस में सुबह 11:15 पर, PureGym के प्रवेश द्वार पर ऐप खोलने में 47 सेकंड लगे
  • सिग्नल कमजोर था, और Wi‑Fi कनेक्शन, ऐप लॉन्च, कई push notifications, विशेष discount offers आदि को पार करने के बाद ही QR code दिखा
  • असली QR code आने में बहुत समय लगता था, और दूसरे सदस्यों के सामने असहज महसूस होता था
  • हफ्ते में 6 बार दोहराने पर हर सप्ताह 282 सेकंड खर्च होने वाला यह एक अप्रभावी अनुभव था
  • Amazon Fresh जैसे frictionless अनुभव की तुलना में PureGym का entry UX काफी पीछे था

8 साल पुराने PIN का रहस्य

  • लेखक 8-अंकों वाला PIN code पिछले 8 साल से वही इस्तेमाल कर रहा था
  • यह PIN न कभी expire होता था, न बदला जाता था
  • दूसरी ओर ऐप के भीतर का QR code हर 1 मिनट में नए मान से बदल जाता था
  • वास्तविक सुरक्षा स्तर और असली implementation के बीच बड़ा विरोधाभास मौजूद था
  • PIN तरीका बेहद लंबे समय तक बना रहता है, जबकि केवल QR code को सख्ती से सुरक्षित किया जाता है — यह एक तरह का "security theater" था

mitmproxy से PureGym को समझना

  • शुरुआत में QR code का screenshot लेकर उसे Apple Wallet में इस्तेमाल करने की कोशिश की गई, लेकिन वह तुरंत काम नहीं किया
  • PureGym का QR code dynamic तरीके से बनता था, लगभग 1 हफ्ते में expire होता था, लेकिन ऐप में हर 1 मिनट पर refresh होता था
  • GitHub पर "PureGym" से जुड़े repos खोजकर API authentication structure का पता चला
    • login के लिए इस्तेमाल होने वाला 8-अंकों का PIN, API password के रूप में भी वैसा ही इस्तेमाल हो रहा था
    • Base64 में encoded basic auth जानकारी भी कमजोर सुरक्षा दिखाती थी
  • ऐप ट्रैफिक का विश्लेषण करने के लिए mitmproxy जैसे proxy tools से requests intercept की गईं
    • QR code की JSON structure में part1 (स्थिर id), part2 (timestamp), part3 (renewal salt) शामिल थे
    • API refresh timing से लेकर expiry conditions तक सब कुछ बताता था

PassKit: Apple Wallet की क्षमता

  • Apple Wallet pass कोई static card नहीं, बल्कि self-refresh, push notifications, location response आदि करने वाली mini app जैसी संरचना है
  • PassKit implementation के लिए JSON spec, image resources, certificate signing, और real-time refresh के लिए web service की जरूरत होती है
  • Apple Developer Portal से Pass Type ID और WWDR certificate जारी करवाना आवश्यक था
  • certificate signing और management जटिल थे, लेकिन सफल होने पर असली डिवाइस पर बहुत smooth अनुभव मिला

Swift backend बनाना

  • आमतौर पर Node.js इस्तेमाल किया जाता है, लेकिन लेखक ने Swift आधारित Vapor से सीधे PassKit web service लागू की
    • जब pass को refresh की जरूरत होती, तो silent push के जरिए ऑटो अपडेट दिया जाता
    • यूज़र को पता भी न चले, ऐसा स्वाभाविक pass refresh संभव हुआ

पूरे देश में PureGym लोकेशन ऑटोमेशन

  • Apple Wallet pass निर्दिष्ट लोकेशन पर अपने-आप दिखाया जा सकता है
  • PureGym की आधिकारिक साइट पर विस्तृत coordinates नहीं थे, लेकिन API से देशभर की ब्रांचों के coordinates की सूची मिली
  • सभी ब्रांच coordinates को parse करके हर pass के लिए सबसे नज़दीकी ब्रांच तय की गई
  • कमी: अगर PureGym किसी shopping center के भीतर हो, तो सिर्फ shopping के लिए जाने पर भी pass दिख जाता था

Apple Watch इंटीग्रेशन

  • Apple Wallet pass बिना अलग काम के Apple Watch पर अपने-आप sync हो गया
  • कलाई पर दो बार click करके scan करने और एंट्री तक पहुंचने में 3 सेकंड लगे, यानी बहुत बड़ी कमी
  • 93% से अधिक समय की बचत हासिल हुई

आंकड़ों में बदलाव

  • PureGym ऐप से पहले का एंट्री समय: 47 सेकंड
  • Apple Wallet pass से एंट्री समय: 3 सेकंड
  • एक हफ्ते में औसत बचत समय: 4.4 मिनट (सालाना 3.8 घंटे)
  • आसपास के सदस्यों ने 23 बार पूछा, "क्या ऐसा कोई ऐप है?", और हर बार बताया गया कि यह अनौपचारिक है
  • मांग होने के बावजूद copyright/service policy कारणों से इसे वितरित करने की कोई योजना नहीं है

बोनस: Home Assistant इंटीग्रेशन

  • PureGym API के इनडोर occupancy endpoint के जरिए IoT dashboard पर मौजूदा gym crowding दिखाया गया
  • data के आधार पर कम भीड़ वाले समय दोबारा जाने का फैसला संभव हुआ, जिससे workout efficiency और motivation में मदद मिली

इंजीनियरिंग की वास्तविकता और नैतिकता

  • यह शुद्ध रूप से निजी असुविधा दूर करने का प्रयास था, लेकिन PureGym के भीतर यह ऐसा क्षेत्र था जिसमें कई सालों से सुधार नहीं हुआ था
  • संगठन के बाहर बना prototype कभी-कभी आधिकारिक roadmap से भी तेज़ी से समस्या हल कर देता है
  • आधिकारिक रूप से यह terms violation हो सकता है, और PureGym इसे कभी भी block कर सकता है
  • इसे कभी automation/share नहीं किया गया; केवल निजी प्रयोग के लिए इस्तेमाल हुआ, और स्थिरता के लिए cache जैसे सिद्धांतों का पालन किया गया

अगले कदम और निष्कर्ष

  • आगे चलकर "शर्मिंदगी push notification" जैसी विस्तार-आइडिया भी सुझाई जा सकती हैं
  • व्यावहारिक उपयोगिता छोटी हो सकती है, लेकिन सालाना 3.8 घंटे की "अनावश्यक क्रियाओं" को ऑप्टिमाइज़ करने से संतोष मिला
  • अगर PureGym इसे आधिकारिक रूप से लागू करे, तो और अधिक उपयोगकर्ताओं की सुविधा बढ़ सकती है
  • यह "अनौपचारिक लेकिन प्रभावी अनुभव" बनाने का एक दर्ज उदाहरण बन गया

1 टिप्पणियां

 
GN⁺ 2025-08-16
Hacker News राय
  • मुझे लगता है यह सच में बहुत मज़ेदार और प्रेरणादायक लेख है, इंजीनियर की असली प्रकृति को बहुत अच्छे से दिखाता है, और साफ़ पता चलता है कि OP एक सच्चा hacker है
    जब मैं 3 महीने के लिए अमेरिका में था, तब मैंने PureGym जॉइन किया और एक PIN मिला, बाद में सदस्यता रद्द कर दी। फिर Chrome ने बताया कि मेरा PureGym PIN लीक हो गया है
    2 साल बाद मैं फिर अमेरिका गया और मुझे वही PIN मिला, जो मुझे सुरक्षा के लिहाज़ से बहुत बड़ी समस्या लगी
    PureGym ऐप और token भी दिलचस्प थे, और मैंने hydro massage chair activation system में भी एक security flaw पाया, वह किसी भी PIN को स्वीकार कर लेता था
    • Chrome ने PureGym PIN लीक होने की जो चेतावनी दी, वह शायद false positive थी, Chrome जब HaveIBeenPwned API का उपयोग करता है तब ऐसा हो सकता है
      उदाहरण के लिए, 87623103 जैसा PIN hash होकर 558B4C37F6E3FF9A5E1115C66CEF0703E3F2ADEE बनता है, और HaveIBeenPwned hash range में खोजने पर वास्तव में इसके कई leak records मिलते हैं
  • यह सच में एक बार सोचने लायक बात है। बाहर लगा physical keypad ऐसी जगह पर है जहाँ यूके का मौसम, protein shake और पछतावा सब उस पर चिपका होता है, और किसी के घर के Ring doorbell से वह TikTok Live पर भी जा सकता है। फिर भी वह मेरा पुराना PIN बिना समस्या स्वीकार कर लेता है, जबकि digital QR code के लिए NSA को प्रभावित कर देने लायक crypto rotation चाहिए
  • ऐसी कहानियाँ पढ़ना बहुत अच्छा लगता है। मैं तो ऐप के ठीक से चलने का इंतज़ार करने के बजाय खुद PIN याद कर लेता हूँ। इसलिए OP के सुझाए तरीके से भी तेज़ अंदर जा सकता हूँ, और कोई device या अलग service भी नहीं चाहिए, इसलिए यह ज़्यादा सुविधाजनक लगता है
  • जब मैंने “Apple Wallet को implement न करने के भी कारण होते हैं” जैसा लेख देखा, तो PureGym ऐप के screenshots देखकर लगा कि यह मूल रूप से mobile website पर एक पतली wrapper layer है, या शायद Flutter जैसी किसी तकनीक से बना है। Apple API की बारीकियों को संभाल सकने वाले in-house developers वहाँ होने की संभावना बहुत कम लगती है
    • यही असली बात है। PureGym का मुख्य काम ज़्यादा से ज़्यादा लोगों को service के लिए sign up कराना और छोड़ना मुश्किल बनाना है, development उसका core business नहीं है। अच्छा हुआ तो कोई internal web developer किसी तरह site और database संभाल रहा होगा, और ऐप जैसा दिखने के लिए outsourcing की गई होगी। बुरा हुआ तो पूरा web काम किसी agency के पास होगा और title का एक शब्द बदलने के लिए भी extra पैसे देने पड़ते होंगे
    • लेकिन फिर सवाल आता है कि वे सीखते क्यों नहीं। Google, Stack Overflow, LLM जैसे इतने tools हैं, फिर भी सुधार नहीं दिखता। शायद इसलिए कि UX की परवाह करने वाला कोई है ही नहीं, या backend dev team कब की जा चुकी है और अब बस कम से कम लोगों वाले सस्ते engineers से maintenance हो रहा है
    • अगर Apple Wallet जोड़ा जाए, तो Android Wallet support भी देना होगा, जिससे maintain करने वाला code बढ़ेगा। फिर भी कम से कम इतना तो किया जा सकता है कि ऐप खुलते ही हमेशा QR code दिखे
    • मेरे फोन में भी PureGym ऐप है, और सच में यह बस PureGym website को लपेटने वाला ऐप ही लगता है
  • एकदम सोने जैसी बात है: 8-अंकों वाला gym door PIN ही API password है, और ज़्यादातर users ने इसे खुद सेट भी नहीं किया। उम्मीद है failed attempts पर rate limit तो होगी। सिर्फ email address पता हो तो सीधे API access मिल जाता है, ऐसा लगता है। यह भी जानना दिलचस्प होगा कि request किए जा सकने वाले scopes ठीक से सीमित हैं या नहीं
    • OP यहाँ
      API access सीधे मिल जाता है क्या — इसका जवाब हाँ है, और ऐप व साइट इस्तेमाल करते समय मैं कभी rate limit से नहीं टकराया, failed attempts के मामले में यह काफ़ी उदार लगता है
      पोस्ट में बताया गया scope वही है जिसे official app और GitHub के unofficial clients इस्तेमाल करते हैं
      अतिरिक्त scopes होने की संभावना बहुत कम है। PureGym PHP Wrapper और PureGym Attendance Python भी देखे जा सकते हैं
  • IT industry में PureGym जैसी app roadmap चर्चाएँ बहुत देखी हैं
    “अगर हम यह feature बनाएँगे, तो इसकी ज़िम्मेदारी भी हमें ही लेनी होगी”
    “सही बात है, तो इसे 2028 roadmap में डाल देते हैं” वाला मज़ाक भी बहुत आम है
    • मेरी department meetings भी बिल्कुल ऐसी ही होती हैं, roadmap और planning की बात आते ही असली सवाल होता है, “क्या इससे revenue आएगा, या यह सिर्फ़ खर्चा है?”
      करने के लिए मूल काम और wishlist पहले से इतनी लंबी होती है कि नए features आसानी से नहीं जुड़ते
      मुझे लगता है PureGym अभी सबसे अच्छा यही कर सकता है कि इस ऐप बनाने वाले developer को कुछ हज़ार pounds और lifetime free membership दे दे
  • मुझे यह जानने की जिज्ञासा है कि Apple Developer Portal से जारी होने वाले Pass Type ID certificate की cost कितनी होती है
    मैं Apple Wallet pass बनाना चाहता हूँ, लेकिन developer account setup और extra cost थोड़ी भारी लगती है
    • जहाँ तक मुझे पता है, यह basic developer subscription में शामिल होता है, बस इसे जारी रखने के लिए हर साल developer subscription renew करनी पड़ती है
  • अगर हर minute नया code पाने के लिए push notification आए, तो क्या battery की समस्या नहीं होगी?
    • लेख के अनुसार code refresh हफ़्ते में 1 बार होता है, इसलिए अनुमान है कि अधिकतम भी हफ़्ते में 1 बार ही होगा
    • push notifications में background mode जैसा एक सिस्टम होता है, इसलिए फ़ोन जब तैयार होता है तभी इसे process किया जाता है
      battery कम हो या power saving mode हो, तो यह पहुँचे ही नहीं — ऐसी संरचना battery usage कम से कम रखने के लिए बनाई गई है
      ज़्यादा महत्वपूर्ण notifications में UI element ज़रूर दिखना चाहिए, इसलिए वे power saving की स्थिति से अलग होकर भी पहुँचती हैं
  • यह मज़ेदार और technical details से भरा हुआ लेख था, पढ़कर बहुत आनंद आया